GET /v1/datapin/b2b/plans. Nothing is charged now: each PIN is charged to your wallet when a customer dials it, at the plan's price for you at that moment. A new batch waits for approval — approve it with POST /v1/datapin/b2b/batches/{uuid}/approve (or ask support) before its PINs can be loaded. The PINs are in this response, and later from GET /v1/datapin/b2b/batches/{uuid}/pins. PIN generation may be temporarily unavailable if the carrier network is disabled by administration.curl --location 'http://localhost:5050/v1/datapin/b2b/batches' \
--header 'Idempotency-Key;' \
--header 'x-api-key: <api-key>' \
--header 'Content-Type: application/json' \
--data '{
"planId": "MTN-1GB-30D",
"quantity": 100,
"label": "Ikeja shop — March"
}'{
"success": true,
"message": "Generated 2 data PIN(s). They can be loaded once the batch is approved.",
"statusCode": 200,
"path": "/v1/…",
"timestamp": "2026-09-26T12:00:00.000Z",
"hash": "a1b2c3d4-…",
"data": {
"batch": {
"uuid": "6f1c2d3e-4b5a-4c6d-8e7f-9a0b1c2d3e4f",
"label": "Ikeja shop — March",
"status": "PENDING_APPROVAL",
"network": "MTN",
"plan": {
"planId": "MTN-1GB-30D",
"name": "1GB · 30 days"
},
"quantity": 2,
"pins": {
"active": 2,
"used": 0,
"disabled": 0,
"refunded": 0
},
"approvedVia": null,
"approvedAt": null,
"createdAt": "2026-10-06T09:15:00.000Z"
},
"pins": [
{
"serial": "DP7KQ4M2XH9A",
"pin": "4471-9920-1183"
},
{
"serial": "DPM3T8WQ2ZKC",
"pin": "8302-1157-6649"
}
]
}
}