Developers

API

Validate and explain documents from your own pipelines, integration platform or CI job.

Authentication

Bearer API keys scoped to an organisation, with per-key rate limits and audit logging.

Authorization: Bearer sk_live_xxxxxxxxxxxxxxxx

Core endpoints

POST/v1/analysesAnalyse a document
GET/v1/analyses/:idFetch an analysis
GET/v1/analysesList analyses
DELETE/v1/analyses/:idDelete an analysis and its document
GET/v1/standardsList supported standards
GET/v1/usageCurrent quota and usage

Example request

curl https://api.edi-explainer.com/v1/analyses \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "filename": "invoice.xml",
    "content": "<Invoice ...>",
    "standard_hint": "xrechnung",
    "language": "de"
  }'

Example response

{
  "id": "an_8f21c0",
  "status": "completed",
  "detection": {
    "standard": "XRECHNUNG",
    "syntax": "UBL",
    "version": "3.0",
    "confidence": "certain"
  },
  "summary": "Invoice 2026-0417 from Muster GmbH, 4 lines, 1.190,00 EUR gross.",
  "findings": [
    {
      "severity": "error",
      "source": "business_rule",
      "code": "BR-CO-15",
      "path": "/Invoice/LegalMonetaryTotal",
      "message": "Gross total does not equal net total plus VAT total."
    }
  ],
  "counts": { "error": 1, "warning": 2, "info": 5 }
}

Error codes

400 invalid_requestThe payload is missing a required field or the content is empty.
401 unauthorizedThe API key is missing, revoked or malformed.
402 quota_exceededThe monthly analysis quota for the current plan is exhausted.
413 payload_too_largeThe document exceeds the maximum size allowed by your plan.
429 rate_limitedToo many requests. Retry after the interval given in the Retry-After header.
422 undetected_formatThe format could not be detected. Provide a standard_hint and retry.

Rate limits and quotas

Requests are limited per API key and counted against the monthly analysis quota of your plan. Every response carries the remaining quota in the X-Quota-Remaining header. Failed requests that never reached the analysis engine are not counted.

Webhooks

Register an HTTPS endpoint to receive signed events instead of polling. Each delivery includes an HMAC signature header that you should verify before processing the payload.

analysis.completedanalysis.failedquota.threshold_reachedsubscription.updated