Skip to main content

Quickstart Guide

Send your first Peppol invoice in under 5 minutes. This guide walks you through the essential steps to get started with GoRoute.

Prerequisitesโ€‹

  • A GoRoute account (sign up here)
  • Your business registered in the Peppol network (we handle this)
  • A test receiver to send invoices to

Step 1: Get Your API Keyโ€‹

  1. Log in to the GoRoute Dashboard
  2. Navigate to Settings โ†’ API Keys
  3. Click Create API Key
  4. Copy and save your key securely (it won't be shown again)
pk_live_abc123def456...
Keep it secret

Your API key provides full access to your organization. Never commit it to source control or expose it in client-side code.

Step 2: Test Your Connectionโ€‹

Verify your API key works. Each API key belongs to exactly one organization, so this call returns that organization's profile โ€” no organization ID has to be passed:

Sandbox keys: if your API key starts with sk_test_, your account is on the test environment โ€” use https://peppol-api-test.goroute.ai/peppol-api as the base URL and https://app-test.goroute.ai/app/ for the dashboard. The production URLs below are for pk_live_ keys.

curl -X GET https://app.goroute.ai/peppol-api/api/v1/settings/organization \
-H "X-API-Key: YOUR_API_KEY"

Expected response โ€” the organization your key is bound to:

{
"id": "9f1c2b7e-2f4a-4a1b-9c3d-7e5a1b2c3d4e",
"name": "Your Company",
"peppol_id": "0106:12345678",
"contact_email": "billing@yourcompany.example",
"vat_number": "NL123456789B01",
"country": "NL",
"status": "active"
}

Step 3: Check Receiver Existsโ€‹

Before sending, verify the receiver is on the Peppol network:

curl -X GET "https://app.goroute.ai/peppol-api/api/v1/participants/lookup?peppol_id=0204:DE123456789" \
-H "X-API-Key: YOUR_API_KEY"

Expected response:

{
"found": true,
"participant_id": "0204:DE123456789",
"name": "Customer GmbH",
"country": "DE",
"capabilities": [
"urn:oasis:names:specification:ubl:schema:xsd:Invoice-2::Invoice"
]
}

Step 4: Send Your First Invoiceโ€‹

Now send an invoice using the JSON format. The invoice data goes in an invoice object; GoRoute validates it, renders the UBL XML and queues it for delivery:

curl -X POST https://app.goroute.ai/peppol-api/api/v1/invoices \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"invoice": {
"document_type": "invoice",
"number": "INV-2026-001",
"issue_date": "2026-01-26",
"due_date": "2026-02-26",
"currency": "EUR",
"seller": {
"name": "Your Company",
"peppol_id": "0106:12345678",
"vat_number": "NL123456789B01",
"address": {
"street": "123 Main Street",
"city": "Amsterdam",
"postal_code": "1012 AB",
"country": "NL"
}
},
"buyer": {
"name": "Customer GmbH",
"peppol_id": "0204:DE123456789",
"vat_number": "DE123456789",
"address": {
"street": "456 Business Ave",
"city": "Berlin",
"postal_code": "10115",
"country": "DE"
}
},
"lines": [
{
"description": "Consulting Services - January 2026",
"quantity": 40,
"unit": "HUR",
"unit_price": 125.00,
"tax_rate": 19,
"tax_category": "standard"
}
],
"totals": {
"net_amount": 5000.00,
"tax_amount": 950.00,
"payable_amount": 5950.00
}
}
}'

Expected response (202 Accepted):

{
"transaction_id": "1d5c8f92-3b47-4c2e-9a61-0f7d2e8b4c15",
"status": "queued",
"message": "Invoice validated, transformed to Peppol BIS 3.0, and queued for delivery",
"created_at": "2026-01-26T10:30:00Z"
}

Step 5: Track Delivery Statusโ€‹

Check the delivery status:

curl -X GET https://app.goroute.ai/peppol-api/api/v1/transactions/1d5c8f92-3b47-4c2e-9a61-0f7d2e8b4c15 \
-H "X-API-Key: YOUR_API_KEY"

Expected response:

{
"id": "1d5c8f92-3b47-4c2e-9a61-0f7d2e8b4c15",
"direction": "sent",
"status": "delivered",
"sender_peppol_id": "0106:12345678",
"receiver_peppol_id": "0204:DE123456789",
"document_type": "invoice",
"created_at": "2026-01-26T10:30:00Z",
"submitted_at": "2026-01-26T10:30:10Z",
"delivered_at": "2026-01-26T10:30:15Z",
"retry_count": 0
}

๐ŸŽ‰ Congratulations!โ€‹

You've successfully sent your first Peppol invoice through GoRoute!

Next Stepsโ€‹

Using Python?โ€‹

import requests

API_KEY = "YOUR_API_KEY"
BASE_URL = "https://app.goroute.ai/peppol-api"

response = requests.post(
f"{BASE_URL}/api/v1/invoices",
headers={"X-API-Key": API_KEY},
json={
"invoice": {
"document_type": "invoice",
"number": "INV-2026-001",
"issue_date": "2026-01-26",
"currency": "EUR",
"seller": {"name": "Your Company", "peppol_id": "0106:12345678"},
"buyer": {"name": "Customer", "peppol_id": "0204:DE123456789"},
"lines": [
{"description": "Service", "quantity": 1, "unit_price": 100.00, "tax_rate": 19}
],
"totals": {"net_amount": 100.00, "tax_amount": 19.00, "payable_amount": 119.00}
}
}
)

print(response.json())

Need Help?โ€‹