Skip to main content

Overview

Before you can discover anything, two things have to be right: the biller has to be available, and the account identifier has to be the one that biller understands. This step covers both, and the difference between the two errors you will see when the second one is wrong.
Everything on this page uses https://billapi.oneclickdz.com and the X-Access-Token header. If you have not confirmed which environment your key belongs to, start with Validate API Key.

Checking availability

GET /v3/partners returns one entry per biller, each with a single status field.
A biller marked UNAVAILABLE answers 503 PARTNER_UNAVAILABLE on discovery and on payment. SEAAL and AADL are currently UNAVAILABLE in both sandbox and production — this is the operator’s current setting, not a permanent limitation, so keep them in your code and let the map decide what to show.
A PRODUCTION key sees live availability; a SANDBOX key sees a fixed map, because a sandbox request never reaches a biller. Do not use sandbox to test how your application reacts to a biller going down — use the dedicated sandbox scenarios for that.

The identifier for each biller

Send exactly one identifier, and send the field that belongs to the biller you are querying. The API returns the same field back in account on every transaction for that biller.
Send Algérie Télécom with its accents. The value is compared character for character, and it is also the key you read back from the partner map.

Landline numbers

phoneNumber is an Algerian landline, not a mobile number. Valid:
  • "023456789" — leading zero, then a digit in the range 2–4
  • "+213023456789" is not valid; use "+21323456789" or the local "023456789" form
Invalid:
  • "0778037340" — a mobile number, not a landline
  • "23456789" — missing the leading zero
  • "023 45 67 89" — contains spaces
  • 23456789 — a number instead of a string

The richer identifier forms

Two billers accept a fuller object when a single number is not enough to identify a specific bill. Every field inside these objects is required.
invoice_number up to 20 characters, amount_without_stamp up to 20, ebb_key up to 30.
sub_id exactly 12 characters, period in MM/YYYY format, amount up to 20 characters, pay_key exactly 7 characters.
electronic_payment_key is accepted as an alternative to reference, and must be exactly 25 characters.

Exactly one identifier

The account object must carry one identifier and no more. The fields group into four slots: Exactly one slot must be filled. Zero or two is rejected before anything else happens.
Validating this on your own side is one line, and it turns a round trip into an instant form error:

ERR_VALIDATION or INVALID_ACCOUNT?

Both are 400, and they mean very different things.
Do not show ERR_VALIDATION messages to end customers. They name internal field names such as electronic_payment_key, which means nothing to someone holding a paper bill.

Caching the partner map

Availability changes rarely, so refresh it on a timer instead of before every discovery — and keep serving the last good copy if a refresh fails. An empty biller list is worse for your customers than a slightly stale one.
Caching does not remove the need to handle 503 PARTNER_UNAVAILABLE on discovery. A biller can go down between your last refresh and the customer pressing the button.

Best practices

Validate before you send

Check the slot rule and the landline format client-side. It saves a round trip and gives a better error message.

Cache the map for minutes, not hours

Five minutes is plenty. Refresh in the background, never on the customer’s critical path.

Keep unavailable billers in your code

SEAAL and AADL will come back. Drive the UI from the map, not from a hard-coded list.

Separate the two 400s

INVALID_ACCOUNT is a message for your customer. ERR_VALIDATION is a message for your logs.

Next step

Step 2: Discovering bills

Send a discovery, poll it to READY, and read what is payable

List Partners

The endpoint reference

Discover Bills

Where the account object is sent

Bill Payment Overview

The five-step map

Sandbox Testing

Identifiers that produce a chosen outcome