SMS-ActSMS·Act
ServicesRechargerGuideDocsAPI
ConnexionSe connecter / S'inscrire
SMS·Act

Louez de vrais numéros dans plus de 160 pays/régions pour plus de 600 services. Vous ne payez que pour les codes reçus — sans abonnement ni minimum.

Services
  • Services
  • Tarifs
  • Guide
  • API développeurs
  • Docs
Mentions légales et support
  • À propos de la plateforme
  • Fonctionnement et politiques
  • Conditions du service
  • Politique de confidentialité
  • Nous contacter

© 2023-2026 SMS-Act La plateforme de vérification SMS en ligne leader mondiale

Pays/Régions · Services

API développeurs

SMS-Act API

Commandez des numéros, recevez des codes de vérification et obtenez des remboursements depuis votre propre code. Une API REST concise aux erreurs prévisibles.

Obtenir une clé d’accèsTélécharger la spécification OpenAPI

Sur cette page

  • Démarrage rapide
  • Exemple complet
  • Authentification
  • Conventions
  • Endpoints
  • Objets
  • Codes d’erreur

Démarrage rapide

  1. 1Générez une clé d’accès dans l’onglet « API » de votre compte et conservez-la sur votre serveur.
  2. 2Choisissez un service et un pays avec GET /services et GET /services/{service}/countries.
  3. 3Commandez un numéro avec POST /activations, puis interrogez GET /activations/{id} jusqu’à ce que status vaille completed et lisez code.
  4. 4Pas de code ? Annulez avec POST /activations/{id}/cancel pour un remboursement intégral, ou laissez la commande expirer.

Exemple complet

Commande un numéro, interroge le statut toutes les 5 secondes et affiche le code. Si aucun code n'arrive en 10 minutes, l'activation est annulée et remboursée. Définissez la variable d'environnement SMS_ACT_KEY avec votre clé d'accès, puis lancez le script.

pip install requests
SMS_ACT_KEY=your_key python sms_act_example.py
import os
import time
import uuid

import requests

BASE_URL = "https://sms-act.net/sms/open-api/v1"
SESSION = requests.Session()
SESSION.headers["X-Access-Key"] = os.environ["SMS_ACT_KEY"]


def call(method, path, **kwargs):
    resp = SESSION.request(method, BASE_URL + path, timeout=30, **kwargs)
    body = resp.json()
    if resp.status_code >= 400:
        err = body["error"]
        raise RuntimeError(f"{err['code']}: {err['message']} (requestId={err['requestId']})")
    return body["data"]


# 1. Order a number. The Idempotency-Key makes network retries safe.
activation = call(
    "POST",
    "/activations",
    json={"service": "wa", "countryId": 6},
    headers={"Idempotency-Key": str(uuid.uuid4())},
)
print("Phone number:", activation["phoneNumber"])

# 2. Poll every 5 seconds until the code arrives (or give up after 10 minutes).
deadline = time.time() + 10 * 60
while activation["status"] == "waiting" and time.time() < deadline:
    time.sleep(5)
    activation = call("GET", f"/activations/{activation['id']}")

# 3. No code in time: cancel for a full refund.
if activation["status"] == "waiting":
    try:
        activation = call("POST", f"/activations/{activation['id']}/cancel")
    except RuntimeError:
        # The code may have arrived just before cancelling; read the final state.
        activation = call("GET", f"/activations/{activation['id']}")

if activation["status"] == "completed":
    print("Code:", activation["code"])
else:
    print("No code received; the activation was cancelled and refunded.")
# Node.js 18+
SMS_ACT_KEY=your_key node sms_act_example.mjs
import { randomUUID } from "node:crypto";

const BASE_URL = "https://sms-act.net/sms/open-api/v1";
const ACCESS_KEY = process.env.SMS_ACT_KEY;
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));

async function call(method, path, { body, headers = {} } = {}) {
  const resp = await fetch(BASE_URL + path, {
    method,
    headers: { "X-Access-Key": ACCESS_KEY, "Content-Type": "application/json", ...headers },
    body: body ? JSON.stringify(body) : undefined,
  });
  const json = await resp.json();
  if (!resp.ok) {
    const { code, message, requestId } = json.error;
    throw new Error(`${code}: ${message} (requestId=${requestId})`);
  }
  return json.data;
}

