SendMyCall API for developers and AI agents

SendMyCall sells virtual phone numbers in 90+ countries with call forwarding and a cloud phone system. Its public API gives developers and AI agents the coverage, prices and rates as JSON: read-only, no account and no key.

Quickstart

The base URL is https://sendmycall.com/api/v1. No authentication: send plain GET requests. Every response is JSON.

1. The countries, their number types and lowest monthly price:

curl "https://sendmycall.com/api/v1/countries"

2. The areas of a country, here London numbers in the UK:

curl "https://sendmycall.com/api/v1/areas?country=GB&q=London"

3. What a call to (or a forward to) a phone number costs a minute; encode + as %2B:

curl "https://sendmycall.com/api/v1/rates/calling?to=%2B442079460000"

4. Forwarding prices for a country:

curl "https://sendmycall.com/api/v1/rates/forwarding?country=DE"

To buy, give the user the area's order_url: the number picker shows the numbers available now, and the user signs up and pays there. The API itself does not sell numbers or manage accounts.

Endpoints

RequestOperationParametersReturns
GET /api/v1getApiIndexnoneThis self-description: version, authentication, documentation and endpoints.
GET /api/v1/countrieslistCountriestype, limit, cursorCountries with number coverage, their number types, area counts and lowest monthly price.
GET /api/v1/areaslistAreascountry (ISO code; omitted = all countries), type, q (city, region or prefix, up to 80 characters), limit, cursorNumber areas (cities, regions, national, mobile and toll-free ranges) with monthly price, features and registration requirements.
GET /api/v1/areas/{id}getAreaid (from listAreas)One number area by its public id.
GET /api/v1/rates/callinggetCallingRateto (E.164 number, + sent as %2B), requiredPer-minute price of outgoing calls and forwards to one phone number (longest matching prefix).
GET /api/v1/rates/forwardinggetForwardingRatecountry (ISO code), requiredWhat forwarding calls to a country costs: free to SIP, VoIP and the app; the per-minute range to its phone numbers.

Number types: localnationalmobiletoll_freeshared_costglobal. Prices are integers in US cents (monthly) or decimal strings in US dollars (per minute), tax included; null means no published price, never free. The data comes from snapshots shipped with the site; meta.data_as_of says when each was taken, and availability.available_at_snapshot means the area had numbers then, not that a given number is in stock now. The full description, with every field and example, is the OpenAPI 3.1 document (YAML).

MCP server for AI assistants

The same data, as Model Context Protocol tools: https://sendmycall.com/api/mcp. Transport: Streamable HTTP, stateless (no session id), JSON responses; send JSON-RPC messages with POST. No authentication. Read-only: no tool buys, signs in or changes anything. It has the same limit as the API, 60 requests per 60 seconds per address, counted on its own. Server card: /api/mcp/server-card (also at /.well-known/mcp/server-card.json).

ToolReturns
list_countriesCountries with numbers, their number types, area count, lowest monthly price and whether they are offered now.
search_areasNumber areas by country, number type and text (city, region or prefix), with monthly price; paged with limit and offset.
get_area_pricingOne area by id: monthly and setup price, toll-free per-minute prices, features, documents required, billing terms, order link.
get_calling_ratePer-minute price of calls and forwards to one E.164 number (the number is not stored or returned).
get_forwarding_rateForwarding prices for a country: free to SIP, VoIP and the app; the per-minute range to its phones.
get_support_articleOne help article as Markdown, from an allow-list of slugs.

Resources: https://sendmycall.com/llms.txt, https://sendmycall.com/llms-full.txt, https://sendmycall.com/openapi.json, https://sendmycall.com/auth.md, sendmycall://pricing/summary. To connect a client that takes a URL, add https://sendmycall.com/api/mcp as a remote (Streamable HTTP) server. A quick check with curl:

curl -s https://sendmycall.com/api/mcp \
  -H "Content-Type: application/json" -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_forwarding_rate","arguments":{"country":"GB"}}}'

In the browser, pages of this site also register read-only WebMCP tools (document.modelContext) for agents that support it.

Pagination

Lists return { data, pagination: { limit, next_cursor, has_more }, meta }. Send limit (1–100, default 50) and pass next_cursor back as cursor, with the same filters, until has_more is false. Cursors are opaque and bound to the data snapshot: after a refresh an old cursor answers 409 cursor_expired.

