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-jobsThe 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:
data.statusfor the overall job;data.processedRows,succeededRows, andfailedRows; and- 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.