Skip to main content
Identify is the first workbench tool, and the only one live today. You send a rail and its code. Patchwork returns the institution, the payment rails it can be reached on, and — when you also pass an account_number on a supported rail — the resolved holder name. It is a bare REST product. You can call it with an API key and no agent. When the api_product binding ships, the same product can be wired into an agent as a patch.
Charged on an identified outcome. Verifying your email starts a workspace with $20 of credit.

Quickstart

A successful institution lookup looks like this:

Rails

Holder resolution is available on nuban, gh_bank, ke_bank, and momo in Ghana and Kenya. Pass account_number (or the wallet number) on those rails. On the other rails an account_number comes back with name_resolution: "not_supported" — the institution is still identified. Get the code for any of these rails from GET /v1/identify/banks. momo also accepts mtn, vodafone, and airteltigo as aliases for the Ghanaian wallet codes.
country is an optional ISO 3166-1 alpha-2 hint when the rail is ambiguous.

Bank codes

Rails that take a bank code need the code for the bank the account is held at. GET /v1/identify/banks lists them, so you can build a bank picker and send the code you get back.
Pass currency (NGN, GHS, ZAR, KES, XOF, EGP, RWF, USD), country (NG, GH, ZA, KE, CI, EG, RW), or both. country alone uses that country’s currency. USD covers banks in several countries, so pair it with country to narrow it down. type is bank or mobile_money. scheme is the local clearing scheme the code belongs to. rail is the Identify rail that accepts the code and is omitted when none does yet. Listing banks is free. Every code the directory returns names the rail that accepts it, so you can send it straight to POST /v1/identify. Paybill and till codes (scheme: "mobile_money_business") have no rail — they are payment destinations, not accounts to identify.

Results

data.result is one of identified, not_found, or unsupported. Only identified is billed. If a field is unknown we omit it — we do not send nulls. identified_at is present only on a match. The result object: The Identify Result object. The request: POST /v1/identify.

Errors

Missing rail or code is missing_parameter (400). An unknown rail is unsupported_rail (400). On GET /v1/identify/banks, an unknown currency or country is unsupported_currency or unsupported_country (400), and banks_unavailable (502) means the directory could not be fetched, so retry shortly. Out of credits is 402. See Errors.

More in Workbench

Extract is live — send a document and a schema, get structured fields back, the same way: an API key, one call. Two more standalone products are in progress: They are not live yet, and there is no endpoint to call.