// 1. Order a number. The Idempotency-Key makes network retries safe.
let activation = await call("POST", "/activations", {
  body: { service: "wa", countryId: 6 },
  headers: { "Idempotency-Key": randomUUID() },
});
console.log("Phone number:", activation.phoneNumber);

// 2. Poll every 5 seconds until the code arrives (or give up after 10 minutes).
const deadline = Date.now() + 10 * 60 * 1000;
while (activation.status === "waiting" && Date.now() < deadline) {
  await sleep(5000);
  activation = await call("GET", `/activations/${activation.id}`);
}

// 3. No code in time: cancel for a full refund.
if (activation.status === "waiting") {
  try {
    activation = await call("POST", `/activations/${activation.id}/cancel`);
  } catch {
    // The code may have arrived just before cancelling; read the final state.
    activation = await call("GET", `/activations/${activation.id}`);
  }
}

if (activation.status === "completed") {
  console.log("Code:", activation.code);
} else {
  console.log("No code received; the activation was cancelled and refunded.");
}

Authentification

Envoyez votre clé d’accès dans l’en-tête X-Access-Key pour chaque requête sauf /health. Toute personne disposant de la clé peut dépenser votre solde : ne la divulguez jamais. En cas de fuite, renouvelez-la immédiatement dans votre compte.

URL de base

https://sms-act.net/sms/open-api/v1

Conventions

Réponses

Les réponses réussies utilisent HTTP 2xx et placent les données dans data. Les erreurs utilisent HTTP 4xx ou 5xx avec un objet error contenant code, message, requestId et des details facultatifs.

Gestion des erreurs

Basez-vous sur error.code, jamais sur message. Indiquez le requestId (également dans l’en-tête X-Request-Id) lorsque vous contactez le support.

Cycle de vie d’une commande

Une commande commence en waiting, passe à completed à la réception du code, ou à cancelled si vous l’annulez ou si elle est annulée automatiquement faute de code (en général après 15 minutes environ, au plus tard à expiresAt, 20 minutes après la création). Les commandes annulées sont toujours intégralement remboursées.

Interrogation

Interrogez GET /activations/{id} toutes les 3 secondes au minimum. Une interrogation plus rapide ne provoque pas d’erreur mais renvoie seulement le dernier état connu.

Idempotence

Envoyez un en-tête Idempotency-Key (par exemple un UUID) avec POST /activations. Réessayer avec la même valeur sous 24 heures renvoie la commande d’origine sans nouveau débit.

Limites de requêtes

Chaque clé peut envoyer 60 requêtes par tranche de 10 secondes. Au-delà, vous recevez 429 RATE_LIMITED avec un en-tête Retry-After. Les échecs d'authentification sont aussi limités par IP : après environ 20 tentatives échouées en une minute, toutes les requêtes de cette IP (même avec une clé valide) reçoivent 429 jusqu'à la fin de cette minute.

Commandes simultanées et limite quotidienne d'échecs

Au plus 3 activations peuvent être en statut waiting en même temps (les commandes passées sur le site comptent aussi). Au-delà, POST /activations renvoie 409 PENDING_LIMIT_REACHED ; attendez qu'une activation se termine ou annulez-en une. Quand 15 activations échouent dans la journée (l'annulation et l'expiration automatique comptent) et que moins de 10 % de celles du jour ont réussi, il n'est plus possible de commander jusqu'au lendemain (403 ACTIVATIONS_RESTRICTED). Pour un compte neuf qui n'a jamais reçu de code, cela fait au plus 14 échecs par jour. Pendant l'intégration, évitez de commander puis d'annuler à la suite.

Solde

Créer une commande nécessite un solde minimum, indiqué par minBalanceToOrder dans GET /account/balance. Les autres endpoints restent disponibles avec un solde faible.

Formats

Les ID de commande sont des chaînes, les dates sont au format RFC 3339 (UTC) et les prix en crédits. Les listes acceptent page et pageSize (1–100) et renvoient pagination.

Endpoints

Les descriptions des endpoints et des champs proviennent de la spécification OpenAPI et sont en anglais.

Get account balance

GET/account/balance

Réponses

data: Balance

  • 200Current balance.
  • 401UNAUTHORIZED — missing, invalid or revoked Access Key.
  • 403ACCOUNT_SUSPENDED. POST /activations may also return DAILY_LIMIT_REACHED (details.failedToday, details.blockThreshold) or ACTIVATIONS_RESTRICTED.
  • 429RATE_LIMITED — wait Retry-After seconds.
  • 500INTERNAL_ERROR — unexpected server error. Nothing was charged and it is safe to retry (use the same Idempotency-Key for POST /activations).

