Import shift notes
Needs: Roster, Read-write (Owner or Superadmin)
Migrates shift notes from another system onto imported shifts, as the worker's own shift notes with their original times. Each note is matched to one published shift by client, worker and the shift's scheduled start. A note with no matching shift fails. A batch imports all or nothing, and notes already imported are skipped.
curl -X POST "https://app.imploy.com.au/api/integrations/v1/shift-notes/import" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-d '{
"dry_run": true,
"notes": [
{
"client": "Example Client",
"staff": "Example Worker",
"shift_start": "2026-03-02 09:00",
"notes": "<p>Visit completed.</p>",
"created_at": "2026-03-02 13:05"
}
]
}'
import requests
import json
url = "https://app.imploy.com.au/api/integrations/v1/shift-notes/import"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_TOKEN"
}
data = {
"dry_run": true,
"notes": [
{
"client": "Example Client",
"staff": "Example Worker",
"shift_start": "2026-03-02 09:00",
"notes": "<p>Visit completed.</p>",
"created_at": "2026-03-02 13:05"
}
]
}
response = requests.post(url, headers=headers, json=data)
print(response.json())
const response = await fetch("https://app.imploy.com.au/api/integrations/v1/shift-notes/import", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_TOKEN"
},
body: JSON.stringify({
"dry_run": true,
"notes": [
{
"client": "Example Client",
"staff": "Example Worker",
"shift_start": "2026-03-02 09:00",
"notes": "<p>Visit completed.</p>",
"created_at": "2026-03-02 13:05"
}
]
})
});
const data = await response.json();
console.log(data);
package main
import (
"fmt"
"net/http"
"bytes"
"encoding/json"
)
func main() {
data := []byte(`{
"dry_run": true,
"notes": [
{
"client": "Example Client",
"staff": "Example Worker",
"shift_start": "2026-03-02 09:00",
"notes": "<p>Visit completed.</p>",
"created_at": "2026-03-02 13:05"
}
]
}`)
req, err := http.NewRequest("POST", "https://app.imploy.com.au/api/integrations/v1/shift-notes/import", bytes.NewBuffer(data))
if err != nil {
panic(err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "Bearer YOUR_API_TOKEN")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println("Response Status:", resp.Status)
}
require 'net/http'
require 'json'
uri = URI('https://app.imploy.com.au/api/integrations/v1/shift-notes/import')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri)
request['Content-Type'] = 'application/json'
request['Authorization'] = 'Bearer YOUR_API_TOKEN'
request.body = '{
"dry_run": true,
"notes": [
{
"client": "Example Client",
"staff": "Example Worker",
"shift_start": "2026-03-02 09:00",
"notes": "<p>Visit completed.</p>",
"created_at": "2026-03-02 13:05"
}
]
}'
response = http.request(request)
puts response.body
{
"dry_run": true,
"ready": 1,
"skipped_duplicates": 0,
"failed": 0,
"time_zone": "Australia/Perth",
"results": [
{
"index": 0,
"ok": true,
"status": "ready",
"ref": "a:123"
}
]
}
{
"batch": "2b1c3d4e-5f60-4a7b-8c9d-0e1f2a3b4c5d",
"created": 1,
"shifts": 1,
"skipped_duplicates": 0,
"time_zone": "Australia/Perth",
"results": [
"..."
]
}
{
"message": "Invalid or expired access token."
}
{
"message": "Access token does not permit this action."
}
{
"message": "Too many requests."
}
/shift-notes/import
Target server for requests. Edit to use your own host.
An organisation access token that starts with imp_at_. Send it as Authorization: Bearer imp_at_XXXX.
imp_at_. Send it as Authorization: Bearer imp_at_XXXX.The media type of the request body
Up to 100 notes. Each needs client, staff (the worker who wrote it, who must be on the shift) and notes, plus either shift_start (YYYY-MM-DD HH:MM, the scheduled start) or shift_ref. Optional created_at, YYYY-MM-DD HH:MM, not in the future.
Match and check every note without saving.
Request Preview
Response
Response will appear here after sending the request
Authentication
Bearer token. An organisation access token that starts with imp_at_. Send it as Authorization: Bearer imp_at_XXXX.
Body
Up to 100 notes. Each needs client, staff (the worker who wrote it, who must be on the shift) and notes, plus either shift_start (YYYY-MM-DD HH:MM, the scheduled start) or shift_ref. Optional created_at, YYYY-MM-DD HH:MM, not in the future.
Match and check every note without saving.
Responses
Dry run