Import notes
Needs: Clients, Read-write (Owner or Superadmin)
Migrates up to 100 notes from another system as General notes, with optional backdated times and authors. Run it with dry_run first. A batch imports all or nothing, and notes already imported (same client, author, time and text) are skipped, so a batch can be sent again safely.
Note:
created_atisYYYY-MM-DD HH:MMin the organisation's time zone and cannot be in the future.author_staff_idcan be any staff member, archived included. The default author is the organisation owner.
curl -X POST "https://app.imploy.com.au/api/integrations/v1/client-notes/import" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-d '{
"dry_run": true,
"notes": [
{
"client_id": 12,
"notes": "<p>Imported from the old system.</p>",
"created_at": "2025-11-03 14:30",
"author_email": "staff@example.com"
}
]
}'
import requests
import json
url = "https://app.imploy.com.au/api/integrations/v1/client-notes/import"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_TOKEN"
}
data = {
"dry_run": true,
"notes": [
{
"client_id": 12,
"notes": "<p>Imported from the old system.</p>",
"created_at": "2025-11-03 14:30",
"author_email": "staff@example.com"
}
]
}
response = requests.post(url, headers=headers, json=data)
print(response.json())
const response = await fetch("https://app.imploy.com.au/api/integrations/v1/client-notes/import", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_TOKEN"
},
body: JSON.stringify({
"dry_run": true,
"notes": [
{
"client_id": 12,
"notes": "<p>Imported from the old system.</p>",
"created_at": "2025-11-03 14:30",
"author_email": "staff@example.com"
}
]
})
});
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_id": 12,
"notes": "<p>Imported from the old system.</p>",
"created_at": "2025-11-03 14:30",
"author_email": "staff@example.com"
}
]
}`)
req, err := http.NewRequest("POST", "https://app.imploy.com.au/api/integrations/v1/client-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/client-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_id": 12,
"notes": "<p>Imported from the old system.</p>",
"created_at": "2025-11-03 14:30",
"author_email": "staff@example.com"
}
]
}'
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"
}
]
}
{
"batch": "0c5f2b1e-7a3d-4f1e-9a52-1b2c3d4e5f60",
"created": 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."
}
/client-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
1 to 100 notes. Each needs client_id and notes, and can have created_at, author_staff_id or author_email.
Check every note (client, author, date, duplicates) without importing.
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
1 to 100 notes. Each needs client_id and notes, and can have created_at, author_staff_id or author_email.
Check every note (client, author, date, duplicates) without importing.
Responses
Dry run