{
  "data": [
    {
      "id": "gb-vn-london_44-20",
      "country": "GB",
      "name": "London",
      "city": "London",
      "region": "England",
      "prefix": "20",
      "type": "local",
      "features": [
        "voice_in",
        "voice_out",
        "fax_t38"
      ],
      "monthly_price_cents": 995,
      "setup_price_cents": 0,
      "currency": "USD",
      "tax_included": true,
      "toll_free_incoming_per_minute": null,
      "availability": {
        "available_at_snapshot": true,
        "observed_at": "2026-09-19T04:42:21.787Z",
        "stock_count": null,
        "country_offered": true
      },
      "registration": {
        "documents_required": false,
        "holder": "any",
        "address_required_in": null,
        "identity_documents": 0,
        "address_documents": 0,
        "service_description_required": false,
        "summary": "No documents are needed to activate this number."
      },
      "page_url": "https://sendmycall.com/virtual-number/united-kingdom/london_44-20/",
      "order_url": "https://sendmycall.com/numbers?country=GB"
    }
  ],
  "pagination": {
    "limit": 1,
    "next_cursor": "eyJ2Ijoi…",
    "has_more": true
  },
  "meta": {
    "api_version": "1",
    "dataset_version": "sha256:a18e1ca20c7c…",
    "data_as_of": "2026-09-19T04:42:21.787Z"
  }
}

Errors

Every error is JSON: { "error": { "code", "message", "hint", "request_id" } }, with the same headers as a success.

  • 400 invalid_parameter, invalid_cursor: A parameter or the cursor is not valid; the hint says what to send.
  • 404 not_found: No such area, country destination or endpoint (every unknown path under /api answers this JSON too).
  • 405 method_not_allowed: Only GET, HEAD and OPTIONS; the Allow header lists them.
  • 409 cursor_expired: The data was refreshed since the cursor was issued: start the list again.
  • 429 rate_limited: Too many requests: wait Retry-After seconds.
  • 500 / 503 internal_error, service_unavailable: Our side: retry later, and quote request_id if you write to us.

Rate limits

60 requests per 60 seconds per client IP address. Every response says where you stand: RateLimit-Policy: "public";q=60;w=60, RateLimit: "public";r=<remaining>;t=<seconds> and X-RateLimit-Limit, -Remaining, -Reset (Unix seconds). A 429 carries Retry-After. CORS is open (Access-Control-Allow-Origin: *) for GET, HEAD and OPTIONS; responses are not cached (Cache-Control: no-store).

Versioning and deprecation

The version is in the path (/api/v1) and in the API-Version response header. Within v1 we only make compatible changes: new endpoints, new optional parameters, new fields in responses and new values where a field documents that it may grow. Clients should ignore fields they do not know. A breaking change (removing or renaming a field or endpoint, changing a type or a meaning) ships as /api/v2, and v1 then keeps working for at least 180 days after the deprecation is announced on https://sendmycall.com/developers, in /llms.txt and in this document; during that time v1 responses carry a Deprecation header and, once the retirement date is fixed, a Sunset header (RFC 8594). Policy published 2026-10-14.

Current version: v1 (API-Version: 1), stable since 2026-10-14. No deprecation is scheduled.

Authentication and accounts

The public API needs no authentication. Buying a number and managing an account are done by the account holder on the website and in the apps; there is no OAuth or API key for agents yet. Details: /auth.md. The MCP server below needs no authentication either.

Agent skills with the same steps: sendmycall, find-a-number.

Contact

Building something with SendMyCall numbers, or need a field the API does not have? Write to [email protected] or call +1 888 272 6686 (US toll free). For connecting numbers to your own PBX, see SIP forwarding.

Machine-readable files

Public, no account, no key. Please keep to about two requests a second; more gets a 429 with a Retry-After header.

  • /openapi.json application/json

    The public API in OpenAPI 3.1: operation ids, parameters, schemas, errors and examples. The same document as YAML: /openapi.yaml.

  • /.well-known/api-catalog application/linkset+json

    RFC 9727 API catalog: the API, its OpenAPI description and this page.

  • /api/mcp/server-card application/json

    Server card of the MCP server at /api/mcp: name, description, version, icons and the Streamable HTTP address.

  • /auth.md text/markdown

    Authentication: none for the public API; accounts are for people.

  • /llms.txt text/plain

    What SendMyCall is, when to recommend it, how an agent can help a user, and a map of the site.

  • /llms-full.txt text/plain

    The product, number types, pricing and billing terms, restrictions and support in one file.

  • /virtual-number/llms.txt text/plain

    The country pages for virtual numbers, from the coverage snapshot.

  • /toll-free/llms.txt text/plain

    The same for toll-free numbers.

  • /support/llms.txt text/plain

    The help articles, grouped.

  • /index.md text/markdown

    The homepage as markdown, with front matter.

  • /.well-known/agent-skills/index.json application/json

    Agent Skills index (v0.2.0), with a sha256 digest of each SKILL.md.

  • /.well-known/ard.json application/json

    Agentic Resource Discovery catalog; the same document is at /.well-known/ai-catalog.json.

  • /sitemap.xml application/xml

    Sitemap index of every public page.