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.
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.
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 inaccount 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
"0778037340"— a mobile number, not a landline"23456789"— missing the leading zero"023 45 67 89"— contains spaces23456789— 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.SONELGAZ — invoice form
SONELGAZ — invoice form
invoice_number up to 20 characters, amount_without_stamp up to 20, ebb_key up to 30.ADE — invoice form
ADE — invoice form
sub_id exactly 12 characters, period in MM/YYYY format, amount up to 20 characters, pay_key exactly 7 characters.ADE and SEAAL — 25-character key
ADE and SEAAL — 25-character key
electronic_payment_key is accepted as an alternative to reference, and must be exactly 25 characters.Exactly one identifier
Theaccount 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.
ERR_VALIDATION or INVALID_ACCOUNT?
Both are 400, and they mean very different things.
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 payableRelated pages
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

