Environments
GoRoute provides two environments: Test and Production. Use Test for development and integration testing, then switch to Production when you're ready to go live.
Environment Overviewโ
| Aspect | Test Environment | Production Environment |
|---|---|---|
| Base URL | https://peppol-api-test.goroute.ai/peppol-api | https://app.goroute.ai/peppol-api |
| Peppol Network | Peppol Test Network (ACC) | Peppol Production Network |
| Real Invoices | โ No | โ Yes |
| Billing | Free (unlimited) | Per-invoice pricing |
| SMP | smp-test.goroute.ai | smp.goroute.ai |
| AP Endpoint | ap-test.goroute.ai | ap.goroute.ai |
The test and production base URLs are not the same host. https://app.goroute.ai/peppol-api
is production: its health check reports "environment": "production", and an invoice sent
there goes onto the real Peppol network as a legally binding document and is billed.
More than one test hostname is in use at GoRoute. https://peppol-api-test.goroute.ai/peppol-api
and https://app-test.goroute.ai/peppol-api both answer "environment": "test". Use the base
URL you were issued, and confirm it with the health check
below before relying on it. The health check is the only thing that settles it.
Identifying Your Environmentโ
Ask the health check. It tells you which environment the host you are calling is running as, and it needs no API key:
curl -X GET https://app.goroute.ai/peppol-api/health
Response:
{
"status": "healthy",
"version": "1.0.0",
"environment": "production",
"timestamp": "2026-09-04T04:26:50.113515"
}
The environment field is the answer. It reads production on the production host and
test on the test host.
Do not use /peppol/version for thisโ
GET /peppol/version is a different thing, and it is easy to mistake for an environment
check. It reports the Peppol code list currently in force โ the published catalogue of
identifier schemes and document types the network uses โ and says nothing about your
account, your API key or your environment:
{
"version": "9.7",
"publishedDate": "2026-07-02",
"fetchedAt": "2026-07-11T18:56:11.583253",
"active": true
}
There is no environment field in that response, so it cannot answer the question. The
version here is the code list's version number, not GoRoute's. If no code list is
currently active, the endpoint returns HTTP 404.
Test Environmentโ
Purposeโ
- Develop and test your integration
- Validate invoice formats
- Test webhook handling
- No real invoices are transmitted
Test Participantsโ
The sandbox recipients are listed, with the outcome each one produces, on
Test Identifiers. That page is the only list to work
from. There are nine of them, every one under Peppol scheme 9999 with an identifier that
starts with test-, and sending to a 9999:test-โฆ identifier that is not on that list is
refused with the error code UNKNOWN_SANDBOX_RECEIVER.
Earlier revisions of this page listed three other identifiers here. They were not sandbox recipients and have been removed rather than corrected: one list in one place cannot disagree with itself later.
Test Flowโ
Your System โ GoRoute (Test) โ Peppol ACC Network โ Test Receivers
Invoices sent in test mode are delivered to the test SMP/AP infrastructure. You can receive them back if you're registered as a test receiver.
Production Environmentโ
Purposeโ
- Send real invoices to real businesses
- Receive production invoices
- Full compliance and legal validity
Prerequisitesโ
Before going to production:
- โ Complete integration testing
- โ Pass all validation scenarios
- โ Configure production webhooks
- โ Set up error handling
- โ Request production API key
Production Flowโ
Your System โ GoRoute (Prod) โ Peppol Production Network โ Real Recipients
Invoices sent in production are legally binding documents. Ensure your integration is thoroughly tested before switching.
Switching Environmentsโ
Step 1: Request Production Accessโ
Contact GoRoute to enable production access:
- Go to Settings โ Production Access
- Complete the production readiness checklist
- Submit for review
- Receive production API key (usually within 24 hours)
Step 2: Update Configurationโ
Update your application configuration:
# Development
GOROUTE_API_KEY = os.environ.get("GOROUTE_TEST_API_KEY")
# Production
GOROUTE_API_KEY = os.environ.get("GOROUTE_PROD_API_KEY")
Step 3: Verify Production Connectionโ
curl -X GET https://app.goroute.ai/peppol-api/health
Confirm "environment": "production" in the response. The health check is unauthenticated,
so this tells you about the host you are calling rather than about your key โ check it
against the exact base URL your application is configured with.
Environment Variablesโ
Recommended setup for multiple environments:
# .env.development
GOROUTE_API_KEY=sk_test_abc123
GOROUTE_ENVIRONMENT=test
# .env.production
GOROUTE_API_KEY=pk_live_xyz789
GOROUTE_ENVIRONMENT=production
Best Practicesโ
Development Workflowโ
1. Local Development โ Test Environment
2. Staging/QA โ Test Environment
3. Production โ Production Environment
Environment-Specific Webhooksโ
Configure different webhook URLs per environment:
| Environment | Webhook URL |
|---|---|
| Test | https://staging.yourapp.com/webhooks/goroute |
| Production | https://yourapp.com/webhooks/goroute |
Data Isolationโ
- Test and production data are completely isolated
- Organizations created in test don't exist in production
- You must re-register participants for production
Frequently Asked Questionsโ
Can I use test API keys in production?โ
No. Test API keys only work with the Peppol test network. Production requires a production API key.
Are test invoices legally binding?โ
No. Test invoices are not transmitted on the production Peppol network and have no legal effect.
How do I test receiving invoices?โ
- Register a test participant in the test SMP
- Send a test invoice to your participant ID
- The invoice will be delivered to your webhook
Can I switch back to test after going production?โ
Yes. You can maintain both test and production API keys. Use test for ongoing development while production handles real traffic.