Build an integrationSync clients

Sync clients

Keep another system's client list in step with Imploy.

This guide copies clients from Imploy into another system, then keeps them current. It uses GET /clients with updated_since, and POST or PATCH to send changes back.

Token permissions: Clients Read to pull. Clients Read-write to create or update.

Pull clients

Do a first full load

Call GET /clients?per_page=100 and keep requesting the next page until you pass meta.last_page.

Save a checkpoint

Store the time you started the load. Use it as updated_since next run.

Run on a schedule

Each run, request updated_since with your checkpoint, then move the checkpoint forward. Match records on the Imploy id.

const base = "https://app.imploy.com.au/api/integrations/v1";
const headers = { Authorization: `Bearer ${process.env.IMPLOY_TOKEN}` };

async function* clientsSince(since) {
  let page = 1;
  while (true) {
    const url = new URL(`${base}/clients`);
    url.searchParams.set("per_page", "100");
    url.searchParams.set("page", String(page));
    if (since) url.searchParams.set("updated_since", since);
    const res = await (await fetch(url, { headers })).json();
    yield* res.data;
    if (page >= res.meta.last_page) return;
    page += 1;
  }
}

for await (const client of clientsSince("2026-01-01")) {
  console.log(client.id, client.first_name, client.last_name, client.status);
}

Archived clients still come back from the list with a status of Archived. Treat that as inactive in your system rather than deleting the record.

Create clients

Call GET /clients/create-options first. It lists the required fields, client types, business locations and custom attributes, so you can collect everything in one go.

Creating a client needs first_name, last_name, client_type and business_id. Use POST /clients/bulk to send up to 50 at once.

  1. Send the batch with "dry_run": true. Nothing is created and you get a result for every row.
  2. Fix any rows that failed.
  3. Send again without dry_run.

A possible duplicate is refused unless you send allow_duplicates. Check the match first instead of switching it on.

Update a client

PATCH /clients/{id} changes only the fields you send. An unsupported field returns a 422 validation error. DELETE /clients/{id} archives the client.

Keep it live

updated_since polling is simple and reliable. To hear about changes sooner, add a webhook for client.created and client.updated, and keep the polling as a safety net. See Keep a local copy up to date.