# Overview

> Verify Ethiopian receipt URLs from one API endpoint hosted in Ethiopia.

`links.et` fetches receipts from the official provider over an Ethiopia-egress link and returns the parsed receipt as JSON. Built for backends that can't reach the provider directly from their region.

## How it works

1. **Sign up** at [/signup](/signup) and mint an API key from the dashboard.
2. **POST** the receipt URL to `/api/verify`.
3. We fetch the receipt from the official provider, parse it, and return JSON.

Prefer clicking over curl? The [playground](/dashboard/playground) runs the
same calls from your dashboard, with your API key and ready-made example
requests for every endpoint.

## Supported providers

**17 banks and wallets**, plus HuluBeje point-of-sale receipts. telebirr, CBE,
CBE Birr, Bank of Abyssinia, Zemen, Awash, Dashen, M-PESA, COOPay, Kaafi,
Amhara, Abay, Berhan, Oromia, Ahadu, Siinqee and ZamZam.

[The providers page](/docs/providers) has the host for each one, the `source`
tag it stamps on the receipt, and the shape it returns. Switch on `source`
rather than on the host: several banks serve more than one host, and two of
them share one.

## Quick example

References shown here are placeholders; substitute one from a receipt you control.

```bash
curl -sX POST https://links.et/api/verify \
  -H "x-api-key: vk_live_..." \
  -H "content-type: application/json" \
  -d '{"url":"https://transactioninfo.ethiotelecom.et/receipt/ABCD1234EF"}' | jq .
```

```json
{
  "ok": true,
  "providerKey": "telebirr",
  "resolvedUrl": "https://transactioninfo.ethiotelecom.et/receipt/ABCD1234EF",
  "httpStatus": 200,
  "fetchedAt": "2026-01-01T00:00:00.000Z",
  "receipt": {
    "source": "telebirr-html",
    "payerName": "<payer name>",
    "transactionStatus": "Completed",
    "receiptNo": "ABCD1234EF",
    "totalPaidAmount": "100 Birr",
    "paymentDate": "01-01-2026 00:00:00"
  },
  "rawHtmlLength": 25928,
  "error": null
}
```

CBE responses have a different shape; see [POST /api/verify](/docs/verify).
