PlanResponse
169ae891-2c0d-4e3a-9f1b-7a2c5d8e4f60The network for a data plan; the biller's brand (MTN, Smile, Spectranet) for a broadband row.
MTN1.0GB30 daysYour price, in kobo.
27000The canonical product this plan maps to, stable across networks and providers. Present once your account is on the product catalog; null for unmapped rows.
b3d9c1a2-4e5f-6789-a0b1-c2d3e4f5a6b7Data allowance in megabytes, when known.
1024Validity in days, when known (the machine-readable form of validity).
30True for an unlimited plan. Always present (defaults to false).
falseProduct class label, when known (for example "SME").
SMEThe published retail price for this plan, in kobo, when one exists. Null for a plan with no retail basis (see pricingBasis) - this is the ordinary case today. Independent of price: you cannot derive one from the other.
30000Which formula to use when you resell this plan. "retail" means sell at retailPrice and keep the difference from price as your margin. "special" means there is no retail figure (retailPrice is null); add your own markup on top of price instead. Null only on a raw/unmapped row, alongside the other product fields above.
Possible values: [retail, special]
retailWhich family this row belongs to: "data" or "broadband".
The endpoint that buys THIS row, e.g. "/api/v1/data" or "/api/v1/broadband".
The JSON field the buy endpoint expects for the recipient: "phone" for data, "accountNumber" for broadband.
{
"planId": "169ae891-2c0d-4e3a-9f1b-7a2c5d8e4f60",
"network": "MTN",
"name": "1.0GB",
"validity": "30 days",
"price": 27000,
"productId": "b3d9c1a2-4e5f-6789-a0b1-c2d3e4f5a6b7",
"sizeMb": 1024,
"validityDays": 30,
"isUnlimited": false,
"class": "SME",
"retailPrice": 30000,
"pricingBasis": "retail",
"service": "string",
"buyEndpoint": "string",
"identifierField": "string"
}