All documentation

    CODA delivery API integration guide

    Connect accounting software to the same delivery API used by AccountBridge Sync.

    Build a connector that polls pending files, downloads them and acknowledges receipt. This guide documents the implemented delivery API; it does not claim a certified integration with any accounting package.

    Choose the API environment

    Production and development have separate keys and data. Use the matching portal to create your key. The examples below use production; test the connector in development first.

    # Production
    API_BASE=https://api.accountbridge.be
    
    # Development
    API_BASE=https://api-dev.accountbridge.be

    Authentication

    A practice administrator creates a key in Portal → Security → Sync API keys. Send Authorization: Bearer DELIVERY_API_KEY to the API. Keys are scoped to one practice and shown once at creation. Keep them on your server, never in browser code, URLs or logs. Portal login tokens are not delivery API keys.

    Open Sync API keys

    Integration workflow

    1. List pending deliveries. 2. Download every non-null file URL and persist the content durably. 3. Record the delivery ID locally to prevent duplicate imports. 4. Acknowledge only successfully persisted deliveries. 5. Follow paging.after until it is null. Use the saved copy for accounting import and retries.

    Core endpoints today

    GET /delivery/v1/deliveries

    Returns pending deliveries for the practice owning the key, with temporary file URLs. Listing does not generate CODA or refresh bank transactions.

    POST /delivery/v1/deliveries/ack

    Records successful receipt of the supplied delivery IDs. Acknowledged files leave the shared pending queue.

    List files

    limit defaults to 100 and is capped at 500. For another page, send the returned opaque paging.after value as the URL-encoded after parameter. An empty data array means no files on this page; use paging.after to decide whether to continue.

    curl --get "$API_BASE/delivery/v1/deliveries" \
      --header "Authorization: Bearer $DELIVERY_API_KEY" \
      --data-urlencode "limit=100"
    
    # Next page: also pass --data-urlencode "after=$AFTER"

    Example response (fictional data)

    id identifies the delivery; client identifies the dossier and bankAccount the account. contentDate is the statement date. fileName is the CODA basename. codaUrl, pdfUrl and fileName can be null. Handle optional files and do not build paths directly from untrusted client names.

    {
      "data": [
        {
          "id": "00000000-0000-4000-8000-000000000001",
          "client": {
            "id": "00000000-0000-4000-8000-000000000002",
            "enterpriseNumber": "0123456789",
            "name": "Example company"
          },
          "bankAccount": {
            "iban": "BE00000000000000"
          },
          "contentDate": "2026-10-01",
          "fileName": "example.coda",
          "codaUrl": "https://download.example/coda?signature=...",
          "pdfUrl": null
        }
      ],
      "paging": {
        "after": null
      }
    }

    Download and persist

    Use the returned codaUrl and pdfUrl as complete URLs. They expire after one hour; request a fresh listing if a link expires. Do not forward the API bearer key to the download host. Persist every supplied file before acknowledging the delivery. Treat signed URLs as private access links.

    # Use the complete codaUrl or pdfUrl from the response.
    # Do not send the delivery API key to the download host.
    curl --fail --location "$SIGNED_FILE_URL" --output ./received-file.coda

    Acknowledge successful receipt

    Submit 1–1,000 delivery IDs per request. acknowledged is the returned count. Receipt does not mean that bookkeeping reconciliation succeeded: keep a durable local copy and import status so a failed accounting import can be retried.

    curl --request POST "$API_BASE/delivery/v1/deliveries/ack" \
      --header "Authorization: Bearer $DELIVERY_API_KEY" \
      --header "Content-Type: application/json" \
      --data '{"ids":["00000000-0000-4000-8000-000000000001"]}'
    
    # Response: {"acknowledged":1}

    Coordinate with Sync and portal downloads

    The pending queue is shared across API keys and Sync for the practice. API acknowledgment removes a file from other API consumers’ pending lists. Portal downloads remain available to Sync until API acknowledgment. Choose one API delivery owner or coordinate consumers. This is not an independent archive feed per connector.

    Errors and retries

    401: missing, invalid or revoked key. Acknowledgement returns 400 for an empty list or more than 1,000 IDs, and 404 for an unknown delivery in your practice. Retry network failures and 5xx responses with bounded backoff; inspect status codes rather than assuming a particular error body. Avoid continuous polling.

    OpenAPI specification

    The API is defined in OpenAPI 3.0 and a live Swagger UI is hosted at the API origin. Use it to browse endpoints, schemas, and example payloads.

    Open Swagger UI

    Building something specific?

    Contact us to agree on an accounting-package import test. SFTP, mailbox delivery, webhooks and ready-made package connectors are not provided by this delivery API.

    What this API proves

    The delivery endpoints and authentication are implemented and used by Sync. A software supplier can build a polling connector against them. Compatibility still requires an import and reconciliation test in that supplier’s package. This API does not bypass CODA or offer raw bank-transaction synchronisation.