# Sprawdzanie numeru telefonu

Jedno wywołanie odpowiada, czym jest numer. Wszystko tutaj wymaga klucza API z uprawnieniem `lookup`.

## Wykonaj podstawowe sprawdzanie

Wyślij sam numer. Podstawowe sprawdzanie jest zawsze rozliczane jednorazowo i zawsze zwraca kraj, sieć obsługującą, sieć wydającą oraz ogólny typ linii.

**TypeScript**

```typescript
const answer = await bird.lookup.phoneNumber({
  phone_number: "+31612345678",
  type: ["classification", "score"],
});
console.log(answer.country_code, answer.line_type);
// Only a block whose status is ok carries a value, and only that one is billed.
if (answer.score?.status === "ok") console.log(answer.score.value);
```

Examples: [TypeScript](/pl-pl/dokumentacja/guides/lookup/phone-numbers.ts.md) · [Python](/pl-pl/dokumentacja/guides/lookup/phone-numbers.py.md) · [Go](/pl-pl/dokumentacja/guides/lookup/phone-numbers.go.md) · [PHP](/pl-pl/dokumentacja/guides/lookup/phone-numbers.php.md) · [CLI](/pl-pl/dokumentacja/guides/lookup/phone-numbers.cli.md) · [MCP](/pl-pl/dokumentacja/guides/lookup/phone-numbers.mcp.md) · [cURL](/pl-pl/dokumentacja/guides/lookup/phone-numbers.curl.md)

## Jak zapisać numer

Wyślij kod kraju, a potem numer krajowy. Początkowy `+` jest opcjonalny i `00` działa w jego miejsce, więc `+31612345678`, `31612345678` i `0031612345678` to ten sam numer.

Numer zapisany w formacie krajowym, bez kodu kraju, jest odrzucany zamiast zgadywany. `0612345678` zwraca [`E22000`](/docs/api/errors/E22000), ponieważ dodanie kodu kraju wskazałoby prawdziwy numer gdzieś indziej i zostałbyś obciążony za jego sprawdzenie.

## Co zwraca bazowe sprawdzenie

`country_code` to kraj numeru, nieobecny, gdy numer nie należy do jednego kraju, jak w przypadku zakresu niegeograficznego.

`network_info` to sieć aktualnie obsługująca numer, a `original_network_info` to sieć, która przydzieliła jego zakres. Te dwie różnią się, gdy numer został przeniesiony, i wtedy `flags` zawiera `ported`.

`line_type` określa rodzaj linii numeru: `mobile`, `fixed_line`, `voip`, `toll_free`, `premium_rate`, `satellite`, `pager`, `payphone`, `m2m`, `service`, `other` lub `unknown`. `unknown` oznacza, że platforma operatora nie posiada klasyfikacji dla tego zakresu; `other` oznacza, że posiada klasyfikację bez odpowiednika tutaj. Aby uzyskać przydzieloną usługę z większą dokładnością, zażądaj właściwości `classification`. Odpowiada ona z innego źródła z szerszym słownikiem i jest raportowana oddzielnie, więc zawsze odróżnisz jedną od drugiej.

## Dodaj właściwości

Wymień żądane właściwości w `type`. Każda jest rozliczana osobno i tylko po dostarczeniu.

| Właściwość       | Co zwraca                                                                                  |
| ---------------- | ------------------------------------------------------------------------------------------ |
| `classification` | Dokładna przydzielona usługa zakresu: stawka premium, satelita, M2M, automat telefoniczny. |
| `porting`        | Kiedy numer ostatnio zmienił sieć i pełna historia przeniesień.                            |
| `presence`       | Czy numer jest aktywny w sieci.                                                            |
| `roaming`        | Czy numer jest w roamingu i w jakiej sieci.                                                |
| `sim_swap`       | Kiedy ostatnio zmieniono kartę SIM.                                                        |
| `score`          | Ocena wiarygodności od 0 do 100.                                                           |

`classification`, `porting` i `score` odczytują zapisane dane i odpowiadają szybko. `presence`, `roaming` i `sim_swap` odpytują sieć na żywo, więc są wolniejsze, a ich pokrycie zależy od operatora. Spodziewaj się `unavailable` lub `inconclusive` dla nich częściej niż dla tych opartych na zapisanych danych.

