Inbound API
Push e-invoices, e-receipts, and catalog items into EGKits with API keys — full JSON request examples.
Where do I get an API key?
Inbound API keys are created from your tenant workspace under Settings → Inbound API Clients. The full key (prefix egk_pub_) is shown once at creation — store it securely. If it is lost, rotate the client to issue a new key.
Authentication
| Header / Setting | Value |
|---|---|
Base URL |
Shown once when the API key is generated, e.g. https://<your-egkits-server>/api/v1 |
X-Api-Key |
The full API key, including the prefix and the dot:
egk_pub_xxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
The masked fingerprint (ending with ****) cannot authenticate. |
Authorization |
Alternative to X-Api-Key: Authorization: InboundKey <full api key> |
Optional headers
| Header | Purpose |
|---|---|
Idempotency-Key |
Unique string (max 128 chars) per submission. Retries with the same key and body return the original response instead of creating duplicates. |
X-Submit-To-ETA |
true / false — overrides the client's "Submit to ETA" default for this request. |
X-Correlation-Id |
Your trace id; echoed into the request log for troubleshooting. |
Quick test (cURL / Postman)
curl -X POST "https://<your-server>/api/v1/invoices" \
-H "X-Api-Key: egk_pub_2871c2b35e98.yNz0vKVfIHex7u39lOZj6RUlQEu-aHvw..." \
-H "Content-Type: application/json" \
-H "Idempotency-Key: inv-2026-000123-attempt-1" \
-d @invoice.json
In Postman: set the method and URL, then under Headers add X-Api-Key with the full key and Content-Type: application/json, and paste the JSON into Body → raw.
Start with GET /api/v1/directory — it needs no scopes and no body, and returns the comID / brnID / posID values required by all payloads.
Scopes: invoices need Invoices.Write, receipts Receipts.Write, items Items.Write. A missing scope returns 403, an invalid key returns 401. Rate limit is 120 requests/minute per key.
Response envelope
All endpoints return the same envelope. data.jobId is present when ETA submission was queued asynchronously — poll it via GET /api/v1/jobs/{jobId}.
{
"isSuccessful": true,
"statusCode": 201,
"message": "Invoice accepted.",
"data": {
"externalId": "INV-2026-000123",
"status": "Created",
"isDuplicate": false,
"documentId": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
"jobId": null
},
"errors": null
}