Skip to main content

Signing and TTN filing

Signing and TTN submission always follow the client organization's own configuration — your app triggers the process but never handles the client's signing credentials.

Triggering signing

POST /api/core-proxy/invoices/:id/sign-and-send

The primary endpoint: signs the invoice and submits it to TTN in one asynchronous operation.

Requires invoice:write, plus seal:sign (if signatureType: "SEAL") or digigo:sign (if "DIGIGO"), matching what the client has configured.

{ "signatureType": "SEAL" }

Response 200 OK (a job is created, not the final result):

{
"jobId": "...",
"invoiceId": "...",
"jobType": "SIGN_AND_SUBMIT_SEAL",
"status": "PENDING",
"success": true,
"message": "Invoice queued for signature and TTN submission"
}
jobType is provider-specific

SIGN_AND_SUBMIT_SEAL for signatureType: "SEAL", SIGN_AND_SUBMIT_DIGIGO for "DIGIGO" — not a generic value.

Tracking the job

GET /api/core-proxy/jobs/:jobId
GET /api/core-proxy/jobs/:jobId/logs?limit=50

status transitions PENDINGCOMPLETED or FAILED. On failure, outputData names the failing step (e.g. a missing DigiGO certificate on the client side — a common real-world failure, not a bug). Once complete, re-fetch the invoice: status will be ACCEPTED_TTN on success.

Allowed source statuses

Sign-and-send is only accepted when the invoice is currently DRAFT, VALIDATED, VALIDATION_FAILED, SIGNATURE_FAILED, REJECTED_TTN, ERROR_TTN, or TIMEOUT_TTN — otherwise you get a 409.

Batch operations

POST /api/core-proxy/invoices/batch/sign-and-send   { "invoiceIds": [...], "signatureType": "SEAL" }
POST /api/core-proxy/invoices/batch/delete [ "inv_1", "inv_2" ]

Signing quota

Each sign-and-send consumes one unit of the client organization's monthly signing quota (or, if exhausted, a signature-pack credit). If both are exhausted:

{
"error": "NO_SIGNATURE_CREDITS",
"message": "No signing quota or signature-pack credits available. Buy a pack or subscribe/upgrade to sign and submit to TTN.",
"packsRemaining": 0
}

with HTTP 402. This is a quota tied to the client's own plan, separate from your Partner API monthly document limit.

Next step: see the Reference page for errors, rate limits, code examples and the full guide download.