Exemple de requête

curl -X GET "https://sms-act.net/sms/open-api/v1/account/balance" \
  -H "X-Access-Key: $SMS_ACT_KEY"

Exemple de réponse

{
  "data": {
    "balance": 92,
    "currency": "credits",
    "minBalanceToOrder": 60
  }
}

List services that can be ordered

GET/services

Paramètres

  • pageintegerquery

    (≥ 1, default 1)

  • pageSizeintegerquery

    (1–100, default 20)

  • qstringquery

    Case-insensitive search on service code or name. (max length 50)

NomEmplacementTypeObligatoireDescription
pagequeryintegerNon(≥ 1, default 1)
pageSizequeryintegerNon(1–100, default 20)
qquerystringNonCase-insensitive search on service code or name. (max length 50)

Réponses

data: Service[] + pagination

  • 200A page of services.
  • 400INVALID_REQUEST — a parameter is missing or malformed (details.field).
  • 401UNAUTHORIZED — missing, invalid or revoked Access Key.
  • 403ACCOUNT_SUSPENDED. POST /activations may also return DAILY_LIMIT_REACHED (details.failedToday, details.blockThreshold) or ACTIVATIONS_RESTRICTED.
  • 429RATE_LIMITED — wait Retry-After seconds.
  • 500INTERNAL_ERROR — unexpected server error. Nothing was charged and it is safe to retry (use the same Idempotency-Key for POST /activations).

Exemple de requête

curl -X GET "https://sms-act.net/sms/open-api/v1/services" \
  -H "X-Access-Key: $SMS_ACT_KEY"

Exemple de réponse

{
  "data": [
    {
      "code": "wa",
      "name": "Whatsapp"
    }
  ],
  "pagination": {
    "page": 1,
    "pageSize": 20,
    "total": 1
  }
}

List countries

GET/countries

Paramètres

  • pageintegerquery

    (≥ 1, default 1)

  • pageSizeintegerquery

    (1–100, default 20)

  • qstringquery

    Case-insensitive search on English name or ISO code. (max length 50)

NomEmplacementTypeObligatoireDescription
pagequeryintegerNon(≥ 1, default 1)
pageSizequeryintegerNon(1–100, default 20)
qquerystringNonCase-insensitive search on English name or ISO code. (max length 50)

Réponses

data: Country[] + pagination

  • 200A page of countries.
  • 400INVALID_REQUEST — a parameter is missing or malformed (details.field).
  • 401UNAUTHORIZED — missing, invalid or revoked Access Key.
  • 403ACCOUNT_SUSPENDED. POST /activations may also return DAILY_LIMIT_REACHED (details.failedToday, details.blockThreshold) or ACTIVATIONS_RESTRICTED.
  • 429RATE_LIMITED — wait Retry-After seconds.
  • 500INTERNAL_ERROR — unexpected server error. Nothing was charged and it is safe to retry (use the same Idempotency-Key for POST /activations).

Exemple de requête

curl -X GET "https://sms-act.net/sms/open-api/v1/countries" \
  -H "X-Access-Key: $SMS_ACT_KEY"

Exemple de réponse

{
  "data": [
    {
      "id": 6,
      "iso2": "ID",
      "name": "Indonesia"
    }
  ],
  "pagination": {
    "page": 1,
    "pageSize": 20,
    "total": 1
  }
}

List countries where a service can be ordered

GET/services/{service}/countries

Includes the price and a best-effort availability hint. Not paginated.

Paramètres

  • servicestringObligatoirepath
NomEmplacementTypeObligatoireDescription
servicepathstringOui

Réponses

data: ServiceCountry[]

  • 200Orderable countries for the service.
  • 401UNAUTHORIZED — missing, invalid or revoked Access Key.
  • 403ACCOUNT_SUSPENDED. POST /activations may also return DAILY_LIMIT_REACHED (details.failedToday, details.blockThreshold) or ACTIVATIONS_RESTRICTED.
  • 404ACTIVATION_NOT_FOUND or NOT_FOUND.
  • 429RATE_LIMITED — wait Retry-After seconds.
  • 500INTERNAL_ERROR — unexpected server error. Nothing was charged and it is safe to retry (use the same Idempotency-Key for POST /activations).

