Skip to content

Catalog Browsing

Use catalog endpoints to fetch active product and merchant metadata before submitting purchase or issuance requests.

Endpoints

MethodPathDescription
GET/data-packagesActive data package offers.
GET/gift-denominationsActive voucher denominations.
GET/merchantsEligible merchants.
GET/promosActive and scheduled promos.

Headers

HeaderRequiredDescription
X-API-KeyYesPartner API key.
X-TimestampYesISO timestamp used in signature verification.
X-SignatureYesBase64 Ed25519 signature for the request.
User-AgentNoOptional client identifier.
Idempotency-KeyNoOptional tracing key for read requests.

Request Example

bash
curl -X GET "$API_BASE_URL/data-packages" \
  -H "X-API-Key: $PARTNER_API_KEY" \
  -H "X-Timestamp: 2026-04-29T12:00:00.000Z" \
  -H "X-Signature: $PARTNER_SIGNATURE" \
  -H "Idempotency-Key: cat_01HXYZ0123ABC456DEF789GHJK"

Example Responses

Data Packages

json
[
  {
    "id": 101,
    "productCategoryId": 7,
    "offerId": "DP-ETHIO-1GB-7D",
    "packageName": "1GB Weekly Data",
    "description": "1GB data package valid for 7 days",
    "priceEtb": 100,
    "validityDays": 7,
    "status": "ACTIVE",
    "createdAt": "2026-04-27T08:00:00.000Z",
    "updatedAt": "2026-04-27T08:00:00.000Z",
    "deletedAt": null
  }
]

Gift Denominations

json
[
  {
    "id": 4,
    "amountEtb": 500,
    "isActive": true,
    "createdAt": "2026-04-27T08:00:00.000Z",
    "updatedAt": "2026-04-27T08:00:00.000Z",
    "deletedAt": null
  }
]

Merchants

json
[
  {
    "id": 12,
    "merchantName": "Abyssinia Market",
    "merchantLogo": "https://cdn.example.com/merchants/abyssinia-market.png",
    "category": {
      "id": 3,
      "categoryName": "Retail"
    },
    "status": "ACTIVE",
    "redemptionMethod": "OTP"
  }
]

Promos

json
[
  {
    "id": 18,
    "promoName": "Weekly Data Bonus",
    "promoDescription": "Bonus value for selected weekly data packages.",
    "promoStartDate": "2026-04-27T00:00:00.000Z",
    "promoEndDate": "2026-05-04T23:59:59.000Z",
    "discountPercentage": null,
    "bonusPercentage": 10,
    "status": "ACTIVE",
    "productCategoryId": 7,
    "productCategoryName": "Data Packages",
    "constraintValue": 100,
    "promoImage": "https://cdn.example.com/promos/weekly-data-bonus.png",
    "displayStatus": "ACTIVE",
    "createdAt": "2026-04-27T08:00:00.000Z",
    "updatedAt": "2026-04-27T08:00:00.000Z",
    "deletedAt": null
  }
]

Response Codes

CodeMeaning
200Catalog returned.
400Invalid request headers.
401Missing or invalid API key, timestamp, or signature.
403Access is forbidden.
500Unexpected processing error.

Integration Notes

  • Treat this data as operational reference and cache it in your integration service.
  • Re-fetch catalog data regularly to pick up new offers, status changes, and promo schedules.
  • Keep using signed requests for all reads; signature rules are the same as write endpoints.