Kupowanie i zwalnianie numeru
Kupno numeru wymaga dwóch wywołań: wyszukaj w danym kraju, co jest w sprzedaży, a potem zamów wybrany numer. Wszystkie operacje opisane tutaj wymagają klucza API z uprawnieniem numbers, a pierwszy zakup w organizacji wymaga weryfikacji tożsamości.
Wyszukaj kraj
Wyszukiwanie jest zawsze ograniczone do jednego kraju, więc country_code jest wymagany. Zawęź wyniki za pomocą number_type, capabilities lub prefix z cyframi krajowymi.
// 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);
}# The search is always country-scoped, so country_code is required.
page = client.numbers.available.list(country_code="GB", capabilities=["sms", "voice"])
for candidate in page.data:
print(candidate.number, candidate.number_type)for candidate, err := range client.Numbers.Available.List(context.Background(), bird.NumbersAvailableListParams{
CountryCode: "GB",
Capabilities: []string{"sms", "voice"},
}) {
if err != nil {
log.Fatal(err)
}
fmt.Println(candidate.Number, candidate.NumberType)
}// The search is always country-scoped, so country_code is required.
$page = $bird->numbers->available->list([
'country_code' => 'GB',
'capabilities' => ['sms', 'voice'],
]);
foreach ($page as $candidate) {
echo $candidate->getNumber(), ' ', $candidate->getNumberType(), "\n";
}curl "https://us1.platform.bird.com/v1/numbers/available?country_code=GB" \
-H "Authorization: Bearer bk_us1_..."Użyj hosta regionalnego odpowiadającego prefiksowi bk_{region}_ Twojego klucza: https://us1.platform.bird.com lub https://eu1.platform.bird.com.
Każdy wynik zawiera tylko to, czego potrzebujesz, żeby wybrać numer:
Przykład kodu
{
"data": [
{
"number": "+447700900123",
"country_code": "GB",
"number_type": "mobile",
"capabilities": ["sms", "voice"]
}
],
"next_cursor": null,
"prev_cursor": null
}Nasz własny inwentarz jest zwracany jako pierwszy i stronicuje się normalnie. Ostatnia strona może zawierać numery oferowane na bieżąco przez operatora, więc numer widoczny chwilę temu może być już niedostępny w momencie składania zamówienia.
Aby potwierdzić, że numer jest wciąż dostępny przed złożeniem zamówienia, odczytaj go za pomocą GET /v1/numbers/available/{number}. 404 oznacza, że numer nie jest obecnie dostępny do zakupu, bez względu na to, czy operator go wycofał, czy nasz własny magazyn ma go zarezerwowany. Ponowne sprawdzenie korzysta z tego samego limitu żądań numbers_availability co wyszukiwanie, więc sprawdzaj ponownie tylko kandydata, którego zamierzasz zamówić, a nie każdy wynik.
Zamów numer
Przekaż numer z wyników wyszukiwania do POST /v1/numbers/orders. Aby zabezpieczyć ponowne próby, zobacz Idempotentność.
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);
}order = client.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 completed or failed.
if order.status == "completed":
print("allocated as", order.number_id)
else:
print("still", order.status, "; poll", order.id)order, err := client.Numbers.Orders.Create(context.Background(), bird.NumbersOrdersCreateParams{
Number: "+447700900201",
})
if err != nil {
log.Fatal(err)
}
// An order that has to wait on a carrier comes back without a NumberId.
// Poll it until it is completed or failed.
fmt.Println(order.Status, order.Id)$order = $bird->numbers->orders->create(
(new NumbersOrderCreate())->setNumber('+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->getStatus() === 'completed') {
echo 'allocated as ', $order->getNumberId(), "\n";
} else {
echo 'still ', $order->getStatus(), '; poll ', $order->getId(), "\n";
}curl -X POST "https://us1.platform.bird.com/v1/numbers/orders" \
-H "Authorization: Bearer bk_us1_..." \
-H "Content-Type: application/json" \
-d '{"number": "+447700900123"}'Większość zamówień kończy się w ramach żądania i zwraca 201 z numerem już przypisanym do Ciebie:
Przykład kodu
{
"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 to identyfikator do wszystkiego, co następuje dalej: odczytu numeru i jego zwolnienia.
Odpytuj zamówienie, które się nie zakończyło
Zamówienie, które musi czekać na operatora, zwraca 202, a number_id ma nadal wartość null. Odpytuj je, aż status przyjmie wartość completed lub 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 ?? "");order = client.numbers.orders.get("nor_01krdgeqcxet5s7t44vh8rt9mg")
# failure_reason says what went wrong, and only ever on a failed order.
print(order.status, order.failure_reason or "")order, err := client.Numbers.Orders.Get(context.Background(), "nor_01krdgeqcxet5s7t44vh8rt9mg")
if err != nil {
log.Fatal(err)
}
// FailureReason says what went wrong, and only ever on a failed order.
fmt.Println(order.Status)$order = $bird->numbers->orders->get('nor_01krdgeqcxet5s7t44vh8rt9mg');
// failure_reason says what went wrong, and only ever on a failed order.
echo $order->getStatus(), ' ', $order->getFailureReason() ?? '', "\n";curl "https://us1.platform.bird.com/v1/numbers/orders/nor_01m0da22b0e39anhzyhtw3gzdg" \
-H "Authorization: Bearer bk_us1_..."Zamówienie przechodzi przez charging, ordering i pending, zanim się ustabilizuje. Przy failed pole failure_reason opisuje, co poszło nie tak, prostym językiem. Pobrana opłata konfiguracyjna nie jest zwracana, więc nieudane zamówienie może zostawić po sobie obciążenie. Skontaktuj się z pomocą techniczną, jeśli tak się stanie.
Zwolnij numer
Zwolnienie zatrzymuje miesięczną opłatę i numer przestaje dla Ciebie działać. Zwolnić można tylko numer ze statusem dedicated, a zwolniony numer nie wraca od razu do sprzedaży.
// 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");# Releasing stops the monthly charge and the number stops working for you.
# Only a dedicated number can be released; a shared one answers E14002.
client.numbers.release("nda_01krdgeqcxet5s7t44vh8rt9mg")// Only a dedicated number can be released; a shared one answers E14002.
if err := client.Numbers.Release(context.Background(), "nda_01krdgeqcxet5s7t44vh8rt9mg"); err != nil {
log.Fatal(err)
}// Releasing stops the monthly charge and the number stops working for you.
// Only a dedicated number can be released; a shared one answers E14002.
$bird->numbers->release('nda_01krdgeqcxet5s7t44vh8rt9mg');curl -X DELETE "https://us1.platform.bird.com/v1/numbers/nda_7eqywfwzxwa1za9n8wp7e1xkr8" \
-H "Authorization: Bearer bk_us1_..."Pomyślne zwolnienie zwraca 204 bez treści odpowiedzi.
Kiedy zamówienie zostaje odrzucone
Cztery rodzaje odrzuceń obejmują niemal każdy nieudany zakup.
402 z E03000 oznacza, że portfel nie pokrywa kosztu numeru. Doładuj konto i zamów ponownie. Zamówienie nie zostaje utworzone, więc nic nie jest naliczane.
412 oznacza, że organizacja nie ukończyła weryfikacji tożsamości wymaganej przy pierwszym zakupie. Ukończ ją, a potem spróbuj ponownie.
409 z E14000 oznacza, że numer został zajęty, gdy go wybierałeś. Wyszukaj ponownie i wybierz inny.
409 z E14001 oznacza, że zbyt wiele Twoich zamówień jest już w trakcie realizacji. Poczekaj, aż jedno się zakończy, a potem zamów ponownie.
Następne kroki
- Przegląd numerów wyjaśnia, co oznaczają poszczególne pola numeru.
- Dokumentacja API numerów API opisuje każdą operację i pole.
- Idempotentność wyjaśnia, jak klucze zabezpieczają ponawiane zamówienie.
Powiązane zasoby
Przejdź do dokumentacji, przewodników i przykładów dotyczących tego tematu.