Create a collection account
/v1/collection-accountsCreates a virtual account under the authenticated merchant. This route is also available as /v1/virtual-accounts. For type="expiring", send reference and expectedAmount in kobo; TagPay always sets the expiry to 15 minutes and sends the vendor an exact expected amount in naira. For type="permanent", omit expectedAmount; permanent accounts are live-only and never expire. Every merchant starts with one auto-provisioned permanent account and can create additional ones — each additional permanent account requires an explicit reference.
Body parameters
typeenum<'expiring' | 'permanent'>requiredAccount type to create.
referencestringoptionalMerchant reference and idempotency key. Required for expiring and for any additional permanent account; a merchant's first permanent account may omit it and defaults to the merchant primary reference.
expectedAmountintegeroptionalExpected amount in kobo. Required for expiring; rejected for permanent.
labelstringoptionalOptional label shown during bank name-enquiry. Max 80 characters after bank-rail-safe normalization.
metadataobjectoptionalArbitrary key/value metadata echoed by vendor webhooks.
Response
200idstringTagPay collection account ID.
merchantIdstringOwning merchant ID.
vendorIdstringUpstream TagPay Core collection-account ID.
accountNumberstring10-digit NUBAN account number customers transfer into.
accountNamestringAccount name shown by bank name-enquiry.
referencestringMerchant reference and create idempotency key.
labelstring | nullHuman-readable account label sent to the bank rail.
typeenum<'expiring' | 'permanent'>Collection-account type.
statusenum<'active' | 'expired' | 'deactivated'>Current account status.
expiresAtstring | nullISO-8601 expiry timestamp. Null for permanent accounts.
metadataobject | nullMetadata echoed back from the vendor on collection webhooks.
totalCollectedstringTotal collected through this account in kobo. Serialized as a string for precision.
transactionCountintegerNumber of successful credits recorded for this account.
lastCollectionAtstring | nullISO-8601 timestamp of the most recent successful credit.
customerIdstring | nullReserved for customer-scoped collection accounts.
transactionIdstring | nullLinked transaction ID for checkout-created expiring accounts. Null for direct accounts.
createdAtstringISO-8601 creation timestamp.
updatedAtstringISO-8601 last-update timestamp.
Errors
VALIDATION_ERROR400`type` is invalid, `reference` is missing for an expiring account, or `expectedAmount` is missing/invalid.PERMANENT_REQUIRES_LIVE400Permanent collection accounts can only be created with live credentials.REFERENCE_CONFLICT409The reference already exists as another collection-account type.UNAUTHORIZED401Secret key missing or invalid.VENDOR_UNAVAILABLE502The upstream collection-account provider rejected or could not complete the request.