Exemple de requête

curl -X GET "https://sms-act.net/sms/open-api/v1/services/wa/countries" \
  -H "X-Access-Key: $SMS_ACT_KEY"

Exemple de réponse

{
  "data": [
    {
      "countryId": 6,
      "iso2": "ID",
      "countryName": "Indonesia",
      "price": {
        "amount": 8,
        "currency": "credits"
      },
      "available": true
    }
  ]
}

List activations created through the API

GET/activations

Paramètres

  • pageintegerquery

    (≥ 1, default 1)

  • pageSizeintegerquery

    (1–100, default 20)

  • status"waiting" | "completed" | "cancelled"query
NomEmplacementTypeObligatoireDescription
pagequeryintegerNon(≥ 1, default 1)
pageSizequeryintegerNon(1–100, default 20)
statusquery"waiting" | "completed" | "cancelled"Non

Réponses

data: Activation[] + pagination

  • 200A page of activations, newest first.
  • 400INVALID_REQUEST — a parameter is missing or malformed (details.field).
  • 401UNAUTHORIZED — missing, invalid or revoked Access Key.
  • 403ACCOUNT_SUSPENDED. POST /activations may also return DAILY_LIMIT_REACHED (details.failedToday, details.blockThreshold) or ACTIVATIONS_RESTRICTED.
  • 429RATE_LIMITED — wait Retry-After seconds.
  • 500INTERNAL_ERROR — unexpected server error. Nothing was charged and it is safe to retry (use the same Idempotency-Key for POST /activations).

Exemple de requête

curl -X GET "https://sms-act.net/sms/open-api/v1/activations" \
  -H "X-Access-Key: $SMS_ACT_KEY"

Exemple de réponse

{
  "data": [
    {
      "id": "2348810953",
      "status": "completed",
      "service": "wa",
      "serviceName": "Whatsapp",
      "countryId": 6,
      "countryName": "Indonesia",
      "phoneNumber": "+6281234567890",
      "code": "482915",
      "price": {
        "amount": 8,
        "currency": "credits"
      },
      "createdAt": "2026-10-08T09:30:00Z",
      "expiresAt": "2026-10-08T09:50:00Z",
      "completedAt": "2026-10-08T09:31:12Z",
      "cancelledAt": null
    }
  ],
  "pagination": {
    "page": 1,
    "pageSize": 20,
    "total": 1
  }
}

Order a phone number

POST/activations

Charges price.amount credits. Nothing is charged if the request fails.

Paramètres

  • Idempotency-Keystringheader

    Strongly recommended. Replaying the same key within 24 hours returns the original activation instead of ordering again. (max length 64)

NomEmplacementTypeObligatoireDescription
Idempotency-KeyheaderstringNonStrongly recommended. Replaying the same key within 24 hours returns the original activation instead of ordering again. (max length 64)

Corps de la requête

  • servicestringObligatoire
  • countryIdintegerObligatoire

    (≥ 0)

NomTypeObligatoireDescription
servicestringOui
countryIdintegerOui(≥ 0)

Réponses

data: ActivationCreated

  • 200Idempotent replay — the activation created by an earlier request with the same Idempotency-Key.
  • 201Activation created.
  • 400INVALID_REQUEST — a parameter is missing or malformed (details.field).
  • 401UNAUTHORIZED — missing, invalid or revoked Access Key.
  • 402INSUFFICIENT_BALANCE — details.balance, details.required.
  • 403ACCOUNT_SUSPENDED. POST /activations may also return DAILY_LIMIT_REACHED (details.failedToday, details.blockThreshold) or ACTIVATIONS_RESTRICTED.
  • 409NO_NUMBERS_AVAILABLE, PENDING_LIMIT_REACHED (details.pending, details.limit), ACTIVATION_NOT_CANCELLABLE or IDEMPOTENCY_IN_PROGRESS.
  • 422UNSUPPORTED_SERVICE_COUNTRY or IDEMPOTENCY_KEY_REUSED.
  • 429RATE_LIMITED — wait Retry-After seconds.
  • 500INTERNAL_ERROR — unexpected server error. Nothing was charged and it is safe to retry (use the same Idempotency-Key for POST /activations).
  • 502UPSTREAM_ERROR — the number provider failed. Nothing was charged and it is safe to retry.

Exemple de requête

curl -X POST "https://sms-act.net/sms/open-api/v1/activations" \
  -H "X-Access-Key: $SMS_ACT_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"service":"wa","countryId":6}'

