Create a phone number lookup
/v1/lookup/phone-numberconst 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);answer = client.lookup.phone_number(
phone_number="+31612345678", type=["classification", "score"]
)
print(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 is not None and answer.score.status == "ok":
print(answer.score.value)answer, err := client.Lookup.PhoneNumber(context.Background(), bird.LookupPhoneNumberParams{
PhoneNumber: "+31612345678",
Type: []bird.LookupProperty{"classification", "score"},
})
if err != nil {
log.Fatal(err)
}
fmt.Println(*answer.CountryCode, *answer.LineType)
// Only a block whose status is ok carries a value, and only that one is billed.
if answer.Score != nil && *answer.Score.Status == "ok" {
fmt.Println(*answer.Score.Value)
}$answer = $bird->lookup->phoneNumber(
(new PhoneNumberLookupRequest())
->setPhoneNumber('+31612345678')
->setType(['classification', 'score']),
);
echo $answer->getCountryCode(), ' ', $answer->getLineType();
// Only a block whose status is ok carries a value, and only that one is billed.
if ($answer->getScore()?->getStatus() === 'ok') {
echo $answer->getScore()->getValue();
}bird lookup phone-number \
--phone-number +31612345678 \
--type classification \
--type presencecurl -X POST "https://us1.platform.bird.com/v1/lookup/phone-number" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"phone_number": "+31612345678",
"type": [
"classification",
"presence"
]
}'{
"phone_number": "+441904123456",
"country_code": "GB",
"network_info": {
"carrier_name": "BT",
"mcc": "234",
"mnc": "00"
},
"original_network_info": null,
"flags": [],
"line_type": "service",
"classification": {
"status": "ok",
"value": "premium_rate"
},
"score": {
"status": "ok",
"value": 48
},
"presence": {
"status": "ok",
"reachable": true
},
"roaming": {
"status": "unavailable"
}
}
Returns the number's serving and issuing networks, porting state, country, and line type. The baseline fields are included in each lookup. Request additional type blocks for classification, presence, roaming, SIM-swap, porting-history, or credibility data. Each block reports its own status; only blocks with an ok status incur an additional charge.
This form keeps the number out of the URL. The URL form performs the same lookup but cannot use an idempotency key. With this form, reuse an Idempotency-Key to return the stored result without another lookup or charge.
Request Payload
phone_numberThe phone number to look up, in international format: the country calling code, then the national number. The leading + is optional, and 00 works in its place, so +31612345678, 31612345678 and 0031612345678 are all the same number. A number written for dialling inside one country, with no country code, is rejected rather than guessed at.
typeProperties to add to the base lookup. Omit this field or send an empty array to request only the base lookup.
Each delivered property is billed in addition to the base lookup. A property that could not be answered is returned with its status and is not billed.
Response Payload
phone_numberThe number that was looked up, in E.164 format.
country_codeThe ISO 3166-1 alpha-2 country of the number. Absent when the number belongs to no single country, as a non-geographic range does.
network_infoThe network that serves the number today. Absent when no network could be identified.
original_network_infoThe network that issued the number's range. It differs from network_info when the number has been ported. Absent when the issuing network could not be identified.
flagsNotable characteristics of the number. Empty when none apply.
line_typeclassificationThe allocated service of the number's range. Absent unless you requested the classification property.
presenceWhether the number is live on its network. Absent unless you requested the presence property.
roamingWhether the number is roaming. Absent unless you requested the roaming property.
sim_swapWhen the number's SIM last changed. Absent unless you requested the sim_swap property.
portingThe number's porting record. Absent unless you requested the porting property.
Show child attributes
porting.statusporting.portedWhether the number has ever moved network. false is a positive finding rather than a lack of one: the registry was consulted and holds no move for this number. Present only when status is ok.
porting.last_ported_atWhen the number last moved network. Absent when it has never ported or when no date is on record.
porting.last_ported_at_is_approximateWhether last_ported_at is an approximation. Some registries record the period of a move without its exact day.
porting.historyEvery move on record, oldest first. Absent when the number has never ported or when its registry publishes no history.
Show child attributes
porting.history.occurred_atWhen the move was recorded, null when the record carries no date.
porting.history.actionWhat the record describes, as the number's registry reports it. Registries use their own short codes rather than a shared vocabulary, so treat this as a label to display rather than a value to branch on.
scoreThe number's credibility score. Absent unless you requested the score property.
Related resources
Continue with the documentation, guides and examples for this topic.