A free, hosted mock telecom API for developers, system integrators and solution architects. Every endpoint speaks canonical TM Forum Open API, mirrors your request payloads, calculates real quote and order totals, and routes payment outcomes from the card details you send. Point your client at it and start integrating today.
Thirteen TM Forum specifications, plus authentication, reference data and engine administration.
Not a static JSON server. Payloads are mirrored, totals computed and payment outcomes decided from your input.
One header exercises your error paths — eleven scenarios, every one returning a TMF630 error body.
Runs on Cloudflare Workers. Millisecond cold starts, served from the nearest colo. No signup.
Telecom integration work has a chicken-and-egg problem: the BSS environment you need to develop against is usually the last thing to become available, and when it does arrive it is shared, rate-limited and full of data you are not allowed to touch. A telecom API sandbox removes that dependency. You get stable, realistic, TMF-shaped responses on day one, so front-office portals, partner integrations, CPQ flows and billing reconciliation can all be built and tested in parallel with the real platform.
This sandbox is built for the cases that usually block a team:
Every resource follows the canonical TMF model — @type discriminators, href
self-links, relatedParty[], Money and TimePeriod structures —
so clients written against a real operator's TMF gateway work here unchanged.
| Specification | Domain | Path prefix |
|---|---|---|
| TMF620 | Product Catalog Management | /tmf-api/productCatalogManagement/v4 |
| TMF622 | Product Ordering Management | /tmf-api/productOrderingManagement/v4 |
| TMF629 | Customer Management | /tmf-api/customerManagement/v4 |
| TMF637 | Product Inventory | /tmf-api/productInventory/v4 |
| TMF640 | Service Inventory | /tmf-api/serviceInventoryManagement/v4 |
| TMF648 | Quote Management | /tmf-api/quoteManagement/v4 |
| TMF651 | Agreement Management | /tmf-api/agreementManagement/v4 |
| TMF666 | Billing Account Management | /tmf-api/accountManagement/v4 |
| TMF676 | Payment & Payment Method | /tmf-api/paymentManagement/v1 |
| TMF678 | Customer Bill Management | /tmf-api/customerBillManagement/v4 |
| TMF630 | Common error structure | every failure response |
Three demo clients ship with the sandbox: developer, demo and admin. No registration.
curl -X POST https://telco-mock-api.pages.dev/auth/token \
-H 'Content-Type: application/json' \
-d '{"clientId":"developer","clientSecret":"dev-sandbox-2026"}'
curl -H "Authorization: Bearer $TOKEN" \ https://telco-mock-api.pages.dev/tmf-api/productCatalogManagement/v4/productOffering
Submit product offerings and quantities to the quote calculator and get a fully-priced TMF648 Quote back. Unit prices are resolved from the live catalogue, per-line discounts apply, and a 20% VAT is split across recurring and one-time subtotals. The order flow adds a 10% special communication tax on mobile lines, itemised separately. The arithmetic is deterministic — identical requests produce identical totals.
curl -X POST https://telco-mock-api.pages.dev/tmf-api/quoteManagement/v4/quote/calculate \
-H "Authorization: Bearer $TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"customerId": "cust-1001",
"currency": "TRY",
"quoteItem": [
{ "productOfferingId": "offer-infinity-fiber", "quantity": 1 },
{ "productOfferingId": "offer-pro-mobile", "quantity": 2, "discountPercentage": 10 }
]
}'
The payment decision engine reads the card number, CVV and amount, then returns an approval, a decline with an ISO reason code, a 3-D Secure challenge or a fraud hold. First match wins. Raw card numbers are never echoed back — only the masked form and the last four digits.
| Trigger | Outcome | HTTP | Code |
|---|---|---|---|
Card ends in 0002 | Declined — insufficient funds | 402 | 51 |
Card ends in 0036 | 3-D Secure challenge | 202 | 3DS_REQUIRED |
Card ends in 0069 | Declined — invalid card | 402 | 14 |
BIN starts with 9 | Declined — general decline | 402 | 99 |
CVV equals 000 | Declined — CVV invalid | 402 | 82 |
| Amount > 10 000 | Held for fraud review | 202 | FRAUD_REVIEW |
| Amount > 50 000 | Declined — limit exceeded | 402 | 61 |
| Anything else | Approved | 201 | 00 |
Send X-Mock-Scenario on any request to force an error path without touching your
client code. Every response body follows the TMF630 common error structure, so your error
handling is exercised exactly as it would be against a real gateway.
| Header value | HTTP | Notes |
|---|---|---|
not-found | 404 | TMF630 error body |
validation-error | 400 | TMF630 error body |
unauthorized | 401 | TMF630 error body |
forbidden | 403 | TMF630 error body |
conflict | 409 | TMF630 error body |
payment-declined | 402 | TMF630 error body |
insufficient-funds | 422 | TMF630 error body |
timeout | 504 | Response is delayed before failing |
server-error | 500 | TMF630 error body |
service-unavailable | 503 | TMF630 error body |
curl -H "Authorization: Bearer $TOKEN" \ -H "X-Mock-Scenario: timeout" \ https://telco-mock-api.pages.dev/tmf-api/productCatalogManagement/v4/catalog
A mock telco API is a stand-in server that speaks the same contracts as a real telecom BSS — product catalog, quoting, ordering, billing and payments — without any of the backing systems. You point your integration at it during development so you can build and test against realistic responses long before a real operator environment is available to you.
Thirteen specifications: TMF620 Product Catalog, TMF622 Product Ordering, TMF629 Customer Management, TMF637 Product Inventory, TMF640 Service Inventory, TMF648 Quote Management, TMF651 Agreement Management, TMF666 Billing Account, TMF676 Payment and Payment Method, and TMF678 Customer Bill — plus a reference-data surface and an engine-administration API. Errors follow the TMF630 common error structure.
It is free and there is no signup. Three demo clients ship with the sandbox; call POST /auth/token with clientId 'developer' and clientSecret 'dev-sandbox-2026' to get a JWT that unlocks every endpoint for an hour.
Yes. This is not a static JSON file server. Request fields are mirrored into responses, quote and order totals are genuinely calculated from the catalogue price list with discounts and tax applied, and payment outcomes are routed by a decision engine reading the card number, CVV and amount. Two identical requests give identical totals; different requests give different answers.
Send the X-Mock-Scenario header on any request. Eleven values are accepted — not-found, validation-error, unauthorized, forbidden, conflict, payment-declined, insufficient-funds, timeout, server-error and service-unavailable — each returning the mapped HTTP status with a TMF630-shaped error body. Your client code does not change; only the header does.
A card ending in 0002 declines for insufficient funds, 0069 declines as an invalid card, and 0036 triggers a 3-D Secure challenge. A CVV of 000 fails CVV verification, any BIN starting with 9 returns a general decline, amounts above 10,000 are held for fraud review and amounts above 50,000 exceed the card limit. Anything else is approved.
It is fine for functional and contract testing in CI pipelines. A fair-use policy of 100 requests per minute per client keeps the shared instance responsive, so it is not suited to load testing. For that, clone the repository and run your own instance — it deploys to Cloudflare Pages in a single command, or run it locally with npm run dev.
None of it. There are no corporate identifiers, no real customer records, no PSP-specific fields and no operator-specific characteristic codes. Demo customers are obviously synthetic and demo email addresses use the reserved .invalid TLD. Card numbers are never persisted, and only the masked form and last four digits are ever returned.
If an endpoint returns something unexpected, a response does not match the TMF spec, or you would like a scenario or field added — get in touch. Reports are welcome and usually get a quick turnaround.
X-Request-Id response header — it correlates the callX-Mock-Scenario header you were using