Your first payment
Log in, create a payment link, pay it in the sandbox, and confirm it.
This page takes you through one complete test payment in about five minutes: your server logs in, creates a payment link, you pay it with test money, and your server confirms it. It is the same flow your live integration will use.
You need a sandbox API key, and from the merchant portal your organisationId and Wallet ID (avatar menu → Profile → Company) and an HMACKey — create one here.
Prefer clicking to typing? Do the same steps with Try it on Log in, Create one-time link and Get a payment. The token is filled in for you.
- 1
Log in
Send your API key. Paste the whole key into
ZOORYA_API_KEY— the command splits it for you.bashBASE="https://sandbox.eclipse.et/eclipse-conductor/rest/v1" ZOORYA_API_KEY="zp-checkout-12345678:your-secret" curl -X POST "$BASE/authentication/login" \ -H "Content-Type: application/json" \ -d "{\"identity\": \"${ZOORYA_API_KEY%%:*}\", \"password\": \"${ZOORYA_API_KEY#*:}\"}"Keep
headerValue(the token, it starts withBearer) andtenantIdfrom the response. The token works for about 15 minutes. - 2
Create a payment link
Ask Zoorya Pay for a payment link for this order: the amount, your own unique ID (
externalUniqueId) and the wallet that receives the money.bashcurl -X POST "$BASE/tenants/TENANT_ID/organisations/ORGANISATION_ID/payments" \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "amount": 10, "currency": "ETB", "type": "GLOBAL_PAYMENT_LINK", "externalUniqueId": "firsttest001", "destinationWalletId": WALLET_ID, "landingUrl": "https://example.com/done", "additionalFields": [ { "id": "HMACKey", "value": "YOUR_HMAC_KEY" }, { "id": "callbackUrl", "value": "https://example.com/webhooks/zoorya" } ] }'You get back the payment, with its link:
json{ "paymentId": 4581646, "status": "PENDING", "completionUrl": "https://sandbox.eclipse.et/t/abc12", "paymentType": "LINK" } - 3
Pay
Open
completionUrlin a browser. Pick a method, for example telebirr, and finish the payment with a phone you control. When it is done, the browser goes to yourlandingUrl. - 4
Confirm from your server
The browser's word is not proof — anyone can open your
landingUrl. Ask Zoorya Pay from your server whether the order is really paid:bashcurl "$BASE/tenants/TENANT_ID/payments/4581646" \ -H "Authorization: Bearer YOUR_TOKEN"json{ "paymentId": 4581646, "status": "SUCCESSFUL", "amount": 10, "currency": "ETB", "externalUniqueId": "firsttest001" }status: "SUCCESSFUL"with the rightamountmeans the payment is confirmed. - 5
See it in the portal
Open Transactions in the sandbox portal. The payment is there.