Exemple de réponse

{
  "data": {
    "id": "2348810953",
    "status": "waiting",
    "service": "wa",
    "serviceName": "Whatsapp",
    "countryId": 6,
    "countryName": "Indonesia",
    "phoneNumber": "+6281234567890",
    "code": null,
    "price": {
      "amount": 8,
      "currency": "credits"
    },
    "createdAt": "2026-10-08T09:30:00Z",
    "expiresAt": "2026-10-08T09:50:00Z",
    "completedAt": null,
    "cancelledAt": null
  }
}

Get an activation (poll this for the code)

GET/activations/{id}

Paramètres

  • idstringObligatoirepath
NomEmplacementTypeObligatoireDescription
idpathstringOui

Réponses

data: Activation

  • 200The activation. code is set once status is completed.
  • 401UNAUTHORIZED — missing, invalid or revoked Access Key.
  • 403ACCOUNT_SUSPENDED. POST /activations may also return DAILY_LIMIT_REACHED (details.failedToday, details.blockThreshold) or ACTIVATIONS_RESTRICTED.
  • 404ACTIVATION_NOT_FOUND or NOT_FOUND.
  • 429RATE_LIMITED — wait Retry-After seconds.
  • 500INTERNAL_ERROR — unexpected server error. Nothing was charged and it is safe to retry (use the same Idempotency-Key for POST /activations).

Exemple de requête

curl -X GET "https://sms-act.net/sms/open-api/v1/activations/2348810953" \
  -H "X-Access-Key: $SMS_ACT_KEY"

Exemple de réponse

{
  "data": {
    "id": "2348810953",
    "status": "completed",
    "service": "wa",
    "serviceName": "Whatsapp",
    "countryId": 6,
    "countryName": "Indonesia",
    "phoneNumber": "+6281234567890",
    "code": "482915",
    "price": {
      "amount": 8,
      "currency": "credits"
    },
    "createdAt": "2026-10-08T09:30:00Z",
    "expiresAt": "2026-10-08T09:50:00Z",
    "completedAt": "2026-10-08T09:31:12Z",
    "cancelledAt": null
  }
}

Cancel an activation and get a full refund

POST/activations/{id}/cancel

Allowed only while waiting. Cancelling an already cancelled activation succeeds.

Paramètres

  • idstringObligatoirepath
NomEmplacementTypeObligatoireDescription
idpathstringOui

Réponses

data: Activation

  • 200The cancelled activation.
  • 401UNAUTHORIZED — missing, invalid or revoked Access Key.
  • 403ACCOUNT_SUSPENDED. POST /activations may also return DAILY_LIMIT_REACHED (details.failedToday, details.blockThreshold) or ACTIVATIONS_RESTRICTED.
  • 404ACTIVATION_NOT_FOUND or NOT_FOUND.
  • 409NO_NUMBERS_AVAILABLE, PENDING_LIMIT_REACHED (details.pending, details.limit), ACTIVATION_NOT_CANCELLABLE or IDEMPOTENCY_IN_PROGRESS.
  • 429RATE_LIMITED — wait Retry-After seconds.
  • 500INTERNAL_ERROR — unexpected server error. Nothing was charged and it is safe to retry (use the same Idempotency-Key for POST /activations).
  • 502UPSTREAM_ERROR — the number provider failed. Nothing was charged and it is safe to retry.

Exemple de requête

curl -X POST "https://sms-act.net/sms/open-api/v1/activations/2348810953/cancel" \
  -H "X-Access-Key: $SMS_ACT_KEY"

Exemple de réponse

{
  "data": {
    "id": "2348810953",
    "status": "cancelled",
    "service": "wa",
    "serviceName": "Whatsapp",
    "countryId": 6,
    "countryName": "Indonesia",
    "phoneNumber": "+6281234567890",
    "code": null,
    "price": {
      "amount": 8,
      "currency": "credits"
    },
    "createdAt": "2026-10-08T09:30:00Z",
    "expiresAt": "2026-10-08T09:50:00Z",
    "completedAt": null,
    "cancelledAt": "2026-10-08T09:35:00Z"
  }
}

Health check

GET/healthSans authentification

Réponses

  • 200Service is up.

Exemple de requête

curl -X GET "https://sms-act.net/sms/open-api/v1/health"

Exemple de réponse

