Skip to main content
POST
Performs a single BIN Intelligence lookup and returns the full, normalized profile for the resolved account range. Unlike the tiered Card Lookup endpoint, BIN Intelligence has no feature flags: one call returns every attribute PayOS can resolve. Any attribute the card networks do not provide for the account range is returned as null. The response is normalized, so the same shape is returned for every brand. Fields that apply only to a specific network (for example, several Visa-only risk flags, the Mastercard issuer number, or the Discover network-program flags) are populated only for that network and return null otherwise.

Authentication

Requires API Key authentication via the X-API-Key header.
Sandbox requests use the test base URL and a test key:

Request Body

Provide exactly one credential: bin for a 6 to 8 digit prefix, or accountNumber for a full number. No other input is required, and there are no feature flags. The full profile is returned on every successful call.
string
A BIN or account prefix: 6 to 8 digits, digits only.A 6 to 8 digit prefix is enough for most lookups, but some prefixes are shared across issuers or products, in which case the result is MULTIPLE — resubmit with the full accountNumber to resolve a single range.Either bin or accountNumber is required, but not both.Example: "41111111"
string
A full account number: 12 to 19 digits, digits only, no spaces or dashes. Accepts a card number (PAN) or a network token number (for example, a mobile wallet credential) — you do not need to know which you hold. The response’s data.card.credentialType reports how the network classified it (PAN or TOKEN).Either bin or accountNumber is required, but not both.Example: "4111111111111111"

Response

200 OK

Successful lookup. Inspect data.status to confirm the match before relying on the rest of the profile: a MULTIPLE or NO_MATCH result is still returned with HTTP 200.
boolean
true when the lookup was processed.
string
Unique identifier for the lookup. Store it with your records and quote it to PayOS support for troubleshooting.
integer
HTTP status code for the response.
string | null
Machine-readable error code. null on success (HTTP 200). On a 207 it is the string PARTIAL_FAILURE. On 400 / 401 / 406 the error is conveyed in error and errorCode may be absent.
object
The BIN Intelligence profile. Always a single object (one card profile), never an array of candidate ranges. On a MULTIPLE result the card profile is not populated; resubmit with the full accountNumber to resolve to one range.

Lookup Status

The match result is returned in data.status and is independent of the HTTP status code. All three values return HTTP 200.
Every lookup returns a single response with a single data object — one card profile, never an array of candidate ranges. When the supplied digits match more than one account range, data.status is MULTIPLE and no card profile is populated; resubmit the lookup with more digits (an 8-digit bin, or the full accountNumber) to resolve to a single range. The API does not fan out or return a list of candidate matches.

207 Multi-Status

Partial processing failure: one or more upstream operations failed during the lookup. success is false and errorCode is PARTIAL_FAILURE. Any data that was resolved is returned in data, using the same profile shape as a 200 COMPLETED response (the example above is abbreviated). If you receive a 207, contact PayOS support with the inquiryId and the full response.

400 Bad Request

Validation error. Returned when the request is malformed, for example when neither bin nor accountNumber is supplied, when both are supplied, when either contains non-digit characters, when bin is not 6 to 8 digits, when accountNumber is not 12 to 19 digits, or when the card networks reject the supplied credential as unprocessable.

406 Not Acceptable

Character validation error. Returned when input contains forbidden characters or matches a security pattern (see Input Validation below).

401 Unauthorized

Authentication error. Returned when the X-API-Key header is missing or invalid. Authentication and authorization errors use a different envelope from lookup errors: { "error": { "code", "ruleCode", "message" } }.

403 Forbidden

Authorization error. Returned when the API key is valid but not authorized for BIN Intelligence. Uses the same { "error": { "code", "ruleCode", "message" } } envelope as 401. Contact PayOS to enable BIN Intelligence for your key.

429 Too Many Requests

Rate limit exceeded. errorCode is RATE_LIMIT_EXCEEDED. Retry after the time indicated by the RateLimit-Reset response header.

502 Bad Gateway

Upstream error. The lookup could not be completed because an upstream dependency failed or is unavailable. The response includes an inquiryId for the attempted lookup. Retry later; if the error persists, contact PayOS support with the inquiryId.

Sandbox Testing

Sandbox (test API keys, sk_test_…) returns deterministic test profiles for the credentials below — no real card data is required, and the request and response shapes are identical to production. Nothing extra is needed in the request: the same call against the sandbox base URL with a test key just works. Each test range works either way — send the 6-digit prefix as bin or the example full number as accountNumber. Any other sandbox input returns NO_MATCH.

Error Codes

Example Usage

Input Validation

The lookup accepts only the credential. bin and accountNumber must be digits only, with no spaces or dashes. The following characters are rejected, and the request returns 406 Not Acceptable:
Control characters are also rejected. Requests return 406 when input matches a security pattern, such as consecutive dots (..) or SQL keywords and comment markers (for example SELECT, DROP, UNION, --, /*). For security, the error message does not identify which field caused the failure.

Notes

  • BIN Intelligence returns the full profile on every successful call. There are no feature flags, and there is no separate request to enable additional fields.
  • Always check data.status before consuming the profile. MULTIPLE and NO_MATCH return HTTP 200.
  • Fields that are network-specific (for example, Visa-only risk flags, the Mastercard issuer number, or Discover program flags) are populated only for that network and return null otherwise.
  • Payout eligibility (push and pull) can differ between account ranges under one issuing BIN, so it is resolved at the account-range level rather than the BIN level.
  • Every lookup is tracked with a unique inquiryId for support purposes. Full account numbers are masked in stored inquiry records.
  • For plain-language field definitions, usage guidance, and the network code lists (card type, product, ACNL, ARDEF), see the BIN Intelligence guide.