Skip to main content

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โ€‹

AspectTest EnvironmentProduction Environment
Base URLhttps://peppol-api-test.goroute.ai/peppol-apihttps://app.goroute.ai/peppol-api
Peppol NetworkPeppol Test Network (ACC)Peppol Production Network
Real InvoicesโŒ Noโœ… Yes
BillingFree (unlimited)Per-invoice pricing
SMPsmp-test.goroute.aismp.goroute.ai
AP Endpointap-test.goroute.aiap.goroute.ai
The two base URLs are different โ€” check yours before you send anything

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
Test Invoices Loop Back

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:

  1. โœ… Complete integration testing
  2. โœ… Pass all validation scenarios
  3. โœ… Configure production webhooks
  4. โœ… Set up error handling
  5. โœ… Request production API key

Production Flowโ€‹

Your System โ†’ GoRoute (Prod) โ†’ Peppol Production Network โ†’ Real Recipients
Production is Real

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:

  1. Go to Settings โ†’ Production Access
  2. Complete the production readiness checklist
  3. Submit for review
  4. 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:

EnvironmentWebhook URL
Testhttps://staging.yourapp.com/webhooks/goroute
Productionhttps://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?โ€‹

  1. Register a test participant in the test SMP
  2. Send a test invoice to your participant ID
  3. 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.

Next Stepsโ€‹