{
  "status": "ok",
  "version": "1.5.0"
}

Objets

Activation

  • idstringObligatoire
  • status"waiting" | "completed" | "cancelled"Obligatoire
  • servicestringObligatoire
  • serviceNamestringObligatoire
  • countryIdinteger | nullObligatoire

    Null only for a few legacy activations created before the country was recorded.

  • countryNamestring | nullObligatoire

    English name. Null in the same cases as countryId.

  • phoneNumberstringObligatoire

    E.164 format.

  • codestring | nullObligatoire

    The verification code, set when status is completed.

  • priceMoneyObligatoire
  • createdAtstringObligatoire
  • expiresAtstringObligatoire

    Upper bound: if no code arrives, the activation is cancelled and refunded automatically, usually after about 15 minutes and at the latest by this time.

  • completedAtstring | nullObligatoire
  • cancelledAtstring | nullObligatoire
NomTypeObligatoireDescription
idstringOui
status"waiting" | "completed" | "cancelled"Oui
servicestringOui
serviceNamestringOui
countryIdinteger | nullOuiNull only for a few legacy activations created before the country was recorded.
countryNamestring | nullOuiEnglish name. Null in the same cases as countryId.
phoneNumberstringOuiE.164 format.
codestring | nullOuiThe verification code, set when status is completed.
priceMoneyOui
createdAtstringOui
expiresAtstringOuiUpper bound: if no code arrives, the activation is cancelled and refunded automatically, usually after about 15 minutes and at the latest by this time.
completedAtstring | nullOui
cancelledAtstring | nullOui

ActivationCreated

Returned by POST /activations. Same as Activation, optionally with a warning.

  • idstringObligatoire
  • status"waiting" | "completed" | "cancelled"Obligatoire
  • servicestringObligatoire
  • serviceNamestringObligatoire
  • countryIdinteger | nullObligatoire

    Null only for a few legacy activations created before the country was recorded.

  • countryNamestring | nullObligatoire

    English name. Null in the same cases as countryId.

  • phoneNumberstringObligatoire

    E.164 format.

  • codestring | nullObligatoire

    The verification code, set when status is completed.

  • priceMoneyObligatoire
  • createdAtstringObligatoire
  • expiresAtstringObligatoire

    Upper bound: if no code arrives, the activation is cancelled and refunded automatically, usually after about 15 minutes and at the latest by this time.

  • completedAtstring | nullObligatoire
  • cancelledAtstring | nullObligatoire
  • warningActivationWarning

    The activation was created and charged; this is only a heads-up. Do not retry because of it.

NomTypeObligatoireDescription
idstringOui
status"waiting" | "completed" | "cancelled"Oui
servicestringOui
serviceNamestringOui
countryIdinteger | nullOuiNull only for a few legacy activations created before the country was recorded.
countryNamestring | nullOuiEnglish name. Null in the same cases as countryId.
phoneNumberstringOuiE.164 format.
codestring | nullOuiThe verification code, set when status is completed.
priceMoneyOui
createdAtstringOui
expiresAtstringOuiUpper bound: if no code arrives, the activation is cancelled and refunded automatically, usually after about 15 minutes and at the latest by this time.
completedAtstring | nullOui
cancelledAtstring | nullOui
warningActivationWarningNonThe activation was created and charged; this is only a heads-up. Do not retry because of it.

ActivationWarning

The activation was created and charged; this is only a heads-up. Do not retry because of it.

  • code"DAILY_FAILURE_WARNING"Obligatoire
  • failedTodayintegerObligatoire
  • blockThresholdintegerObligatoire

    Ordering is blocked for the rest of the day once this many activations have failed.

  • messagestringObligatoire
NomTypeObligatoireDescription
code"DAILY_FAILURE_WARNING"Oui
failedTodayintegerOui
blockThresholdintegerOuiOrdering is blocked for the rest of the day once this many activations have failed.
messagestringOui

Service

  • codestringObligatoire
  • namestringObligatoire
NomTypeObligatoireDescription
codestringOui
namestringOui

Country

  • idintegerObligatoire
  • iso2string | nullObligatoire

    ISO 3166-1 alpha-2. Several countries may share a code (e.g. virtual and physical US numbers) — always order by id.

  • namestringObligatoire
NomTypeObligatoireDescription
idintegerOui
iso2string | nullOuiISO 3166-1 alpha-2. Several countries may share a code (e.g. virtual and physical US numbers) — always order by id.
namestringOui

