Onboard a UAE company
Create and synchronously onboard one UAE company in the workspace resolved from the caller's API key.
Endpoint
POST https://prod.gets.complyance.io/v3/connect/companiesA 201 Created response means the required synchronous onboarding work completed. There is no public onboarding-status endpoint, polling URL, or status lifecycle for this POST.
Before you call the endpoint
Complete the approved ASP/TIN authorization for the company's TIN in the same environment you will call. Follow the UAE onboarding prerequisite guide and wait for the confirmed readiness signal.
Complyance manages the associated Peppol participant. Do not create or send peppolParticipantId yourself. A missing or unavailable prerequisite returns 409 ASP_LINKAGE_NOT_FOUND or 409 PEPPOL_PARTICIPANT_UNAVAILABLE.
Headers
| Header | Required | Description |
|---|---|---|
X-API-Key | Yes | Authenticates the caller and resolves its workspace and permissions. |
Content-Type | Yes | application/json |
The API key resolves the workspace. Do not send workspaceId in the body.
Request body
The request contains company and source information only.
| Field | Type | Required | Validation and meaning |
|---|---|---|---|
sourceName | string | Yes | Non-empty caller-owned source alias for correlation and routing. |
sourceVersion | string | Yes | Non-empty source version. Together with sourceName, identifies the mapping used for invoicing. |
countryCode | string | Yes | Must be AE. |
tin | string | Yes | UAE TIN containing exactly 10 digits. |
contactPersonEmail | string | Yes | Valid onboarding-contact email. |
contactPersonName | string | Yes | Name of the onboarding contact. |
contactPersonMobile | string | No | Optional phone number containing digits and an optional leading +. |
branchName | string | Yes | Non-empty human-readable branch name. Empty or whitespace-only values return 400 CONNECT_VALIDATION_ERROR. |
platformEnvironment | string | Yes | sandbox, simulation, or production. |
Unknown fields return 400. Send only the company and source fields listed above.
System-generated identifiers are rejected
Do not send companyId, sourceId, branchId, userGivenBranchId, peppolParticipantId, an internal onboarding identifier, or workspaceId. Supplying a system-managed identifier returns 400.
Request example
All company, contact, tax, and identifier values in the request and response examples are illustrative.
curl --request POST 'https://prod.gets.complyance.io/v3/connect/companies' \
--header 'X-API-Key: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data-raw '{
"sourceName": "accounting-platform",
"sourceVersion": "2.1",
"countryCode": "AE",
"tin": "1234567890",
"contactPersonEmail": "onboarding@example.com",
"contactPersonName": "Amina Hassan",
"branchName": "Main",
"platformEnvironment": "sandbox"
}'Retries
Do not send concurrent create requests for the same company. Before retrying after a timeout or an uncertain dependency failure, use the Company List API to confirm whether the company was created. Retain meta.requestId for support.
Success response
Status: 201 Created
{
"success": true,
"data": {
"companyId": "66b9f0a1c2d3e4f567890123",
"sourceId": "01JABCDEF1234567890SOURCE",
"branchId": "66b9f0b2c2d3e4f567890456",
"peppolParticipantId": "0235:1234567890",
"legalName": "Example UAE Entity",
"legalNameArabic": "شركة الإمارات التجريبية",
"tin": "1234567890",
"vatTrn": "123456789000003",
"sourceName": "accounting-platform",
"sourceVersion": "2.1",
"countryCode": "AE",
"branchName": "Main",
"contactPersonName": "Amina Hassan",
"contactPersonEmail": "onboarding@example.com",
"platformEnvironment": "sandbox",
"readyForInvoicing": true,
"mappingReadiness": {
"status": "READY",
"templateId": "default-gets-66b9e000c2d3e4f567890000"
},
"createdAt": "2026-08-01T12:00:00.000Z",
"updatedAt": "2026-08-01T12:00:00.000Z"
},
"meta": {
"requestId": "01JABCDEF1234567890REQUEST",
"timestamp": "2026-08-01T12:00:00.000Z",
"workspaceId": "66b9e000c2d3e4f567890000"
}
}Response fields
| Field | Type | Required | Description |
|---|---|---|---|
success | boolean | Yes | true. |
data.companyId | string | Yes | Stable public company identifier. |
data.sourceId | string | Yes | Persisted source identifier. |
data.branchId | string | Yes | Persisted default branch identifier. |
data.peppolParticipantId | string | Yes | Verified and persisted participant identifier. |
data.legalName | string | Yes | Company legal name returned by onboarding. |
data.legalNameArabic | string | Yes | Arabic company legal name returned by onboarding. |
data.tin | string | Yes | Confirmed UAE TIN. |
data.vatTrn | string | Yes | VAT tax registration number returned by onboarding. |
data.sourceName | string | Yes | Confirmed caller-owned source alias. |
data.sourceVersion | string | Yes | Effective source version, including the 1.0 default. |
data.countryCode | string | Yes | AE. |
data.branchName | string | Yes | Confirmed branch display name. |
data.contactPersonName | string | Yes | Confirmed onboarding-contact name. |
data.contactPersonEmail | string | Yes | Confirmed onboarding-contact email. |
data.platformEnvironment | string | Yes | Effective onboarding environment. |
data.readyForInvoicing | boolean | Yes | Whether invoice submission can start. |
data.mappingReadiness | object | When evaluated | Default-mapping assignment result for the created Source. |
data.mappingReadiness.status | string | Yes when returned | READY or ACTION_REQUIRED. |
data.mappingReadiness.templateId | string | When ready | Designated mapping assigned to the Source. |
data.mappingReadiness.code | string | When action is required | Stable mapping-readiness reason code. |
data.createdAt | string | Yes | ISO 8601 company creation timestamp. |
data.updatedAt | string | Yes | ISO 8601 company update timestamp. |
meta.requestId | string | Yes | Request identifier to retain for support. |
meta.timestamp | string | Yes | ISO 8601 response timestamp. |
meta.workspaceId | string | Yes | Workspace resolved from the API key. |
Treat companyId, sourceId, branchId, and peppolParticipantId as opaque, system-generated values.
Invoicing readiness
readyForInvoicing reports whether invoice submission can start for the onboarded Source. For new ISV workspaces, automatic assignment is enabled by default and a successful assignment returns mappingReadiness.status: "READY".
When action is required, readyForInvoicing is false and the response returns one of:
| Code | Meaning |
|---|---|
CONNECT_MAPPING_NOT_CONFIGURED | No designated default exists for the environment. |
CONNECT_MAPPING_INELIGIBLE | The designated mapping is not ready for Source assignment. |
CONNECT_MAPPING_CONFLICT | The Source conflicts with an existing assignment. |
CONNECT_MAPPING_LINK_FAILED | The mapping was found but the Source could not be linked. |
See Default mapping and payload before retrying or manually changing assignments.
Duplicate behavior
A new request returns 409 CONNECT_COMPANY_ALREADY_EXISTS when the workspace already has the effective sourceName and sourceVersion or the same tin. The POST does not silently attach a new source alias to an existing company.
Recover the existing companyId from the stored onboarding response or the Company List API. Do not create another logical request for an existing company.
Error response
Onboarding errors contain error.code, error.message, and error.retryable. error.details is optional. meta.workspaceId appears only after safe workspace resolution.
{
"success": false,
"error": {
"code": "STABLE_PUBLIC_CODE",
"message": "Human-readable public message.",
"details": null,
"retryable": false
},
"meta": {
"requestId": "01JABCDEF1234567890REQUEST",
"timestamp": "2026-08-15T12:00:00.000Z",
"workspaceId": "66b9e000c2d3e4f567890000"
}
}| HTTP status | Public codes or conditions |
|---|---|
400 | Invalid or missing fields, invalid TIN or email, unsupported country or environment, unknown fields, or caller-supplied system IDs. |
401 | Missing or invalid API key. |
403 | Workspace, environment, or operation access denied. |
409 | CONNECT_COMPANY_ALREADY_EXISTS, ASP_LINKAGE_NOT_FOUND, or PEPPOL_PARTICIPANT_UNAVAILABLE. |
429 | Workspace rate limit exceeded. Honor Retry-After. |
502 / 503 | ONBOARDING_FAILED or a required dependency is unavailable. |
504 | ONBOARDING_TIMEOUT; the final outcome may be uncertain, so check the Company List API before retrying. |
The exact public codes for other onboarding 400, 401, 403, and 429 conditions must be verified against the deployed gateway. See Errors and troubleshooting for remediation guidance.
Submit an invoice next
Use the exact sourceName:sourceVersion returned above with the complete payload and Unify V2. Follow the ISV UAE quickstart.
Use companyId for reporting
curl --get 'https://prod.gets.complyance.io/v3/connect/invoices/counts' \
--header 'X-API-Key: YOUR_API_KEY' \
--header 'X-Environment: sandbox' \
--header 'Accept: application/json' \
--data-urlencode 'countryCode=AE' \
--data-urlencode 'companyId=66b9f0a1c2d3e4f567890123'Related pages
- UAE onboarding prerequisites
- ISV UAE quickstart
- Bulk onboard UAE companies
- Default mapping and payload
- List onboarded companies
- Get document counts
- Errors and troubleshooting
Next step: Download the payload and submit a sandbox invoice.