Skip to main content

Troubleshoot Lookup per-field verdicts (200 with coming_soon / not_implemented / error)

The Full Intelligence endpoint (GET /api/v1/numbers/lookup/:phone) answers 200 whenever the base lookup succeeded — even when every fields= data package you asked for came back without a payload. Isolation is per field: the base lookup and each data package run independently, so a provider fault on one field does not blank the others. That means a 200 is not a guarantee of data. Read every dataPackages entry’s status before you treat the lookup as enriched.

1. Decode the status buckets

Each non-available status tells you a different thing:
The 502 LOOKUP_FAILED code (both providers down, or the fallback unreachable) is a different failure mode — the whole lookup failed, not just one field. That is handled in the Lookup and messaging-service failures runbook.

2. Map the field to its provider

Map the failing field to its provider before you conclude anything — only some fields can come back coming_soon, and each has a specific activation path:

3. Retry or escalate?

  • Fix the request yourself: error with a request-shaped reason — identity_attributes_required on identity_match, or consent_date_required on reassigned_number. Send the missing attribute/date and the field returns real data.
  • Retry once, then escalate: error with a genuine provider rejection on a field that normally returns data. One retry is enough — a repeat failure points at the provider, not at your request.
  • Never retry: coming_soon and not_implemented. Replaying burns wallet without changing the answer.

4. Escalation bundle

When you open a support ticket, include:
  1. The meta.request_id of the failed lookup.
  2. The exact fields= selector you sent.
  3. The per-field status buckets you received — each coming_soon, not_implemented, or error entry with its reason and provider strings.
That bundle lets support trace the exact upstream call that failed, or confirm which provider contract needs to land to unblock the field.