Shell B2B Mobility Toll Transaction Data API - Quick Start Guide
API Version: 1.0.0 | Authentication: OAuth 2.0 | Status: Production
Overview
The Shell B2B Mobility Toll Transaction Data API is a REST-based API that provides comprehensive access to toll transaction records and related data for Shell mobility customers. This API enables developers to retrieve, filter, and analyze toll transaction data programmatically for account reconciliation, billing verification, expense management, and compliance requirements.
Key Features
- Retrieve toll transaction data by account number
- Filter transactions by date range (from and to dates)
- Search by invoice status and VRN (Vehicle Registration Number)
- Advanced sorting capabilities on multiple fields
- Pagination support for large datasets
- Flexible field filtering to optimize response payload
- Comprehensive toll details including entry/exit points
- Support for multiple toll networks and operators
Authentication
OAuth 2.0 (Standard Authentication Method)
The Shell Toll Transaction Data API uses OAuth 2.0 Client Credentials flow for secure authentication.
OAuth 2.0 Flow
Step 1: Obtain Access Token
Request an access token from the OAuth token endpoint:
POST /oauth/token Content-Type: application/x-www-form-urlencoded grant_type=client_credentials&client_id=your-client-id&client_secret=your-client-secret
Step 2: Use Access Token in API Requests
Authorization: Bearer <access-token> Content-Type: application/json RequestId: eb621f45-a543-4d9a-a934-2f223b263c42
Token Management
Token management best practices:
- Access tokens have a limited lifetime (typically 15 mins)
- Implement token caching to avoid unnecessary token requests
- Refresh tokens before expiry to ensure uninterrupted service
- Never share your client_secret or embed it in client-side code
Environments
The API is available in two environments:
| Environment | Base URL | Purpose |
|---|---|---|
| Production | https://api.shell.com/toll-data/v1 | Live production environment |
| Test (UAT) | https://api-test.shell.com/toll-data/v1 | Testing and development environment |
OAuth Token URLs:
| Environment | Token URL |
|---|---|
| Production | https://api.shell.com/v2/oauth/token |
| Test (UAT) | https://api-test.shell.com/v2/oauth/token |
Tip: Always test your integration in the Test environment before moving to production.
Quick Start
1. Get Your OAuth Credentials
- Contact Shell Technical Support
- Request OAuth 2.0 credentials (client_id and client_secret)
- Review terms of service
2. Obtain Access Token
First, get your OAuth access token:
cURL Example:
curl -X POST https://api-test.shell.com/v2/oauth/token \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "grant_type=client_credentials&client_id=your-client-id&client_secret=your-client-secret"
Response:
{
"access_token": "eyJhbGciOi*******5cCI6IkpXVCJ9...",
"token_type": "Bearer",
"expires_in": 899
}3. Make Your First API Request
Example: Search Toll Transactions
cURL Example:
curl -X POST https://api-test.shell.com/toll-data/v1/transactions/search \
-H "Authorization: Bearer eyJhbGci******NiIsInR5cCI6IkpXVCJ9..." \
-H "Content-Type: application/json" \
-H "RequestId: eb621f45-a543-4d9a-a934-2f223b263c42" \
-d '{
"Filters": {
"ColCoCode": 86,
"PayerNumber": "NL20016398",
"AccountNumber": "NL20027701",
"Filter": "All",
"FromDate": "2026-01-01",
"ToDate": "2026-01-31"
},
"Page": 1,
"PageSize": 10
}'Example Response:
{
"RequestId": "eb621f45-a543-4d9a-a934-2f223b263c42",
"Status": "SUCCESS",
"Page": 1,
"TotalRecords": 150,
"TotalPages": 15,
"PageSize": 10,
"Data": [
{
"NetworkDescription": "Societa Autostradali",
"TollChargerCode": "410|610",
"DelcoCode": "714",
"DelcoName": "Shell Fleet Solutions Consorzio",
"NetworkCode": "TLI",
"Network": "euroShell Consortio",
"PurchasedInCountry": "Italy",
"PurchasedInCountryCode": "IT",
"CardNumber": "707737*******334272",
"CardId": 123456789,
"CardGroupName": "Shell Fleet Solutions Consorzio",
"VehicleRegistration": "KN 00000",
"CostCenter": "100",
"SystemEntryDate": "20260123",
"SystemEntryTime": "13:14:25",
"TransactionDate": "20260120",
"TransactionTime": "10:30:00",
"PostingDate": "20260123",
"PostingTime": "00:00:00",
"PayerNumber": "NL20016398",
"AccountNumber": "NL20027701",
"AccountName": "Test Account Name",
"StartDate": "20260120",
"StartTime": "06:47:41",
"EndDate": "20260120",
"EndTime": "07:30:15",
"TollGateEntry": "ROMA NORD",
"TollGateExit": "BRENNERO",
"DistanceDriven": "71.6",
"RouteDescription": "ROMA NORD - BRENNERO",
"TransactionType": "Road tax",
"ProductCode": "14",
"ProductDescription": "Road tax",
"TransactionNetAmount": "127.1",
"TransactionTax": "0.0",
"TransactionGrossAmount": "127.1",
"TransactionCurrencyCode": "EUR",
"TransactionStatus": "Reporting",
"InvoiceNumber": "8600397548",
"InvoiceDate": "20260125",
"InvoiceStatus": "Invoiced",
"PaymentMethod": "Post Pay",
"OBUSerialNumber": "00049000000836932426",
"EmissionClass": "Euro 6",
"ContractID": "fb75eb53-46eb-450b-862e-6045002c3fa8",
"ShellTransactionID": "04176c5c-e7b2-49c8-bcb3-23d07ba583f2",
"TollOperator": "Toll4Europe",
"TollDomain": "Toll4Europe",
"TariffRelevantInformation": "Vehicle Class: 2, Axle Count: 2, Road Category: Motorway",
"AdditionalTransactionInfo": "Location:1",
"TCInvoiceNumber": "12343343",
"TCInvoiceDate": "20260123"
}
]
}API Endpoints Reference
Toll Transactions
| Endpoint | Method | Description |
|---|---|---|
| /toll-data/v1/transactions/search | POST | Retrieve toll transaction data with flexible filtering and pagination |
Common Use Cases:
- Retrieve toll transactions by date range
- Filter by invoice status (Invoiced, Uninvoiced, All)
- Search by vehicle registration number (VRN)
- Filter by card group
- Sort transactions by multiple criteria
- Select specific fields to optimize response size
Common Use Cases
This section maps common business scenarios to API usage patterns to help you quickly identify how to use the API for your specific needs.
Use Case 1: Daily Toll Transaction Reconciliation
Scenario: You need to reconcile all toll transactions from your fleet on a daily basis for accounting purposes.
Recommended API: /toll-data/v1/transactions/search
Why this API: This endpoint provides comprehensive toll transaction details with flexible date filtering, supports both invoiced and uninvoiced transactions, and includes pagination for large datasets. Perfect for daily reconciliation workflows.
Key Parameters:
FromDateandToDate- Set to yesterday's date for daily reconciliationSearch.InvoiceStatus- Use "All" to include both invoiced and uninvoiced transactionsPageSize- Set to 100 for efficient data retrievalFilter- Use "All" to get complete transaction details
Use Case 2: Invoice Validation and Verification
Scenario: You received an invoice and need to verify all toll transaction details and charges.
Recommended API: /toll-data/v1/transactions/search
Why this API: The API provides detailed toll transaction information including invoice numbers, dates, amounts, and toll network details. Ideal for invoice validation as it matches the invoice structure.
Key Parameters:
Search.InvoiceStatus- Set to "Invoiced" to retrieve only billed transactionsFromDateandToDate- Set to invoice period datesFilter- Specify fields like "InvoiceNumber, InvoiceDate, TransactionGrossAmount" for focused validation
Use Case 3: Fleet Vehicle Toll Usage Analysis
Scenario: You need to analyze toll usage patterns for specific vehicles in your fleet to optimize routes and reduce toll costs.
Recommended API: /toll-data/v1/transactions/search
Why this API: The API allows filtering by Vehicle Registration Number (VRN) and provides detailed route information including entry/exit points, distance driven, and toll charges. Perfect for vehicle-level analysis.
Key Parameters:
Search.VehicleRegistrationNumber- Specify the VRN to analyzeFromDateandToDate- Set to analysis period (e.g., last 30 days)SortOption- Use 1 (Transaction Date ascending) for chronological analysisFilter- Include fields like "RouteDescription, DistanceDriven, TollGateEntry, TollGateExit, TransactionGrossAmount"
Use Case 4: Card Group Expense Tracking
Scenario: You manage multiple card groups and need to track toll expenses by card group for budget allocation and cost center reporting.
Recommended API: /toll-data/v1/transactions/search
Why this API: The API supports filtering by card group and includes cost center information, making it ideal for expense tracking and reporting at the card group level.
Key Parameters:
Search.CardGroup- Specify the card group name or use "All" for all groupsFromDateandToDate- Set to reporting periodFilter- Include "CardGroupName, CostCenter, TransactionGrossAmount, TransactionNetAmount, TransactionTax"SortOption- Use 3 (Transaction Amount ascending) for expense analysis
Use Case 5: Multi-Account Toll Reporting
Scenario: You manage multiple accounts and need to generate consolidated toll reports across all accounts.
Recommended API: /toll-data/v1/transactions/search
Why this API: The API supports querying multiple accounts (2-5 recommended) in a single request, reducing API calls and improving performance for multi-account scenarios.
Key Parameters:
AccountNumber- Provide comma-separated account numbers (max 2-5 for optimal performance)FromDateandToDate- Set to reporting periodPageSize- Use larger page sizes (e.g., 100-500) for better performance
Use Case 6: Uninvoiced Transaction Monitoring
Scenario: You want to monitor unbilled toll transactions to forecast upcoming invoices and manage cash flow.
Recommended API: /toll-data/v1/transactions/search
Why this API: The API allows filtering by invoice status, making it easy to identify uninvoiced transactions and estimate upcoming charges.
Key Parameters:
Search.InvoiceStatus- Set to "Uninvoiced" for pending chargesFromDateandToDate- Set to current billing periodFilter- Include "TransactionDate, TransactionGrossAmount, AccountNumber, VehicleRegistration"
Use Case 7: Toll Network Usage Analysis
Scenario: You need to analyze which toll networks and operators your fleet uses most frequently to negotiate better rates or optimize routes.
Recommended API: /toll-data/v1/transactions/search
Why this API: The API provides detailed toll network information including network description, toll operator, toll charger code, and network code, perfect for network usage analysis.
Key Parameters:
FromDateandToDate- Set to analysis period (e.g., quarterly)Filter- Include "NetworkDescription, TollOperator, TollChargerCode, Network, TransactionGrossAmount"PageSize- Use larger page size for comprehensive data extraction
Usage Examples
Example 1: Search Toll Transactions by Account and Date Range
Request:
POST /toll-data/v1/transactions/search
{
"Filters": {
"ColCoCode": 86,
"PayerNumber": "NL20016398",
"AccountNumber": "NL20027701",
"Filter": "All",
"FromDate": "2026-01-01",
"ToDate": "2026-01-31"
},
"Page": 1,
"PageSize": 10
}Response:
{
"RequestId": "eb621f45-a543-4d9a-a934-2f223b263c42",
"Status": "SUCCESS",
"Page": 1,
"TotalRecords": 150,
"TotalPages": 15,
"PageSize": 10,
"Data": [
{
"NetworkDescription": "Societa Autostradali",
"TollChargerCode": "410|610",
"DelcoCode": "714",
"DelcoName": "Shell Fleet Solutions Consorzio",
"NetworkCode": "TLI",
"Network": "euroShell Consortio",
"PurchasedInCountry": "Italy",
"PurchasedInCountryCode": "IT",
"CardNumber": "707737*******334272",
"CardId": 123456789,
"CardGroupName": "Shell Fleet Solutions Consorzio",
"VehicleRegistration": "KN 00000",
"CostCenter": "100",
"SystemEntryDate": "20260123",
"SystemEntryTime": "13:14:25",
"TransactionDate": "20260120",
"TransactionTime": "10:30:00",
"PostingDate": "20260123",
"PostingTime": "00:00:00",
"PayerNumber": "NL20016398",
"AccountNumber": "NL20027701",
"AccountName": "Test Account Name",
"StartDate": "20260120",
"StartTime": "06:47:41",
"EndDate": "20260120",
"EndTime": "07:30:15",
"TollGateEntry": "ROMA NORD",
"TollGateExit": "BRENNERO",
"DistanceDriven": "71.6",
"RouteDescription": "ROMA NORD - BRENNERO",
"TransactionType": "Road tax",
"ProductCode": "14",
"ProductDescription": "Road tax",
"TransactionNetAmount": "127.1",
"TransactionTax": "0.0",
"TransactionGrossAmount": "127.1",
"TransactionCurrencyCode": "EUR",
"TransactionStatus": "Reporting",
"InvoiceNumber": "8600397548",
"InvoiceDate": "20260125",
"InvoiceStatus": "Invoiced",
"PaymentMethod": "Post Pay",
"OBUSerialNumber": "00049000000836932426",
"EmissionClass": "Euro 6",
"ContractID": "fb75eb53-46eb-450b-862e-6045002c3fa8",
"ShellTransactionID": "04176c5c-e7b2-49c8-bcb3-23d07ba583f2",
"TollOperator": "Toll4Europe",
"TollDomain": "Toll4Europe",
"TariffRelevantInformation": "Vehicle Class: 2, Axle Count: 2, Road Category: Motorway",
"AdditionalTransactionInfo": "Location:1",
"TCInvoiceNumber": "12343343",
"TCInvoiceDate": "20260123"
}
]
}Example 2: Filter Transactions by Vehicle Registration Number (VRN)
Request:
POST /toll-data/v1/transactions/search
{
"Filters": {
"ColCoCode": 86,
"PayerNumber": "NL20016398",
"AccountNumber": "NL20027701",
"Filter": "VehicleRegistration, RouteDescription, TransactionGrossAmount, TransactionDate",
"FromDate": "2026-01-01",
"ToDate": "2026-03-31",
"Search": {
"VehicleRegistrationNumber": "KN 00000",
"InvoiceStatus": "All"
}
},
"Page": 1,
"PageSize": 50
}Response:
{
"RequestId": "9d2dee33-7803-485a-a2b1-2c7538e597ee",
"Status": "SUCCESS",
"Page": 1,
"TotalRecords": 45,
"TotalPages": 1,
"PageSize": 50,
"Data": [
{
"VehicleRegistration": "KN 00000",
"RouteDescription": "ROMA NORD - BRENNERO",
"TransactionGrossAmount": "127.1",
"TransactionDate": "20260120"
},
{
"VehicleRegistration": "KN 00000",
"RouteDescription": "MILANO EST - VERONA SUD",
"TransactionGrossAmount": "85.4",
"TransactionDate": "20260125"
}
]
}Example 3: Search by Card Group
Request:
POST /toll-data/v1/transactions/search
{
"Filters": {
"ColCoCode": 86,
"PayerNumber": "NL20016398",
"AccountNumber": "NL20027701",
"Filter": "CardGroupName, VehicleRegistration, TransactionGrossAmount, TransactionDate",
"FromDate": "2026-01-01",
"ToDate": "2026-01-31",
"Search": {
"CardGroup": "Shell Fleet Solutions Consorzio",
"InvoiceStatus": "All"
}
},
"Page": 1,
"PageSize": 30
}Response:
{
"RequestId": "5f1bded6-416d-4478-ab7f-33905d7b5d4b",
"Status": "SUCCESS",
"Page": 1,
"TotalRecords": 87,
"TotalPages": 3,
"PageSize": 30,
"Data": [
{
"CardGroupName": "Shell Fleet Solutions Consorzio",
"VehicleRegistration": "KN 00000",
"TransactionGrossAmount": "127.1",
"TransactionDate": "20260120"
},
{
"CardGroupName": "Shell Fleet Solutions Consorzio",
"VehicleRegistration": "LM 11111",
"TransactionGrossAmount": "95.8",
"TransactionDate": "20260122"
}
]
}Example 4: Multiple Accounts with Specific Fields
Request:
POST /toll-data/v1/transactions/search
{
"Filters": {
"ColCoCode": 86,
"PayerNumber": "NL20016398",
"AccountNumber": "NL20027701, NL20027702",
"Filter": "AccountNumber, AccountName, TransactionDate, TransactionGrossAmount, VehicleRegistration",
"FromDate": "2026-01-01",
"ToDate": "2026-01-31"
},
"Page": 1,
"PageSize": 100
}Response:
{
"RequestId": "eb621f45-a543-4d9a-a934-2f223b263c42",
"Status": "SUCCESS",
"Page": 1,
"TotalRecords": 245,
"TotalPages": 3,
"PageSize": 100,
"Data": [
{
"AccountNumber": "NL20027701",
"AccountName": "Test Account Name",
"TransactionDate": "20260120",
"TransactionGrossAmount": "127.1",
"VehicleRegistration": "KN 00000"
},
{
"AccountNumber": "NL20027702",
"AccountName": "Second Account Name",
"TransactionDate": "20260121",
"TransactionGrossAmount": "98.5",
"VehicleRegistration": "PQ 22222"
}
]
}Error Handling
Common Error Codes
| HTTP Status | Error Code | Description | Solution |
|---|---|---|---|
| 200 | N/A | Status: SUCCESS | N/A |
| 400 | E0001 | Validation Error | Check request parameters, ensure required fields are provided and valid |
| 401 | E0003 | Unauthorized | Verify OAuth token is valid and not expired |
| 404 | E0005 | Not Found | Verify endpoint URL and resource exists |
| 500 | E0002 | Unknown Error / Internal Server Error | Contact support with RequestId |
| 503 | E0012 | Service Unavailable / Connectivity Error | Retry after some time, if problem persists contact support |
Error Response Example
Validation Error (E0001):
{
"RequestId": "eb621f45-a543-4d9a-a934-2f223b263c42",
"Status": "FAILED",
"Errors": [
{
"Code": "E0001",
"Title": "Validation Error",
"Detail": "Missing / Invalid value(s) for: ColCoCode",
"AdditionalInfo": null
}
]
}Unauthorized Error (E0003):
{
"RequestId": "eb621f45-a543-4d9a-a934-2f223b263c42",
"Status": "FAILED",
"Errors": [
{
"Code": "E0003",
"Title": "Unauthorized",
"Detail": "Supplied credentials are invalid or user does not have access to the operation",
"AdditionalInfo": null
}
]
}Best Practices
1. Use OAuth 2.0 Authentication
IMPORTANT: Always use OAuth 2.0 authentication. Implement proper token management:
- Cache access tokens and reuse until expiry
- Refresh tokens before they expire (recommended 60 seconds before)
- Store client credentials securely (use environment variables or secrets manager)
- Never log or expose access tokens in client-side code
2. Always Include RequestId
Always include a unique RequestId (UUID format) in the header for end-to-end traceability. This is crucial for troubleshooting and support.
3. Implement Error Handling
Implement robust error handling:
- Check the Status field in every response
- Log RequestId for troubleshooting
- Implement retry logic for transient errors (503)
- Handle validation errors (E0001) by checking input parameters
Support & Resources
Technical Support
- Support: Shell Technical Support
- Email: api@shell.com
Documentation
Getting Help
When contacting support, provide:
- Your client_id (never share your client_secret or access tokens)
- RequestId from the API response
- Timestamp of the request
- Environment (Production/Test)
- Error codes and messages received
Last Updated: August 4, 2026
Document Version: 1.0
API Version: 1.0.0
