Complyance Logo

Bulk onboard UAE companies

Use the bulk onboarding endpoint when you need to onboard more than one company. The request waits for the job to finish and returns the final job status and every row result in the same response.

Endpoint

POST https://prod.gets.complyance.io/v3/connect/companies/onboarding-jobs

The endpoint accepts 1–500 rows. filename is optional and is not needed for API onboarding.

Request

curl --request POST \
  'https://prod.gets.complyance.io/v3/connect/companies/onboarding-jobs' \
  --header "X-API-Key: ${COMPLYANCE_API_KEY}" \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "countryCode": "AE",
    "platformEnvironment": "sandbox",
    "rows": [
      {
        "sourceName": "accounting-platform-company-1",
        "sourceVersion": "2.1",
        "countryCode": "AE",
        "tin": "1234567890",
        "contactPersonEmail": "onboarding@example.com",
        "contactPersonName": "Amina Hassan",
        "branchName": "Main",
        "platformEnvironment": "sandbox"
      },
      {
        "sourceName": "accounting-platform-company-2",
        "sourceVersion": "2.1",
        "countryCode": "AE",
        "tin": "1234567891",
        "contactPersonEmail": "onboarding@example.com",
        "contactPersonName": "Amina Hassan",
        "branchName": "Main",
        "platformEnvironment": "sandbox"
      }
    ]
  }'

Use a unique Source identity for each onboarded company. The outer and row environments should agree.

Completed response

Status: 200 OK

{
  "success": true,
  "data": {
    "id": "01JEXAMPLEBULKJOB",
    "workspaceId": "66b9e000c2d3e4f567890000",
    "countryCode": "AE",
    "status": "completed",
    "totalRows": 2,
    "processedRows": 2,
    "succeededRows": 2,
    "failedRows": 0,
    "createdAt": "2026-08-25T10:00:00.000Z",
    "updatedAt": "2026-08-25T10:00:02.000Z",
    "completedAt": "2026-08-25T10:00:02.000Z",
    "rows": [
      {
        "id": "01JEXAMPLEROW1",
        "jobId": "01JEXAMPLEBULKJOB",
        "rowIndex": 0,
        "status": "onboarded",
        "sourceName": "accounting-platform-company-1",
        "sourceVersion": "2.1",
        "countryCode": "AE",
        "nextAction": "onboarded",
        "data": {
          "companyId": "66b9f0a1c2d3e4f567890123",
          "sourceId": "01JEXAMPLESOURCE1",
          "branchId": "66b9f0b2c2d3e4f567890456",
          "sourceName": "accounting-platform-company-1",
          "sourceVersion": "2.1",
          "readyForInvoicing": true,
          "mappingReadiness": {
            "status": "READY",
            "templateId": "default-gets-WORKSPACE_ID"
          }
        }
      }
    ]
  },
  "meta": {
    "requestId": "01JEXAMPLEREQUEST",
    "timestamp": "2026-08-25T10:00:02.000Z",
    "workspaceId": "66b9e000c2d3e4f567890000"
  }
}

Successful UAE row data follows the same contract as single-company onboarding.

Handle every row

Do not decide success from the top-level HTTP status alone. Check:

  1. data.status for the overall job;
  2. data.processedRows, succeededRows, and failedRows; and
  3. every data.rows[] entry.

For a failed row, use errorCode, errorMessage, and nextAction. For an onboarded row, require data.readyForInvoicing: true and data.mappingReadiness.status: "READY" before submitting invoices for that Source.

Automatic mapping assignment

Each new UAE Source is independently assigned to the workspace's designated sandbox default when automatic assignment is enabled. A failure on one Source does not change another row's result.

Turning automatic assignment off affects future Sources only. It does not remove existing Source assignments.