ServiceCountry

  • countryIdintegerObligatoire
  • iso2string | nullObligatoire
  • countryNamestringObligatoire
  • priceMoneyObligatoire
  • availablebooleanObligatoire

    Best-effort stock hint. true does not guarantee a number; false means ordering will most likely fail with NO_NUMBERS_AVAILABLE.

NomTypeObligatoireDescription
countryIdintegerOui
iso2string | nullOui
countryNamestringOui
priceMoneyOui
availablebooleanOuiBest-effort stock hint. true does not guarantee a number; false means ordering will most likely fail with NO_NUMBERS_AVAILABLE.

Balance

  • balancenumberObligatoire

    May contain decimals.

  • currency"credits"Obligatoire
  • minBalanceToOrdernumberObligatoire

    Minimum balance required to create an activation.

NomTypeObligatoireDescription
balancenumberOuiMay contain decimals.
currency"credits"Oui
minBalanceToOrdernumberOuiMinimum balance required to create an activation.

Money

  • amountnumberObligatoire
  • currency"credits"Obligatoire
NomTypeObligatoireDescription
amountnumberOui
currency"credits"Oui

Pagination

  • pageintegerObligatoire

    (≥ 1)

  • pageSizeintegerObligatoire

    (1–100)

  • totalintegerObligatoire

    (≥ 0)

NomTypeObligatoireDescription
pageintegerOui(≥ 1)
pageSizeintegerOui(1–100)
totalintegerOui(≥ 0)

Codes d’erreur

Les erreurs réessayables peuvent disparaître si vous renvoyez la même requête plus tard. Utilisez le même Idempotency-Key pour réessayer POST /activations.

  • INVALID_REQUESTHTTP 400Réessayable: NonA parameter is missing or malformed. details.field names it.
  • UNAUTHORIZEDHTTP 401Réessayable: NonThe X-Access-Key header is missing, invalid or the key was revoked.
  • INSUFFICIENT_BALANCEHTTP 402Réessayable: NonBalance is below the minimum required to create activations. Top up and retry.
  • ACCOUNT_SUSPENDEDHTTP 403Réessayable: NonThe account that owns the key has been suspended.
  • DAILY_LIMIT_REACHEDHTTP 403Réessayable: NonToo many activations failed today (cancelled orders count as failures). Ordering resumes tomorrow. With the default limits, a new account that has never received a code can fail up to 14 times a day; see ACTIVATIONS_RESTRICTED.
  • ACTIVATIONS_RESTRICTEDHTTP 403Réessayable: NonOrdering is restricted for today due to an abnormal failure pattern: 15 or more failures with a success rate below 10%, for any account. cancelled orders (manual or automatic timeout) count as failures.
  • ACTIVATION_NOT_FOUNDHTTP 404Réessayable: NonThe activation does not exist or belongs to another account.
  • NOT_FOUNDHTTP 404Réessayable: NonThe endpoint or service does not exist.
  • NO_NUMBERS_AVAILABLEHTTP 409Réessayable: OuiNo numbers right now for this service and country. Retry in a minute or try another country.
  • PENDING_LIMIT_REACHEDHTTP 409Réessayable: OuiToo many activations are still waiting for a code (at most 3 at a time, counting orders placed on the website too). Wait for one to finish or cancel it.
  • ACTIVATION_NOT_CANCELLABLEHTTP 409Réessayable: NonThe activation already received a code and cannot be cancelled.
  • IDEMPOTENCY_IN_PROGRESSHTTP 409Réessayable: OuiA request with the same Idempotency-Key is still being processed.
  • UNSUPPORTED_SERVICE_COUNTRYHTTP 422Réessayable: NonThis service cannot be ordered in this country. See GET /services/{service}/countries.
  • IDEMPOTENCY_KEY_REUSEDHTTP 422Réessayable: NonThe Idempotency-Key was already used with a different request body.
  • RATE_LIMITEDHTTP 429Réessayable: OuiToo many requests: more than 60 per 10 seconds on one key, too many failed authentication attempts from one IP, or another order from the same account is still being created. Wait for the number of seconds in Retry-After.
  • UPSTREAM_ERRORHTTP 502Réessayable: OuiThe number provider failed. Nothing was charged.
  • INTERNAL_ERRORHTTP 500Réessayable: OuiUnexpected server error. Nothing was charged. Retry with the same Idempotency-Key.