Skip to main content

Wathq Commercial Registration

The Wathq API lets you verify a Saudi company by its Commercial Registration (CR) number. Azakaw looks the company up through Wathq (Commercial Registration, New Legislation) and returns the official record: company details, status, capital, owners (parties) and managers.

Unlike Nafath, Wathq is synchronous. There is no approval step, callback, webhook or polling. You send a CR number and get the result straight away.

The integration is a two-step flow:

  1. Lookup – POST /ExtWathq/lookup fetches the company record from Wathq and stores it against your tenant.
  2. Retrieve – GET /ExtWathq/company/{crNumber} returns the stored record.

Authentication​

All requests require a bearer token in the Authorization header. The token must carry the External services claim.

Authorization: Bearer your-token-here

For details on how to obtain a token, see Authentication. The tenant is always taken from the token, never from the request body.

Lookup Company​

POST {base_url}/ExtWathq/lookup

Looks up a company by CR number and stores the full record for your tenant. Real lookups (Live and Sandbox modes) consume one unit of your tenant's Wathq quota. A failed lookup is refunded.

Request Body​

{
"crNumber": "4030010781",
"clientId": "string",
"formId": "string"
}

Parameters​

ParameterTypeRequiredDescription
crNumberstringYesThe commercial registration number. Must be exactly 10 digits
clientIdstringNoThe client the lookup is attributed to. Used for mode resolution and audit. If your credential is restricted to specific clients, it must be one of them. If omitted, your single or default client is used
formIdstringNoA form used only to resolve a form-level mode override. Ignored if your credential cannot access that form

Response​

{
"version": "string",
"statusCode": 200,
"messages": [
"Processed successfully"
],
"result": {
"crNumber": "4030010781",
"companyName": "string",
"mode": 3
}
}

Response Fields​

FieldTypeDescription
versionstringAPI version
statusCodenumberHTTP status code (200 for success)
messagesarrayResponse messages
crNumberstringThe CR number that was looked up
companyNamestringCompany name as registered with Wathq (Arabic)
modenumberThe mode the lookup was served in

Get Stored Company Record​

GET {base_url}/ExtWathq/company/{crNumber}

Returns the most recent stored record for a CR number within your tenant, as saved by a previous lookup. This endpoint does not call Wathq and does not consume quota.

The record includes owner and manager identity numbers. If your credential is restricted to specific clients, you only see records looked up under those clients.

Parameters​

ParameterTypeRequiredDescription
crNumberstringYesThe 10-digit commercial registration number

Response​

result is null if no lookup has been stored for this CR.

{
"version": "string",
"statusCode": 200,
"messages": [
"Processed successfully"
],
"result": {
"crNumber": "4030010781",
"mode": 2,
"whenCreatedUtc": "2026-08-07T10:15:00Z",
"company": {
"crNationalNumber": "7000850920",
"crNumber": "4030010781",
"versionNo": 1,
"name": "string",
"nameLangId": 1,
"nameLangDesc": "اللغة العربية",
"crCapital": 13000000,
"companyDuration": 5,
"isMain": true,
"issueDateGregorian": "1976-12-07",
"issueDateHijri": "16-12-1396",
"mainCrNationalNumber": null,
"mainCrNumber": null,
"inLiquidationProcess": false,
"hasEcommerce": false,
"headquarterCityId": 18,
"headquarterCityName": "جدة",
"isLicenseBased": false,
"licenseIssuerNationalNumber": null,
"licenseIssuerName": null,
"partnersNationalityId": 1,
"PartnersNationalityName": "سعودية",
"entityType": {
"id": 1,
"name": "شركة",
"formId": 3,
"formName": "توصية بسيطة",
"characters": []
},
"status": {
"id": 1,
"name": "نشط",
"confirmationDate": { "gregorian": "2025-04-03", "hijri": "05-10-1446" }
},
"contactInfo": {
"phoneNo": null,
"mobileNo": "string",
"email": "string",
"websiteUrl": null
},
"capital": {
"currencyId": 1,
"currencyName": "ريال سعودي",
"contributionCapital": {
"typeId": 1,
"typeName": "نقدي",
"cashCapital": -1,
"inKindCapital": 0,
"contributionValue": 0,
"totalCashContribution": 0,
"totalInKindContribution": 0
}
},
"parties": [
{
"name": "string",
"typeId": 1,
"typeName": "فرد سعودي",
"identity": { "id": "1003589726", "typeId": 1, "typeName": "هوية وطنية" },
"partnership": [{ "id": 2, "name": "شريك متضامن" }],
"partnerShare": {
"cashContributionCount": 0,
"inKindContributionCount": 0,
"totalContributionCount": 0
},
"nationality": { "id": 113, "name": "السعودية" },
"crNumber": null,
"licenseNo": null
}
],
"management": {
"structureId": 1,
"structureName": "مدير",
"managers": [
{
"name": "string",
"typeId": 1,
"typeName": "فرد سعودي",
"isLicensed": false,
"identity": { "id": "1003589726", "typeId": 1, "typeName": "هوية وطنية" },
"nationality": { "id": 113, "name": "السعودية" },
"positions": []
}
]
},
"activities": []
}
}
}

Response Fields​

FieldTypeDescription
crNumberstringThe CR number
modenumberThe mode the record was fetched in
whenCreatedUtcstringWhen the record was stored (UTC)
companyobjectThe full Wathq company record (see below)

