# 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).
