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

http
POST /v3/connect/companies

Complete the UAE prerequisites first.

Body fieldTypeRequiredDescription
sourceNamestringYesNon-empty source name, unique together with its version in the workspace
sourceVersionstringYesNon-empty source version
countryCodestringYesAE
tinstringYesUAE tax identification number; exactly 10 digits
contactPersonEmailstringYesThe email the company’s ASP authorization was registered with; see UAE prerequisites
contactPersonNamestringNoContact’s name
contactPersonMobilestringNoDigits with an optional leading +; no spaces
branchNamestringYesName of the first branch
platformEnvironmentstringYessandbox, simulation or production

Unknown fields are rejected. Do not send company, source, branch or Peppol identifiers; successful onboarding returns them.

Example request body — replace the sample identityjson
{
  "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:

Company created — HTTP 201json
{
  "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 fieldMeaning
companyId, sourceId, branchIdCreated company, source and first branch identifiers
userGivenBranchIdBuyer-owned branch reference to share with suppliers
peppolParticipantIdCompany’s Peppol network identifier
legalName, legalNameArabic, tin, vatTrnRegistered company details
sourceName, sourceVersion, countryCode, branchNameCreated source and branch details
contactPersonName, contactPersonEmail, contactPersonMobileContact details; optional inputs may be absent
platformEnvironmentOnboarding environment
readyForInvoicingWhether this source is ready for invoice submission
mappingReadinessstatus is READY, with the templateId in use, or ACTION_REQUIRED, with a code that says what to fix
createdAt, updatedAtTimestamps

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

http
GET /v3/connect/companies
QueryDefaultDescription
page1Page number, at least 1
limit10Companies per page, 1–100
countryCodeNoneCountry filter
sourceVersionNoneExact source version
statusNoneactive or inactive
searchNoneSearch 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.

Company list — HTTP 200json
{
  "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

http
GET /v3/connect/companies/{sourceName}?sourceVersion=v1
PATCH /v3/connect/companies/{sourceName}?sourceVersion=v1
DELETE /v3/connect/companies/{sourceName}?sourceVersion=v1

URL-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.

Source archived — HTTP 200json
{
  "success": true,
  "data": {
    "archived": true,
    "companyId": "66b9f0a1c2d3e4f567890123",
    "sourceName": "acme-dubai"
  },
  "meta": {
    "requestId": "01JABCDEF1234567890REQUEST",
    "timestamp": "2026-08-01T12:00:00.000Z",
    "workspaceId": "66b9e000c2d3e4f567890000"
  }
}

Add branches

http
POST /v3/connect/companies/{companyId}/branches

companyId 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.

Add an Abu Dhabi branchjson
{
  "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:

Branches processed — HTTP 200json
{
  "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

ConditionAction
ASP_LINKAGE_NOT_FOUNDCheck that tin and contactPersonEmail match the company’s ASP authorization for this environment
PEPPOL_PARTICIPANT_UNAVAILABLECheck prerequisites and contact support with the request identifier
CONNECT_COMPANY_ALREADY_EXISTSRecover the existing company instead of creating another
CONNECT_SOURCE_ALREADY_EXISTSUse an unused source name/version for the new branch
ONBOARDING_TIMEOUTList companies before retrying; creation may have completed

See error envelopes and recovery.

Last updated