Company​

FieldTypeDescription
crNumberstringCommercial registration number
crNationalNumberstringCR national (unified) number
versionNonumberVersion of the CR record
namestringRegistered company name (Arabic)
crCapitalnumberRegistered capital amount
companyDurationnumberCompany duration
isMainbooleanWhether this is the main CR (not a branch)
mainCrNumber / mainCrNationalNumberstringMain CR identifiers, when this is not the main CR
issueDateGregorianstringIssue date, yyyy-MM-dd
issueDateHijristringIssue date, Hijri calendar (dd-MM-yyyy)
inLiquidationProcessbooleanWhether the company is being liquidated
hasEcommercebooleanWhether the company has an e-commerce registration
headquarterCityId / headquarterCityNamenumber / stringHeadquarters city
isLicenseBasedbooleanWhether the CR is license based
licenseIssuerName / licenseIssuerNationalNumberstringLicense issuer, when license based
partnersNationalityId / PartnersNationalityNamenumber / stringNationality of the partners. Note the capital P in PartnersNationalityName, as returned by Wathq
entityTypeobjectEntity type: id, name, formId, formName, characters
statusobjectRegister status: id, name, and date objects (confirmationDate, reactivationDate, suspensionDate, deletionDate, each { gregorian, hijri } when set)
contactInfoobjectphoneNo, mobileNo, email, websiteUrl
eCommerceobjectE-store details (eStore list), when present
capitalobjectcurrencyId, currencyName, contributionCapital or stockCapital
fiscalYearobjectFiscal year end (endMonth, endDay, ...), when present
partiesarrayOwners (see below)
managementobjectstructureId, structureName and the managers array
activitiesarrayRegistered activities (id, name)
note

contributionCapital.cashCapital may be -1. This means the value is undisclosed, not a real amount. Treat it as unknown.

Party (Owner)​

FieldTypeDescription
namestringOwner name
typeId / typeNamenumber / stringOwner type (for example Saudi individual)
identityobjectid, typeId, typeName. The national ID, Iqama or passport number
partnershiparrayPartnership roles (id, name)
partnerShareobjectcashContributionCount, inKindContributionCount, totalContributionCount
nationalityobjectid, name, and nameEn when available
crNumberstringCR number, when the owner is a company
licenseNostringLicense number, when applicable

Manager​

FieldTypeDescription
namestringManager name
typeId / typeNamenumber / stringManager type
isLicensedbooleanWhether the manager is licensed
identityobjectid, typeId, typeName
nationalityobjectid, name, and nameEn when available
positionsarrayBoard positions (id, name)
info

Wathq returns names and lookup values in Arabic. In the Sandbox, Wathq masks personal and contact data, so values contain placeholder x characters.


Modes​

Every lookup is served in one of three modes. The mode is resolved from the most specific scope that has a configuration: form, then client, then tenant, then the global default. If nothing is configured, the mode is Simulation.

ValueModeDescriptionQuota
1LiveCalls the production Wathq API. Returns real company dataConsumes 1 per lookup
2SandboxCalls the Wathq sandbox with real requests but Wathq test dataConsumes 1 per lookup
3SimulationNo network call. Returns a fixed, captured sample record, with your requested CR number echoed backNone

The mode field in each response tells you which one served the request. Data from Simulation and Sandbox is not real company data and must not be used for real onboarding decisions.

warning

Simulation is the default. A new tenant returns sample data until its mode is set to Live. Check mode in the lookup response before relying on the result.


Quota​

Live and Sandbox lookups are billed against a per-tenant quota. Simulation lookups and stored-record retrieval (GET /ExtWathq/company/{crNumber}) are not.

  • A quota slot is reserved before the call to Wathq and refunded if the call fails.
  • If the tenant has no quota configured, is blocked, or has used its allowance, the request fails with 429.

Integration Flow​

  1. Look up: call POST /ExtWathq/lookup with the 10-digit crNumber. Check mode in the response.
  2. Retrieve: call GET /ExtWathq/company/{crNumber} to read the stored company record, including owners and managers.
  3. Use the data: use parties and management.managers (identities, nationalities, roles) for your beneficial-owner and director checks, such as sanctions screening.

If you use Azakaw onboarding forms with a Wathq field, the platform performs the equivalent steps for you. It auto-fills the mapped form fields and populates owners and managers.


Error Handling​

Status CodeDescriptionSolution
400A valid 10-digit commercial-registration number is required.Send a CR number of exactly 10 digits
400Mode not configured (Live or Sandbox credentials missing)Contact Azakaw support. The tenant's mode must be configured
401Unauthorized accessCheck the authentication token
403Tenant claim missing from the token, or the token lacks accessUse a token with the External services claim
429Wathq quota exceeded, not configured, or blocked for this tenantContact Azakaw support to increase the quota

Best Practices​

  1. Validate the CR number client-side (10 digits) before calling the API.
  2. Check mode in every lookup response, and never treat Simulation or Sandbox results as verified real company data.
  3. Look up once, then read: use GET /ExtWathq/company/{crNumber} for repeat reads instead of repeating billable lookups.
  4. Protect owner and manager data: the stored record includes identity numbers. Do not log it or expose it client-side.
  5. Handle Arabic values: names, statuses and entity types come back in Arabic.