Overview
A sandbox company cannot be converted into a production company. Test mode is fixed when a company is created. To go live, you create a separate production company and repeat the configuration that belongs to a company: the API key, the Peppol ID and the webhooks. The API host does not change. Sandbox companies and production companies both usehttps://api.e-invoice.be. See Test mode and sandbox companies.
What changes and what stays the same
Checklist
Create the production company
Confirm the Peppol ID of the company
GET /api/me/ with the production API key and read peppol_ids. The sender of each document must be one of these Peppol IDs. If it is not, POST /api/documents/ returns 406 and POST /api/documents/{document_id}/send returns 409. For self-billing documents, the same check applies to the receiver.If the company must receive documents, it must also be registered on the Peppol network. Check the registration with GET /api/validate/peppol-id. See Look up Peppol participants and the Peppol ID entry in the glossary.Create the production API key
E_INVOICE_API_KEY. Do not use the sandbox key in production, and do not use the production key in tests.See Authentication.Create the webhooks again
POST /api/webhooks/.The server generates a new secret for each webhook. Store the new secret and use it to verify the X-Signature header. A signature check that uses the sandbox secret fails for production events.See Webhooks.Check the plan and the credit balance
GET /api/me/ and read plan and credit_balance. A sandbox company has no billing, so this is the first time that these values apply to your integration.See Usage statistics and credits.Send with explicit Peppol routing
sender_peppol_scheme, sender_peppol_id, receiver_peppol_scheme and receiver_peppol_id on each call to POST /api/documents/{document_id}/send. Explicit routing prevents delivery failures that occur when the API derives a Peppol ID from the company identifiers in the document.See Create e-invoices.Check the recipient before each send
GET /api/validate/peppol-id for the recipient. The response contains is_valid, dns_valid, business_card_valid and supported_document_types. Send only when the recipient is registered and supports the document type.In a sandbox company this check has no effect on delivery, because documents go to email. In a production company the document can only be delivered to a recipient that is registered on the Peppol network.See Look up Peppol participants.Handle rate limits and failed documents
429 when the rate limit for the API key is exceeded. Read the Retry-After header and wait that number of seconds before you send the request again.A document that cannot be delivered gets the state FAILED. Subscribe to the document.sent.failed and document.received.failed events, and make sure that an operator sees these documents.See Errors and troubleshooting and Document lifecycle and delivery tracking.Send one real document
GET /api/documents/{document_id}/timeline and confirm that the document reaches the state SENT.See Document lifecycle and delivery tracking.Set up monitoring
- Webhook deliveries that fail.
GET /api/webhooks/{webhook_id}/historyshows the delivery history of a webhook. - Documents in the state
FAILED. - Your usage and the value of
credit_balancefromGET /api/me/.
Frequently asked questions
Can a sandbox company be converted into a production company?
Can a sandbox company be converted into a production company?
Must the code change for production?
Must the code change for production?
FAILED documents become important, because documents go to real recipients.Are documents of the sandbox company copied to the production company?
Are documents of the sandbox company copied to the production company?
Can the API show whether a key belongs to a sandbox company?
Can the API show whether a key belongs to a sandbox company?
GET /api/me/ does not return the test mode of the company. Label each key when you store it, so that a sandbox key and a production key cannot be confused.