> ## Documentation Index
> Fetch the complete documentation index at: https://docs.onboardme.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Get Started with OnboardMe Partner API

> Learn how to make your first OnboardMe API call in five steps: get credentials, pick a region, validate access, list clients, and run incremental sync.

Make your first successful calls against a real practice. Swap the base URL if the practice is hosted in the UK or South Africa.

## Before you start

* **Client ID** and **Client secret** from the practice administrator
* The [regional base URL](/concepts/regions) for that practice
* An HTTP client (`curl`, Postman, or your language's HTTP library)

<Steps>
  <Step title="Pick the regional host">
    | Region                    | Base URL                       |
    | ------------------------- | ------------------------------ |
    | Australia and New Zealand | `https://anzapi.onboardme.app` |
    | United Kingdom            | `https://ukapi.onboardme.app`  |
    | South Africa              | `https://zaapi.onboardme.app`  |

    Wrong host means 401s or empty lists. Practices do not span regions.
  </Step>

  <Step title="Validate credentials">
    <CodeGroup>
      ```bash cURL theme={null}
      curl -sS "https://anzapi.onboardme.app/api/v1/auth/validate" \
        -H "X-OM-Auth-ID: YOUR_CLIENT_ID" \
        -H "X-OM-Auth-Key: YOUR_CLIENT_SECRET"
      ```

      ```javascript Node.js theme={null}
      const res = await fetch("https://anzapi.onboardme.app/api/v1/auth/validate", {
        headers: {
          "X-OM-Auth-ID": process.env.OM_CLIENT_ID,
          "X-OM-Auth-Key": process.env.OM_CLIENT_SECRET,
        },
      });
      console.log(await res.json());
      ```

      ```python Python theme={null}
      import os, requests

      r = requests.get(
          "https://anzapi.onboardme.app/api/v1/auth/validate",
          headers={
              "X-OM-Auth-ID": os.environ["OM_CLIENT_ID"],
              "X-OM-Auth-Key": os.environ["OM_CLIENT_SECRET"],
          },
          timeout=30,
      )
      r.raise_for_status()
      print(r.json())
      ```
    </CodeGroup>

    ```json theme={null}
    {
      "authenticated": true,
      "message": "Access granted",
      "clientID": "your-client-id",
      "clientName": "My Integration",
      "canWrite": true,
      "timestamp": "2026-04-16T10:00:00Z"
    }
    ```

    If `canWrite` is `false`, POST routes return **403**. Ask the administrator to enable write access when you need to create records or send forms.
  </Step>

  <Step title="List clients">
    ```bash theme={null}
    curl -sS "https://anzapi.onboardme.app/api/v1/entities/list?pageNumber=1" \
      -H "X-OM-Auth-ID: YOUR_CLIENT_ID" \
      -H "X-OM-Auth-Key: YOUR_CLIENT_SECRET"
    ```

    Store `entityKey`. That UUID is the foreign key for eForms, KYC, proposals, contacts, and bills.
  </Step>

  <Step title="Incremental sync">
    After a full import, pass the UTC watermark of your last successful run:

    ```bash theme={null}
    curl -sS "https://anzapi.onboardme.app/api/v1/entities/list?lastUpdated=2026-04-10T00:00:00Z" \
      -H "X-OM-Auth-ID: YOUR_CLIENT_ID" \
      -H "X-OM-Auth-Key: YOUR_CLIENT_SECRET"
    ```

    Do not send a future `lastUpdated`. That returns **400**. See [Pagination and sync](/concepts/pagination-sync).
  </Step>

  <Step title="Honour rate limits">
    Default limits are **60/minute**, **1000/hour**, and **10000/day** per Client ID. On **429**, wait `Retry-After` seconds. Full table: [Errors and rate limits](/errors).
  </Step>
</Steps>

## Next

<CardGroup cols={2}>
  <Card title="Sync clients" icon="users" href="/guides/sync-clients">
    Full import, detail, integrations, and create.
  </Card>

  <Card title="Send an eForm" icon="file-signature" href="/guides/send-eform">
    Templates, recipients, and mute mode.
  </Card>

  <Card title="Webhooks" icon="webhook" href="/guides/webhooks">
    Stop polling. Verify signatures.
  </Card>

  <Card title="API Reference" icon="code" href="/api-reference/auth/validate">
    Interactive playground.
  </Card>
</CardGroup>
