Sign inGet Started

Acheter et libérer un numéro

L'achat d'un numéro nécessite deux appels : recherchez dans un pays ce qui est en vente, puis commandez celui que vous voulez. Tout ici requiert une clé API avec le scope numbers, et le premier achat dans une organisation nécessite une vérification d'identité.

Rechercher dans un pays

La recherche porte toujours sur un seul pays, donc country_code est obligatoire. Affinez-la avec number_type, capabilities, ou un prefix de chiffres nationaux.
// The search is always country-scoped, so country_code is required.
const page = await bird.numbers.available.list({
  country_code: "GB",
  capabilities: ["sms", "voice"],
});
for (const candidate of page.data) {
  console.log(candidate.number, candidate.number_type);
}
Utilisez l'hôte régional correspondant au préfixe bk_{region}_ de votre clé : https://us1.platform.bird.com ou https://eu1.platform.bird.com.
Chaque résultat ne contient que ce dont vous avez besoin pour en choisir un :
Exemple de code
{
  "data": [
    {
      "number": "+447700900123",
      "country_code": "GB",
      "number_type": "mobile",
      "capabilities": ["sms", "voice"]
    }
  ],
  "next_cursor": null,
  "prev_cursor": null
}
Notre propre inventaire est renvoyé en premier et paginé normalement. La dernière page peut inclure des numéros qu'un opérateur propose en temps réel ; un numéro listé il y a un instant peut donc déjà être pris au moment où vous le commandez.
Pour vérifier qu'un numéro est encore disponible avant de le commander, relisez-le avec GET /v1/numbers/available/{number}. Un 404 signifie qu'il n'est pas actuellement en vente, que l'opérateur l'ait retiré ou que notre propre inventaire l'ait réservé. La revérification utilise la même limite de débit numbers_availability que la recherche : ne revérifiez donc que le candidat que vous êtes sur le point de commander, pas chaque résultat.

Commander le numéro

Transmettez un numéro issu de la recherche à POST /v1/numbers/orders. Pour la protection contre les nouvelles tentatives, voir Idempotency.
const order = await bird.numbers.orders.create({ number: "+447700900201" });
// Most orders finish inside the request. One that has to wait on a carrier
// comes back without a number_id. Poll it until it is completed or failed.
if (order.status === "completed") {
  console.log("allocated as", order.number_id);
} else {
  console.log("still", order.status, "; poll", order.id);
}
La plupart des commandes aboutissent dans la requête et répondent 201 avec le numéro déjà à vous :
Exemple de code
{
  "id": "nor_01m0da22b0e39anhzyhtw3gzdg",
  "number": "+447700900123",
  "country_code": "GB",
  "number_type": "mobile",
  "status": "completed",
  "number_id": "nda_7eqywfwzxwa1za9n8wp7e1xkr8",
  "failure_reason": null,
  "completed_at": "2026-08-19T15:25:56.479320Z",
  "created_at": "2026-08-19T15:25:56.448051Z",
  "updated_at": "2026-08-19T15:25:56.479320Z"
}
number_id est l'identifiant pour tout ce qui suit : lire le numéro et le libérer.

Interroger une commande qui n'a pas abouti

Une commande qui doit attendre un opérateur répond 202 à la place, avec number_id encore à null. Relisez-la jusqu'à ce que status soit completed ou failed.
const order = await bird.numbers.orders.get("nor_01krdgeqcxet5s7t44vh8rt9mg");
// failure_reason says what went wrong, and only ever on a failed order.
console.log(order.status, order.failure_reason ?? "");
Une commande passe par charging, ordering et pending avant de se stabiliser. En cas de failed, failure_reason indique ce qui a échoué en termes clairs. Des frais d'installation déjà prélevés ne sont pas remboursés : une commande échouée peut donc laisser un montant facturé ; contactez le support si cela se produit.

Libérer un numéro

La libération arrête la facturation mensuelle et le numéro cesse de fonctionner pour vous. Seul un numéro dedicated peut être libéré, et un numéro libéré ne repart pas directement en vente.
// Releasing stops the monthly charge and the number stops working for you.
// Only a dedicated number can be released; a shared one answers E14002.
await bird.numbers.release("nda_01krdgeqcxet5s7t44vh8rt9mg");
Une libération réussie répond 204 sans corps.

Quand une commande est refusée

Quatre refus couvrent la quasi-totalité des achats échoués.
402 avec E03000 signifie que le portefeuille ne peut pas couvrir le numéro. Rechargez-le et commandez à nouveau. Aucune commande n'est créée, donc rien n'est facturé.
412 signifie que l'organisation n'a pas complété la vérification d'identité requise pour un premier achat. Complétez-la, puis réessayez.
409 avec E14000 signifie que le numéro a disparu pendant que vous le choisissiez. Relancez une recherche et choisissez-en un autre.
409 avec E14001 signifie que trop de vos commandes sont déjà en cours. Attendez qu'une aboutisse, puis commandez à nouveau.

Étapes suivantes