One-Click Access for Influencer Whitelisting

API Reference

A small, read-only REST API for looking up your clients and their connections. If you want ClientInvite to push data to you instead, use webhooks.

Authentication

Create an API key in Settings → API & Webhooks. The key is shown once — store it somewhere safe. Send it on every request:

Authorization header
Authorization: Bearer ci_live_xxxxxxxxxxxx

Keep your key server-side

Never expose your API key in client-side code, mobile apps, or public repos. Anyone with the key can read your client list. There is no OAuth — the key is the whole credential.

The API is available on the Agency plan. Requests from Freelancer-plan workspaces return 403.

Base URL, versioning & responses

Base URL
https://app.clientinvite.com/api/v1

The version is in the path (/v1). Breaking changes will only ever ship under a new version. Every response uses the same envelope:

Success envelope
{ "error": false, "data": ... }
Error format
{
  "error": true,
  "code": "plan_required",
  "msg": "The API is available on the Agency plan. Upgrade in Settings → Billing."
}
FieldTypeDescription
200statusSuccess.
400 bad_requeststatus + codeMalformed parameter — the msg says which.
401 unauthorizedstatus + codeMissing or invalid API key.
403 plan_requiredstatus + codeYour workspace is not on the Agency plan.
404 not_foundstatus + codeNo client matches that ID or ref.
429 rate_limitedstatus + codeOver the rate limit — back off and retry.

Rate limit: 60 requests per minute per key. v1 is read-only — there are no write endpoints yet (see the changelog for what's planned).

GET /me

Verify your key and see which workspace it belongs to.

Request
curl https://app.clientinvite.com/api/v1/me \
  -H "Authorization: Bearer ci_live_xxxxxxxxxxxx"
Response
{
  "error": false,
  "data": {
    "agencyName": "Acme Agency",
    "plan": "agency",
    "keyCreatedAt": "2026-07-01T08:12:04Z"
  }
}

GET /clients

List your clients, most recent first.

FieldTypeDescription
refstringFilter to the client tagged with this customRef.
emailstringFilter by the email the client entered in the connect flow.
statusstringFilter by connection status, e.g. CONNECTED.
limitintegerPage size, 1–100. Default 25.
cursorstringPagination cursor from a previous response.
sortstring"connectedAt" (default) or "name". Prefix with - to reverse.
Request
curl "https://app.clientinvite.com/api/v1/clients?limit=25" \
  -H "Authorization: Bearer ci_live_xxxxxxxxxxxx"
Response
{
  "error": false,
  "data": {
    "items": [
      {
        "id": "cl_7d81mq",
        "name": "Acme Co",
        "email": "hello@acme.com",
        "customRef": "crm-record-8841",
        "status": "CONNECTED",
        "connectedAt": "2026-07-13T09:41:25Z",
        "assetCount": 4
      }
    ],
    "nextCursor": "eyJpZCI6ImNsXzdkODFtcSJ9"
  }
}

Pagination: when more results exist, the response includes nextCursor. Pass it back as ?cursor= to get the next page; nextCursor is null on the last page.

GET /clients/{id}

Fetch one client with their full asset list. {id} accepts either the internal ID (cl_...) or your own customRef — so you can go straight from a CRM record to a lookup:

Request — by customRef
curl https://app.clientinvite.com/api/v1/clients/crm-record-8841 \
  -H "Authorization: Bearer ci_live_xxxxxxxxxxxx"
Response
{
  "error": false,
  "data": {
    "id": "cl_7d81mq",
    "name": "Acme Co",
    "email": "hello@acme.com",
    "customRef": "crm-record-8841",
    "status": "CONNECTED",
    "connectedAt": "2026-07-13T09:41:25Z",
    "assets": [
      {
        "platform": "facebook",
        "type": "ad_account",
        "name": "Acme Co",
        "externalId": "act_1086344871362999",
        "permission": "manage",
        "status": "GRANTED"
      },
      {
        "platform": "google",
        "type": "ads_account",
        "name": "acme.com",
        "externalId": "734-201-8841",
        "permission": "manage",
        "status": "GRANTED"
      }
    ]
  }
}

Next steps

Still stuck?

Contact support or use the chat bubble in your dashboard — we usually reply within a few hours.