Companies and branches
Create UAE companies, list company sources and add branches with Connect.
Authentication
Use https://prod.gets.complyance.io with X-API-Key. JSON requests require Content-Type: application/json.
Create a UAE company
POST /v3/connect/companiesComplete the UAE prerequisites first.
| Body field | Type | Required | Description |
|---|---|---|---|
sourceName | string | Yes | Non-empty source name, unique together with its version in the workspace |
sourceVersion | string | Yes | Non-empty source version |
countryCode | string | Yes | AE |
tin | string | Yes | UAE tax identification number; exactly 10 digits |
contactPersonEmail | string | Yes | The email the company’s ASP authorization was registered with; see UAE prerequisites |
contactPersonName | string | No | Contact’s name |
contactPersonMobile | string | No | Digits with an optional leading +; no spaces |
branchName | string | Yes | Name of the first branch |
platformEnvironment | string | Yes | sandbox, simulation or production |
Unknown fields are rejected. Do not send company, source, branch or Peppol identifiers; successful onboarding returns them.
{
"sourceName": "acme-dubai",
"sourceVersion": "v1",
"countryCode": "AE",
"tin": "1234567890",
"contactPersonEmail": "finance@example.com",
"contactPersonName": "Alex Morgan",
"branchName": "Dubai",
"platformEnvironment": "sandbox"
}Response
HTTP 201 returns success: true, data and meta.
Example response with sample company details:
{
"success": true,
"data": {
"companyId": "66b9f0a1c2d3e4f567890123",
"sourceId": "01JABCDEF1234567890SOURCE",
"branchId": "66b9f0b2c2d3e4f567890456",
"peppolParticipantId": "0235:1234567890",
"legalName": "Acme Trading LLC",
"tin": "1234567890",
"vatTrn": "123456789000003",
"sourceName": "acme-dubai",
"sourceVersion": "v1",
"countryCode": "AE",
"branchName": "Dubai",
"contactPersonName": "Alex Morgan",
"contactPersonEmail": "finance@example.com",
"platformEnvironment": "sandbox",
"userGivenBranchId": "acme-dubai",
"readyForInvoicing": false,
"mappingReadiness": {
"status": "ACTION_REQUIRED",
"code": "CONNECT_MAPPING_NOT_CONFIGURED"
},
"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"
}
}| Data field | Meaning |
|---|---|
companyId, sourceId, branchId | Created company, source and first branch identifiers |
userGivenBranchId | Buyer-owned branch reference to share with suppliers |
peppolParticipantId | Company’s Peppol network identifier |
legalName, legalNameArabic, tin, vatTrn | Registered company details |
sourceName, sourceVersion, countryCode, branchName | Created source and branch details |
contactPersonName, contactPersonEmail, contactPersonMobile | Contact details; optional inputs may be absent |
platformEnvironment | Onboarding environment |
readyForInvoicing | Whether this source is ready for invoice submission |
mappingReadiness | status is READY, with the templateId in use, or ACTION_REQUIRED, with a code that says what to fix |
createdAt, updatedAt | Timestamps |
meta contains requestId, timestamp and workspaceId. Preserve the request identifier for support.
readyForInvoicing is true only when mappingReadiness.status is READY. A new company usually starts with ACTION_REQUIRED and CONNECT_MAPPING_NOT_CONFIGURED: resolve mapping readiness before submitting.
List companies
GET /v3/connect/companies| Query | Default | Description |
|---|---|---|
page | 1 | Page number, at least 1 |
limit | 10 | Companies per page, 1–100 |
countryCode | None | Country filter |
sourceVersion | None | Exact source version |
status | None | active or inactive |
search | None | Search company sources |
HTTP 200 returns data[] and pagination metadata. Each item includes companyId, sourceName, sourceVersion, legalName, legalIdentifier, countryCode, status, createdAt and updatedAt. legalIdentifier is null when absent. Use the returned companyId where requested. Results are ordered by most recently updated first; meta.sort says so.
A UAE company with several branches appears once per branch, so a page can hold more items than limit. meta.pagination.total counts companies, not items.
{
"success": true,
"data": [
{
"companyId": "66b9f0a1c2d3e4f567890123",
"sourceName": "acme-dubai",
"sourceVersion": "v1",
"legalName": "Acme Trading LLC",
"legalIdentifier": null,
"countryCode": "AE",
"status": "active",
"onboardingStatus": "onboarded",
"peppolId": "0235:1234567890",
"sourceId": "01JABCDEF1234567890SOURCE",
"branchId": "66b9f0a1c2d3e4f567890456",
"branchName": "Dubai",
"tin": "1234567890",
"vatTrn": "123456789000003",
"mappingReadiness": {
"status": "READY",
"templateId": "default-gets-66b9e000c2d3e4f567890000"
},
"readyForInvoicing": true,
"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",
"pagination": {
"page": 1,
"limit": 10,
"total": 1,
"totalPages": 1,
"hasMore": false
},
"filters": {
"countryCode": "AE"
},
"sort": {
"field": "updatedAt",
"order": "desc"
}
}
}Retrieve, update or archive a source
GET /v3/connect/companies/{sourceName}?sourceVersion=v1
PATCH /v3/connect/companies/{sourceName}?sourceVersion=v1
DELETE /v3/connect/companies/{sourceName}?sourceVersion=v1URL-encode sourceName. Supply sourceVersion to identify the version explicitly.
GET retrieves one source. PATCH accepts optional sourceVersion, legalName, legalIdentifier, countryCode, status (active or inactive) and metadata (a JSON object). Send only fields you intend to change. Changing a source’s details is not a substitute for completing country onboarding.
DELETE archives the source rather than erasing its document history: its status becomes inactive and any scheduled credit allowance is cancelled. Check the source and version before archiving.
{
"success": true,
"data": {
"archived": true,
"companyId": "66b9f0a1c2d3e4f567890123",
"sourceName": "acme-dubai"
},
"meta": {
"requestId": "01JABCDEF1234567890REQUEST",
"timestamp": "2026-08-01T12:00:00.000Z",
"workspaceId": "66b9e000c2d3e4f567890000"
}
}Add branches
POST /v3/connect/companies/{companyId}/branchescompanyId is the 24-character identifier returned when the company was created or listed. The company must already be onboarded in the UAE. Each branch needs a non-empty branchName, sourceName and sourceVersion; unknown fields are rejected.
{
"branchName": "Abu Dhabi",
"sourceName": "acme-abu-dhabi",
"sourceVersion": "v1"
}HTTP 201 returns companyId, branchId, branchName, userGivenBranchId, sourceId, sourceName, sourceVersion, platformEnvironment, readyForInvoicing and optional mappingReadiness. The branch uses the company’s environment.
For 1–100 branches, use POST /v3/connect/companies/{companyId}/branches/bulk with a branches array of the same objects. It returns HTTP 200 once every branch has been processed, even when some failed:
{
"success": true,
"data": {
"companyId": "66b9f0a1c2d3e4f567890123",
"processed": 2,
"succeeded": 1,
"failed": 1,
"results": [
{
"branchName": "Abu Dhabi",
"sourceName": "acme-abu-dhabi",
"sourceVersion": "v1",
"success": true,
"data": { "branchId": "66b9f0c3c2d3e4f567890789", "userGivenBranchId": "acme-abu-dhabi" }
},
{
"branchName": "Sharjah",
"sourceName": "acme-sharjah",
"sourceVersion": "v1",
"success": false,
"error": {
"code": "CONNECT_SOURCE_ALREADY_EXISTS",
"message": "Source 'acme-sharjah' (version v1) already exists in this workspace.",
"retryable": false
}
}
]
},
"meta": {
"requestId": "01JABCDEF1234567890REQUEST",
"timestamp": "2026-08-01T12:00:00.000Z",
"workspaceId": "66b9e000c2d3e4f567890000"
}
}A successful item’s data has the same fields as a single branch; it is shortened here. Inspect every item: a failed branch does not undo successful branches.
Errors
| Condition | Action |
|---|---|
ASP_LINKAGE_NOT_FOUND | Check that tin and contactPersonEmail match the company’s ASP authorization for this environment |
PEPPOL_PARTICIPANT_UNAVAILABLE | Check prerequisites and contact support with the request identifier |
CONNECT_COMPANY_ALREADY_EXISTS | Recover the existing company instead of creating another |
CONNECT_SOURCE_ALREADY_EXISTS | Use an unused source name/version for the new branch |
ONBOARDING_TIMEOUT | List companies before retrying; creation may have completed |
Last updated