Every analysis produces structured JSON you can feed into any system: Business Central, SAP, Odoo, NetSuite, Power Automate, or your own tools. Two delivery paths share the same field vocabulary: the download export (Export button in the app: JSON / CSV / Excel) and the webhook (we POST results to your URL automatically).
Click Export → JSON after an analysis. Shape:
{
"schemaVersion": 1,
"generatedAt": "2026-08-05T14:31:22.000Z",
"source": "Ceyltech Document Checker",
"fields": {
"Container Number": {
"bcSuggestedField": "containerNumber",
"extractions": [
{ "value": "CRSU6119884", "page": 3, "docType": "Bill of Lading" }
]
},
"Net Weight": {
"bcSuggestedField": "netWeight",
"extractions": [
{ "value": "25.259,68", "page": 1, "docType": "Invoice" }
]
}
}
}
Each extracted field carries every occurrence found: the value exactly as printed, the page
it was found on, and the document type of that page. bcSuggestedField is a
suggested ERP field key (camelCase, Business Central REST v2 vocabulary where one exists).
| Field | Suggested key | Field | Suggested key |
|---|---|---|---|
| Container Number | containerNumber | Seal Number | sealNumber |
| Net Weight | netWeight | Gross Weight | grossWeight |
| Number of Cartons | unitsOfMeasureQuantity | HS Code | tariffNoCode |
| Plants | plantNumber | Product Name | description |
| Production Date | productionDate | Expiry Date | expirationDate |
| Exporter Name | vendorName | Exporter Address | vendorAddress |
| Importer Name | shipToName | Importer Address | shipToAddressLine1 |
| Final Destinations | shipToCity | Lot Numbers | lotNo |
Custom fields you define keep their own names (non-alphanumeric characters stripped in the key). CSV and Excel exports flatten the same data into one row per extraction.
Configure a URL in Settings → Business Central Integration → Webhook. Every completed analysis is POSTed to it within seconds. No polling, no manual export.
POST to your https URL, Content-Type: application/jsonX-Ceyltech-Event: analysis.completed (or webhook.test for test deliveries)X-Ceyltech-Signature: sha256=<hex>, the HMAC-SHA256 of the raw request body using your signing secret{
"schemaVersion": 1,
"event": "analysis.completed",
"generatedAt": "2026-08-05T14:31:22.000000+00:00",
"source": "Ceyltech Document Checker",
"document": {
"id": "95435df0626642edad5152b293ca271c",
"analysisId": "a1b2c3…",
"documentType": "Page 1: Invoice\nPage 2: Invoice\nPage 3: Bill of Lading"
},
"fields": {
"Container Number": [ { "value": "CRSU6119884", "page": 3 } ],
"Net Weight": [ { "value": "25.259,68", "page": 1 } ]
}
}
# Python import hmac, hashlib expected = "sha256=" + hmac.new(SECRET.encode(), raw_body, hashlib.sha256).hexdigest() valid = hmac.compare_digest(expected, request.headers["X-Ceyltech-Signature"])
Always compare against the raw request body bytes, before any JSON parsing. Use the Send test button in Settings to receive a sample payload while building.
The same webhook works with Zapier, Make, n8n, Mulesoft, SAP CPI, or a 20-line script on your own server.
We're happy to help you wire this into your systems: contact@ceyltech.com.