Bitcall logoBitcall API
Add your Key ID and Secret to send test requests.

Find a service

GET
/v1/otp/services/{service}

Returns the offers for a service across countries and pools — one row per offer, each with the serviceId you send to POST /v1/otp/activations. The path segment addresses either one offer, by the serviceId a catalogue response published (ALPHA-372-alibaba) — matched exactly, and a 404 when no such offer is sellable to you — or any service by name, as free text (viber, alibaba) matched case-insensitively against a service name or slug. A name that matches nothing is an empty data array with meta.total 0, not a 404: no result is a result. Offers with no numbers in stock are omitted either way, so a sold-out offer id 404s.

Authorization

KeyId ApiSecret
x-key-id<token>

Your API key id.

In: header

x-api-secret<token>

Your API key secret.

In: header

Path Parameters

service*string

A service name, slug, or any substring of one (viber, alibaba, openai), matched case-insensitively — or one offer’s serviceId exactly as a catalogue response published it (ALPHA-372-alibaba), which addresses that single offer and 404s when it is not sellable to you.

Length1 <= length

Query Parameters

page?integer
Default1
Range1 <= value <= 10000
pageSize?integer
Default50
Range1 <= value <= 200

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/v1/otp/services/viber?page=1&pageSize=50"
{
  "data": [
    {
      "serviceId": "string",
      "name": "string",
      "slug": "string",
      "price": {
        "amount": 0,
        "currency": "string"
      },
      "availableCount": 0,
      "country": {
        "countryCode": "string",
        "name": "string",
        "flag": "string"
      }
    }
  ],
  "meta": {
    "page": -9007199254740991,
    "pageSize": -9007199254740991,
    "total": -9007199254740991,
    "totalPages": -9007199254740991,
    "hasNext": true
  }
}
{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "The request is not valid. See `fields` for what to correct.",
    "requestId": "9f1c7b2e-…"
  }
}
{
  "error": {
    "code": "AUTHENTICATION_REQUIRED",
    "message": "This endpoint requires an API key.",
    "requestId": "9f1c7b2e-…"
  }
}
{
  "error": {
    "code": "NOT_FOUND",
    "message": "No such resource.",
    "requestId": "9f1c7b2e-…"
  }
}
{
  "error": {
    "code": "CONFLICT",
    "message": "The resource is not in a state that allows this operation.",
    "requestId": "9f1c7b2e-…"
  }
}
{
  "error": {
    "code": "RATE_LIMITED",
    "message": "Too many requests. Retry after the interval in `Retry-After`.",
    "requestId": "9f1c7b2e-…"
  }
}
{
  "error": {
    "code": "INTERNAL_ERROR",
    "message": "Something went wrong on our side.",
    "requestId": "9f1c7b2e-…"
  }
}
{
  "error": {
    "code": "SERVICE_RESPONSE_INVALID",
    "message": "The upstream service returned an unexpected response.",
    "requestId": "9f1c7b2e-…"
  }
}
{
  "error": {
    "code": "SERVICE_UNAVAILABLE",
    "message": "The service is temporarily unavailable. Try again shortly.",
    "requestId": "9f1c7b2e-…"
  }
}