Dwie właściwości odpowiadają na pytania, które bazowe sprawdzenie już porusza, ale z wyższą rozdzielczością. `porting` podaje datę i pełną historię, podczas gdy flaga `ported` bazowego sprawdzenia mówi jedynie, czy przeniesienie kiedykolwiek miało miejsce. `classification` rozwiązuje `line_type` do dokładnej przydzielonej usługi.

## Odczytaj status przed wartością

Każdy blok właściwości zawiera `status`, a tylko `ok` niesie wartość.

```json
{
  "phone_number": "+441904123456",
  "country_code": "GB",
  "line_type": "service",
  "classification": {
    "status": "ok",
    "value": "premium_rate"
  },
  "score": {
    "status": "unavailable"
  }
}
```

W tej odpowiedzi zostałeś obciążony za bazowe sprawdzenie i za `classification`. Nie zostałeś obciążony za `score`.

Odczytaj `status` jako pierwsze i traktuj każdą wartość inną niż `ok` jako "not answered". To otwarty słownik, więc nierozpoznana wartość to przyszły status, nie błąd.

Dwa bloki zwracają zakres zamiast dokładnej wartości, gdy sieć jej nie udostępnia. `sim_swap` zwraca `min_days` i `max_days` zamiast `last_swapped_at`, gdy znany jest tylko przedział czasowy. `porting` ustawia `last_ported_at_is_approximate`, gdy rejestr odnotowuje okres przeniesienia, ale nie konkretny dzień.

Jedno pole wygląda jak wynik negatywny, ale jest ustaleniem pozytywnym: `porting.ported` ustawione na `false` oznacza, że rejestr został odpytany i nie zawiera przeniesienia dla tego numeru, a nie że niczego nie dało się sprawdzić. Właśnie do tego służy `status`.

## Spróbuj ponownie bez podwójnej opłaty

Sprawdzenie jest płatne, więc ponowione żądanie nie może kupić drugiej odpowiedzi. Wyślij `Idempotency-Key`, a powtórzenie tego samego żądania odtworzy zapisaną odpowiedź zamiast uruchamiać nowe sprawdzenie. Zobacz [Idempotentność](/docs/guides/idempotency).

Forma `GET` tej operacji, która umieszcza numer w URL-u, nie może zawierać klucza idempotentności. Używaj formy `POST` do wszystkiego, co jest zautomatyzowane.

## Błędy

| Kod                                 | Co się stało                                                                                                   |
| ----------------------------------- | -------------------------------------------------------------------------------------------------------------- |
| [`E22000`](/docs/api/errors/E22000) | Numer nie jest prawidłowym numerem telefonu w formacie międzynarodowym. Nic nie zostało naliczone.             |
| [`E22001`](/docs/api/errors/E22001) | Portfel organizacji nie pokrywa kosztów sprawdzenia. Doładuj go i spróbuj ponownie. Nic nie zostało naliczone. |
| [`E22002`](/docs/api/errors/E22002) | Sprawdzenie jest tymczasowo niedostępne. Spróbuj ponownie z wycofywaniem. Nic nie zostało naliczone.           |

Niepowodzenie właściwości nie jest błędem. Wraca jako status w jej bloku, a bazowe sprawdzenie jest dostarczane obok.

## Następne kroki

- [Sprawdź adres e-mail](/docs/guides/lookup/email-addresses) to druga połowa usługi Lookup.
- [Dokumentacja API usługi Lookup](/docs/api/reference/create-phone-number-lookup) opisuje każde pole i każdy blok właściwości.
- [Limity żądań](/docs/guides/rate-limits) opisuje pulę `lookup`, z której korzystają te wywołania.
- [Weryfikacja numeru telefonu: sprawdź numer, zanim wyślesz](/learn/lookup/phone-number-lookup-check-a-number-before-you-send) to film, który pokazuje sprawdzenie numeru i dodaje zapytania do sieci na żywo.

## Related resources

- [Phone number lookup](/lookup-api) (product)

[Get an implementation brief](/learn/workspace?topic=lookup-phone)
