Technical architecture and interface specification for bidirectional integration between B1 Connect and the General Directorate of Traffic (GDT). Governs real-time plate manufacturing ingestion, order reconciliation, and fitting completion callbacks in alignment with GDT Integration Guide v1.1.
Dedicated static endpoints provisioned for the GDT interface. Inbound orders route to B1 Ingress; fitting confirmation callbacks originate from B1 Egress nodes.
| Environment | B1 Ingress (GDT → B1) | B1 Egress (B1 → GDT) | Ports & Transport |
|---|---|---|---|
| Production | 20.254.20.129 | 131.145.152.225 | 443 / HTTPS (80 redirects to 443) |
| Staging / DEV | 4.255.163.23 | 172.215.238.40 | 443 / HTTPS (80 redirects to 443) |
| GDT Host(s) | Static public calling IPs and target callback URIs to be provided by GDT for ingress whitelisting. | 443 / HTTPS | |
Strict TLS 1.3 enforced across all environments. Inbound traffic on port 80 is automatically redirected to port 443; plain HTTP traffic is rejected.
X-API-Key: <key>, Authorization: Bearer <key>, or HTTP Basic credentials.203.0.113.0/24) or explicit host IPs. Calls from unauthorized addresses receive 403 Forbidden (B1-002).Synchronous ingestion endpoint. Receives single-order JSON payloads from GDT, performs schema validation and deduplication, and returns an immediate acknowledgment reference. Field mapping is tolerant to case and underscore formatting variations.
| Field | Requirement | Validation Rule |
|---|---|---|
| requestNumber | Required | Unique external reference ID issued by GDT. |
| requestTypeCode | Required | Transaction type code. Preserved and echoed in completion callback. |
| requestTypeDescriptionEn / Ar | Required | Bilingual classification descriptions. |
| requestDate | Required | ISO Date format: YYYY-MM-DD. |
| requestStatusCode | Required | Enumerated: PPAY (Branch payment pending) or PINS (Prepaid online). Other values trigger B1-006. |
| requestStatusDescriptionEn / Ar | Required | Bilingual status descriptors. |
| isFromBlockchain | Required | Boolean (Accepts true/false, 1/0, Y/N). |
| chassisNumber, engineNumber | Required | Alphanumeric identifiers. |
| make / model / color DescriptionEn / Ar | Required | Bilingual vehicle spec fields (6 strings). |
| yearOfMake | Required | Integer (1900 to current year + 1). |
| plateNumber | Required | 1–10 alphanumeric characters. |
| plateTypeCode | Required | Standard code list (PRV, ORG, YEL, MCY, POL, DIP, DWN, EXP, INS, SPC, SPT). |
| plateTypeDescriptionEn / Ar | Required | Bilingual plate category descriptions. |
| numberOfLongPlates / Short / VeryShort | Required | Integer (0–9); cumulative total must be ≥ 1. |
| b1OfficeLocationCode | Optional | Target installation branch; re-assignable by customer via self-service app. |
| requestorIdNumber | Required | CPR (9 digits) or CR (6–8 digits). Required for customer verification. |
| requestorNameEn / Ar | Required | Bilingual customer identity strings. |
{
"requestNumber": "TMS-26-0419001",
"requestTypeCode": "NREG",
"requestTypeDescriptionEn": "New registration",
"requestTypeDescriptionAr": "تسجيل جديد",
"requestDate": "2026-11-03",
"requestStatusCode": "PINS",
"requestStatusDescriptionEn": "Pending plate installation",
"requestStatusDescriptionAr": "تركيب اللوحات",
"isFromBlockchain": false,
"chassisNumber": "JTMHV05J604123456",
"engineNumber": "1VD-0823456",
"makeDescriptionEn": "Toyota",
"makeDescriptionAr": "تويوتا",
"modelDescriptionEn": "Land Cruiser",
"modelDescriptionAr": "لاند كروزر",
"colorDescriptionEn": "White",
"colorDescriptionAr": "أبيض",
"yearOfMake": 2026,
"plateNumber": "615216",
"plateTypeCode": "PRV",
"plateTypeDescriptionEn": "Private",
"plateTypeDescriptionAr": "خصوصي",
"numberOfLongPlates": 2,
"numberOfShortPlates": 0,
"numberOfVeryShortPlates": 0,
"b1OfficeLocationCode": "",
"requestorIdNumber": "880112345",
"requestorNameEn": "Test Customer",
"requestorNameAr": "عميل تجريبي"
}{
"statusCode": "B1-000",
"statusMessage": "Success.",
"b1Reference": "20187"
}
{
"statusCode": "B1-004",
"statusMessage": "A mandatory field is missing: plateNumber."
}
requestNumber.B1-007.B1-008.| Code | HTTP | Description |
|---|---|---|
| B1-000 | 200 OK | Request processed and recorded successfully. |
| B1-001 | 401 Unauthorized | API authentication key missing or invalid. |
| B1-002 | 403 Forbidden | Origin IP address rejected by access whitelist. |
| B1-003 | 400 Bad Request | Malformed JSON payload syntax. |
| B1-004 | 400 Bad Request | Mandatory parameter absent from schema (field identified). |
| B1-005 | 400 Bad Request | Data type or value constraint violation (field identified). |
| B1-006 | 400 Bad Request | Invalid status code enumeration; requires PPAY or PINS. |
| B1-007 | 409 Conflict | Illegal state transition: prepaid orders cannot revert to branch pay. |
| B1-008 | 409 Conflict | Order has already completed its lifecycle. |
| B1-009 | 503 Service Unavailable | Service unavailable; backoff and retry. |
| B1-010 | 500 Internal Error | Internal exception; includes transaction tracking reference. |
Dispatched synchronously upon branch confirmation of plate installation. Target URIs, authentication schemes, and success schemas are managed in 9DIGITAL environment configuration.
POST {GDT_CONFIRMATION_URL} Content-Type: application/json Authorization: Basic … | Bearer … { "gdtRequestNumber": "TMS-26-0419001", "gdtRequestTypeCode": "NREG", "isFromBlockchain": false }
000, 0, 200, SUCCESS).TEST-0000000.