2026-07-08 — IP allowlisting + source IPs on invoices
IP allowlisting. Your API access can now be locked to your approved server IPs (IPv4 and IPv6, single addresses or CIDR ranges) — a leaked key becomes useless from anywhere else. Accounts created from July 2026 onward must have an allowlist configured before their first call; earlier accounts are unchanged until they opt in. Requests from an unapproved address get 403 with error code ip.not_allowed (the rejected IP is echoed so you know exactly what to ask us to add); accounts that require an allowlist but haven't configured one get ip.not_configured. Blocked requests are refused before any processing — a blocked purchase never charges your wallet. Send your server IPs to Plustive to set up or change your list. See Authentication → IP allowlisting.
Source IP on every purchase (additive). Each purchase now records the IP it was made from. It appears per transaction on your invoice CSV, and your invoice PDF includes a summary of the addresses your account purchased from during the cycle — useful for reconciling exactly which of your servers made which purchases. Existing integrations are unaffected.
Reusing a clientReference for a different order now returns 409 Conflict. If a clientReference that already has a transaction arrives with different order-defining parameters — a different plan/product, recipient, or (for variable-amount bills like electricity) amount — we reject it with 409 Conflict (error code transaction.idempotency_conflict) and make no purchase, instead of silently returning the unrelated original transaction. A genuine retry with the same parameters is unchanged: it still returns the original transaction with the idempotentReplay flag / Idempotent-Replay header. Applies to all data, airtime and bill payment vends. See Idempotency.
Replays are now flagged (additive). When a purchase reuses a clientReference that already has a transaction, we return the original transaction unchanged (no new vend, no extra charge) — and now mark it so you can tell a replay from a fresh purchase: an "idempotentReplay": true field in the response body and an Idempotent-Replay: true response header. Fresh purchases are unflagged. Existing integrations are unaffected. See Idempotency.
Bill payments added. New endpoints for cable TV, electricity, education and broadband — list products, verify a customer identifier, and pay. See Bill payments.
token field (additive). Purchase and transaction responses now include an optional token (electricity prepaid token, education PIN; null otherwise). Existing integrations are unaffected.
service values. Transaction service now includes CableTv, Electricity, Education, Broadband alongside Data and Airtime.
ported removed from requests. Data and airtime purchases no longer accept a ported field — we always handle ported numbers upstream, so you don't need to send it. Requests that still include it are ignored (non-breaking).
providerReference. The upstream reference field is named providerReference (it was briefly dataStationReference); same value, neutral name.