diff --git a/docs collection.postman_collection_1.json b/docs collection.postman_collection_1.json new file mode 100644 index 0000000..df0284e --- /dev/null +++ b/docs collection.postman_collection_1.json @@ -0,0 +1,2863 @@ +{ + "info": { + "_postman_id": "a79d34ce-b3cd-4be3-97de-021f995c5a63", + "name": "docs collection", + "description": "SeerBit payment API collection, rebuilt to match doc.seerbit.com only (checked 2026-08-25) per an explicit instruction that doc.seerbit.com is the single source of truth. A prior pass had pulled in several endpoints from https://seerbit.github.io/openapi/ (Order Checkout, Authorization/Pre-Authorization, Initiate Payment/MOMO/non-3DS charge/Validate, Tokenize a Card, Initiate Subscription, Get a Subscription by billingId) that could not be located anywhere on doc.seerbit.com itself — those have been removed. Two new sections doc.seerbit.com does document but the original collection never covered — Payout and Partners API — have been added.\n\n### Getting started\n1. **Get your keys.** From your SeerBit dashboard, grab your `SECRET_KEY` and `publicKey`.\n2. **Mint a Bearer token.** Run *Authentication → Generate Encrypted Key* once. It returns an `EncryptedSecKey` — paste that into the `BearerToken` collection variable. Every other request in this collection inherits Bearer auth from the collection root, so you only set this in one place.\n3. **Set your variables.** At minimum fill in `publicKey` and `BearerToken` under this collection's Variables tab (or in an environment). Individual folders need extra variables of their own (e.g. `pocketID` and `passKey` for Payout) — each request's description lists what it needs.\n4. **A few endpoints break the pattern:**\n - *Generate Encrypted Key* and the Partners API auth endpoints (*Partner Login*, *Request Password Reset*, *Reset Password*) are set to **No Auth** — you don't have a token yet when you call them.\n - Several Payout and Partners endpoints need Bearer auth **plus** a `Public-Key` header. That's called out per request below.\n\n### Variable Reference\nPostman's collection-level Variables tab (where you set `publicKey`, `BearerToken`, etc.) doesn't support per-variable descriptions — this table is the substitute, kept here so it's visible without opening each request.\n\n| Variable | Description |\n|---|---|\n| `publicKey` | Your merchant public key from the SeerBit dashboard. Sent in the body of most payment-initiation requests (never as a header) to identify which merchant account a transaction belongs to. |\n| `BearerToken` | OAuth access token returned by Get Access Token (Authentication folder). Sent as `Authorization: Bearer {{BearerToken}}` on requests that require an authenticated merchant session. |\n| `SECRET_KEY` | Your merchant secret key from the SeerBit dashboard. Used together with your public key to generate the encrypted key for Get Access Token — never send this in a request body or expose it client-side. |\n| `paymentReference` | A unique reference you generate per transaction attempt (not returned by SeerBit). Used to initiate a payment and to look it up afterwards via Check Payment Status. |\n| `customerId` | SeerBit's identifier for a customer, typically returned after tokenizing a card or creating a customer-linked resource such as a subscription plan. |\n| `billingId` | Identifier for a specific billing/recurring-charge record under a subscription plan. |\n| `batchId` | Identifier for a batch operation, e.g. a bulk invoice or bulk payout batch, used to check the status of the whole batch. |\n| `accountNumber` | A bank account number — either a virtual account SeerBit provisioned for a customer, or (for Payout/Bank Account Payment) the destination/source account to move funds to or from. |\n| `reference` | A generic transaction or operation reference used to look up a specific record where no more specific reference variable applies. |\n| `paymentLinkId` | Identifier for a payment link created via the Payment Links folder, used to fetch, update, or delete that link. |\n| `authorizationCode` | Card authorization code returned after a successful tokenized charge, used to charge the same card again without re-entering card details. |\n| `planId` | Identifier for a recurring/subscription plan created via the Recurring & Subscriptions folder. |\n| `pocketID` | Identifier for a SeerBit Pocket (an internal sub-wallet under your merchant account), used to fund, debit, or transfer between pockets. |\n| `passKey` | A pocket-specific security key required to authorize certain Pocket operations, separate from your account-level public/secret keys. |\n| `payoutSignature` | HMAC signature you generate to authenticate a Payout request, proving it was signed with your secret key rather than tampered with in transit. |\n| `partnerId` | Identifier for a partner/sub-merchant account under the Partners API, used to manage that partner's businesses and settings. |\n| `businessId` | Identifier for a specific business/sub-account created under a partner via the Partners API. |\n| `partnerPassword` | Password used to authenticate as a partner when calling Partners API endpoints. |\n| `newPartnerPassword` | New password value when calling a Partners API endpoint that changes a partner's password. |\n| `destinationPocketID` | The receiving Pocket's identifier in a Pocket-to-Pocket transfer, as distinct from the source `pocketID`. |\n| `pocketEmail` | Email address associated with a Pocket, used for Pocket creation or lookup. |\n| `pocketPassword` | Password for a Pocket account, required to authorize sensitive Pocket operations. |\n| `newPocketPassword` | New password value when calling the Pocket password-change endpoint. |\n| `yourWebhookUrl` | Placeholder for the callback URL you register with SeerBit to receive inbound webhook events (see the Webhooks (reference) folder) — not an endpoint you call, just documents what SeerBit will POST to. |\n| `customerEmail` | Customer email address used to look up invoices via Get Invoice by Customer Email. |\n| `InvoiceNo` | An invoice's number (e.g. SBT-INV-000054), used to fetch, resend, or reference a specific invoice. |\n| `orderNo` | The order number you supplied when creating an invoice, used to look that invoice up again. |\n\n### Response shape\nMost successful responses follow `{ \"status\": \"SUCCESS\", \"data\": { \"code\": \"00\", ... }, \"message\": \"Successful\" }`. A non-\"00\" `code` inside a 200 response usually still means something went wrong downstream (e.g. with the processor) — check `code` and `message`, not just the HTTP status.\n\n### Known inconsistencies (kept, not silently fixed)\n- Invoicing uses `merchant.seerbitapi.com` (singular) while Subscriptions/Plans use `merchants.seerbitapi.com` (plural). Both are correct as documented — easy to mistype.\n- The Payout doc page's own worked examples for *Generate OTP* / *Generate Signature* show `\"actionItem\"`/`\"actionType\": \"APPROVE_DISBURSEMENT\"`, while this collection's saved bodies use `\"PAYOUT\"`. Flagged in both requests — confirm which your sandbox actually accepts before relying on it.\n\nAuth is centralised at the collection level (Bearer, using `BearerToken`); a few payout/partner endpoints additionally need a `Public-Key` header (added per-request).\n\n### 2026-09-02 update\n- Added the **Pocket** folder (9 endpoints) — fully documented on doc.seerbit.com but missing from the original collection. Separate from Payout: Pocket-to-Pocket transfers stay internal; Payout sends money to an external bank.\n- Added a **Webhooks (reference)** folder — not callable requests, but the 6 inbound event payloads SeerBit POSTs to your callback URL, plus the V1/V2 acknowledgment protocol.\n- Fixed *Check Payment Status* to `/api/v3/...` (was v2) and *Standard Checkout*'s split-payment field from a flat `splitCode` to the documented `splits` object — both corrected against doc.seerbit.com.\n- Refund and Disputes & Chargebacks (After Payment nav items) intentionally left out of this pass.\n\n### 2026-09-02 update (2)\n- Added the **Payment Methods** folder (5 endpoints: Card, Bank Account, Transfer, USSD, Mobile Money Payment) — the doc site's \"PAYMENT METHODS\" nav section, entirely missing from the collection before this pass. All POST to `/api/v2/payments/initiates` with a `paymentType` discriminator; this is a direct/inline (PCI-scoped) alternative to the hosted-redirect **Standard Checkout** flow.\n- **Bank Account Payment** has two details flagged as unconfirmed in its own request description (the `paymentType` value, and a possible separate `/payments/validate` endpoint for OTP) rather than guessed — verify with SeerBit before using it.\n- Checked `doc.seerbit.com/libraries-plugins/integrations`: it documents Firebase-based ISV/POS reconciliation integrations (Odoo, Sage, Salesforce, Microsoft Business Central), not distinct API endpoints — nothing to add to this collection from that page.\n\n### 2026-09-03 update\n- Attempted to add descriptions to every collection variable, but Postman's collection-level **Variables** tab has no Description column and the API rejects a `description` field on collection variables entirely — that's a Postman product limitation, not something fixable from here. Corrected below: added a **Variable Reference** table to this Overview page instead, which is the one place in Postman collection-level variable descriptions can actually render.\n- Split **Standard Checkout** into three requests in the same folder: **Normal Payment (No Split)** (the original request, split fields removed), **Easy Split (Split Code)** (references a pre-configured split rule via `splitCode`), and **Full Dynamic Split** (recipients/shares specified inline via a `splits` object). Previously these were conflated into one request.\n- Added 4 requests to **Invoicing**: **Re-send an Invoice**, **Get Invoice by Customer Email**, **Get Invoice by Invoice Number**, **Get Invoice by Order Number** — confirmed against SeerBit's API reference (apis.seerbit.com). Flagged a host discrepancy: these use `seerbitapi.com/invoice/...` (matching the existing Create Invoice request) while doc.seerbit.com's Invoicing page shows `merchant.seerbitapi.com` instead — not resolved, both are documented, verify which one is live for your account.", + "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json", + "createdAt": "2026-09-02T17:09:40.000Z", + "updatedAt": "2026-09-03T16:27:59.000Z", + "lastUpdatedBy": "37518756", + "uid": "37518756-a79d34ce-b3cd-4be3-97de-021f995c5a63" + }, + "item": [ + { + "name": "Authentication", + "item": [ + { + "name": "Generate Encrypted Key", + "id": "dd7e8a41-8305-431c-a0eb-b642b2da9dcb", + "request": { + "auth": { + "type": "noauth" + }, + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "description": "Request body is JSON." + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"key\": \"{{SECRET_KEY}}.{{publicKey}}\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://seerbitapi.com/api/v2/encrypt/keys", + "protocol": "https", + "host": [ + "seerbitapi", + "com" + ], + "path": [ + "api", + "v2", + "encrypt", + "keys" + ] + }, + "description": "Exchanges your `SECRET_KEY` and `publicKey` for an `EncryptedSecKey`. Use that value as the `BearerToken` collection variable — it's the Bearer token for every other authenticated request here. Call this once per session, or whenever your key changes; it does not expire on a fixed schedule but should be re-generated if a request starts failing auth.\n\n**Body fields**\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `key` | string | Yes | Your `SECRET_KEY` and `publicKey` joined with a period: `SECRET_KEY.publicKey` |\n\nThis endpoint is intentionally **No Auth** — you don't have a token yet when you call it." + }, + "response": [], + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-03T09:55:09.000Z", + "uid": "37518756-dd7e8a41-8305-431c-a0eb-b642b2da9dcb" + }, + { + "name": "Generate Hash", + "id": "83409f5c-b1f1-4c94-af9e-e0d0b94b615d", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "description": "Request body is JSON." + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"publicKey\": \"{{publicKey}}\",\n \"paymentReference\": \"sub_ref_001\",\n \"planId\": \"{{planId}}\",\n \"cardNumber\": \"5123450000000008\",\n \"expiryMonth\": \"01\",\n \"callbackUrl\": \"https://example.com/callback\",\n \"expiryYear\": \"28\",\n \"cvv\": \"000\",\n \"amount\": \"100\",\n \"currency\": \"NGN\",\n \"productDescription\": \"Subscription\",\n \"productId\": \"product222\",\n \"country\": \"NG\",\n \"startDate\": \"2026-09-01\",\n \"cardName\": \"Jane Doe\",\n \"billingCycle\": \"MONTHLY\",\n \"email\": \"customer@example.com\",\n \"mobileNumber\": \"08012345678\",\n \"billingPeriod\": \"1\",\n \"subscriptionAmount\": false\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://seerbitapi.com/api/v2/encrypt/hashs", + "protocol": "https", + "host": [ + "seerbitapi", + "com" + ], + "path": [ + "api", + "v2", + "encrypt", + "hashs" + ] + }, + "description": "Generic hash-generation endpoint — you pass the exact same body as the request you want a hash for, and SeerBit returns a hash you attach to that other call. The doc page's own worked example happens to use a subscription-creation payload (shown in this request's saved body); swap the body for whatever request you're actually hashing, keeping the same field names and types that request expects.\n\n**Not independently re-confirmed in this pass:** the doc page's response example describes the _downstream_ payment response (redirectUrl, paymentReference) rather than what this endpoint itself returns — no saved example response here; verify against a live sandbox call before relying on the shape." + }, + "response": [], + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-03T10:00:34.000Z", + "uid": "37518756-83409f5c-b1f1-4c94-af9e-e0d0b94b615d" + } + ], + "id": "43063e0b-aad4-4d8a-8b64-9bd9dd5b5e36", + "description": "Turns your dashboard `SECRET_KEY` and `publicKey` into the Bearer token every other request in this collection uses, and generates signed hashes for the handful of endpoints that require one. Always start here.\n\n### Variables used in this folder\n\n| Variable | Description |\n|---|---|\n| `publicKey` | Your merchant public key from the SeerBit dashboard. Sent in the body of most payment-initiation requests (never as a header) to identify which merchant account a transaction belongs to. |\n| `SECRET_KEY` | Your merchant secret key from the SeerBit dashboard. Used together with your public key to generate the encrypted key for Get Access Token — never send this in a request body or expose it client-side. |\n| `planId` | Identifier for a recurring/subscription plan created via the Recurring & Subscriptions folder. |", + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-02T17:09:41.000Z", + "uid": "37518756-43063e0b-aad4-4d8a-8b64-9bd9dd5b5e36" + }, + { + "name": "Standard Checkout", + "item": [ + { + "name": "Normal Payment (No Split)", + "id": "088dca44-bfcc-40bd-b689-4a7ab5421647", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "description": "Request body is JSON." + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"publicKey\": \"{{publicKey}}\",\n \"amount\": \"5000.00\",\n \"currency\": \"NGN\",\n \"country\": \"NG\",\n \"paymentReference\": \"payment_reference8\",\n \"email\": \"customer@example.com\",\n \"fullName\": \"Jane Doe\",\n \"tokenize\": false,\n \"callbackUrl\": \"https://example.com/callback\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://seerbitapi.com/api/v2/payments", + "protocol": "https", + "host": [ + "seerbitapi", + "com" + ], + "path": [ + "api", + "v2", + "payments" + ] + }, + "description": "Creates a transaction and returns a `redirectLink` to SeerBit's hosted checkout page — send the customer there to enter payment details and complete the charge. No card data touches your server with this flow, and the full amount settles to your main merchant account with no split.\n\n**Body fields**\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `publicKey` | string | Yes | Merchant public key from the dashboard |\n| `amount` | string | Yes | Amount to charge |\n| `currency` | string | Yes | Transaction currency, e.g. `NGN`, `USD` |\n| `country` | string | Yes | Country the transaction originates from |\n| `paymentReference` | string | Yes | Unique reference you generate per transaction |\n| `email` | string | Yes | Customer email address |\n| `fullName` | string | Yes | Customer full name |\n| `callbackUrl` | string | Yes | Where SeerBit redirects the customer after payment |\n| `tokenize` | boolean | No | **Confirmed by SeerBit.** If `true`: (1) the checkout page on `redirectLink` only offers **Card** as a payment method — no bank transfer, USSD, or other channels; (2) SeerBit tokenizes the card, and the resulting `authorizationCode` is not in this endpoint's own response — it's returned when you call **Check Payment Status** afterward with the `paymentReference`. Use that `authorizationCode` with *Charge Authorization Token* / *Bulk Charge Token* to charge the same card again. Defaults to `false` if omitted. |\n\nThis is the baseline request with no split fields — see the sibling requests in this folder **Standard Checkout — Easy Split (Split Code)** and **Standard Checkout — Full Dynamic Split** for the two ways to divide a payment across sub-accounts.\n\nA `409` means `paymentReference` has already been used — generate a new one per attempt, don't retry with the same value." + }, + "response": [], + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-03T10:15:35.000Z", + "uid": "37518756-088dca44-bfcc-40bd-b689-4a7ab5421647" + }, + { + "name": "Standard Checkout — Easy Split (Split Code)", + "id": "79a129fe-920d-4668-b816-f6f1e70b92a2", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "description": "Request body is JSON." + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"publicKey\": \"{{publicKey}}\",\n \"amount\": \"5000.00\",\n \"currency\": \"NGN\",\n \"country\": \"NG\",\n \"paymentReference\": \"payment_reference_split_code1\",\n \"email\": \"customer@example.com\",\n \"fullName\": \"Jane Doe\",\n \"tokenize\": false,\n \"callbackUrl\": \"https://example.com/callback\",\n \"splitCode\": \"SPLIT_RULE_CODE\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://seerbitapi.com/api/v2/payments", + "protocol": "https", + "host": [ + "seerbitapi", + "com" + ], + "path": [ + "api", + "v2", + "payments" + ] + }, + "description": "Same Standard Checkout flow as **Normal Payment (No Split)**, plus a single `splitCode` field: the code of a split rule you pre-configure once (recipients, percentages/amounts, fee bearer) on the SeerBit dashboard, then reference by code at payment time. This is the \"easy\" option — you don't specify recipients or amounts inline; the rule already defines them.\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `splitCode` | string | Yes (for this variant) | Reference to a split rule created in advance on the SeerBit dashboard. |\n| `tokenize` | boolean | No | **Confirmed by SeerBit.** If `true`, the checkout page restricts payment to **Card only**, and the `authorizationCode` for the tokenized card comes back from **Check Payment Status**, not this endpoint's own response. Defaults to `false`. |\n| *(all other fields)* | | Yes | Same as **Normal Payment (No Split)** |\n\nUse this when your split recipients and their shares are fixed and known ahead of time. If you need to set the split's recipients or shares dynamically per transaction, use **Standard Checkout — Full Dynamic Split** instead.\n\n**Not fully confirmed**: doc.seerbit.com documents `splitCode` only as `\"Split rule Code\"` in an example body, without a dedicated page describing how split rules are created on the dashboard or the exact code format — check your dashboard's split-rule setup screen for the value to use here." + }, + "response": [], + "createdAt": "2026-09-03T08:03:22.000Z", + "updatedAt": "2026-09-03T10:15:40.000Z", + "uid": "37518756-79a129fe-920d-4668-b816-f6f1e70b92a2" + }, + { + "name": "Standard Checkout — Full Dynamic Split", + "id": "295a63a4-2816-4cbc-bb3f-5db7615e0371", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "description": "Request body is JSON." + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"publicKey\": \"{{publicKey}}\",\n \"amount\": \"5000.00\",\n \"currency\": \"NGN\",\n \"country\": \"NG\",\n \"paymentReference\": \"payment_reference_dynamic1\",\n \"email\": \"customer@example.com\",\n \"fullName\": \"Jane Doe\",\n \"tokenize\": false,\n \"callbackUrl\": \"https://example.com/callback\",\n \"splits\": {\n \"type\": \"PERCENTAGE\",\n \"transactionFee\": \"PARENT_ACCOUNT\",\n \"items\": [\n {\n \"subAccountCode\": \"SUB_ACC_001\",\n \"value\": \"30\"\n }\n ]\n }\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://seerbitapi.com/api/v2/payments", + "protocol": "https", + "host": [ + "seerbitapi", + "com" + ], + "path": [ + "api", + "v2", + "payments" + ] + }, + "description": "Same Standard Checkout flow as **Normal Payment (No Split)**, plus a `splits` object defining recipients and shares inline, at payment time — no pre-configured split rule needed. Use this when split details aren't known in advance (e.g. a marketplace computing a different vendor split per order).\n\n**`splits` object fields**\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `type` | string | Yes | `FLAT` (fixed amount per recipient) or `PERCENTAGE` |\n| `transactionFee` | string | Yes | Who bears the transaction fee — `ALL_ACCOUNTS`, `PROPORTIONATE`, `SUB_ACCOUNT`, or `PARENT_ACCOUNT` |\n| `bearerSubAccountCode` | string | Only if `transactionFee` is `SUB_ACCOUNT` | Which sub-account bears the fee |\n| `items` | array | Yes | Each entry: `subAccountCode` and its `value` (amount or percentage, matching `type`) |\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `tokenize` | boolean | No | **Confirmed by SeerBit.** If `true`, the checkout page restricts payment to **Card only**, and the `authorizationCode` for the tokenized card comes back from **Check Payment Status**, not this endpoint's own response. Defaults to `false`. |\n| *(all other core fields)* | | Yes | Same as **Normal Payment (No Split)** |\n\nCompare **Standard Checkout — Easy Split (Split Code)**, which references a split rule you configured ahead of time instead of specifying recipients inline." + }, + "response": [], + "createdAt": "2026-09-03T08:03:22.000Z", + "updatedAt": "2026-09-03T10:15:46.000Z", + "uid": "37518756-295a63a4-2816-4cbc-bb3f-5db7615e0371" + } + ], + "id": "d911fd7b-b822-4f22-99a3-6382bdd8beef", + "description": "The simplest way to collect a payment: create a transaction and redirect the customer to SeerBit's hosted checkout page to complete it. No card data ever touches your servers.\n\nThree ways to use Standard Checkout, in this folder: **Normal Payment (No Split)** (full amount to your main account), **Easy Split (Split Code)** (pre-configured split rule referenced by code), and **Full Dynamic Split** (split recipients/shares specified inline per transaction).\n\n### Variables used in this folder\n\n| Variable | Description |\n|---|---|\n| `publicKey` | Your merchant public key from the SeerBit dashboard. Sent in the body of most payment-initiation requests (never as a header) to identify which merchant account a transaction belongs to. |", + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-02T17:09:41.000Z", + "uid": "37518756-d911fd7b-b822-4f22-99a3-6382bdd8beef" + }, + { + "name": "Virtual Accounts", + "item": [ + { + "name": "Create Virtual Account", + "id": "97ebdc2e-4890-4e75-8c56-58680727556f", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "description": "Request body is JSON." + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"publicKey\": \"{{publicKey}}\",\n \"fullName\": \"Jane Smith\",\n \"bankVerificationNumber\": \"\",\n \"currency\": \"NGN\",\n \"country\": \"NG\",\n \"reference\": \"FIRST_VIRTUAL_17\",\n \"email\": \"js@emaildomain.com\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://seerbitapi.com/api/v2/virtual-accounts", + "protocol": "https", + "host": [ + "seerbitapi", + "com" + ], + "path": [ + "api", + "v2", + "virtual-accounts" + ] + }, + "description": "Issues a dedicated bank account number for one customer. Transfers into that account are reconciled back to the customer automatically — use *Get Payments* to see what's landed on it.\n\n**Body fields**\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `publicKey` | string | Yes | Merchant public key |\n| `fullName` | string | Yes | Customer's full name, used as the account name |\n| `email` | string | Yes | Customer email |\n| `currency` | string | Yes | Currency code, e.g. `NGN` |\n| `country` | string | Yes | Country code, e.g. `NG` |\n| `reference` | string | Yes | Your unique reference for this virtual account — also used to fetch/delete it later |\n| `bankVerificationNumber` | string | No | Customer's BVN, for verification |\n\nResponse returns `walletName`, `bankName`, and `accountNumber` for the customer to pay into." + }, + "response": [], + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-03T09:56:25.000Z", + "uid": "37518756-97ebdc2e-4890-4e75-8c56-58680727556f" + }, + { + "name": "Get Virtual Account", + "id": "72654374-7cf1-4233-8e7a-732506cf534c", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "https://seerbitapi.com/api/v2/virtual-accounts/{{paymentReference}}", + "protocol": "https", + "host": [ + "seerbitapi", + "com" + ], + "path": [ + "api", + "v2", + "virtual-accounts", + "{{paymentReference}}" + ] + }, + "description": "Fetches details for one virtual account by the `reference` used to create it (passed here as `paymentReference`). Response includes `linkingReference`, `wallet`, `bankName`, and `accountNumber`." + }, + "response": [], + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-03T09:56:27.000Z", + "uid": "37518756-72654374-7cf1-4233-8e7a-732506cf534c" + }, + { + "name": "Delete Virtual Account", + "id": "09ca122f-156f-4795-96c3-29fb94160249", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "https://seerbitapi.com/api/v2/virtual-accounts/{{reference}}", + "protocol": "https", + "host": [ + "seerbitapi", + "com" + ], + "path": [ + "api", + "v2", + "virtual-accounts", + "{{reference}}" + ] + }, + "description": "Deactivates a virtual account by its `reference`. On success, returns a confirmation message — \"Virtual account has been deleted\"." + }, + "response": [], + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-03T09:56:28.000Z", + "uid": "37518756-09ca122f-156f-4795-96c3-29fb94160249" + }, + { + "name": "Get Payments", + "id": "12883b22-7e30-4179-92b1-5b2d76b5a5eb", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "https://seerbitapi.com/api/v2/virtual-accounts/{{publicKey}}/{{accountNumber}}", + "protocol": "https", + "host": [ + "seerbitapi", + "com" + ], + "path": [ + "api", + "v2", + "virtual-accounts", + "{{publicKey}}", + "{{accountNumber}}" + ] + }, + "description": "Lists transactions that have landed on one virtual account, identified by `publicKey` and `accountNumber` in the path. Each entry includes `amount`, customer name, `paymentType`, `status`, settlement info, and `transferType: RESERVE_ACCOUNT`." + }, + "response": [], + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-03T09:56:30.000Z", + "uid": "37518756-12883b22-7e30-4179-92b1-5b2d76b5a5eb" + } + ], + "id": "cf48c66c-d748-4ede-bc29-fc0a78110526", + "description": "Issue a dedicated bank account number per customer so they can pay by direct bank transfer; funds landing on that account are reconciled back to the customer automatically.\n\n### Variables used in this folder\n\n| Variable | Description |\n|---|---|\n| `publicKey` | Your merchant public key from the SeerBit dashboard. Sent in the body of most payment-initiation requests (never as a header) to identify which merchant account a transaction belongs to. |\n| `paymentReference` | A unique reference you generate per transaction attempt (not returned by SeerBit). Used to initiate a payment and to look it up afterwards via Check Payment Status. |\n| `accountNumber` | A bank account number — either a virtual account SeerBit provisioned for a customer, or (for Payout/Bank Account Payment) the destination/source account to move funds to or from. |\n| `reference` | A generic transaction or operation reference used to look up a specific record where no more specific reference variable applies. |", + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-03T16:27:10.000Z", + "uid": "37518756-cf48c66c-d748-4ede-bc29-fc0a78110526" + }, + { + "name": "Payment Methods", + "item": [ + { + "name": "Card Payment", + "id": "9c621b9d-0182-4930-b5c7-7cdba14dca30", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + }, + { + "key": "Authorization", + "value": "Bearer {{accessToken}}" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"publicKey\": \"{{publicKey}}\",\n \"amount\": \"5000.00\",\n \"currency\": \"NGN\",\n \"country\": \"NG\",\n \"paymentReference\": \"payment_reference_card1\",\n \"email\": \"customer@example.com\",\n \"fullName\": \"Jane Doe\",\n \"paymentType\": \"CARD\",\n \"cardDetails\": {\n \"pan\": \"5060990580000217499\",\n \"expiryMonth\": \"03\",\n \"expiryYear\": \"2027\",\n \"cvv\": \"111\"\n },\n \"callbackUrl\": \"https://example.com/callback\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://seerbitapi.com/api/v2/payments/initiates", + "protocol": "https", + "host": [ + "seerbitapi", + "com" + ], + "path": [ + "api", + "v2", + "payments", + "initiates" + ] + }, + "description": "Direct/inline card charge — you collect the card's PAN, expiry and CVV on your own form and POST them here, instead of redirecting the customer to SeerBit's hosted page (compare **Standard Checkout**, which never touches raw card data on your server). Because this endpoint receives raw card details, your integration is in PCI-DSS scope — SeerBit's hosted **Standard Checkout** flow is the lower-compliance-burden alternative most integrators should default to.\n\n**Body fields**\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `publicKey` | string | Yes | Merchant public key |\n| `amount` | string | Yes | Amount to charge |\n| `currency` | string | Yes | e.g. `NGN` |\n| `country` | string | Yes | Country code |\n| `paymentReference` | string | Yes | Unique reference you generate |\n| `email` | string | Yes | Customer email |\n| `fullName` | string | Yes | Customer full name |\n| `paymentType` | string | Yes | `CARD` for this flow |\n| `cardDetails.pan` | string | Yes | Card number |\n| `cardDetails.expiryMonth` / `expiryYear` | string | Yes | Card expiry |\n| `cardDetails.cvv` | string | Yes | Card CVV |\n| `callbackUrl` | string | Yes | Where SeerBit sends the final result |\n\n**OTP step**: many card transactions come back requiring 3DS/OTP authentication. Per the Card Payment doc page, you complete this by POSTing again to this **same** `/api/v2/payments/initiates` URL with a body shaped like:\n```json\n{\n \"transaction\": {\n \"linkingreference\": \"\",\n \"otp\": \"\"\n }\n}\n```\nThen poll **Check Payment Status** (Payment Query folder) with `paymentReference` to confirm the final state." + }, + "response": [], + "createdAt": "2026-09-02T17:57:10.000Z", + "updatedAt": "2026-09-03T09:58:10.000Z", + "uid": "37518756-9c621b9d-0182-4930-b5c7-7cdba14dca30" + }, + { + "name": "Bank Account Payment", + "id": "5bee5f40-63be-4a9f-9702-83153ea4f5aa", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + }, + { + "key": "Authorization", + "value": "Bearer {{accessToken}}" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"publicKey\": \"{{publicKey}}\",\n \"amount\": \"5000.00\",\n \"currency\": \"NGN\",\n \"country\": \"NG\",\n \"paymentReference\": \"payment_reference_bank1\",\n \"email\": \"customer@example.com\",\n \"fullName\": \"Jane Doe\",\n \"paymentType\": \"**Not confirmed** — see description\",\n \"accountNumber\": \"0000000000\",\n \"bankCode\": \"058\",\n \"callbackUrl\": \"https://example.com/callback\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://seerbitapi.com/api/v2/payments/initiates", + "protocol": "https", + "host": [ + "seerbitapi", + "com" + ], + "path": [ + "api", + "v2", + "payments", + "initiates" + ] + }, + "description": "Initiates a direct bank-account debit: the customer authorizes a charge straight from their bank account (via account number + bank code) rather than a card, USSD code, or transfer-in.\n\n**Not confirmed against doc.seerbit.com** — two details on the Bank Account Payment doc page could not be pinned down and are flagged rather than guessed:\n1. The exact `paymentType` value for this flow (unlike `CARD`/`USSD`/`TRANSFER`/`MOMO`, the doc page doesn't spell this one out explicitly) — placeholder left in the sample body above; check the dashboard/API response or contact SeerBit support to confirm before using this request.\n2. The doc page references a separate **`/payments/validate`** endpoint for the OTP/authorization step, but doesn't give its full URL, method, or body — this conflicts with the Card Payment page, which documents OTP validation as a second POST to this *same* `/api/v2/payments/initiates` URL with a `{\"transaction\": {\"linkingreference\":..., \"otp\":...}}` body. It's unclear whether Bank Account Payment genuinely uses a different endpoint or the doc page is just describing the same flow loosely.\n\n**Body fields** (`accountNumber` + `bankCode` identify the account to debit; other fields match Card Payment). Verify the `paymentType` value and validation step directly with SeerBit before relying on this request." + }, + "response": [], + "createdAt": "2026-09-02T17:57:10.000Z", + "updatedAt": "2026-09-03T09:58:15.000Z", + "uid": "37518756-5bee5f40-63be-4a9f-9702-83153ea4f5aa" + }, + { + "name": "Transfer", + "id": "92ed341c-428b-4c91-96bf-d3c2015dc32d", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + }, + { + "key": "Authorization", + "value": "Bearer {{accessToken}}" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"publicKey\": \"{{publicKey}}\",\n \"amount\": \"5000.00\",\n \"currency\": \"NGN\",\n \"country\": \"NG\",\n \"paymentReference\": \"payment_reference_transfer1\",\n \"email\": \"customer@example.com\",\n \"fullName\": \"Jane Doe\",\n \"paymentType\": \"TRANSFER\",\n \"callbackUrl\": \"https://example.com/callback\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://seerbitapi.com/api/v2/payments/initiates", + "protocol": "https", + "host": [ + "seerbitapi", + "com" + ], + "path": [ + "api", + "v2", + "payments", + "initiates" + ] + }, + "description": "Initiates a bank-transfer payment: SeerBit returns a dynamic virtual account number for this transaction that the customer transfers the exact amount into from their own banking app; SeerBit matches the credit and confirms the transaction. This is distinct from the **Virtual Accounts** folder, which provisions a *persistent* account number for a customer across many transactions — this is a one-off, per-transaction account.\n\n**Body fields**\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `paymentType` | string | Yes | `TRANSFER` |\n| (other fields) | | Yes | Same core fields as Card Payment |\n\nPoll **Check Payment Status** (Payment Query folder) with `paymentReference`, or listen for the `transaction` webhook, to detect when the transfer lands." + }, + "response": [], + "createdAt": "2026-09-02T17:57:10.000Z", + "updatedAt": "2026-09-03T09:58:19.000Z", + "uid": "37518756-92ed341c-428b-4c91-96bf-d3c2015dc32d" + }, + { + "name": "USSD Payment", + "id": "e4eb272e-ae33-485a-ac9d-b0e8e813b4d0", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + }, + { + "key": "Authorization", + "value": "Bearer {{accessToken}}" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"publicKey\": \"{{publicKey}}\",\n \"amount\": \"5000.00\",\n \"currency\": \"NGN\",\n \"country\": \"NG\",\n \"paymentReference\": \"payment_reference_ussd1\",\n \"email\": \"customer@example.com\",\n \"fullName\": \"Jane Doe\",\n \"paymentType\": \"USSD\",\n \"bankCode\": \"058\",\n \"callbackUrl\": \"https://example.com/callback\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://seerbitapi.com/api/v2/payments/initiates", + "protocol": "https", + "host": [ + "seerbitapi", + "com" + ], + "path": [ + "api", + "v2", + "payments", + "initiates" + ] + }, + "description": "Initiates a USSD payment: SeerBit returns a USSD string (e.g. `*723*...#`) the customer dials on their phone from the bank account linked to `bankCode` to authorize the debit — no card or app needed.\n\n**Body fields**\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `paymentType` | string | Yes | `USSD` |\n| `bankCode` | string | Yes | Bank's USSD routing code, e.g. `058` for GTBank |\n| (other fields) | | Yes | Same `publicKey`/`amount`/`currency`/`country`/`paymentReference`/`email`/`fullName`/`callbackUrl` as Card Payment |\n\nThe initial response includes the USSD code to display to the customer. Poll **Check Payment Status** (Payment Query folder) with `paymentReference` — there's no separate OTP step; authorization happens on the phone via the USSD session itself." + }, + "response": [], + "createdAt": "2026-09-02T17:57:10.000Z", + "updatedAt": "2026-09-03T09:58:20.000Z", + "uid": "37518756-e4eb272e-ae33-485a-ac9d-b0e8e813b4d0" + }, + { + "name": "Mobile Money Payment", + "id": "4c87fa9b-986d-4966-9575-d64487a91de3", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + }, + { + "key": "Authorization", + "value": "Bearer {{accessToken}}" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"publicKey\": \"{{publicKey}}\",\n \"amount\": \"5000.00\",\n \"currency\": \"GHS\",\n \"country\": \"GH\",\n \"paymentReference\": \"payment_reference_momo1\",\n \"email\": \"customer@example.com\",\n \"fullName\": \"Jane Doe\",\n \"paymentType\": \"MOMO\",\n \"mobileNumber\": \"233241234567\",\n \"network\": \"MTN\",\n \"callbackUrl\": \"https://example.com/callback\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://seerbitapi.com/api/v2/payments/initiates", + "protocol": "https", + "host": [ + "seerbitapi", + "com" + ], + "path": [ + "api", + "v2", + "payments", + "initiates" + ] + }, + "description": "Initiates a mobile-money payment (e.g. MTN MoMo, AirtelTigo) — SeerBit sends a prompt to the customer's phone on the given `mobileNumber`/`network`, and the customer approves the debit directly on their handset. Used primarily for Ghana (`GHS`) and other African mobile-money markets.\n\n**Body fields**\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `paymentType` | string | Yes | `MOMO` |\n| `mobileNumber` | string | Yes | Customer's mobile-money-linked phone number |\n| `network` | string | Yes | Mobile network operator, e.g. `MTN`, `AIRTELTIGO`, `VODAFONE` |\n| (other fields) | | Yes | Same core fields as Card Payment |\n\nPoll **Check Payment Status** (Payment Query folder) with `paymentReference` after the customer approves the prompt on their phone." + }, + "response": [], + "createdAt": "2026-09-02T17:57:10.000Z", + "updatedAt": "2026-09-03T09:58:28.000Z", + "uid": "37518756-4c87fa9b-986d-4966-9575-d64487a91de3" + } + ], + "id": "6f1a2b3c-4d5e-4f60-8a1b-2c3d4e5f6071", + "description": "Direct/inline payment flows via `POST /api/v2/payments/initiates` — you collect payment details on your own form/app and submit them here, differentiated by the `paymentType` field. This is a different integration model from **Standard Checkout** (`/api/v2/payments`), which redirects the customer to a SeerBit-hosted page and never exposes raw payment details to your server.\n\nDocumented on doc.seerbit.com's **PAYMENT METHODS** nav section, previously missing from this collection entirely. Card, USSD, Transfer and Mobile Money are grounded directly in their doc pages; **Bank Account Payment** has two unconfirmed details flagged in its own description — don't treat its sample body as final without checking with SeerBit first.\n\nAll five requests share the same PCI/compliance consideration as Card Payment: because you're handling raw payment credentials, prefer Standard Checkout unless you specifically need an inline experience.\n\n### Variables used in this folder\n\n| Variable | Description |\n|---|---|\n| `publicKey` | Your merchant public key from the SeerBit dashboard. Sent in the body of most payment-initiation requests (never as a header) to identify which merchant account a transaction belongs to. |", + "createdAt": "2026-09-02T17:57:10.000Z", + "updatedAt": "2026-09-03T16:27:21.000Z", + "uid": "37518756-6f1a2b3c-4d5e-4f60-8a1b-2c3d4e5f6071" + }, + { + "name": "Payment Query", + "item": [ + { + "name": "Check Payment Status", + "id": "aa1ffea7-ff3f-477d-8ba4-c9a011de7151", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "https://seerbitapi.com/api/v3/payments/query/{{paymentReference}}", + "protocol": "https", + "host": [ + "seerbitapi", + "com" + ], + "path": [ + "api", + "v3", + "payments", + "query", + "{{paymentReference}}" + ] + }, + "description": "Looks up the current status of a transaction by its `paymentReference`. **Corrected to v3** — the doc.seerbit.com page for this actually documents `/api/v3/payments/query/{paymentReference}` (matching what *Get Card Authorization Code* already used), not v2 as this request previously had it. The v3 response includes fuller detail: status, amount, gateway message, masked card details, and customer info.\n\nUse this after Standard Checkout, Create Token, or any flow that returns a `paymentReference`, to confirm the final state rather than relying only on the initial response's `code`.\n\n**Tokenized Standard Checkout**: if the original Standard Checkout call had `tokenize: true`, this is where the `authorizationCode` for the saved card actually comes back — it is not in Standard Checkout's own response. Save it from here to use with *Charge Authorization Token* / *Bulk Charge Token*." + }, + "response": [], + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-03T10:15:48.000Z", + "uid": "37518756-aa1ffea7-ff3f-477d-8ba4-c9a011de7151" + } + ], + "id": "bc79f7ed-9699-4a7a-8563-6543dfdc038d", + "description": "Look up the current status of a transaction by its `paymentReference` after Standard Checkout, Tokenization, or any other flow that produces one.\n\n### Variables used in this folder\n\n| Variable | Description |\n|---|---|\n| `paymentReference` | A unique reference you generate per transaction attempt (not returned by SeerBit). Used to initiate a payment and to look it up afterwards via Check Payment Status. |", + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-03T16:27:29.000Z", + "uid": "37518756-bc79f7ed-9699-4a7a-8563-6543dfdc038d" + }, + { + "name": "Invoicing", + "item": [ + { + "name": "Create Invoice", + "id": "65757022-4bcf-4466-afdb-a718d21d3ca7", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "description": "Request body is JSON." + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"publicKey\": \"{{publicKey}}\",\n \"orderNo\": \"333333221321\",\n \"dueDate\": \"2026-10-23\",\n \"currency\": \"NGN\",\n \"receiversName\": \"Jane Smith\",\n \"customerEmail\": \"janesmith@emaildomain.com\",\n \"invoiceItems\": [\n {\n \"itemName\": \"Bluetooth Pods\",\n \"quantity\": 1,\n \"rate\": 25000,\n \"tax\": 7.5\n },\n {\n \"itemName\": \"Quest 10\",\n \"quantity\": 4,\n \"rate\": 100000,\n \"tax\": 7.5\n }\n ]\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://merchant.seerbitapi.com/invoice/create", + "protocol": "https", + "host": [ + "merchant", + "seerbitapi", + "com" + ], + "path": [ + "invoice", + "create" + ] + }, + "description": "Creates and sends an itemised invoice to a customer by email, without you building a checkout flow. Source: doc.seerbit.com/online-payment/payment-features/invoicing, cross-checked with the original collection (the doc page's own code samples only show empty placeholder URLs, so the exact host/path is carried over from the original working collection, not independently re-confirmed).\n\n**Body fields**\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `publicKey` | string | Yes | Merchant public key |\n| `orderNo` | string | Yes | Unique order identifier |\n| `dueDate` | string | Yes | Invoice due date |\n| `currency` | string | Yes | Currency code, e.g. `NGN` |\n| `receiversName` | string | Yes | Customer name shown on the invoice |\n| `customerEmail` | string | Yes | Where the invoice is sent |\n| `invoiceItems` | array | Yes | Line items, each with `itemName`, `quantity`, `rate`, `tax` (tax as a percentage) |" + }, + "response": [], + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-03T09:55:53.000Z", + "uid": "37518756-65757022-4bcf-4466-afdb-a718d21d3ca7" + }, + { + "name": "Bulk Invoice Requests", + "id": "39ab3068-2fab-4787-b257-1ed4dc909020", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "description": "Request body is JSON." + } + ], + "body": { + "mode": "raw", + "raw": "[\n {\n \"orderNo\": \"AZPOP12929322\",\n \"dueDate\": \"2026-03-19\",\n \"currency\": \"NGN\",\n \"customerEmail\": \"testtechblazer1@mailinator.com\",\n \"invoiceItems\": [\n {\n \"itemName\": \"Air Pod 2\",\n \"quantity\": 1,\n \"rate\": 5,\n \"tax\": 1.5\n },\n {\n \"itemName\": \"Quest 1\",\n \"quantity\": 4,\n \"rate\": 10,\n \"tax\": 2.5\n },\n {\n \"itemName\": \"Earpod\",\n \"quantity\": 1,\n \"rate\": 100,\n \"tax\": 0.5\n }\n ]\n },\n {\n \"orderNo\": \"AZPOP12929323\",\n \"dueDate\": \"2026-03-28\",\n \"currency\": \"NGN\",\n \"receiversName\": \"Frank John\",\n \"customerEmail\": \"testtechblazer2@mailinator.com\",\n \"invoiceItems\": [\n {\n \"itemName\": \"Power Bulb\",\n \"quantity\": 10,\n \"rate\": 5,\n \"tax\": 0.5\n }\n ]\n }\n]", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://merchant.seerbitapi.com/invoice/{{publicKey}}/bulk-requests", + "protocol": "https", + "host": [ + "merchant", + "seerbitapi", + "com" + ], + "path": [ + "invoice", + "{{publicKey}}", + "bulk-requests" + ] + }, + "description": "Same as *Create Invoice*, but accepts a JSON array to send multiple invoices in one call. Same sourcing caveat as Create Invoice — host/path carried over from the original collection, not independently re-confirmed against a doc.seerbit.com code sample.\n\n**Body:** array of invoice objects, each shaped like *Create Invoice*'s body (`receiversName` is optional per the saved example — the other fields are required)." + }, + "response": [], + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-03T09:55:58.000Z", + "uid": "37518756-39ab3068-2fab-4787-b257-1ed4dc909020" + }, + { + "name": "Re-send an Invoice", + "id": "eeefb9e6-6cc6-41ed-945e-ef506c8f43e7", + "request": { + "method": "GET", + "header": [ + { + "key": "Authorization", + "value": "Bearer {{BearerToken}}", + "description": "Bearer token from Get Access Token." + } + ], + "url": { + "raw": "https://seerbitapi.com/invoice/{{publicKey}}/send/{{InvoiceNo}}", + "protocol": "https", + "host": [ + "seerbitapi", + "com" + ], + "path": [ + "invoice", + "{{publicKey}}", + "send", + "{{InvoiceNo}}" + ] + }, + "description": "Re-sends an existing invoice (identified by `InvoiceNo`) to its customer by email — use this when the original invoice email didn't arrive or needs to go out again, rather than creating a duplicate invoice with Create Invoice.\n\n**Path parameters**\n\n| Param | Description |\n|---|---|\n| `publicKey` | Merchant public key |\n| `InvoiceNo` | The invoice's number, e.g. `SBT-INV-000054`, from Create Invoice's response |\n\nReturns a `code`/`payload` confirmation; it doesn't return the invoice body again." + }, + "response": [], + "createdAt": "2026-09-03T08:03:22.000Z", + "updatedAt": "2026-09-03T09:56:01.000Z", + "uid": "37518756-eeefb9e6-6cc6-41ed-945e-ef506c8f43e7" + }, + { + "name": "Get Invoice by Customer Email", + "id": "339aa7bd-61cf-480e-9f8d-b589dd9d10be", + "request": { + "method": "GET", + "header": [ + { + "key": "Authorization", + "value": "Bearer {{BearerToken}}", + "description": "Bearer token from Get Access Token." + } + ], + "url": { + "raw": "https://seerbitapi.com/invoice/{{publicKey}}/customer/{{customerEmail}}", + "protocol": "https", + "host": [ + "seerbitapi", + "com" + ], + "path": [ + "invoice", + "{{publicKey}}", + "customer", + "{{customerEmail}}" + ] + }, + "description": "Looks up invoice(s) associated with a given customer email address — useful when you know who the invoice was billed to but not its invoice or order number.\n\n**Path parameters**\n\n| Param | Description |\n|---|---|\n| `publicKey` | Merchant public key |\n| `customerEmail` | The customer's email address the invoice was billed to |\n\nAdd a `customerEmail` collection variable with the address you're looking up, or replace the path segment directly." + }, + "response": [], + "createdAt": "2026-09-03T08:03:22.000Z", + "updatedAt": "2026-09-03T09:56:03.000Z", + "uid": "37518756-339aa7bd-61cf-480e-9f8d-b589dd9d10be" + }, + { + "name": "Get Invoice by Invoice Number", + "id": "cbd5a247-e9f4-49a4-9e3f-7665d02b5278", + "request": { + "method": "GET", + "header": [ + { + "key": "Authorization", + "value": "Bearer {{BearerToken}}", + "description": "Bearer token from Get Access Token." + } + ], + "url": { + "raw": "https://seerbitapi.com/invoice/{{publicKey}}/{{InvoiceNo}}", + "protocol": "https", + "host": [ + "seerbitapi", + "com" + ], + "path": [ + "invoice", + "{{publicKey}}", + "{{InvoiceNo}}" + ] + }, + "description": "Fetches a single invoice's full detail — including its line items (`invoiceItems`) — by `InvoiceNo`.\n\n**Path parameters**\n\n| Param | Description |\n|---|---|\n| `publicKey` | Merchant public key |\n| `InvoiceNo` | The invoice's number, e.g. `SBT-INV-000054` |\n\nResponse includes `status` (e.g. `DRAFT`), `totalAmount`, `dueDate`, `currency`, and the itemized `invoiceItems` array — unlike **Get Invoice by orderNo**, which returns a summary without line items." + }, + "response": [], + "createdAt": "2026-09-03T08:03:22.000Z", + "updatedAt": "2026-09-03T09:56:06.000Z", + "uid": "37518756-cbd5a247-e9f4-49a4-9e3f-7665d02b5278" + }, + { + "name": "Get Invoice by Order Number", + "id": "d58d8306-c878-406b-849b-4e93329bfd45", + "request": { + "method": "GET", + "header": [ + { + "key": "Authorization", + "value": "Bearer {{BearerToken}}", + "description": "Bearer token from Get Access Token." + } + ], + "url": { + "raw": "https://seerbitapi.com/invoice/{{publicKey}}/order/{{orderNo}}", + "protocol": "https", + "host": [ + "seerbitapi", + "com" + ], + "path": [ + "invoice", + "{{publicKey}}", + "order", + "{{orderNo}}" + ] + }, + "description": "Looks up an invoice by the `orderNo` you supplied when creating it via Create Invoice — useful when your own system tracks orders and you don't have SeerBit's `InvoiceNo` on hand.\n\n**Path parameters**\n\n| Param | Description |\n|---|---|\n| `publicKey` | Merchant public key |\n| `orderNo` | The order number you passed to Create Invoice |\n\nReturns a summary (no itemized `invoiceItems` array) — use **Get Invoice by Invoice Number** with the `invoiceNo` from this response if you need line-item detail." + }, + "response": [], + "createdAt": "2026-09-03T08:03:22.000Z", + "updatedAt": "2026-09-03T09:56:08.000Z", + "uid": "37518756-d58d8306-c878-406b-849b-4e93329bfd45" + } + ], + "id": "6918908c-5d3a-46c7-b28f-a01dd0b9cdf5", + "description": "Generate and send itemised invoices to customers, either one at a time or in bulk, without building a checkout flow yourself.\n\nAdded **Re-send an Invoice**, **Get Invoice by Customer Email**, **Get Invoice by Invoice Number**, and **Get Invoice by Order Number** — all confirmed via SeerBit's API reference (apis.seerbit.com), previously missing from this collection. Note the base host here is `seerbitapi.com/invoice/...`, matching Create Invoice already in this folder; a separate doc.seerbit.com page shows these under `merchant.seerbitapi.com/invoice/...` instead — flagging the discrepancy rather than guessing which is current.\n\n### Variables used in this folder\n\n| Variable | Description |\n|---|---|\n| `publicKey` | Your merchant public key from the SeerBit dashboard. Sent in the body of most payment-initiation requests (never as a header) to identify which merchant account a transaction belongs to. |\n| `BearerToken` | OAuth access token returned by Get Access Token (Authentication folder). Sent as `Authorization: Bearer {{BearerToken}}` on requests that require an authenticated merchant session. |\n| `customerEmail` | Customer email address used to look up invoices via Get Invoice by Customer Email. |\n| `InvoiceNo` | An invoice's number (e.g. SBT-INV-000054), used to fetch, resend, or reference a specific invoice. |\n| `orderNo` | The order number you supplied when creating an invoice, used to look that invoice up again. |", + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-03T16:27:39.000Z", + "uid": "37518756-6918908c-5d3a-46c7-b28f-a01dd0b9cdf5" + }, + { + "name": "Tokenization", + "item": [ + { + "name": "Create Token", + "id": "ddcd0daf-3c26-4360-aa75-189bcce28954", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "description": "Request body is JSON." + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"publicKey\": \"{{publicKey}}\",\n \"amount\": \"50\",\n \"fullName\": \"Jane Smith\",\n \"mobileNumber\": \"03447522256\",\n \"redirectUrl\": \"http://example.com\",\n \"currency\": \"NGN\",\n \"country\": \"NG\",\n \"paymentReference\": \"204g4de74a7ib0j18dg6bi521aiaejf4\",\n \"email\": \"janesmith@seerbit.com\",\n \"paymentType\": \"CARD\",\n \"cardNumber\": \"512348984984988883\",\n \"expiryMonth\": \"01\",\n \"expiryYear\": \"25\",\n \"cvv\": \"000\",\n \"pin\": \"2222\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://seerbitapi.com/api/v2/payments/create-token", + "protocol": "https", + "host": [ + "seerbitapi", + "com" + ], + "path": [ + "api", + "v2", + "payments", + "create-token" + ] + }, + "description": "Charges a card for the first time **and** saves it, returning card details you can later exchange for an `authorizationCode` (via *Get Card Authorization Code*) to charge the same card again without re-collecting details. Requires the customer to complete 3DS/OTP authentication on `redirectUrl`.\n\n**Body fields**\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `publicKey` | string | Yes | Merchant public key |\n| `amount` | string | Yes | Charge amount — minimum is currency-dependent (e.g. NGN 50, GHS 1, KES 1, USD 0.50) |\n| `fullName` | string | Yes | Cardholder's name |\n| `mobileNumber` | string | Yes | Customer phone number |\n| `email` | string | Yes | Customer email |\n| `currency` | string | Yes | Transaction currency |\n| `country` | string | Yes | Country of the transaction |\n| `paymentType` | string | Yes | Must be `\"CARD\"` |\n| `cardNumber` | string | Yes | Full card number |\n| `expiryMonth` | string | Yes | Two-digit expiry month (`01`–`12`) |\n| `expiryYear` | string | Yes | Card expiry year |\n| `cvv` | string | Yes | Card security code |\n| `pin` | string | Yes | Card PIN (required by some card schemes/issuers) |\n| `redirectUrl` | string | Yes | Where the customer lands after completing 3DS/OTP authentication |\n| `paymentReference` | string | Yes | Unique reference you generate per transaction |" + }, + "response": [], + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-03T09:55:34.000Z", + "uid": "37518756-ddcd0daf-3c26-4360-aa75-189bcce28954" + }, + { + "name": "Get Card Authorization Code", + "id": "1c6b441b-adc0-4b01-b109-ad60cf0a6d34", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "https://seerbitapi.com/api/v3/payments/query/{{paymentReference}}", + "protocol": "https", + "host": [ + "seerbitapi", + "com" + ], + "path": [ + "api", + "v3", + "payments", + "query", + "{{paymentReference}}" + ] + }, + "description": "Returns authorizationCode, customerId and maskedPan for a tokenized transaction. Note this is v3, unlike the v2 Payment Query endpoint.\n\n**Response fields to read**\n\n| Field | Description |\n|---|---|\n| `authorizationCode` | Token to pass into *Charge Authorization Token* / *Bulk Charge Token* for future charges |\n| `customerId` | SeerBit's identifier for this customer, reusable across subscriptions |\n| `maskedPan` | Redacted card number for display, e.g. `5123-40xx-xxxx-0008` |" + }, + "response": [], + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-03T09:55:41.000Z", + "uid": "37518756-1c6b441b-adc0-4b01-b109-ad60cf0a6d34" + }, + { + "name": "Charge Authorization Token", + "id": "60c45341-68d5-4be7-be66-dc961cb4bb64", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "description": "Request body is JSON." + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"publicKey\": \"{{publicKey}}\",\n \"amount\": \"5000.00\",\n \"paymentReference\": \"charge_token_ref_001\",\n \"authorizationCode\": \"{{authorizationCode}}\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://seerbitapi.com/api/v2/payments/charge-token", + "protocol": "https", + "host": [ + "seerbitapi", + "com" + ], + "path": [ + "api", + "v2", + "payments", + "charge-token" + ] + }, + "description": "Charges a previously tokenized card using its `authorizationCode`, without asking the customer for card details again. Use this for one-off repeat charges; for scheduled recurring billing, use *Charge Subscription* instead.\n\n**Body fields**\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `publicKey` | string | Yes | Merchant public key |\n| `amount` | string | Yes | Amount to charge |\n| `paymentReference` | string | Yes | New, unique reference for this charge |\n| `authorizationCode` | string | Yes | From *Get Card Authorization Code* |" + }, + "response": [], + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-03T09:55:43.000Z", + "uid": "37518756-60c45341-68d5-4be7-be66-dc961cb4bb64" + }, + { + "name": "Bulk Charge Token", + "id": "8e23a2e1-54a2-4b58-8f10-0ec534aef677", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "description": "Request body is JSON." + } + ], + "body": { + "mode": "raw", + "raw": "[\n {\n \"publicKey\": \"{{publicKey}}\",\n \"amount\": \"5000.00\",\n \"paymentReference\": \"bulk_ref_001\",\n \"authorizationCode\": \"{{authorizationCode}}\"\n },\n {\n \"publicKey\": \"{{publicKey}}\",\n \"amount\": \"2500.00\",\n \"paymentReference\": \"bulk_ref_002\",\n \"authorizationCode\": \"{{authorizationCode}}\"\n }\n]", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://seerbitapi.com/api/v2/payments/bulk-tokenize-charge", + "protocol": "https", + "host": [ + "seerbitapi", + "com" + ], + "path": [ + "api", + "v2", + "payments", + "bulk-tokenize-charge" + ] + }, + "description": "Same as *Charge Authorization Token*, but accepts a JSON array so you can charge many tokenized cards in one call. Each array entry needs its own unique `paymentReference`. Returns a `batchId` — poll *Query Bulk Charge* with it to see per-entry results, since a bulk call can partially succeed.\n\n**Body:** array of objects, each with the same fields as *Charge Authorization Token* (`publicKey`, `amount`, `paymentReference`, `authorizationCode`)." + }, + "response": [], + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-03T09:55:46.000Z", + "uid": "37518756-8e23a2e1-54a2-4b58-8f10-0ec534aef677" + }, + { + "name": "Query Bulk Charge", + "id": "e7550129-1f52-49b7-a5de-9d59f7c21305", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "https://seerbitapi.com/api/v2/payments/bulk-tokenize-charge-search?batchId={{batchId}}", + "protocol": "https", + "host": [ + "seerbitapi", + "com" + ], + "path": [ + "api", + "v2", + "payments", + "bulk-tokenize-charge-search" + ], + "query": [ + { + "key": "batchId", + "value": "{{batchId}}" + } + ] + }, + "description": "Looks up the outcome of a *Bulk Charge Token* batch by `batchId`. Returns paginated per-entry results (authorization codes, status codes, card details, amounts) — check each entry's own status rather than assuming the whole batch succeeded or failed together." + }, + "response": [], + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-03T09:55:47.000Z", + "uid": "37518756-e7550129-1f52-49b7-a5de-9d59f7c21305" + } + ], + "id": "7fc316ef-5221-4fcb-970b-6984f3f49249", + "description": "Save a customer's card on first charge (with 3DS/OTP authentication) and reuse the resulting `authorizationCode` to charge them again — singly or in bulk — without asking for card details twice.\n\n### Variables used in this folder\n\n| Variable | Description |\n|---|---|\n| `publicKey` | Your merchant public key from the SeerBit dashboard. Sent in the body of most payment-initiation requests (never as a header) to identify which merchant account a transaction belongs to. |\n| `paymentReference` | A unique reference you generate per transaction attempt (not returned by SeerBit). Used to initiate a payment and to look it up afterwards via Check Payment Status. |\n| `batchId` | Identifier for a batch operation, e.g. a bulk invoice or bulk payout batch, used to check the status of the whole batch. |\n| `authorizationCode` | Card authorization code returned after a successful tokenized charge, used to charge the same card again without re-entering card details. |", + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-02T17:09:41.000Z", + "uid": "37518756-7fc316ef-5221-4fcb-970b-6984f3f49249" + }, + { + "name": "Recurring & Subscriptions", + "item": [ + { + "name": "Create Plan", + "id": "a06a65d2-b9ee-41c6-bc04-ea9eefb50e7e", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "description": "Request body is JSON." + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"productId\": \"product222\",\n \"productDescription\": \"\",\n \"amount\": \"100\",\n \"billingCycle\": \"HOURLY\",\n \"limit\": 5,\n \"publicKey\": \"{{publicKey}}\",\n \"country\": \"NG\",\n \"currency\": \"NGN\",\n \"allowPartialDebit\": false\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://merchants.seerbitapi.com/api/v1/recurrent/plan/create", + "protocol": "https", + "host": [ + "merchants", + "seerbitapi", + "com" + ], + "path": [ + "api", + "v1", + "recurrent", + "plan", + "create" + ] + }, + "description": "Defines a recurring billing plan (amount + cadence + how many cycles to run). Once created, subscribe a tokenized card to it and SeerBit charges automatically on schedule. Host is `merchants.seerbitapi.com` (plural) — a documented inconsistency vs. the `merchant.seerbitapi.com` (singular) invoicing host, easy to mistype.\n\n**Body fields**\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `productId` | string | Yes | Plan name/identifier |\n| `productDescription` | string | Yes | Description of the plan |\n| `amount` | string | Yes | Amount charged per cycle |\n| `billingCycle` | string | Yes | `HOURLY`, `DAILY`, `WEEKLY`, `MONTHLY`, or `ANNUALLY` |\n| `limit` | integer | Yes | Maximum number of billing cycles before the plan stops |\n| `publicKey` | string | Yes | Merchant public key |\n| `country` | string | Yes | Country code, e.g. `NG` |\n| `currency` | string | Yes | Currency code, e.g. `NGN` |\n| `allowPartialDebit` | boolean | Yes | Whether to charge whatever's available if the customer has insufficient funds for the full amount |\n\nResponse includes `planId`, `payUrl`, and `status: \"ACTIVE\"` — save `planId` for future reference." + }, + "response": [], + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-03T09:56:37.000Z", + "uid": "37518756-a06a65d2-b9ee-41c6-bc04-ea9eefb50e7e" + }, + { + "name": "Get Merchant Subscriptions", + "id": "58e66f22-b8d2-4ff4-8fa5-dae6a9a390ae", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "https://seerbitapi.com/api/v2/recurring/publicKey/{{publicKey}}", + "protocol": "https", + "host": [ + "seerbitapi", + "com" + ], + "path": [ + "api", + "v2", + "recurring", + "publicKey", + "{{publicKey}}" + ] + }, + "description": "Lists every subscription under this `publicKey`, with `amount`, `customerId`, `cardName`, `cardNumber` (masked), `plan`, `status`, `billingId`, `authorizationCode`, `startDate`, and `createdAt` per entry." + }, + "response": [], + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-03T09:56:39.000Z", + "uid": "37518756-58e66f22-b8d2-4ff4-8fa5-dae6a9a390ae" + }, + { + "name": "Charge Subscription", + "id": "26f07f68-5690-4d61-9108-a7e8f444ab3d", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "description": "Request body is JSON." + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"amount\": \"100\",\n \"publicKey\": \"{{publicKey}}\",\n \"email\": \"customer@example.com\",\n \"authorizationCode\": \"{{authorizationCode}}\",\n \"paymentReference\": \"sub_charge_ref_001\",\n \"currency\": \"NGN\",\n \"allowPartialDebit\": false\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://seerbitapi.com/api/v2/recurring/charge", + "protocol": "https", + "host": [ + "seerbitapi", + "com" + ], + "path": [ + "api", + "v2", + "recurring", + "charge" + ] + }, + "description": "Manually triggers a charge against an existing subscription's tokenized card, outside the automatic billing schedule (e.g. to bill immediately rather than wait for the next cycle).\n\n**Body fields**\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `amount` | string | Yes | Amount to charge |\n| `publicKey` | string | Yes | Merchant public key |\n| `email` | string | Yes | Customer email |\n| `authorizationCode` | string | Yes | From the customer's completed subscription |\n| `paymentReference` | string | Yes | New, unique reference for this charge |\n| `currency` | string | Yes | Currency code |\n| `allowPartialDebit` | string | No | Whether to allow a partial charge on insufficient funds |" + }, + "response": [], + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-03T09:56:42.000Z", + "uid": "37518756-26f07f68-5690-4d61-9108-a7e8f444ab3d" + }, + { + "name": "Get Customer Subscription", + "id": "7029b82d-e124-4bc9-a5bf-e3db44eda499", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "https://seerbitapi.com/api/v2/recurring/{{publicKey}}/customerId/{{customerId}}", + "protocol": "https", + "host": [ + "seerbitapi", + "com" + ], + "path": [ + "api", + "v2", + "recurring", + "{{publicKey}}", + "customerId", + "{{customerId}}" + ] + }, + "description": "Lists the subscriptions belonging to one customer (`customerId`) under this `publicKey` — a customer can have more than one active plan." + }, + "response": [], + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-03T09:56:43.000Z", + "uid": "37518756-7029b82d-e124-4bc9-a5bf-e3db44eda499" + }, + { + "name": "Update Customer Subscription", + "id": "41e0186d-bc1d-4af7-b087-fc0a4109301e", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "description": "Request body is JSON." + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"billingId\": \"{{billingId}}\",\n \"publicKey\": \"{{publicKey}}\",\n \"status\": \"ACTIVE\",\n \"amount\": \"100\",\n \"currency\": \"NGN\",\n \"country\": \"NG\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://seerbitapi.com/api/v2/recurring/updates", + "protocol": "https", + "host": [ + "seerbitapi", + "com" + ], + "path": [ + "api", + "v2", + "recurring", + "updates" + ] + }, + "description": "Changes an existing subscription's status or terms, identified by `billingId`.\n\n**Body fields**\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `billingId` | string | Yes | Identifies the subscription being updated |\n| `publicKey` | string | Yes | Merchant public key |\n| `currency` | string | Yes | Currency code |\n| `country` | string | Yes | Country code |\n| `amount` | string | No | New charge amount |\n| `status` | string | No | `ACTIVE` or `INACTIVE` — set to `INACTIVE` to cancel future billing |\n| `mobileNumber` | string | No | Update the customer's phone number on file |" + }, + "response": [], + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-03T09:56:46.000Z", + "uid": "37518756-41e0186d-bc1d-4af7-b087-fc0a4109301e" + } + ], + "id": "734dfd53-aabb-44fb-86e5-86827cc9898e", + "description": "Define a billing plan, subscribe a tokenized card to it, and let SeerBit charge the customer on a schedule (hourly through annually) until the plan's charge limit or the customer cancels.\n\n### Variables used in this folder\n\n| Variable | Description |\n|---|---|\n| `publicKey` | Your merchant public key from the SeerBit dashboard. Sent in the body of most payment-initiation requests (never as a header) to identify which merchant account a transaction belongs to. |\n| `customerId` | SeerBit's identifier for a customer, typically returned after tokenizing a card or creating a customer-linked resource such as a subscription plan. |\n| `billingId` | Identifier for a specific billing/recurring-charge record under a subscription plan. |\n| `authorizationCode` | Card authorization code returned after a successful tokenized charge, used to charge the same card again without re-entering card details. |", + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-03T16:27:48.000Z", + "uid": "37518756-734dfd53-aabb-44fb-86e5-86827cc9898e" + }, + { + "name": "Payment Links", + "item": [ + { + "name": "Create Payment Link", + "id": "ac6ff2d9-7bbc-44dc-a53d-42bc25a567ed", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "description": "Request body is JSON." + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"status\": \"ACTIVE\",\n \"paymentLinkName\": \"testing out\",\n \"description\": \"Give out donations\",\n \"currency\": \"NGN\",\n \"successMessage\": \"Thank you for your payment\",\n \"publicKey\": \"{{publicKey}}\",\n \"customizationName\": \"dot dty it\",\n \"paymentFrequency\": \"ONE_TIME\",\n \"paymentReference\": \"\",\n \"email\": \"js@emaildomain.com\",\n \"requiredFields\": {\n \"address\": true,\n \"amount\": true,\n \"customerName\": true,\n \"mobileNumber\": true,\n \"invoiceNumber\": false\n },\n \"additionalData\": \"Customer Email: js@mailinator.com\",\n \"linkExpirable\": false,\n \"expiryDate\": \"\",\n \"oneTime\": false\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://paymentlink.seerbitapi.com/paymentlink/v2/payLinks/api", + "protocol": "https", + "host": [ + "paymentlink", + "seerbitapi", + "com" + ], + "path": [ + "paymentlink", + "v2", + "payLinks", + "api" + ] + }, + "description": "Creates a hosted, shareable payment URL — send it directly to a customer instead of building a checkout flow. Supports one-time links and recurring links.\n\n**Body fields**\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `status` | string | Yes | `ACTIVE` or `INACTIVE` |\n| `paymentLinkName` | string | Yes | Internal name for the link |\n| `description` | string | Yes | Shown to the customer on the payment page |\n| `currency` | string | Yes | Currency code, e.g. `NGN` |\n| `publicKey` | string | Yes | Merchant public key |\n| `paymentFrequency` | string | Yes | `ONE_TIME` or `RECURRENT` |\n| `requiredFields` | object | Yes | Which customer fields the payer must fill in: `address`, `amount`, `customerName`, `mobileNumber`, `invoiceNumber` (each boolean) |\n| `email` | string | No | Notification email |\n| `successMessage` | string | No | Shown after a successful payment |\n| `customizationName` | string | No | Branding/customization preset |\n| `additionalData` | string | No | Free-text metadata attached to the link |\n| `linkExpirable` | boolean | No | Whether the link expires |\n| `expiryDate` | string | No | Expiry date, required if `linkExpirable` is true |\n| `oneTime` | boolean | No | Whether the link is invalidated after first use |\n\nResponse returns `paymentLinkUrl` and `paymentLinkId` — save the latter, it's needed to update or delete the link later." + }, + "response": [], + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-03T09:56:13.000Z", + "uid": "37518756-ac6ff2d9-7bbc-44dc-a53d-42bc25a567ed" + }, + { + "name": "Get Merchant Payment Links", + "id": "1d605690-3bf5-4e5f-b3a4-cf50c571627b", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "https://paymentlink.seerbitapi.com/paymentlink/v2/payLinks/api/{{publicKey}}", + "protocol": "https", + "host": [ + "paymentlink", + "seerbitapi", + "com" + ], + "path": [ + "paymentlink", + "v2", + "payLinks", + "api", + "{{publicKey}}" + ] + }, + "description": "Lists every payment link created under this `publicKey`, with their current status, configuration, and timestamps. Use this to find a `paymentLinkId` if you didn't save it when creating the link." + }, + "response": [], + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-03T09:56:19.000Z", + "uid": "37518756-1d605690-3bf5-4e5f-b3a4-cf50c571627b" + }, + { + "name": "Update Payment Link", + "id": "13e15e9a-c364-49ac-b8dd-244b5c5e850e", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "description": "Request body is JSON." + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"paymentLinkId\": \"77287988\",\n \"status\": \"INACTIVE\",\n \"description\": \"Test paymentLink\",\n \"successMessage\": \"Payment made successfully!\",\n \"businessName\": \"My Business\",\n \"publicKey\": \"{{publicKey}}\",\n \"customizationName\": \"my_link_4\",\n \"paymentFrequency\": \"RECURRENT\",\n \"email\": \"customer@seerbit.com\",\n \"requiredFields\": {\n \"address\": true,\n \"amount\": true,\n \"customerName\": true,\n \"mobileNumber\": true,\n \"invoiceNumber\": false\n },\n \"linkExpirable\": false,\n \"expiryDate\": \"\",\n \"oneTime\": false\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://paymentlink.seerbitapi.com/paymentlink/v2/payLinks/api", + "protocol": "https", + "host": [ + "paymentlink", + "seerbitapi", + "com" + ], + "path": [ + "paymentlink", + "v2", + "payLinks", + "api" + ] + }, + "description": "Updates an existing payment link's configuration. Source: doc.seerbit.com/online-payment/payment-features/payment-links.\n\n**Body fields**\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `paymentLinkId` | string | Yes | From *Create Payment Link*'s response, or *Get Merchant Payment Links* |\n| `status`, `description`, `successMessage`, `customizationName`, `paymentFrequency`, `requiredFields`, `linkExpirable`, `expiryDate`, `oneTime` | — | No | Any subset of these can be updated; omit fields you don't want to change |" + }, + "response": [], + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-03T09:56:20.000Z", + "uid": "37518756-13e15e9a-c364-49ac-b8dd-244b5c5e850e" + }, + { + "name": "Delete Payment Link", + "id": "7fc117e7-dd7d-4252-b332-0a8293315520", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "https://paymentlink.seerbitapi.com/paymentlink/v2/payLinks/api/deleteLink/{{paymentLinkId}}", + "protocol": "https", + "host": [ + "paymentlink", + "seerbitapi", + "com" + ], + "path": [ + "paymentlink", + "v2", + "payLinks", + "api", + "deleteLink", + "{{paymentLinkId}}" + ] + }, + "description": "Permanently deactivates a payment link. Source: doc.seerbit.com/online-payment/payment-features/payment-links, which documents this as DELETE (the original collection request used GET — fixed)." + }, + "response": [], + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-03T09:56:22.000Z", + "uid": "37518756-7fc117e7-dd7d-4252-b332-0a8293315520" + } + ], + "id": "34b6fea8-d15b-4f99-85a5-f6c543c8f6c3", + "description": "Create a reusable or one-time hosted payment URL you can share directly (email, chat, socials) instead of building a checkout page. Supports one-time and recurring links.\n\n### Variables used in this folder\n\n| Variable | Description |\n|---|---|\n| `publicKey` | Your merchant public key from the SeerBit dashboard. Sent in the body of most payment-initiation requests (never as a header) to identify which merchant account a transaction belongs to. |\n| `paymentLinkId` | Identifier for a payment link created via the Payment Links folder, used to fetch, update, or delete that link. |", + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-02T17:09:41.000Z", + "uid": "37518756-34b6fea8-d15b-4f99-85a5-f6c543c8f6c3" + }, + { + "name": "Pocket", + "item": [ + { + "name": "Authenticate", + "id": "b554f438-f6b7-4a71-a8e3-7bae3dfa6281", + "request": { + "auth": { + "type": "noauth" + }, + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "description": "Request body is JSON." + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"email\": \"{{pocketEmail}}\",\n \"password\": \"{{pocketPassword}}\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://pocket.seerbitapi.com/pocket/authenticate", + "protocol": "https", + "host": [ + "pocket", + "seerbitapi", + "com" + ], + "path": [ + "pocket", + "authenticate" + ] + }, + "description": "Logs in to a Pocket (SeerBit's wallet product) and returns a Bearer token scoped to Pocket and Payout endpoints — **not** the same token as `{{BearerToken}}` (the OAuth token from *Get Access Token* in the Authentication folder, used everywhere else in this collection). Pocket is a **separate feature from Payout**: the doc site describes Pocket as sending funds between pockets, sub-pockets, or out to banks (that last case *is* a payout), while the Payout folder above covers the signed, OTP-gated bank-payout flow specifically — both folders share this same login and the same token.\n\n**Body fields**\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `email` | string | Yes | Pocket account email |\n| `password` | string | Yes | Your **Pocket password** — not your SeerBit merchant dashboard password. This is the password for your Pocket account at flow.seerbitapi.com. |\n\nResponse includes `bearerToken`, `expiryTime`, and `requirePasswordChange` — check the last one and call *Change Password* if true. Save `bearerToken` as `{{pocketAuthToken}}` — the variable used on Pocket and Payout requests that require this login, kept distinct from `{{BearerToken}}` on purpose." + }, + "response": [], + "createdAt": "2026-09-02T17:35:23.000Z", + "updatedAt": "2026-09-03T15:49:11.000Z", + "uid": "37518756-b554f438-f6b7-4a71-a8e3-7bae3dfa6281" + }, + { + "name": "Change Password", + "id": "bb46d3a4-7f07-48fd-af86-637b63914030", + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{pocketAuthToken}}", + "type": "string" + } + ] + }, + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "description": "Request body is JSON." + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"currentPassword\": \"{{pocketPassword}}\",\n \"newPassword\": \"{{newPocketPassword}}\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://pocket.seerbitapi.com/pocket/user/change-password", + "protocol": "https", + "host": [ + "pocket", + "seerbitapi", + "com" + ], + "path": [ + "pocket", + "user", + "change-password" + ] + }, + "description": "Changes the Pocket account's password — required on first login if *Authenticate*'s response flagged `requirePasswordChange: true`.\n\n**Body fields**\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `currentPassword` | string | Yes | Current Pocket password |\n| `newPassword` | string | Yes | New Pocket password |" + }, + "response": [], + "createdAt": "2026-09-02T17:35:23.000Z", + "updatedAt": "2026-09-03T15:49:27.000Z", + "uid": "37518756-bb46d3a4-7f07-48fd-af86-637b63914030" + }, + { + "name": "Add Sub-Pocket", + "id": "21b93947-3d23-44c1-b11e-1332489f525c", + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{pocketAuthToken}}", + "type": "string" + } + ] + }, + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "description": "Request body is JSON." + }, + { + "key": "Public-Key", + "value": "{{publicKey}}", + "description": "Merchant public key — required alongside Bearer auth for every Pocket endpoint." + } + ], + "body": { + "mode": "raw", + "raw": "[\n {\n \"reference\": \"subpocket_ref_001\",\n \"pocketFunction\": \"BOTH\",\n \"currency\": \"NGN\",\n \"selfOwned\": true,\n \"pocketOwner\": {\n \"existingPocketOwner\": \"false\",\n \"pocketOwnerDetails\": {\n \"firstName\": \"Jane\",\n \"lastName\": \"Doe\",\n \"emailAddress\": \"jane@example.com\",\n \"phoneNumber\": \"08012345678\",\n \"businessName\": \"Acme Ltd\"\n }\n }\n }\n]", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://pocket.seerbitapi.com/pocket/pocket-id/{{pocketID}}/sub-pocket", + "protocol": "https", + "host": [ + "pocket", + "seerbitapi", + "com" + ], + "path": [ + "pocket", + "pocket-id", + "{{pocketID}}", + "sub-pocket" + ] + }, + "description": "Creates a sub-pocket under a parent pocket — e.g. one wallet per vendor, department, or customer, all rolling up to the parent. Body is an array, so you can create several sub-pockets in one call.\n\n**Body fields (per array entry)**\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `reference` | string | Yes | Your unique reference for this sub-pocket |\n| `pocketFunction` | string | Yes | e.g. `BOTH` (can send and receive) |\n| `currency` | string | Yes | Currency the sub-pocket holds |\n| `selfOwned` | boolean | Yes | Whether the sub-pocket belongs to you or an external owner |\n| `pocketOwner` | object | Yes | `existingPocketOwner` plus `pocketOwnerDetails` (`firstName`, `lastName`, `emailAddress`, `phoneNumber`, `businessName`) |\n| `tagGroup` | string | No | Grouping label |\n| `tagName` | string | No | Display label |\n\nResponse returns the new `pocketId`, its dedicated `bankAccountNumber`/`bankAccountName`/`bankName`, and login details for the sub-pocket's own user." + }, + "response": [], + "createdAt": "2026-09-02T17:35:23.000Z", + "updatedAt": "2026-09-03T15:49:29.000Z", + "uid": "37518756-21b93947-3d23-44c1-b11e-1332489f525c" + }, + { + "name": "Pocket to Pocket Transfer", + "id": "c3602316-062b-4559-9d24-eb1e51efdf86", + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{pocketAuthToken}}", + "type": "string" + } + ] + }, + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "description": "Request body is JSON." + }, + { + "key": "Public-Key", + "value": "{{publicKey}}", + "description": "Merchant public key — required alongside Bearer auth for every Pocket endpoint." + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"amount\": \"5000.00\",\n \"currency\": \"NGN\",\n \"reference\": \"transfer_ref_001\",\n \"description\": \"Internal transfer\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://pocket.seerbitapi.com/pocket/transfer/from-pocket/{{pocketID}}/to-pocket/{{destinationPocketID}}", + "protocol": "https", + "host": [ + "pocket", + "seerbitapi", + "com" + ], + "path": [ + "pocket", + "transfer", + "from-pocket", + "{{pocketID}}", + "to-pocket", + "{{destinationPocketID}}" + ] + }, + "description": "Moves funds between two pockets (parent-to-sub-pocket, sub-to-sub, etc.) — an internal transfer, not a bank payout.\n\n**Body fields**\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `amount` | string | Yes | Amount to move |\n| `currency` | string | Yes | Currency, must match both pockets |\n| `reference` | string | Yes | Unique reference for this transfer |\n| `description` | string | Yes | Free-text note |" + }, + "response": [], + "createdAt": "2026-09-02T17:35:23.000Z", + "updatedAt": "2026-09-03T15:49:31.000Z", + "uid": "37518756-c3602316-062b-4559-9d24-eb1e51efdf86" + }, + { + "name": "Get Pocket Details", + "id": "4a60f373-198e-406e-99fa-c0c81c9e4283", + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{pocketAuthToken}}", + "type": "string" + } + ] + }, + "method": "GET", + "header": [ + { + "key": "Public-Key", + "value": "{{publicKey}}", + "description": "Merchant public key — required alongside Bearer auth for every Pocket endpoint." + } + ], + "url": { + "raw": "https://pocket.seerbitapi.com/pocket/pocket-id/{{pocketID}}", + "protocol": "https", + "host": [ + "pocket", + "seerbitapi", + "com" + ], + "path": [ + "pocket", + "pocket-id", + "{{pocketID}}" + ] + }, + "description": "Fetches a pocket's full profile: status, balances, its own dedicated bank account (`accountNumber`, `fundingLink`), owner details, and any linked `pocketAccounts`." + }, + "response": [], + "createdAt": "2026-09-02T17:35:23.000Z", + "updatedAt": "2026-09-03T15:49:32.000Z", + "uid": "37518756-4a60f373-198e-406e-99fa-c0c81c9e4283" + }, + { + "name": "Get Pocket Balance", + "id": "e9263813-51fc-421a-a42c-fc94784acd5d", + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{pocketAuthToken}}", + "type": "string" + } + ] + }, + "method": "GET", + "header": [ + { + "key": "Public-Key", + "value": "{{publicKey}}", + "description": "Merchant public key — required alongside Bearer auth for every Pocket endpoint." + } + ], + "url": { + "raw": "https://pocket.seerbitapi.com/pocket/balance/pocket-id/{{pocketID}}", + "protocol": "https", + "host": [ + "pocket", + "seerbitapi", + "com" + ], + "path": [ + "pocket", + "balance", + "pocket-id", + "{{pocketID}}" + ] + }, + "description": "Fast balance-only lookup for one pocket — `availableBalanceAmount`/`Currency` and `lastTransactionAt`. Use *Get Pocket Details* instead when you also need the account number or owner info." + }, + "response": [], + "createdAt": "2026-09-02T17:35:23.000Z", + "updatedAt": "2026-09-03T15:49:34.000Z", + "uid": "37518756-e9263813-51fc-421a-a42c-fc94784acd5d" + }, + { + "name": "Get Merchant Balance Summation", + "id": "aa7094b1-6e96-4d94-8994-445c9bcd25e9", + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{pocketAuthToken}}", + "type": "string" + } + ] + }, + "method": "GET", + "header": [ + { + "key": "Public-Key", + "value": "{{publicKey}}", + "description": "Merchant public key — required alongside Bearer auth for every Pocket endpoint." + } + ], + "url": { + "raw": "https://pocket.seerbitapi.com/pocket/balances-summation/pocket-id/{{pocketID}}", + "protocol": "https", + "host": [ + "pocket", + "seerbitapi", + "com" + ], + "path": [ + "pocket", + "balances-summation", + "pocket-id", + "{{pocketID}}" + ] + }, + "description": "Rolls up balances across pockets: `merchantSubPocketsBalanceSummation` (just the sub-pockets under this one) and `merchantAllPocketsBalanceSummation` (every pocket under the merchant)." + }, + "response": [], + "createdAt": "2026-09-02T17:35:23.000Z", + "updatedAt": "2026-09-03T15:49:35.000Z", + "uid": "37518756-aa7094b1-6e96-4d94-8994-445c9bcd25e9" + }, + { + "name": "Get Transaction by Reference", + "id": "8fc43e24-cc1a-49dd-9ebc-35073ac69812", + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{pocketAuthToken}}", + "type": "string" + } + ] + }, + "method": "GET", + "header": [ + { + "key": "Public-Key", + "value": "{{publicKey}}", + "description": "Merchant public key — required alongside Bearer auth for every Pocket endpoint." + } + ], + "url": { + "raw": "https://pocket.seerbitapi.com/pocket/transaction/reference/{{reference}}", + "protocol": "https", + "host": [ + "pocket", + "seerbitapi", + "com" + ], + "path": [ + "pocket", + "transaction", + "reference", + "{{reference}}" + ] + }, + "description": "Looks up one Pocket transaction (funding, transfer, fee, etc.) by its `reference`. Returns `transactionLeg` (`DEBIT`/`CREDIT`), `transactionType`, `status`, and counterparty details." + }, + "response": [], + "createdAt": "2026-09-02T17:35:23.000Z", + "updatedAt": "2026-09-03T15:49:37.000Z", + "uid": "37518756-8fc43e24-cc1a-49dd-9ebc-35073ac69812" + }, + { + "name": "Search Transactions", + "id": "4dddc13e-d263-4c89-9e40-3f19e2d08227", + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{pocketAuthToken}}", + "type": "string" + } + ] + }, + "method": "GET", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "description": "Not required for a GET with no body, but present in the saved doc example." + }, + { + "key": "Public-Key", + "value": "{{publicKey}}", + "description": "Merchant public key — required alongside Bearer auth for every Pocket endpoint." + } + ], + "url": { + "raw": "https://pocket.seerbitapi.com/pocket/transaction/search?pocketId={{pocketID}}&page=0&size=10", + "protocol": "https", + "host": [ + "pocket", + "seerbitapi", + "com" + ], + "path": [ + "pocket", + "transaction", + "search" + ], + "query": [ + { + "key": "pocketId", + "value": "{{pocketID}}" + }, + { + "key": "page", + "value": "0" + }, + { + "key": "size", + "value": "10" + } + ] + }, + "description": "Lists a pocket's transaction history, paginated.\n\n**Query parameters**\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `pocketId` | string | Yes | The pocket to list transactions for |\n| `page` | integer | Yes | Zero-based page number |\n| `size` | integer | Yes | Records per page |\n\nResponse wraps results in `content` plus `pageable`, `totalElements`, `totalPages` for pagination." + }, + "response": [], + "createdAt": "2026-09-02T17:35:23.000Z", + "updatedAt": "2026-09-03T15:49:38.000Z", + "uid": "37518756-4dddc13e-d263-4c89-9e40-3f19e2d08227" + } + ], + "id": "e77e4d09-0a36-404b-bd4c-16170d562df5", + "description": "SeerBit's wallet product — hold balances in \"pockets,\" create sub-pockets per vendor/department/customer, and move money between them. Distinct from the **Payout** folder: Pocket-to-Pocket transfers stay inside SeerBit; sending a pocket's funds *out* to an external bank account is what the Payout flow (Account Enquiry → Generate OTP → Generate Signature → Initiate Payout) is for. Added because it was fully documented on doc.seerbit.com but missing from this collection.\n\nEvery endpoint here needs Bearer auth (from *Authenticate* below, not the collection's merchant `BearerToken`) plus a `Public-Key` header.\n\n### Variables used in this folder\n\n| Variable | Description |\n|---|---|\n| `publicKey` | Your merchant public key from the SeerBit dashboard. Sent in the body of most payment-initiation requests (never as a header) to identify which merchant account a transaction belongs to. |\n| `reference` | A generic transaction or operation reference used to look up a specific record where no more specific reference variable applies. |\n| `pocketID` | Identifier for a SeerBit Pocket (an internal sub-wallet under your merchant account), used to fund, debit, or transfer between pockets. |\n| `destinationPocketID` | The receiving Pocket's identifier in a Pocket-to-Pocket transfer, as distinct from the source `pocketID`. |\n| `pocketEmail` | Email address associated with a Pocket, used for Pocket creation or lookup. |\n| `pocketPassword` | Password for a Pocket account, required to authorize sensitive Pocket operations. |\n| `newPocketPassword` | New password value when calling the Pocket password-change endpoint. |", + "createdAt": "2026-09-02T17:35:23.000Z", + "updatedAt": "2026-09-03T16:27:59.000Z", + "uid": "37518756-e77e4d09-0a36-404b-bd4c-16170d562df5" + }, + { + "name": "Payout", + "item": [ + { + "name": "Account Enquiry", + "id": "0280dad6-dbbe-4d2a-a65a-344407c7db9e", + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{pocketAuthToken}}", + "type": "string" + } + ] + }, + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "description": "Request body is JSON." + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"accountnumber\": \"0123456789\",\n \"bankcode\": \"058\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://pocket.seerbitapi.com/pocket/payout/account-enquiry", + "protocol": "https", + "host": [ + "pocket", + "seerbitapi", + "com" + ], + "path": [ + "pocket", + "payout", + "account-enquiry" + ] + }, + "description": "Reconfirms the account holder's name for a bank account before sending a payout — use it to catch a wrong account number before money moves.\n\n**Body fields**\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `accountnumber` | string | Yes | Recipient bank account number |\n| `bankcode` | string | Yes | Recipient bank's code, from *Bank List* |\n\n**Note:** the payout flow (*Authenticate for Payout* → *Initiate Single/Bulk Payout* → *Confirm Payout with OTP*) doesn't call this endpoint — it goes straight from authentication to initiating the payout, with no separate account-name-confirmation step built in. Whether it's still expected to run first, is optional, or belongs to a different flow isn't stated; use it as a manual pre-check if you want extra assurance before sending funds." + }, + "response": [], + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-03T15:49:12.000Z", + "uid": "37518756-0280dad6-dbbe-4d2a-a65a-344407c7db9e" + }, + { + "name": "Bank List", + "id": "d5f1caf1-f49a-4b35-b0a9-d9f810ff23a9", + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{pocketAuthToken}}", + "type": "string" + } + ] + }, + "method": "GET", + "header": [ + { + "key": "Public-Key", + "value": "{{publicKey}}", + "description": "Merchant public key — required in addition to Bearer auth for Payout endpoints." + } + ], + "url": { + "raw": "https://pocket.seerbitapi.com/pocket/banks/category/NIP", + "protocol": "https", + "host": [ + "pocket", + "seerbitapi", + "com" + ], + "path": [ + "pocket", + "banks", + "category", + "NIP" + ] + }, + "description": "Returns the banks supported for payouts in a given category — `NIP` in the saved URL is Nigeria's instant transfer network; swap the path segment if a different category is documented for your corridor. Requires Bearer auth plus a Public-Key header." + }, + "response": [], + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-03T15:49:14.000Z", + "uid": "37518756-d5f1caf1-f49a-4b35-b0a9-d9f810ff23a9" + }, + { + "name": "Authenticate for Payout", + "id": "a85c40f0-af7f-4b07-897f-2792d70f7aa7", + "request": { + "auth": { + "type": "noauth" + }, + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "description": "Request body is JSON." + }, + { + "key": "Public-Key", + "value": "{{publicKey}}" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"email\": \"your-merchant-login-email@example.com\",\n \"password\": \"your-merchant-password\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://pocket.seerbitapi.com/pocket/authenticate", + "protocol": "https", + "host": [ + "pocket", + "seerbitapi", + "com" + ], + "path": [ + "pocket", + "authenticate" + ] + }, + "description": "Logs in with your merchant account email and Pocket password to obtain the bearer token required by every other request in this payout flow.\n\n**Body fields**\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `email` | string | Yes | Your merchant account's login email |\n| `password` | string | Yes | Your **Pocket password** — not your SeerBit merchant dashboard password. This is the password for your Pocket account at flow.seerbitapi.com. |\n\n**Response: 200 OK**\n```json\n{\n \"data\": {\n \"bearerToken\": \"...\"\n }\n}\n```\nSave `data.bearerToken` as `{{pocketAuthToken}}` — used as the `Authorization: Bearer` value on *Initiate Single Payout*, *Initiate Bulk Payout*, and *Confirm Payout with OTP*. This is the same login and token as *Authenticate* in the Pocket folder — kept as one shared variable, `{{pocketAuthToken}}`, and kept distinct from `{{BearerToken}}` (the OAuth token used everywhere else in this collection).\n\n**Note:** this is the only endpoint in this collection that authenticates with an email/password pair rather than an API key or OAuth token." + }, + "response": [], + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-03T15:52:00.000Z", + "uid": "37518756-a85c40f0-af7f-4b07-897f-2792d70f7aa7" + }, + { + "name": "Initiate Single Payout", + "id": "fdca3597-4c4c-4adb-a945-204f50cf5978", + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{pocketAuthToken}}", + "type": "string" + } + ] + }, + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "description": "Request body is JSON." + }, + { + "key": "Public-Key", + "value": "{{publicKey}}", + "description": "Merchant public key." + }, + { + "key": "X-Seerbit-Signature", + "value": "{{payoutSignature}}", + "description": "HMAC-SHA256 of the exact raw JSON request body, computed with your merchant secret key ({{SECRET_KEY}}), hex-encoded." + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"pocketId\": \"SBP0016878\",\n \"reference\": \"PAY-SINGLE-Ideal-001\",\n \"currency\": \"NGN\",\n \"amount\": 10,\n \"description\": \"Single Payout API test\",\n \"accountNumber\": \"0522376248\",\n \"bankCode\": \"000013\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://pocket.seerbitapi.com/pocket/v2/payouts", + "protocol": "https", + "host": [ + "pocket", + "seerbitapi", + "com" + ], + "path": [ + "pocket", + "v2", + "payouts" + ] + }, + "description": "Phase 1 of 2 — initiates a single payout. Validates the request signature, encrypts the payload, and emails an OTP to the merchant; the payout only moves money once that OTP is submitted to *Confirm Payout with OTP*.\n\n**Required headers**\n\n| Header | Description |\n|---|---|\n| `Public-Key` | Your merchant public key (`{{publicKey}}`) |\n| `X-Seerbit-Signature` | HMAC-SHA256 of the exact raw JSON request body, computed with your merchant secret key (`{{SECRET_KEY}}`), hex-encoded. |\n| `Authorization` | `Bearer {{pocketAuthToken}}` — from *Authenticate for Payout* (same token as Pocket's *Authenticate*), not the OAuth `{{BearerToken}}`. |\n\n**Body fields**\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `pocketId` | string | Yes | The Pocket to pay out from |\n| `reference` | string | Yes | Your unique reference for this payout. Re-submitting the same `reference` is idempotent — it returns the existing `payoutId` and a message that the OTP was already sent, rather than sending a new OTP. |\n| `currency` | string | Yes | Currency code |\n| `amount` | number | Yes | Amount to send |\n| `description` | string | No | Free-text note for the payout |\n| `accountNumber` | string | Yes | Recipient bank account number |\n| `bankCode` | string | Yes | Recipient bank's code — see *Bank List* |\n\n**Response: 202 Accepted**\n```json\n{\n \"payoutId\": \"PV2-ABCDEF123456\",\n \"status\": \"PENDING_OTP\",\n \"message\": \"OTP sent to registered email. Please confirm to proceed.\"\n}\n```\nSave `payoutId` as the `{{payoutId}}` collection variable — it's the path parameter for *Confirm Payout with OTP*.\n\n**Error responses:**\n- 401 Unauthorized — missing or invalid `X-Seerbit-Signature`\n- 400 Bad Request — missing `Public-Key` header\n- 400 Bad Request — missing/invalid required fields (e.g. \"currency is required\", \"amount must be positive\")\n\n**Note:** this flow doesn't include a separate account-name-confirmation step before initiating — call *Account Enquiry* first if you want to verify the recipient's account name." + }, + "response": [], + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-03T15:49:17.000Z", + "uid": "37518756-fdca3597-4c4c-4adb-a945-204f50cf5978" + }, + { + "name": "Confirm Payout with OTP", + "id": "0d5c6ac3-8bbd-49f7-9aeb-8a88485e7a1d", + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{pocketAuthToken}}", + "type": "string" + } + ] + }, + "method": "POST", + "header": [ + { + "value": "application/json", + "description": "Request body is JSON.", + "key": "Content-Type" + }, + { + "value": "{{publicKey}}", + "description": "Merchant public key.", + "key": "Public-Key" + }, + { + "value": "{{payoutSignature}}", + "description": "HMAC-SHA256 of the exact raw JSON request body, computed with your merchant secret key ({{SECRET_KEY}}), hex-encoded.", + "key": "X-Seerbit-Signature" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"otp\": \"123456\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://pocket.seerbitapi.com/pocket/v2/payouts/{{payoutId}}/confirm", + "protocol": "https", + "host": [ + "pocket", + "seerbitapi", + "com" + ], + "path": [ + "pocket", + "v2", + "payouts", + "{{payoutId}}", + "confirm" + ] + }, + "description": "Phase 2 of 2 — submits the OTP emailed to the merchant during *Initiate Single Payout* / *Initiate Bulk Payout*. On success, SeerBit decrypts the payload and dispatches it for processing; this is what actually moves money.\n\n**Path parameter**\n\n| Parameter | Description |\n|---|---|\n| `payoutId` (in URL path) | From the Initiate call's response, saved to `{{payoutId}}` |\n\n**Body fields**\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `otp` | string | Yes | 6-digit code emailed to the merchant. Expires 5 minutes after being issued. It's presumably sent to the email used to log in via *Authenticate for Payout*, though this isn't stated explicitly. |\n\n**Response: 200 OK**\n```json\n{\n \"payoutId\": \"PV2-ABCDEF123456\",\n \"status\": \"QUEUED\",\n \"message\": \"Payout confirmed and queued for processing\",\n \"batchId\": \"BATCH-XYZ\"\n}\n```\n\n**Error responses (400):**\n- Payout not found\n- Unauthorized access\n- Not in `PENDING_OTP` state\n- OTP has expired\n- Invalid OTP\n- Insufficient funds" + }, + "response": [], + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-03T15:49:22.000Z", + "uid": "37518756-0d5c6ac3-8bbd-49f7-9aeb-8a88485e7a1d" + }, + { + "name": "Initiate Bulk Payout", + "id": "5c675c86-c5c9-5203-c2b0-f88c50248c11", + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{pocketAuthToken}}", + "type": "string" + } + ] + }, + "method": "POST", + "header": [ + { + "value": "application/json", + "key": "Content-Type", + "description": "Request body is JSON." + }, + { + "value": "{{publicKey}}", + "key": "Public-Key", + "description": "Merchant public key." + }, + { + "value": "{{payoutSignature}}", + "key": "X-Seerbit-Signature", + "description": "HMAC-SHA256 of the exact raw JSON request body, computed with your merchant secret key ({{SECRET_KEY}}), hex-encoded." + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"pocketId\": \"SBP0003440\",\n \"batchReference\": \"BATCH-PAY-001\",\n \"transfers\": [\n {\n \"reference\": \"BULK-REF-001\",\n \"currency\": \"NGN\",\n \"amount\": 500.00,\n \"description\": \"Payment to vendor A\",\n \"accountNumber\": \"0522376248\",\n \"bankCode\": \"000013\"\n },\n {\n \"reference\": \"BULK-REF-002\",\n \"currency\": \"NGN\",\n \"amount\": 500.00,\n \"description\": \"Payment to vendor B\",\n \"accountNumber\": \"0522376248\",\n \"bankCode\": \"000013\"\n }\n ]\n}" + }, + "url": { + "raw": "https://pocket.seerbitapi.com/pocket/v2/payouts", + "protocol": "https", + "host": [ + "pocket", + "seerbitapi", + "com" + ], + "path": [ + "pocket", + "v2", + "payouts" + ] + }, + "description": "Phase 1 of 2 — initiates a payout to multiple recipients in one call, sharing a single OTP confirmation. Same endpoint as *Initiate Single Payout*; a non-empty `transfers` array is what puts the request in bulk mode.\n\n**Required headers:** same as *Initiate Single Payout* — `Public-Key`, `X-Seerbit-Signature` (HMAC-SHA256 of the raw body using `{{SECRET_KEY}}`), `Authorization: Bearer {{pocketAuthToken}}` from *Authenticate for Payout*.\n\n**Body fields**\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `pocketId` | string | Yes | The Pocket to pay out from |\n| `batchReference` | string | Yes | Your unique reference for the whole batch. Re-submitting the same `batchReference` is idempotent — returns the existing `payoutId` rather than creating a new batch. |\n| `transfers` | array | Yes | One entry per recipient — see fields below. Must be non-empty to trigger bulk mode. |\n| `transfers[].reference` | string | Yes | Your unique reference for this individual transfer within the batch |\n| `transfers[].currency` | string | Yes | Currency code |\n| `transfers[].amount` | number | Yes | Amount to send to this recipient |\n| `transfers[].description` | string | No | Free-text note for this transfer |\n| `transfers[].accountNumber` | string | Yes | Recipient bank account number |\n| `transfers[].bankCode` | string | Yes | Recipient bank's code — see *Bank List* |\n\n**Response: 202 Accepted** — same shape as *Initiate Single Payout*: one `payoutId` for the whole batch, `status: \"PENDING_OTP\"`.\n\n**Note:** there's no documented endpoint for checking an individual transfer's outcome within a batch — only the batch-level `batchId` returned by *Confirm Payout with OTP*." + }, + "response": [], + "createdAt": "2026-09-03T15:24:04.000Z", + "updatedAt": "2026-09-03T15:49:20.000Z", + "uid": "37518756-5c675c86-c5c9-5203-c2b0-f88c50248c11" + } + ], + "id": "c200fa21-25e8-4f32-bc55-c4a22f601b32", + "description": "Send money out to a bank account (vendor payouts, refunds settled outside the original rail, etc.). The flow is sequential: confirm the receiving account, get an OTP, sign the payout, then submit it — each step's output feeds the next.\n\n### Variables used in this folder\n\n| Variable | Description |\n|---|---|\n| `publicKey` | Your merchant public key from the SeerBit dashboard. Sent in the body of most payment-initiation requests (never as a header) to identify which merchant account a transaction belongs to. |\n| `pocketID` | Identifier for a SeerBit Pocket (an internal sub-wallet under your merchant account), used to fund, debit, or transfer between pockets. |\n| `passKey` | A pocket-specific security key required to authorize certain Pocket operations, separate from your account-level public/secret keys. |\n| `payoutSignature` | HMAC signature you generate to authenticate a Payout request, proving it was signed with your secret key rather than tampered with in transit. |", + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-03T15:24:04.000Z", + "uid": "37518756-c200fa21-25e8-4f32-bc55-c4a22f601b32" + }, + { + "name": "Partners API", + "item": [ + { + "name": "Partner Login", + "id": "ff4d5389-5702-4c9f-946c-9922815efcfc", + "request": { + "auth": { + "type": "noauth" + }, + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "description": "Request body is JSON." + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"email\": \"partner@example.com\",\n \"password\": \"{{partnerPassword}}\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://partners.seerbitapi.com/auth/login", + "protocol": "https", + "host": [ + "partners", + "seerbitapi", + "com" + ], + "path": [ + "auth", + "login" + ] + }, + "description": "Authenticates a SeerBit partner and returns a Bearer token for the Partners API endpoints below (a separate token from the merchant `BearerToken` used elsewhere in this collection). No auth required to call it.\n\n**Body fields**\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `email` | string | Yes | Partner's registered email |\n| `password` | string | Yes | Partner account password |" + }, + "response": [], + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-03T09:57:04.000Z", + "uid": "37518756-ff4d5389-5702-4c9f-946c-9922815efcfc" + }, + { + "name": "Request Password Reset", + "id": "edf71b8d-df9c-42c9-8ec3-9778f7fc59c8", + "request": { + "auth": { + "type": "noauth" + }, + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "description": "Request body is JSON." + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"email\": \"partner@example.com\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://partners.seerbitapi.com/auth/password", + "protocol": "https", + "host": [ + "partners", + "seerbitapi", + "com" + ], + "path": [ + "auth", + "password" + ] + }, + "description": "Triggers a password-reset email containing an OTP, which you then pass to *Reset Password*. No auth required.\n\n**Body fields**\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `email` | string | Yes | Registered partner email |" + }, + "response": [], + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-03T09:57:05.000Z", + "uid": "37518756-edf71b8d-df9c-42c9-8ec3-9778f7fc59c8" + }, + { + "name": "Reset Password", + "id": "6a8ff608-1977-4c69-a262-c1a2b07ebf72", + "request": { + "auth": { + "type": "noauth" + }, + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "description": "Request body is JSON." + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"email\": \"partner@example.com\",\n \"newPassword\": \"{{newPartnerPassword}}\",\n \"otp\": \"123456\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://partners.seerbitapi.com/auth/reset", + "protocol": "https", + "host": [ + "partners", + "seerbitapi", + "com" + ], + "path": [ + "auth", + "reset" + ] + }, + "description": "Completes a password reset using the OTP emailed by *Request Password Reset*.\n\n**Body fields**\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `email` | string | Yes | Registered partner email |\n| `newPassword` | string | Yes | Minimum 8 characters, must include an uppercase letter and a special character |\n| `otp` | string | Yes | Code sent by *Request Password Reset* |" + }, + "response": [], + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-03T09:57:11.000Z", + "uid": "37518756-6a8ff608-1977-4c69-a262-c1a2b07ebf72" + }, + { + "name": "Invite Business", + "id": "ef2af48c-f569-4f78-8446-f46c22a4cb13", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "description": "Request body is JSON." + }, + { + "key": "Public-Key", + "value": "{{publicKey}}", + "description": "Merchant/partner public key — used instead of relying on Bearer alone for this endpoint." + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"name\": \"Jane Doe\",\n \"businessName\": \"Acme Ltd\",\n \"email\": \"jane@acme.com\",\n \"countryCode\": \"NG\",\n \"partnerId\": \"{{partnerId}}\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://partners.seerbitapi.com/api/v1/business/invite", + "protocol": "https", + "host": [ + "partners", + "seerbitapi", + "com" + ], + "path": [ + "api", + "v1", + "business", + "invite" + ] + }, + "description": "Invites a new sub-merchant business under this partner account. Auth is via a Public-Key header rather than Bearer alone.\n\n**Body fields**\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `name` | string | Yes | Contact person's name at the business |\n| `businessName` | string | Yes | Business's registered name |\n| `email` | string | Yes | Business contact email — the invite is sent here |\n| `countryCode` | string | Yes | Defaults to `NG`; change only if the business operates outside Nigeria |\n| `partnerId` | string | Yes | Your partner ID — don't modify this |" + }, + "response": [], + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-03T09:57:14.000Z", + "uid": "37518756-ef2af48c-f569-4f78-8446-f46c22a4cb13" + }, + { + "name": "Get Business Invite", + "id": "44c84b1f-8a28-4003-b728-86c2c1cd9f51", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "https://partners.seerbitapi.com/api/v1/business/SBT0050/invite", + "protocol": "https", + "host": [ + "partners", + "seerbitapi", + "com" + ], + "path": [ + "api", + "v1", + "business", + "SBT0050", + "invite" + ] + }, + "description": "Lists businesses invited under a given business/partner ID. `SBT0050` in the saved URL is the example ID shown in the doc — replace it with a real one. Returns each invited business's ID, name, and email." + }, + "response": [], + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-03T09:57:15.000Z", + "uid": "37518756-44c84b1f-8a28-4003-b728-86c2c1cd9f51" + }, + { + "name": "Set Business Commission", + "id": "784d2dea-bc7c-4a59-91e1-2b6fd5e9fa12", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "description": "Request body is JSON." + }, + { + "key": "Public-Key", + "value": "{{publicKey}}", + "description": "Merchant/partner public key — used instead of relying on Bearer alone for this endpoint." + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"cappedAmount\": \"10000\",\n \"mccPercentage\": \"1.5\",\n \"businessId\": \"{{businessId}}\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://partners.seerbitapi.com/api/v1/business/commission", + "protocol": "https", + "host": [ + "partners", + "seerbitapi", + "com" + ], + "path": [ + "api", + "v1", + "business", + "commission" + ] + }, + "description": "Sets the commission SeerBit deducts on transactions for one sub-merchant business. Auth is via a Public-Key header rather than Bearer alone.\n\n**Body fields**\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `businessId` | string | Yes | The sub-merchant business to set commission for |\n| `mccPercentage` | number | Yes | Commission percentage charged per transaction |\n| `cappedAmount` | string | Yes | Maximum commission amount per transaction, regardless of percentage |" + }, + "response": [], + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-03T09:57:18.000Z", + "uid": "37518756-784d2dea-bc7c-4a59-91e1-2b6fd5e9fa12" + }, + { + "name": "Change Partner Password", + "id": "06e26a63-af11-430a-867b-e1c7ddb0a711", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "description": "Request body is JSON." + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"currentPassword\": \"{{partnerPassword}}\",\n \"newPassword\": \"{{newPartnerPassword}}\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://partners.seerbitapi.com/api/v1/business/password", + "protocol": "https", + "host": [ + "partners", + "seerbitapi", + "com" + ], + "path": [ + "api", + "v1", + "business", + "password" + ] + }, + "description": "Changes the logged-in partner's password. Requires Bearer auth (the partner token from *Partner Login*).\n\n**Body fields**\n\n| Field | Type | Required | Description |\n|---|---|---|---|\n| `currentPassword` | string | Yes | Partner's current password |\n| `newPassword` | string | Yes | Must meet the same complexity rules as *Reset Password* |" + }, + "response": [], + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-03T09:57:20.000Z", + "uid": "37518756-06e26a63-af11-430a-867b-e1c7ddb0a711" + } + ], + "id": "cdc8677f-7dd2-4cd0-8dd1-8ef7709e5259", + "description": "For SeerBit partners managing sub-merchants: authenticate as a partner, invite and manage businesses under your partner account, and set their commission terms.\n\n### Variables used in this folder\n\n| Variable | Description |\n|---|---|\n| `publicKey` | Your merchant public key from the SeerBit dashboard. Sent in the body of most payment-initiation requests (never as a header) to identify which merchant account a transaction belongs to. |\n| `partnerId` | Identifier for a partner/sub-merchant account under the Partners API, used to manage that partner's businesses and settings. |\n| `businessId` | Identifier for a specific business/sub-account created under a partner via the Partners API. |\n| `partnerPassword` | Password used to authenticate as a partner when calling Partners API endpoints. |\n| `newPartnerPassword` | New password value when calling a Partners API endpoint that changes a partner's password. |", + "createdAt": "2026-09-02T17:09:41.000Z", + "updatedAt": "2026-09-02T17:09:41.000Z", + "uid": "37518756-cdc8677f-7dd2-4cd0-8dd1-8ef7709e5259" + }, + { + "name": "Webhooks (reference)", + "item": [ + { + "name": "refund", + "id": "b5cd39b6-fa23-4921-bfe4-d8c8408c2735", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "description": "SeerBit sends this as a JSON POST." + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"eventType\": \"refund\",\n \"eventDate\": \"2026-05-01 12:55:57\",\n \"eventId\": \"3fa85f64-5717-4562-b3fc-2c963f66afa6\",\n \"data\": {\n \"amount\": \"5000.00\",\n \"createdAt\": \"2026-05-01T12:55:00Z\",\n \"transactionRef\": \"payment_reference8\",\n \"description\": \"Customer requested refund\",\n \"type\": \"FULL_REFUND\",\n \"mode\": \"LIVE\",\n \"updatedAt\": \"2026-05-01T12:55:57Z\"\n }\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{yourWebhookUrl}}", + "host": [ + "{{yourWebhookUrl}}" + ] + }, + "description": "**Reference only — not a request you send.** This documents the `refund` payload SeerBit POSTs to *your* configured webhook URL after the matching event happens; there is nothing at SeerBit to call here. The body below is the shape of what you'll receive.\n\nSent when a refund is processed against one of your transactions (full or partial, per `type`).\n\nYour endpoint must respond with HTTP 200 within the acknowledgment window (see this folder's description for V1 vs V2 timing/format) or SeerBit will retry." + }, + "response": [], + "createdAt": "2026-09-02T17:35:23.000Z", + "updatedAt": "2026-09-03T09:57:50.000Z", + "uid": "37518756-b5cd39b6-fa23-4921-bfe4-d8c8408c2735" + }, + { + "name": "dispute", + "id": "adc12cb6-a687-4fa3-9ea5-acc40775d5c6", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "description": "SeerBit sends this as a JSON POST." + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"eventType\": \"dispute\",\n \"eventDate\": \"2026-05-01 12:56:07\",\n \"eventId\": \"3fa85f64-5717-4562-b3fc-2c963f66afa6\",\n \"data\": {\n \"evidence\": [\n {\n \"images\": [\n {\n \"image\": \"https://example.com/evidence1.png\"\n }\n ]\n }\n ]\n }\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{yourWebhookUrl}}", + "host": [ + "{{yourWebhookUrl}}" + ] + }, + "description": "**Reference only — not a request you send.** This documents the `dispute` payload SeerBit POSTs to *your* configured webhook URL after the matching event happens; there is nothing at SeerBit to call here. The body below is the shape of what you'll receive.\n\nSent when a chargeback/dispute is raised against one of your transactions; `evidence` carries whatever supporting material is attached.\n\nYour endpoint must respond with HTTP 200 within the acknowledgment window (see this folder's description for V1 vs V2 timing/format) or SeerBit will retry." + }, + "response": [], + "createdAt": "2026-09-02T17:35:23.000Z", + "updatedAt": "2026-09-03T09:57:52.000Z", + "uid": "37518756-adc12cb6-a687-4fa3-9ea5-acc40775d5c6" + }, + { + "name": "transaction", + "id": "e723a944-eeb4-44a7-8095-c6dde35d765b", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "description": "SeerBit sends this as a JSON POST." + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"eventType\": \"transaction\",\n \"eventDate\": \"2026-07-01 08:56:16\",\n \"eventId\": \"3fa85f64-5717-4562-b3fc-2c963f66afa6\",\n \"data\": {\n \"amount\": 5000,\n \"reference\": \"payment_reference8\",\n \"gatewayMessage\": \"Successful\",\n \"publicKey\": \"{{publicKey}}\",\n \"businessName\": \"Your Business\",\n \"fee\": 50,\n \"channelType\": \"MASTERCARD\",\n \"maskedPan\": \"5123-40xx-xxxx-0008\",\n \"fullname\": \"Jane Doe\",\n \"email\": \"customer@example.com\",\n \"gatewayReference\": \"GW-REF-001\",\n \"country\": \"NG\",\n \"currency\": \"NGN\",\n \"paymentType\": \"CARD\",\n \"gatewayCode\": \"00\",\n \"code\": \"00\",\n \"createdAt\": \"2026-07-01T08:56:00Z\",\n \"updatedAt\": \"2026-07-01T08:56:16Z\"\n }\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{yourWebhookUrl}}", + "host": [ + "{{yourWebhookUrl}}" + ] + }, + "description": "**Reference only — not a request you send.** This documents the `transaction` payload SeerBit POSTs to *your* configured webhook URL after the matching event happens; there is nothing at SeerBit to call here. The body below is the shape of what you'll receive.\n\nSent for a card payment (e.g. from Standard Checkout or Tokenization) reaching a final state — this is the async counterpart to polling *Check Payment Status*.\n\nYour endpoint must respond with HTTP 200 within the acknowledgment window (see this folder's description for V1 vs V2 timing/format) or SeerBit will retry." + }, + "response": [], + "createdAt": "2026-09-02T17:35:23.000Z", + "updatedAt": "2026-09-03T09:57:54.000Z", + "uid": "37518756-e723a944-eeb4-44a7-8095-c6dde35d765b" + }, + { + "name": "transaction.wallet", + "id": "d2c503f8-78e9-4e38-9228-4df215b30940", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "description": "SeerBit sends this as a JSON POST." + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"eventType\": \"transaction.wallet\",\n \"eventDate\": \"2026-05-01 12:52:28\",\n \"eventId\": \"3fa85f64-5717-4562-b3fc-2c963f66afa6\",\n \"data\": {\n \"amount\": 5000,\n \"fee\": 0,\n \"mobile\": \"08012345678\",\n \"reference\": \"va_ref_001\",\n \"gatewayMessage\": \"APPROVED\",\n \"bankCode\": \"000016\",\n \"description\": \"Wallet funding\",\n \"type\": \"Transfer\",\n \"fullname\": \"Jane Doe\",\n \"email\": \"customer@example.com\",\n \"country\": \"NG\",\n \"currency\": \"NGN\",\n \"creditAccountName\": \"Jane Doe\",\n \"creditAccountNumber\": \"1234567890\",\n \"originatorAccountnumber\": \"0987654321\",\n \"originatorName\": \"John Smith\",\n \"narration\": \"Funding\",\n \"createdAt\": \"2026-05-01T12:52:00Z\",\n \"updatedAt\": \"2026-05-01T12:52:28Z\"\n }\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{yourWebhookUrl}}", + "host": [ + "{{yourWebhookUrl}}" + ] + }, + "description": "**Reference only — not a request you send.** This documents the `transaction.wallet` payload SeerBit POSTs to *your* configured webhook URL after the matching event happens; there is nothing at SeerBit to call here. The body below is the shape of what you'll receive.\n\nSent when a bank transfer lands on a Virtual Account or Pocket — this is what tells you a *Get Payments* or Pocket balance actually changed, without you having to poll.\n\nYour endpoint must respond with HTTP 200 within the acknowledgment window (see this folder's description for V1 vs V2 timing/format) or SeerBit will retry." + }, + "response": [], + "createdAt": "2026-09-02T17:35:23.000Z", + "updatedAt": "2026-09-03T09:57:56.000Z", + "uid": "37518756-d2c503f8-78e9-4e38-9228-4df215b30940" + }, + { + "name": "transaction.recurrent", + "id": "323b4907-4806-4070-b38d-f224a6cdc55f", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "description": "SeerBit sends this as a JSON POST." + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"eventType\": \"transaction.recurrent\",\n \"eventDate\": \"2026-05-01 12:50:33\",\n \"eventId\": \"3fa85f64-5717-4562-b3fc-2c963f66afa6\",\n \"data\": {\n \"amount\": 100,\n \"mobile\": \"08012345678\",\n \"reference\": \"sub_charge_ref_001\",\n \"publicKey\": \"{{publicKey}}\",\n \"description\": \"Subscription charge\",\n \"productId\": \"product222\",\n \"maskedPan\": \"5123-40xx-xxxx-0008\",\n \"email\": \"customer@example.com\",\n \"country\": \"NG\",\n \"narration\": \"Recurrent\",\n \"createdAt\": \"2026-05-01T12:50:00Z\",\n \"updatedAt\": \"2026-05-01T12:50:33Z\"\n }\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{yourWebhookUrl}}", + "host": [ + "{{yourWebhookUrl}}" + ] + }, + "description": "**Reference only — not a request you send.** This documents the `transaction.recurrent` payload SeerBit POSTs to *your* configured webhook URL after the matching event happens; there is nothing at SeerBit to call here. The body below is the shape of what you'll receive.\n\nSent when a subscription's scheduled charge (from *Create Plan* / *Charge Subscription*) completes.\n\nYour endpoint must respond with HTTP 200 within the acknowledgment window (see this folder's description for V1 vs V2 timing/format) or SeerBit will retry." + }, + "response": [], + "createdAt": "2026-09-02T17:35:23.000Z", + "updatedAt": "2026-09-03T09:58:02.000Z", + "uid": "37518756-323b4907-4806-4070-b38d-f224a6cdc55f" + }, + { + "name": "transaction.recurring.debit", + "id": "8fbe2a81-0df6-4bf5-8c4f-0b58fa51711a", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "description": "SeerBit sends this as a JSON POST." + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"eventType\": \"transaction.recurring.debit\",\n \"eventDate\": \"2026-05-01 12:55:32\",\n \"eventId\": \"3fa85f64-5717-4562-b3fc-2c963f66afa6\",\n \"data\": {\n \"amount\": 5000,\n \"reference\": \"charge_token_ref_001\",\n \"gatewayMessage\": \"Successful\",\n \"publicKey\": \"{{publicKey}}\",\n \"description\": \"Authorised charge\",\n \"channelType\": \"Recurring Debit\",\n \"maskedPan\": \"5123-40xx-xxxx-0008\",\n \"type\": \"TOKEN\",\n \"fullname\": \"Jane Doe\",\n \"email\": \"customer@example.com\",\n \"country\": \"NG\",\n \"currency\": \"NGN\",\n \"narration\": \"Authorised charge\",\n \"paymentType\": \"card\",\n \"createdAt\": \"2026-05-01T12:55:00Z\",\n \"updatedAt\": \"2026-05-01T12:55:32Z\"\n }\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{yourWebhookUrl}}", + "host": [ + "{{yourWebhookUrl}}" + ] + }, + "description": "**Reference only — not a request you send.** This documents the `transaction.recurring.debit` payload SeerBit POSTs to *your* configured webhook URL after the matching event happens; there is nothing at SeerBit to call here. The body below is the shape of what you'll receive.\n\nSent for a subsequent automated debit against a stored token (e.g. *Charge Authorization Token*) outside the subscription schedule.\n\nYour endpoint must respond with HTTP 200 within the acknowledgment window (see this folder's description for V1 vs V2 timing/format) or SeerBit will retry." + }, + "response": [], + "createdAt": "2026-09-02T17:35:23.000Z", + "updatedAt": "2026-09-03T09:58:05.000Z", + "uid": "37518756-8fbe2a81-0df6-4bf5-8c4f-0b58fa51711a" + } + ], + "id": "9358f4a9-18b1-49e1-933b-ea06200e6299", + "description": "**None of these are requests you send** — SeerBit calls *your* configured webhook URL (set in Dashboard → Account Settings → Webhook) with one of these six event types whenever something happens asynchronously. They're saved here purely as a payload reference so you know what to expect and how to build your handler, the same way the rest of this collection documents outbound calls.\n\n**Acknowledgment — V1:** respond with a plain HTTP 200 within 10 seconds, or SeerBit retries on an escalating schedule for up to 7 days.\n\n**Acknowledgment — V2:** respond within 5 seconds with `{ \"ackReference\": \"\", \"status\": \"received\" }` and HTTP 200. Retries follow a fixed schedule: 30s, 2m, 10m, 30m, then a final attempt at 1h, after which the webhook is marked undelivered.\n\nEvery payload shares one wrapper — `eventType`, `eventDate`, `eventId`, and a `data` object specific to the event — shown in each item below. Use `eventId` to de-duplicate if the same notification arrives more than once (retries can outlast a slow acknowledgment).\n\n### Variables used in this folder\n\n| Variable | Description |\n|---|---|\n| `publicKey` | Your merchant public key from the SeerBit dashboard. Sent in the body of most payment-initiation requests (never as a header) to identify which merchant account a transaction belongs to. |\n| `yourWebhookUrl` | Placeholder for the callback URL you register with SeerBit to receive inbound webhook events (see the Webhooks (reference) folder) — not an endpoint you call, just documents what SeerBit will POST to. |", + "createdAt": "2026-09-02T17:35:23.000Z", + "updatedAt": "2026-09-02T17:35:23.000Z", + "uid": "37518756-9358f4a9-18b1-49e1-933b-ea06200e6299" + } + ], + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{BearerToken}}", + "type": "string" + } + ] + }, + "variable": [ + { + "key": "publicKey", + "value": "" + }, + { + "key": "BearerToken", + "value": "" + }, + { + "key": "SECRET_KEY", + "value": "" + }, + { + "key": "paymentReference", + "value": "payment_reference86" + }, + { + "key": "customerId", + "value": "" + }, + { + "key": "billingId", + "value": "" + }, + { + "key": "batchId", + "value": "" + }, + { + "key": "accountNumber", + "value": "" + }, + { + "key": "reference", + "value": "FIRST_VIRTUAL_17" + }, + { + "key": "paymentLinkId", + "value": "77287988" + }, + { + "key": "authorizationCode", + "value": "" + }, + { + "key": "planId", + "value": "" + }, + { + "key": "pocketID", + "value": "" + }, + { + "key": "passKey", + "value": "" + }, + { + "key": "payoutSignature", + "value": "" + }, + { + "key": "partnerId", + "value": "" + }, + { + "key": "businessId", + "value": "" + }, + { + "key": "partnerPassword", + "value": "" + }, + { + "key": "newPartnerPassword", + "value": "" + }, + { + "key": "destinationPocketID", + "value": "" + }, + { + "key": "pocketEmail", + "value": "" + }, + { + "key": "pocketPassword", + "value": "" + }, + { + "key": "newPocketPassword", + "value": "" + }, + { + "key": "yourWebhookUrl", + "value": "https://your-server.com/webhooks/seerbit" + }, + { + "key": "customerEmail", + "value": "" + }, + { + "key": "InvoiceNo", + "value": "" + }, + { + "key": "orderNo", + "value": "" + } + ] +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index f1e7c15..b2f6152 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,119 +1,140 @@ { "name": "seerbitopenapi", "version": "1.0.0", - "lockfileVersion": 1, + "lockfileVersion": 3, "requires": true, - "dependencies": { - "@babel/code-frame": { + "packages": { + "": { + "name": "seerbitopenapi", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "minimist": "^1.2.5", + "node-fetch": "^2.6.1", + "openapi-to-postmanv2": "^2.0.0", + "redoc": "^2.0.0-rc.40", + "redoc-cli": "^0.9.12", + "yaml": "^1.10.0" + }, + "devDependencies": {} + }, + "node_modules/@babel/code-frame": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "requires": { + "dependencies": { "@babel/highlight": "^7.10.4" } }, - "@babel/generator": { + "node_modules/@babel/generator": { "version": "7.11.6", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.6.tgz", "integrity": "sha512-DWtQ1PV3r+cLbySoHrwn9RWEgKMBLLma4OBQloPRyDYvc5msJM9kvTLo1YnlJd1P/ZuKbdli3ijr5q3FvAF3uA==", - "requires": { + "dependencies": { "@babel/types": "^7.11.5", "jsesc": "^2.5.1", "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } } }, - "@babel/helper-annotate-as-pure": { + "node_modules/@babel/generator/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", - "requires": { + "dependencies": { "@babel/types": "^7.10.4" } }, - "@babel/helper-function-name": { + "node_modules/@babel/helper-function-name": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "requires": { + "dependencies": { "@babel/helper-get-function-arity": "^7.10.4", "@babel/template": "^7.10.4", "@babel/types": "^7.10.4" } }, - "@babel/helper-get-function-arity": { + "node_modules/@babel/helper-get-function-arity": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "requires": { + "dependencies": { "@babel/types": "^7.10.4" } }, - "@babel/helper-module-imports": { + "node_modules/@babel/helper-module-imports": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", - "requires": { + "dependencies": { "@babel/types": "^7.10.4" } }, - "@babel/helper-split-export-declaration": { + "node_modules/@babel/helper-split-export-declaration": { "version": "7.11.0", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", - "requires": { + "dependencies": { "@babel/types": "^7.11.0" } }, - "@babel/helper-validator-identifier": { + "node_modules/@babel/helper-validator-identifier": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" }, - "@babel/highlight": { + "node_modules/@babel/highlight": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "requires": { + "dependencies": { "@babel/helper-validator-identifier": "^7.10.4", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, - "@babel/parser": { + "node_modules/@babel/parser": { "version": "7.11.5", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.5.tgz", - "integrity": "sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q==" + "integrity": "sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } }, - "@babel/runtime": { + "node_modules/@babel/runtime": { "version": "7.11.2", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz", "integrity": "sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==", - "requires": { + "dependencies": { "regenerator-runtime": "^0.13.4" } }, - "@babel/template": { + "node_modules/@babel/template": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "requires": { + "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/parser": "^7.10.4", "@babel/types": "^7.10.4" } }, - "@babel/traverse": { + "node_modules/@babel/traverse": { "version": "7.11.5", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.5.tgz", "integrity": "sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ==", - "requires": { + "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/generator": "^7.11.5", "@babel/helper-function-name": "^7.10.4", @@ -125,173 +146,189 @@ "lodash": "^4.17.19" } }, - "@babel/types": { + "node_modules/@babel/types": { "version": "7.11.5", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.5.tgz", "integrity": "sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q==", - "requires": { + "dependencies": { "@babel/helper-validator-identifier": "^7.10.4", "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } }, - "@emotion/is-prop-valid": { + "node_modules/@emotion/is-prop-valid": { "version": "0.8.8", "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", - "requires": { + "dependencies": { "@emotion/memoize": "0.7.4" } }, - "@emotion/memoize": { + "node_modules/@emotion/memoize": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==" }, - "@emotion/stylis": { + "node_modules/@emotion/stylis": { "version": "0.8.5", "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==" }, - "@emotion/unitless": { + "node_modules/@emotion/unitless": { "version": "0.7.5", "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" }, - "@exodus/schemasafe": { + "node_modules/@exodus/schemasafe": { "version": "1.0.0-rc.2", "resolved": "https://registry.npmjs.org/@exodus/schemasafe/-/schemasafe-1.0.0-rc.2.tgz", "integrity": "sha512-W98NvvOe/Med3o66xTO03pd7a2omZebH79PV64gSE+ceDdU8uxQhFTa7ISiD1kseyqyOrMyW5/MNdsGEU02i3Q==" }, - "@redocly/react-dropdown-aria": { + "node_modules/@redocly/react-dropdown-aria": { "version": "2.0.11", "resolved": "https://registry.npmjs.org/@redocly/react-dropdown-aria/-/react-dropdown-aria-2.0.11.tgz", - "integrity": "sha512-rmuSC2JFFl4DkPDdGVrmffT9KcbG2AB5jvhxPIrOc1dO9mHRMUUftQY35KZlvWqqSSqVn+AM+J9dhiTo1ZqR8A==" + "integrity": "sha512-rmuSC2JFFl4DkPDdGVrmffT9KcbG2AB5jvhxPIrOc1dO9mHRMUUftQY35KZlvWqqSSqVn+AM+J9dhiTo1ZqR8A==", + "peerDependencies": { + "react": "^16.8.0", + "react-dom": "^16.8.0", + "styled-components": "^5.1.1" + } }, - "@types/color-name": { + "node_modules/@types/color-name": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" }, - "@types/node": { + "node_modules/@types/node": { "version": "13.13.21", "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.21.tgz", "integrity": "sha512-tlFWakSzBITITJSxHV4hg4KvrhR/7h3xbJdSFbYJBVzKubrASbnnIFuSgolUh7qKGo/ZeJPKUfbZ0WS6Jp14DQ==" }, - "ajv": { + "node_modules/ajv": { "version": "5.5.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "requires": { + "dependencies": { "co": "^4.6.0", "fast-deep-equal": "^1.0.0", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.3.0" } }, - "ansi-regex": { + "node_modules/ansi-regex": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "engines": { + "node": ">=8" + } }, - "ansi-styles": { + "node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { + "dependencies": { "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, - "anymatch": { + "node_modules/anymatch": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "requires": { + "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" } }, - "argparse": { + "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { + "dependencies": { "sprintf-js": "~1.0.2" } }, - "array-uniq": { + "node_modules/array-uniq": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "engines": { + "node": ">=0.10.0" + } }, - "asn1.js": { + "node_modules/asn1.js": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "requires": { + "dependencies": { "bn.js": "^4.0.0", "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0", "safer-buffer": "^2.1.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - } } }, - "assert": { + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + }, + "node_modules/assert": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "requires": { + "dependencies": { "object-assign": "^4.1.1", "util": "0.10.3" - }, + } + }, + "node_modules/assert/node_modules/util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", "dependencies": { - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "requires": { - "inherits": "2.0.1" - } - } + "inherits": "2.0.1" } }, - "async": { + "node_modules/async": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" }, - "babel-plugin-styled-components": { + "node_modules/babel-plugin-styled-components": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-1.11.1.tgz", "integrity": "sha512-YwrInHyKUk1PU3avIRdiLyCpM++18Rs1NgyMXEAQC33rIXs/vro0A+stf4sT0Gf22Got+xRWB8Cm0tw+qkRzBA==", - "requires": { + "dependencies": { "@babel/helper-annotate-as-pure": "^7.0.0", "@babel/helper-module-imports": "^7.0.0", "babel-plugin-syntax-jsx": "^6.18.0", "lodash": "^4.17.11" + }, + "peerDependencies": { + "styled-components": ">= 2" } }, - "babel-plugin-syntax-jsx": { + "node_modules/babel-plugin-syntax-jsx": { "version": "6.18.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=" }, - "base64-js": { + "node_modules/base64-js": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" }, - "better-ajv-errors": { + "node_modules/better-ajv-errors": { "version": "0.6.7", "resolved": "https://registry.npmjs.org/better-ajv-errors/-/better-ajv-errors-0.6.7.tgz", "integrity": "sha512-PYgt/sCzR4aGpyNy5+ViSQ77ognMnWq7745zM+/flYO4/Yisdtp9wDQW2IKCyVYPUxQt3E/b5GBSwfhd1LPdlg==", - "requires": { + "dependencies": { "@babel/code-frame": "^7.0.0", "@babel/runtime": "^7.0.0", "chalk": "^2.4.1", @@ -299,36 +336,45 @@ "json-to-ast": "^2.0.3", "jsonpointer": "^4.0.1", "leven": "^3.1.0" + }, + "peerDependencies": { + "ajv": "4.11.8 - 6" } }, - "binary-extensions": { + "node_modules/binary-extensions": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==" + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "engines": { + "node": ">=8" + } }, - "bn.js": { + "node_modules/bn.js": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==" }, - "braces": { + "node_modules/braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { + "dependencies": { "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" } }, - "brorand": { + "node_modules/brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" }, - "browserify-aes": { + "node_modules/browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "requires": { + "dependencies": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", "create-hash": "^1.1.0", @@ -337,48 +383,46 @@ "safe-buffer": "^5.0.1" } }, - "browserify-cipher": { + "node_modules/browserify-cipher": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "requires": { + "dependencies": { "browserify-aes": "^1.0.4", "browserify-des": "^1.0.0", "evp_bytestokey": "^1.0.0" } }, - "browserify-des": { + "node_modules/browserify-des": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "requires": { + "dependencies": { "cipher-base": "^1.0.1", "des.js": "^1.0.0", "inherits": "^2.0.1", "safe-buffer": "^5.1.2" } }, - "browserify-rsa": { + "node_modules/browserify-rsa": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "requires": { + "dependencies": { "bn.js": "^4.1.0", "randombytes": "^2.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - } } }, - "browserify-sign": { + "node_modules/browserify-rsa/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + }, + "node_modules/browserify-sign": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "requires": { + "dependencies": { "bn.js": "^5.1.1", "browserify-rsa": "^4.0.1", "create-hash": "^1.2.0", @@ -388,235 +432,262 @@ "parse-asn1": "^5.1.5", "readable-stream": "^3.6.0", "safe-buffer": "^5.2.0" - }, + } + }, + "node_modules/browserify-sign/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/browserify-sign/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dependencies": { - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "browserify-zlib": { + "node_modules/browserify-zlib": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "requires": { + "dependencies": { "pako": "~1.0.5" } }, - "buffer": { + "node_modules/buffer": { "version": "4.9.2", "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "requires": { + "dependencies": { "base64-js": "^1.0.2", "ieee754": "^1.1.4", "isarray": "^1.0.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - } } }, - "buffer-xor": { + "node_modules/buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" }, - "builtin-status-codes": { + "node_modules/buffer/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" }, - "call-me-maybe": { + "node_modules/call-me-maybe": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=" }, - "camelcase": { + "node_modules/camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } }, - "camelize": { + "node_modules/camelize": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" }, - "chalk": { + "node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { + "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" } }, - "charset": { + "node_modules/charset": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/charset/-/charset-1.0.1.tgz", - "integrity": "sha512-6dVyOOYjpfFcL1Y4qChrAoQLRHvj2ziyhcm0QJlhOcAhykL/k1kTUPbeo+87MNRTRdk2OIIsIXbuF3x2wi5EXg==" + "integrity": "sha512-6dVyOOYjpfFcL1Y4qChrAoQLRHvj2ziyhcm0QJlhOcAhykL/k1kTUPbeo+87MNRTRdk2OIIsIXbuF3x2wi5EXg==", + "engines": { + "node": ">=4.0.0" + } }, - "chokidar": { + "node_modules/chokidar": { "version": "3.4.2", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.2.tgz", "integrity": "sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A==", - "requires": { + "dependencies": { "anymatch": "~3.1.1", "braces": "~3.0.2", - "fsevents": "~2.1.2", "glob-parent": "~5.1.0", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.4.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.1.2" } }, - "cipher-base": { + "node_modules/cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "requires": { + "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" } }, - "classnames": { + "node_modules/classnames": { "version": "2.2.6", "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" }, - "clipboard": { + "node_modules/clipboard": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.6.tgz", "integrity": "sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg==", "optional": true, - "requires": { + "dependencies": { "good-listener": "^1.2.2", "select": "^1.1.2", "tiny-emitter": "^2.0.0" } }, - "cliui": { + "node_modules/cliui": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "requires": { + "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^6.2.0" } }, - "clsx": { + "node_modules/clsx": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", - "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==" + "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==", + "engines": { + "node": ">=6" + } }, - "co": { + "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } }, - "code-error-fragment": { + "node_modules/code-error-fragment": { "version": "0.0.230", "resolved": "https://registry.npmjs.org/code-error-fragment/-/code-error-fragment-0.0.230.tgz", - "integrity": "sha512-cadkfKp6932H8UkhzE/gcUqhRMNf8jHzkAN7+5Myabswaghu4xABTgPHDCjW+dBAJxj/SpkTYokpzDqY4pCzQw==" + "integrity": "sha512-cadkfKp6932H8UkhzE/gcUqhRMNf8jHzkAN7+5Myabswaghu4xABTgPHDCjW+dBAJxj/SpkTYokpzDqY4pCzQw==", + "engines": { + "node": ">= 4" + } }, - "color-convert": { + "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { + "dependencies": { "color-name": "1.1.3" } }, - "color-name": { + "node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, - "commander": { + "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, - "compute-gcd": { + "node_modules/compute-gcd": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/compute-gcd/-/compute-gcd-1.2.1.tgz", "integrity": "sha512-TwMbxBNz0l71+8Sc4czv13h4kEqnchV9igQZBi6QUaz09dnz13juGnnaWWJTRsP3brxOoxeB4SA2WELLw1hCtg==", - "requires": { + "dependencies": { "validate.io-array": "^1.0.3", "validate.io-function": "^1.0.2", "validate.io-integer-array": "^1.0.0" } }, - "compute-lcm": { + "node_modules/compute-lcm": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/compute-lcm/-/compute-lcm-1.1.2.tgz", "integrity": "sha512-OFNPdQAXnQhDSKioX8/XYT6sdUlXwpeMjfd6ApxMJfyZ4GxmLR1xvMERctlYhlHwIiz6CSpBc2+qYKjHGZw4TQ==", - "requires": { + "dependencies": { "compute-gcd": "^1.2.1", "validate.io-array": "^1.0.3", "validate.io-function": "^1.0.2", "validate.io-integer-array": "^1.0.0" } }, - "console-browserify": { + "node_modules/console-browserify": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" }, - "constants-browserify": { + "node_modules/constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" }, - "core-js": { + "node_modules/core-js": { "version": "3.6.5", "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" + "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } }, - "core-util-is": { + "node_modules/core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, - "create-ecdh": { + "node_modules/create-ecdh": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "requires": { + "dependencies": { "bn.js": "^4.1.0", "elliptic": "^6.5.3" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - } } }, - "create-hash": { + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + }, + "node_modules/create-hash": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "requires": { + "dependencies": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", "md5.js": "^1.3.4", @@ -624,11 +695,11 @@ "sha.js": "^2.4.0" } }, - "create-hmac": { + "node_modules/create-hmac": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { + "dependencies": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", "inherits": "^2.0.1", @@ -637,11 +708,11 @@ "sha.js": "^2.4.8" } }, - "crypto-browserify": { + "node_modules/crypto-browserify": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "requires": { + "dependencies": { "browserify-cipher": "^1.0.0", "browserify-sign": "^4.0.0", "create-ecdh": "^4.0.0", @@ -653,131 +724,158 @@ "public-encrypt": "^4.0.0", "randombytes": "^2.0.0", "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" } }, - "css-color-keywords": { + "node_modules/css-color-keywords": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", - "integrity": "sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU=" + "integrity": "sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU=", + "engines": { + "node": ">=4" + } }, - "css-to-react-native": { + "node_modules/css-to-react-native": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.0.0.tgz", "integrity": "sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ==", - "requires": { + "dependencies": { "camelize": "^1.0.0", "css-color-keywords": "^1.0.0", "postcss-value-parser": "^4.0.2" } }, - "debug": { + "node_modules/debug": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "requires": { + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dependencies": { "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "decamelize": { + "node_modules/decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "engines": { + "node": ">=0.10.0" + } }, - "decko": { + "node_modules/decko": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decko/-/decko-1.2.0.tgz", "integrity": "sha1-/UPHNelnuAEzBohKVvvmZZlraBc=" }, - "delegate": { + "node_modules/delegate": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", "optional": true }, - "des.js": { + "node_modules/des.js": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "requires": { + "dependencies": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" } }, - "diffie-hellman": { + "node_modules/diffie-hellman": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "requires": { + "dependencies": { "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - } } }, - "dom-serializer": { + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + }, + "node_modules/dom-serializer": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "requires": { + "dependencies": { "domelementtype": "^2.0.1", "entities": "^2.0.0" - }, - "dependencies": { - "domelementtype": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz", - "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==" - }, - "entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==" + } + }, + "node_modules/dom-serializer/node_modules/domelementtype": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz", + "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" } + ] + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "domain-browser": { + "node_modules/domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "engines": { + "node": ">=0.4", + "npm": ">=1.2" + } }, - "domelementtype": { + "node_modules/domelementtype": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" }, - "domhandler": { + "node_modules/domhandler": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "requires": { + "dependencies": { "domelementtype": "1" } }, - "dompurify": { + "node_modules/dompurify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.1.0.tgz", "integrity": "sha512-wKExRhOwUnfm1icoISSXnlmM1P2l07W2tFQqbU+8oySnvy7tHwj2iHJ1kJQi8EfcTlojsHKESOJwCGVJmNUdPQ==" }, - "domutils": { + "node_modules/domutils": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "requires": { + "dependencies": { "dom-serializer": "0", "domelementtype": "1" } }, - "elliptic": { + "node_modules/elliptic": { "version": "6.5.3", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", - "requires": { + "dependencies": { "bn.js": "^4.4.0", "brorand": "^1.0.1", "hash.js": "^1.0.0", @@ -785,596 +883,736 @@ "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - } } }, - "emoji-regex": { + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + }, + "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, - "entities": { + "node_modules/entities": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" }, - "es6-promise": { + "node_modules/es6-promise": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=" }, - "escape-html": { + "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" }, - "escape-string-regexp": { + "node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } }, - "esprima": { + "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } }, - "eventemitter3": { + "node_modules/eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" }, - "events": { + "node_modules/events": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", - "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==" + "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", + "engines": { + "node": ">=0.8.x" + } }, - "evp_bytestokey": { + "node_modules/evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "requires": { + "dependencies": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" } }, - "faker": { + "node_modules/faker": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/faker/-/faker-5.1.0.tgz", "integrity": "sha512-RrWKFSSA/aNLP0g3o2WW1Zez7/MnMr7xkiZmoCfAGZmdkDQZ6l2KtuXHN5XjdvpRjDl8+3vf+Rrtl06Z352+Mw==" }, - "fast-deep-equal": { + "node_modules/fast-deep-equal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" }, - "fast-json-stable-stringify": { + "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, - "fast-safe-stringify": { + "node_modules/fast-safe-stringify": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" }, - "file-type": { + "node_modules/file-type": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=" + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", + "engines": { + "node": ">=0.10.0" + } }, - "fill-range": { + "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { + "dependencies": { "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "find-up": { + "node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { + "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "foreach": { + "node_modules/foreach": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" }, - "format-util": { + "node_modules/format-util": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/format-util/-/format-util-1.0.5.tgz", "integrity": "sha512-varLbTj0e0yVyRpqQhuWV+8hlePAgaoFRhNFj50BNjEIrw1/DphHSObtqwskVCPWNgzwPoQrZAbfa/SBiicNeg==" }, - "fsevents": { + "node_modules/fsevents": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "optional": true + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } }, - "get-caller-file": { + "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } }, - "glob-parent": { + "node_modules/glob-parent": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "requires": { + "dependencies": { "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" } }, - "globals": { + "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } }, - "good-listener": { + "node_modules/good-listener": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", "optional": true, - "requires": { + "dependencies": { "delegate": "^3.1.2" } }, - "grapheme-splitter": { + "node_modules/grapheme-splitter": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" }, - "handlebars": { + "node_modules/handlebars": { "version": "4.7.6", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz", "integrity": "sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==", - "requires": { + "dependencies": { "minimist": "^1.2.5", "neo-async": "^2.6.0", "source-map": "^0.6.1", - "uglify-js": "^3.1.4", "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" } }, - "has-flag": { + "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } }, - "hash-base": { + "node_modules/hash-base": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "requires": { + "dependencies": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", "safe-buffer": "^5.2.0" }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash-base/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/hash-base/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dependencies": { - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "hash.js": { + "node_modules/hash.js": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { + "dependencies": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - } } }, - "hmac-drbg": { + "node_modules/hash.js/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "requires": { + "dependencies": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.1" } }, - "hoist-non-react-statics": { + "node_modules/hoist-non-react-statics": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "requires": { + "dependencies": { "react-is": "^16.7.0" } }, - "htmlparser2": { + "node_modules/htmlparser2": { "version": "3.10.1", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "requires": { + "dependencies": { "domelementtype": "^1.3.1", "domhandler": "^2.3.0", "domutils": "^1.5.1", "entities": "^1.1.1", "inherits": "^2.0.1", "readable-stream": "^3.1.1" - }, + } + }, + "node_modules/htmlparser2/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - } - } - } + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "http-reasons": { + "node_modules/htmlparser2/node_modules/readable-stream/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/http-reasons": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/http-reasons/-/http-reasons-0.1.0.tgz", "integrity": "sha1-qVPKZwB4Zp3eFCzomUAbnW6F07Q=" }, - "http2-client": { + "node_modules/http2-client": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/http2-client/-/http2-client-1.3.3.tgz", "integrity": "sha512-nUxLymWQ9pzkzTmir24p2RtsgruLmhje7lH3hLX1IpwvyTg77fW+1brenPPP3USAR+rQ36p5sTA/x7sjCJVkAA==" }, - "https-browserify": { + "node_modules/https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" }, - "iconv-lite": { + "node_modules/iconv-lite": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", - "requires": { + "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "ieee754": { + "node_modules/ieee754": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" }, - "inherits": { + "node_modules/inherits": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" }, - "is-binary-path": { + "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "requires": { + "dependencies": { "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "is-extglob": { + "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "engines": { + "node": ">=0.10.0" + } }, - "is-fullwidth-code-point": { + "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } }, - "is-glob": { + "node_modules/is-glob": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "requires": { + "dependencies": { "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-number": { + "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } }, - "isarray": { + "node_modules/isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" }, - "js-tokens": { + "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, - "js-yaml": { + "node_modules/js-yaml": { "version": "3.14.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", - "requires": { + "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "jsesc": { + "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } }, - "json-pointer": { + "node_modules/json-pointer": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/json-pointer/-/json-pointer-0.6.1.tgz", "integrity": "sha512-3OvjqKdCBvH41DLpV4iSt6v2XhZXV1bPB4OROuknvUXI7ZQNofieCPkmE26stEJ9zdQuvIxDHCuYhfgxFAAs+Q==", - "requires": { + "dependencies": { "foreach": "^2.0.4" } }, - "json-schema-compare": { + "node_modules/json-schema-compare": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/json-schema-compare/-/json-schema-compare-0.2.2.tgz", "integrity": "sha512-c4WYmDKyJXhs7WWvAWm3uIYnfyWFoIp+JEoX34rctVvEkMYCPGhXtvmFFXiffBbxfZsvQ0RNnV5H7GvDF5HCqQ==", - "requires": { + "dependencies": { "lodash": "^4.17.4" } }, - "json-schema-merge-allof": { + "node_modules/json-schema-merge-allof": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/json-schema-merge-allof/-/json-schema-merge-allof-0.7.0.tgz", "integrity": "sha512-kvsuSVnl1n5xnNEu5ed4o8r8ujSA4/IgRtHmpgfMfa7FOMIRAzN4F9qbuklouTn5J8bi83y6MQ11n+ERMMTXZg==", - "requires": { + "dependencies": { "compute-lcm": "^1.1.0", "json-schema-compare": "^0.2.2", "lodash": "^4.17.4" } }, - "json-schema-ref-parser": { + "node_modules/json-schema-ref-parser": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/json-schema-ref-parser/-/json-schema-ref-parser-6.1.0.tgz", "integrity": "sha512-pXe9H1m6IgIpXmE5JSb8epilNTGsmTb2iPohAXpOdhqGFbQjNeHHsZxU+C8w6T81GZxSPFLeUoqDJmzxx5IGuw==", - "requires": { + "deprecated": "Please switch to @apidevtools/json-schema-ref-parser", + "dependencies": { "call-me-maybe": "^1.0.1", "js-yaml": "^3.12.1", "ono": "^4.0.11" } }, - "json-schema-traverse": { + "node_modules/json-schema-traverse": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" }, - "json-to-ast": { + "node_modules/json-to-ast": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/json-to-ast/-/json-to-ast-2.1.0.tgz", "integrity": "sha512-W9Lq347r8tA1DfMvAGn9QNcgYm4Wm7Yc+k8e6vezpMnRT+NHbtlxgNBXRVjXe9YM6eTn6+p/MKOlV/aABJcSnQ==", - "requires": { + "dependencies": { "code-error-fragment": "0.0.230", "grapheme-splitter": "^1.0.4" + }, + "engines": { + "node": ">= 4" } }, - "jsonpointer": { + "node_modules/jsonpointer": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.1.0.tgz", - "integrity": "sha512-CXcRvMyTlnR53xMcKnuMzfCA5i/nfblTnnr74CZb6C4vG39eu6w51t7nKmU5MfLfbTgGItliNyjO/ciNPDqClg==" + "integrity": "sha512-CXcRvMyTlnR53xMcKnuMzfCA5i/nfblTnnr74CZb6C4vG39eu6w51t7nKmU5MfLfbTgGItliNyjO/ciNPDqClg==", + "engines": { + "node": ">=0.10.0" + } }, - "leven": { + "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "engines": { + "node": ">=6" + } }, - "liquid-json": { + "node_modules/liquid-json": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/liquid-json/-/liquid-json-0.3.1.tgz", - "integrity": "sha1-kVWhgTbYprJhXl8W+aJEira1Duo=" + "integrity": "sha1-kVWhgTbYprJhXl8W+aJEira1Duo=", + "engines": { + "node": ">=4" + } }, - "locate-path": { + "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { + "dependencies": { "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" } }, - "lodash": { + "node_modules/lodash": { "version": "4.17.20", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" }, - "lodash.clonedeep": { + "node_modules/lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" }, - "lodash.escaperegexp": { + "node_modules/lodash.escaperegexp": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", "integrity": "sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=" }, - "lodash.isplainobject": { + "node_modules/lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" }, - "lodash.isstring": { + "node_modules/lodash.isstring": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" }, - "lodash.mergewith": { + "node_modules/lodash.mergewith": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==" }, - "loose-envify": { + "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { + "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" } }, - "lunr": { + "node_modules/lunr": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.8.tgz", "integrity": "sha512-oxMeX/Y35PNFuZoHp+jUj5OSEmLCaIH4KTFJh7a93cHBoFmpw2IoPs22VIz7vyO2YUnx2Tn9dzIwO2P/4quIRg==" }, - "mark.js": { + "node_modules/mark.js": { "version": "8.11.1", "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", "integrity": "sha1-GA8fnr74sOY45BZq1S24eb6y/8U=" }, - "marked": { + "node_modules/marked": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/marked/-/marked-0.7.0.tgz", - "integrity": "sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg==" + "integrity": "sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg==", + "bin": { + "marked": "bin/marked" + }, + "engines": { + "node": ">=0.10.0" + } }, - "md5.js": { + "node_modules/md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "requires": { + "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1", "safe-buffer": "^5.1.2" } }, - "memoize-one": { + "node_modules/memoize-one": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.1.1.tgz", "integrity": "sha512-HKeeBpWvqiVJD57ZUAsJNm71eHTykffzcLZVYWiVfQeI1rJtuEaS7hQiEpWfVVk18donPwJEcFKIkCmPJNOhHA==" }, - "miller-rabin": { + "node_modules/miller-rabin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "requires": { + "dependencies": { "bn.js": "^4.0.0", "brorand": "^1.0.1" }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - } + "bin": { + "miller-rabin": "bin/miller-rabin" } }, - "mime-db": { + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + }, + "node_modules/mime-db": { "version": "1.44.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "engines": { + "node": ">= 0.6" + } }, - "mime-format": { + "node_modules/mime-format": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/mime-format/-/mime-format-2.0.0.tgz", "integrity": "sha1-4p+IkeKE14JwJG8AUNaDS9u+EzI=", - "requires": { + "dependencies": { "charset": "^1.0.0" } }, - "mime-types": { + "node_modules/mime-types": { "version": "2.1.27", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", - "requires": { + "dependencies": { "mime-db": "1.44.0" + }, + "engines": { + "node": ">= 0.6" } }, - "minimalistic-assert": { + "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, - "minimalistic-crypto-utils": { + "node_modules/minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" }, - "minimist": { + "node_modules/minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, - "mkdirp": { + "node_modules/mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } }, - "mobx": { + "node_modules/mobx": { "version": "4.15.7", "resolved": "https://registry.npmjs.org/mobx/-/mobx-4.15.7.tgz", - "integrity": "sha512-X4uQvuf2zYKHVO5kRT5Utmr+J9fDnRgxWWnSqJ4oiccPTQU38YG+/O3nPmOhUy4jeHexl7XJJpWDBgEnEfp+8w==" + "integrity": "sha512-X4uQvuf2zYKHVO5kRT5Utmr+J9fDnRgxWWnSqJ4oiccPTQU38YG+/O3nPmOhUy4jeHexl7XJJpWDBgEnEfp+8w==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mobx" + } }, - "mobx-react": { + "node_modules/mobx-react": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/mobx-react/-/mobx-react-6.3.0.tgz", "integrity": "sha512-C14yya2nqEBRSEiJjPkhoWJLlV8pcCX3m2JRV7w1KivwANJqipoiPx9UMH4pm6QNMbqDdvJqoyl+LqNu9AhvEQ==", - "requires": { + "deprecated": "Please use 6.3.1 instead of this version", + "dependencies": { "mobx-react-lite": ">=2.2.0" + }, + "peerDependencies": { + "mobx": "^5.15.4 || ^4.15.4", + "react": "^16.8.0 || 16.9.0-alpha.0" } }, - "mobx-react-lite": { + "node_modules/mobx-react-lite": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/mobx-react-lite/-/mobx-react-lite-2.2.2.tgz", - "integrity": "sha512-2SlXALHIkyUPDsV4VTKVR9DW7K3Ksh1aaIv3NrNJygTbhXe2A9GrcKHZ2ovIiOp/BXilOcTYemfHHZubP431dg==" + "integrity": "sha512-2SlXALHIkyUPDsV4VTKVR9DW7K3Ksh1aaIv3NrNJygTbhXe2A9GrcKHZ2ovIiOp/BXilOcTYemfHHZubP431dg==", + "peerDependencies": { + "mobx": "^4.0.0 || ^5.0.0", + "react": "^16.8.0" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } }, - "ms": { + "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "neo-async": { + "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, - "node-fetch": { + "node_modules/node-fetch": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "engines": { + "node": "4.x || >=6.0.0" + } }, - "node-fetch-h2": { + "node_modules/node-fetch-h2": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/node-fetch-h2/-/node-fetch-h2-2.3.0.tgz", "integrity": "sha512-ofRW94Ab0T4AOh5Fk8t0h8OBWrmjb0SSB20xh1H8YnPV9EJ+f5AMoYSUQ2zgJ4Iq2HAK0I2l5/Nequ8YzFS3Hg==", - "requires": { + "dependencies": { "http2-client": "^1.2.5" + }, + "engines": { + "node": "4.x || >=6.0.0" } }, - "node-libs-browser": { + "node_modules/node-libs-browser": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "requires": { + "dependencies": { "assert": "^1.1.1", "browserify-zlib": "^0.2.0", "buffer": "^4.3.0", @@ -1400,64 +1638,82 @@ "vm-browserify": "^1.0.1" } }, - "node-readfiles": { + "node_modules/node-readfiles": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/node-readfiles/-/node-readfiles-0.2.0.tgz", "integrity": "sha1-271K8SE04uY1wkXvk//Pb2BnOl0=", - "requires": { + "dependencies": { "es6-promise": "^3.2.1" } }, - "normalize-path": { + "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } }, - "number-is-nan": { + "node_modules/number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "engines": { + "node": ">=0.10.0" + } }, - "oas-kit-common": { + "node_modules/oas-kit-common": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/oas-kit-common/-/oas-kit-common-1.0.8.tgz", "integrity": "sha512-pJTS2+T0oGIwgjGpw7sIRU8RQMcUoKCDWFLdBqKB2BNmGpbBMH2sdqAaOXUg8OzonZHU0L7vfJu1mJFEiYDWOQ==", - "requires": { + "dependencies": { "fast-safe-stringify": "^2.0.7" } }, - "oas-linter": { + "node_modules/oas-linter": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/oas-linter/-/oas-linter-3.2.0.tgz", "integrity": "sha512-LP5F1dhjULEJV5oGRg6ROztH2FddzttrrUEwq5J2GB2Zy938mg0vwt1+Rthn/qqDHtj4Qgq21duNGHh+Ew1wUg==", - "requires": { + "dependencies": { "@exodus/schemasafe": "^1.0.0-rc.2", "should": "^13.2.1", "yaml": "^1.10.0" + }, + "funding": { + "url": "https://github.com/Mermade/oas-kit?sponsor=1" } }, - "oas-resolver": { + "node_modules/oas-resolver": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/oas-resolver/-/oas-resolver-2.5.1.tgz", "integrity": "sha512-MdMY8YAnCdFTAt5+CTC/aYEOSIFt+ICOWxQvKKxsIHjc0/0tG6V4DzbkHW9SWWqUmDPiHDxJsi79kjsE/1PJ5g==", - "requires": { + "dependencies": { "node-fetch-h2": "^2.3.0", "oas-kit-common": "^1.0.8", "reftools": "^1.1.6", "yaml": "^1.10.0", "yargs": "^15.3.1" + }, + "bin": { + "resolve": "resolve.js" + }, + "funding": { + "url": "https://github.com/Mermade/oas-kit?sponsor=1" } }, - "oas-schema-walker": { + "node_modules/oas-schema-walker": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/oas-schema-walker/-/oas-schema-walker-1.1.5.tgz", - "integrity": "sha512-2yucenq1a9YPmeNExoUa9Qwrt9RFkjqaMAA1X+U7sbb0AqBeTIdMHky9SQQ6iN94bO5NW0W4TRYXerG+BdAvAQ==" + "integrity": "sha512-2yucenq1a9YPmeNExoUa9Qwrt9RFkjqaMAA1X+U7sbb0AqBeTIdMHky9SQQ6iN94bO5NW0W4TRYXerG+BdAvAQ==", + "funding": { + "url": "https://github.com/Mermade/oas-kit?sponsor=1" + } }, - "oas-validator": { + "node_modules/oas-validator": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/oas-validator/-/oas-validator-4.0.8.tgz", "integrity": "sha512-bIt8erTyclF7bkaySTtQ9sppqyVc+mAlPi7vPzCLVHJsL9nrivQjc/jHLX/o+eGbxHd6a6YBwuY/Vxa6wGsiuw==", - "requires": { + "dependencies": { "ajv": "^5.5.2", "better-ajv-errors": "^0.6.7", "call-me-maybe": "^1.0.1", @@ -1468,34 +1724,40 @@ "reftools": "^1.1.5", "should": "^13.2.1", "yaml": "^1.8.3" + }, + "funding": { + "url": "https://github.com/Mermade/oas-kit?sponsor=1" } }, - "object-assign": { + "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } }, - "ono": { + "node_modules/ono": { "version": "4.0.11", "resolved": "https://registry.npmjs.org/ono/-/ono-4.0.11.tgz", "integrity": "sha512-jQ31cORBFE6td25deYeD80wxKBMj+zBmHTrVxnc6CKhx8gho6ipmWM5zj/oeoqioZ99yqBls9Z/9Nss7J26G2g==", - "requires": { + "dependencies": { "format-util": "^1.0.3" } }, - "openapi-sampler": { + "node_modules/openapi-sampler": { "version": "1.0.0-beta.18", "resolved": "https://registry.npmjs.org/openapi-sampler/-/openapi-sampler-1.0.0-beta.18.tgz", "integrity": "sha512-nG/0kvvSY5FbrU5A+Dbp1xTQN++7pKIh87/atryZlxrzDuok5Y6TCbpxO1jYqpUKLycE4ReKGHCywezngG6xtQ==", - "requires": { + "dependencies": { "json-pointer": "^0.6.0" } }, - "openapi-to-postmanv2": { + "node_modules/openapi-to-postmanv2": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/openapi-to-postmanv2/-/openapi-to-postmanv2-2.0.0.tgz", "integrity": "sha512-RMHFhKNwXDtZa9Lc++ZLamhaWMXGerotbO0z9woMJ3afDJ+K7ekwDwF/lr7Vonep9KTJYzFKgygUMvE2SrQaYg==", - "requires": { + "dependencies": { "ajv": "6.12.3", "async": "3.2.0", "commander": "2.20.3", @@ -1507,101 +1769,133 @@ "postman-collection": "3.6.6", "yaml": "1.8.3" }, + "bin": { + "openapi2postmanv2": "bin/openapi2postmanv2.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/openapi-to-postmanv2/node_modules/ajv": { + "version": "6.12.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", + "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", "dependencies": { - "ajv": { - "version": "6.12.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", - "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "oas-resolver-browser": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/oas-resolver-browser/-/oas-resolver-browser-2.3.3.tgz", - "integrity": "sha512-KvggQ6xU7WlUWRYZKEktR90zJtNCHi1wbTAZuUX6oSfmBSdZo/b26rzfg3w2AdPVwQPRXMga6tqLW3OhbUF0Qg==", - "requires": { - "node-fetch-h2": "^2.3.0", - "oas-kit-common": "^1.0.8", - "path-browserify": "^1.0.1", - "reftools": "^1.1.1", - "yaml": "^1.8.3", - "yargs": "^15.3.1" - } - }, - "path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" - }, - "yaml": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.8.3.tgz", - "integrity": "sha512-X/v7VDnK+sxbQ2Imq4Jt2PRUsRsP7UcpSl3Llg6+NRRqWLIvxkMFYtH1FmvwNGYRKKPa+EPA4qDBlI9WVG1UKw==", - "requires": { - "@babel/runtime": "^7.8.7" - } - } + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/openapi-to-postmanv2/node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/openapi-to-postmanv2/node_modules/js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/openapi-to-postmanv2/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/openapi-to-postmanv2/node_modules/oas-resolver-browser": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/oas-resolver-browser/-/oas-resolver-browser-2.3.3.tgz", + "integrity": "sha512-KvggQ6xU7WlUWRYZKEktR90zJtNCHi1wbTAZuUX6oSfmBSdZo/b26rzfg3w2AdPVwQPRXMga6tqLW3OhbUF0Qg==", + "dependencies": { + "node-fetch-h2": "^2.3.0", + "oas-kit-common": "^1.0.8", + "path-browserify": "^1.0.1", + "reftools": "^1.1.1", + "yaml": "^1.8.3", + "yargs": "^15.3.1" + }, + "bin": { + "resolve": "resolve.js" + }, + "funding": { + "url": "https://github.com/Mermade/oas-kit?sponsor=1" + } + }, + "node_modules/openapi-to-postmanv2/node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" + }, + "node_modules/openapi-to-postmanv2/node_modules/yaml": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.8.3.tgz", + "integrity": "sha512-X/v7VDnK+sxbQ2Imq4Jt2PRUsRsP7UcpSl3Llg6+NRRqWLIvxkMFYtH1FmvwNGYRKKPa+EPA4qDBlI9WVG1UKw==", + "dependencies": { + "@babel/runtime": "^7.8.7" + }, + "engines": { + "node": ">= 6" } }, - "os-browserify": { + "node_modules/os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" }, - "p-limit": { + "node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { + "dependencies": { "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "p-locate": { + "node_modules/p-locate": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { + "dependencies": { "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" } }, - "p-try": { + "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } }, - "pako": { + "node_modules/pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" }, - "parse-asn1": { + "node_modules/parse-asn1": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "requires": { + "dependencies": { "asn1.js": "^5.2.0", "browserify-aes": "^1.0.0", "evp_bytestokey": "^1.0.0", @@ -1609,76 +1903,99 @@ "safe-buffer": "^5.1.1" } }, - "path-browserify": { + "node_modules/path-browserify": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" }, - "path-exists": { + "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } }, - "pbkdf2": { + "node_modules/pbkdf2": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", - "requires": { + "dependencies": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", "ripemd160": "^2.0.1", "safe-buffer": "^5.0.1", "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" } }, - "perfect-scrollbar": { + "node_modules/perfect-scrollbar": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/perfect-scrollbar/-/perfect-scrollbar-1.5.0.tgz", "integrity": "sha512-NrNHJn5mUGupSiheBTy6x+6SXCFbLlm8fVZh9moIzw/LgqElN5q4ncR4pbCBCYuCJ8Kcl9mYM0NgDxvW+b4LxA==" }, - "picomatch": { + "node_modules/picomatch": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, - "polished": { + "node_modules/polished": { "version": "3.6.7", "resolved": "https://registry.npmjs.org/polished/-/polished-3.6.7.tgz", "integrity": "sha512-b4OViUOihwV0icb9PHmWbR+vPqaSzSAEbgLskvb7ANPATVXGiYv/TQFHQo65S53WU9i5EQ1I03YDOJW7K0bmYg==", - "requires": { + "dependencies": { "@babel/runtime": "^7.9.2" + }, + "engines": { + "node": ">=10" } }, - "postcss": { + "node_modules/postcss": { "version": "7.0.35", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "requires": { + "dependencies": { "chalk": "^2.4.2", "source-map": "^0.6.1", "supports-color": "^6.1.0" }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" } }, - "postcss-value-parser": { + "node_modules/postcss-value-parser": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" }, - "postman-collection": { + "node_modules/postcss/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postman-collection": { "version": "3.6.6", "resolved": "https://registry.npmjs.org/postman-collection/-/postman-collection-3.6.6.tgz", "integrity": "sha512-fm9AGKHbL2coSzD5nw+F07JrX7jzqu2doGIXevPPrwlpTZyTM6yagEdENeO/Na8rSUrI1+tKPj+TgAFiLvtF4w==", - "requires": { + "dependencies": { "escape-html": "1.0.3", "faker": "5.1.0", "file-type": "3.9.0", @@ -1693,151 +2010,173 @@ "sanitize-html": "1.20.1", "semver": "7.3.2", "uuid": "3.4.0" + } + }, + "node_modules/postman-collection/node_modules/marked": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/marked/-/marked-1.1.1.tgz", + "integrity": "sha512-mJzT8D2yPxoPh7h0UXkB+dBj4FykPJ2OIfxAWeIHrvoHDkFxukV/29QxoFQoPM6RLEwhIFdJpmKBlqVM3s2ZIw==", + "bin": { + "marked": "bin/marked" }, - "dependencies": { - "marked": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/marked/-/marked-1.1.1.tgz", - "integrity": "sha512-mJzT8D2yPxoPh7h0UXkB+dBj4FykPJ2OIfxAWeIHrvoHDkFxukV/29QxoFQoPM6RLEwhIFdJpmKBlqVM3s2ZIw==" - } + "engines": { + "node": ">= 8.16.2" } }, - "postman-url-encoder": { + "node_modules/postman-url-encoder": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/postman-url-encoder/-/postman-url-encoder-2.1.3.tgz", "integrity": "sha512-CwQjnoxaugCGeOyzVeZ4k1cNQ6iS8OBCzuWzcf4kLStKeRp0MwmLKYv25frynmDpugUUimq/d+FZCq6GtIX9Ag==", - "requires": { + "dependencies": { "postman-collection": "^3.6.4", "punycode": "^2.1.1" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - } } }, - "prismjs": { + "node_modules/postman-url-encoder/node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/prismjs": { "version": "1.21.0", "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.21.0.tgz", "integrity": "sha512-uGdSIu1nk3kej2iZsLyDoJ7e9bnPzIgY0naW/HdknGj61zScaprVEVGHrPoXqI+M9sP0NDnTK2jpkvmldpuqDw==", - "requires": { + "optionalDependencies": { "clipboard": "^2.0.0" } }, - "process": { + "node_modules/process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "engines": { + "node": ">= 0.6.0" + } }, - "process-nextick-args": { + "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, - "prop-types": { + "node_modules/prop-types": { "version": "15.7.2", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "requires": { + "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.8.1" } }, - "public-encrypt": { + "node_modules/public-encrypt": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "requires": { + "dependencies": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", "create-hash": "^1.1.0", "parse-asn1": "^5.0.0", "randombytes": "^2.0.1", "safe-buffer": "^5.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - } } }, - "punycode": { + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + }, + "node_modules/punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" }, - "querystring": { + "node_modules/querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "engines": { + "node": ">=0.4.x" + } }, - "querystring-es3": { + "node_modules/querystring-es3": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "engines": { + "node": ">=0.4.x" + } }, - "randombytes": { + "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { + "dependencies": { "safe-buffer": "^5.1.0" } }, - "randomfill": { + "node_modules/randomfill": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "requires": { + "dependencies": { "randombytes": "^2.0.5", "safe-buffer": "^5.1.0" } }, - "react": { + "node_modules/react": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz", "integrity": "sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==", - "requires": { + "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "react-dom": { + "node_modules/react-dom": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.13.1.tgz", "integrity": "sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag==", - "requires": { + "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", "scheduler": "^0.19.1" + }, + "peerDependencies": { + "react": "^16.13.1" } }, - "react-is": { + "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, - "react-tabs": { + "node_modules/react-tabs": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/react-tabs/-/react-tabs-3.1.1.tgz", "integrity": "sha512-HpySC29NN1BkzBAnOC+ajfzPbTaVZcSWzMSjk56uAhPC/rBGtli8lTysR4CfPAyEE/hfweIzagOIoJ7nu80yng==", - "requires": { + "dependencies": { "clsx": "^1.1.0", "prop-types": "^15.5.0" + }, + "peerDependencies": { + "react": "^16.3.0" } }, - "readable-stream": { + "node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { + "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", @@ -1845,46 +2184,47 @@ "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" - }, + } + }, + "node_modules/readable-stream/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/readable-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/readable-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dependencies": { - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } + "safe-buffer": "~5.1.0" } }, - "readdirp": { + "node_modules/readdirp": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", - "requires": { + "dependencies": { "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" } }, - "redoc": { + "node_modules/redoc": { "version": "2.0.0-rc.40", "resolved": "https://registry.npmjs.org/redoc/-/redoc-2.0.0-rc.40.tgz", "integrity": "sha512-f1na5vWCr37R5+G4xhbD1TjH6j6b/he8nEMGGJOwDcIMMcDK88S0YEWuhplhdVuZdc4c61CoxZqGXqcDRp5m0w==", - "requires": { + "dependencies": { "@redocly/react-dropdown-aria": "^2.0.11", "@types/node": "^13.11.1", "classnames": "^2.2.6", @@ -1909,13 +2249,24 @@ "swagger2openapi": "^6.2.1", "tslib": "^2.0.0", "url-template": "^2.0.8" + }, + "engines": { + "node": ">=6.9", + "npm": ">=3.0.0" + }, + "peerDependencies": { + "core-js": "^3.1.4", + "mobx": "^4.2.0 || ^5.0.0", + "react": "^16.8.4", + "react-dom": "^16.8.4", + "styled-components": "^4.1.1" } }, - "redoc-cli": { + "node_modules/redoc-cli": { "version": "0.9.12", "resolved": "https://registry.npmjs.org/redoc-cli/-/redoc-cli-0.9.12.tgz", "integrity": "sha512-9Ap7WfEsYtAoVZNyA8lryWAsU2Wq0lHXaNiFgdVZb4zltHNTYEqKmRi06WhileeuqVTNkd1CF2S5CCS5Xg9+aQ==", - "requires": { + "dependencies": { "chokidar": "^3.4.1", "handlebars": "^4.7.6", "isarray": "^2.0.5", @@ -1928,52 +2279,78 @@ "styled-components": "^5.1.1", "tslib": "^2.0.0", "yargs": "^15.4.1" + }, + "bin": { + "redoc-cli": "index.js" + }, + "engines": { + "node": ">= 8" } }, - "reftools": { + "node_modules/reftools": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/reftools/-/reftools-1.1.6.tgz", - "integrity": "sha512-rQfJ025lvPjw9qyQuNPqE+cRs5qVs7BMrZwgRJnmuMcX/8r/eJE8f5/RCunJWViXKHmN5K2DFafYzglLOHE/tw==" + "integrity": "sha512-rQfJ025lvPjw9qyQuNPqE+cRs5qVs7BMrZwgRJnmuMcX/8r/eJE8f5/RCunJWViXKHmN5K2DFafYzglLOHE/tw==", + "funding": { + "url": "https://github.com/Mermade/oas-kit?sponsor=1" + } }, - "regenerator-runtime": { + "node_modules/regenerator-runtime": { "version": "0.13.7", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" }, - "require-directory": { + "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "engines": { + "node": ">=0.10.0" + } }, - "require-main-filename": { + "node_modules/require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, - "ripemd160": { + "node_modules/ripemd160": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "requires": { + "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1" } }, - "safe-buffer": { + "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "safer-buffer": { + "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "sanitize-html": { + "node_modules/sanitize-html": { "version": "1.20.1", "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-1.20.1.tgz", "integrity": "sha512-txnH8TQjaQvg2Q0HY06G6CDJLVYCpbnxrdO0WN8gjCKaU5J0KbyGYhZxx5QJg3WLZ1lB7XU9kDkfrCXUozqptA==", - "requires": { + "dependencies": { "chalk": "^2.4.1", "htmlparser2": "^3.10.0", "lodash.clonedeep": "^4.5.0", @@ -1986,55 +2363,64 @@ "xtend": "^4.0.1" } }, - "scheduler": { + "node_modules/scheduler": { "version": "0.19.1", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", - "requires": { + "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" } }, - "select": { + "node_modules/select": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=", "optional": true }, - "semver": { + "node_modules/semver": { "version": "7.3.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } }, - "set-blocking": { + "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, - "setimmediate": { + "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" }, - "sha.js": { + "node_modules/sha.js": { "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "requires": { + "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" } }, - "shallowequal": { + "node_modules/shallowequal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" }, - "should": { + "node_modules/should": { "version": "13.2.3", "resolved": "https://registry.npmjs.org/should/-/should-13.2.3.tgz", "integrity": "sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==", - "requires": { + "dependencies": { "should-equal": "^2.0.0", "should-format": "^3.0.3", "should-type": "^1.4.0", @@ -2042,85 +2428,94 @@ "should-util": "^1.0.0" } }, - "should-equal": { + "node_modules/should-equal": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz", "integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==", - "requires": { + "dependencies": { "should-type": "^1.4.0" } }, - "should-format": { + "node_modules/should-format": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", "integrity": "sha1-m/yPdPo5IFxT04w01xcwPidxJPE=", - "requires": { + "dependencies": { "should-type": "^1.3.0", "should-type-adaptors": "^1.0.1" } }, - "should-type": { + "node_modules/should-type": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", "integrity": "sha1-B1bYzoRt/QmEOmlHcZ36DUz/XPM=" }, - "should-type-adaptors": { + "node_modules/should-type-adaptors": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", - "requires": { + "dependencies": { "should-type": "^1.3.0", "should-util": "^1.0.0" } }, - "should-util": { + "node_modules/should-util": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.1.tgz", "integrity": "sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==" }, - "slugify": { + "node_modules/slugify": { "version": "1.4.5", "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.4.5.tgz", - "integrity": "sha512-WpECLAgYaxHoEAJ8Q1Lo8HOs1ngn7LN7QjXgOLbmmfkcWvosyk4ZTXkTzKyhngK640USTZUlgoQJfED1kz5fnQ==" + "integrity": "sha512-WpECLAgYaxHoEAJ8Q1Lo8HOs1ngn7LN7QjXgOLbmmfkcWvosyk4ZTXkTzKyhngK640USTZUlgoQJfED1kz5fnQ==", + "engines": { + "node": ">=8.0.0" + } }, - "source-map": { + "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } }, - "sprintf-js": { + "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, - "srcset": { + "node_modules/srcset": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/srcset/-/srcset-1.0.0.tgz", "integrity": "sha1-pWad4StC87HV6D7QPHEEb8SPQe8=", - "requires": { + "dependencies": { "array-uniq": "^1.0.2", "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "stickyfill": { + "node_modules/stickyfill": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/stickyfill/-/stickyfill-1.1.1.tgz", "integrity": "sha1-OUE/7p0CXHSn5ZzuyyN4TMDxfwI=" }, - "stream-browserify": { + "node_modules/stream-browserify": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "requires": { + "dependencies": { "inherits": "~2.0.1", "readable-stream": "^2.0.2" } }, - "stream-http": { + "node_modules/stream-http": { "version": "2.8.3", "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "requires": { + "dependencies": { "builtin-status-codes": "^3.0.0", "inherits": "^2.0.1", "readable-stream": "^2.3.6", @@ -2128,37 +2523,43 @@ "xtend": "^4.0.0" } }, - "string-width": { + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "requires": { + "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" } }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "strip-ansi": { + "node_modules/strip-ansi": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { + "dependencies": { "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" } }, - "styled-components": { + "node_modules/styled-components": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.2.0.tgz", "integrity": "sha512-9qE8Vgp8C5cpGAIdFaQVAl89Zgx1TDM4Yf4tlHbO9cPijtpSXTMLHy9lmP0lb+yImhgPFb1AmZ1qMUubmg3HLg==", - "requires": { + "dependencies": { "@babel/helper-module-imports": "^7.0.0", "@babel/traverse": "^7.4.5", "@emotion/is-prop-valid": "^0.8.8", @@ -2169,21 +2570,36 @@ "hoist-non-react-statics": "^3.0.0", "shallowequal": "^1.1.0", "supports-color": "^5.5.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/styled-components" + }, + "peerDependencies": { + "react": ">= 16.8.0", + "react-dom": ">= 16.8.0", + "react-is": ">= 16.8.0" } }, - "supports-color": { + "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { + "dependencies": { "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "swagger2openapi": { + "node_modules/swagger2openapi": { "version": "6.2.3", "resolved": "https://registry.npmjs.org/swagger2openapi/-/swagger2openapi-6.2.3.tgz", "integrity": "sha512-cUUktzLpK69UwpMbcTzjMw2ns9RZChfxh56AHv6+hTx3StPOX2foZjPgds3HlJcINbxosYYBn/D3cG8nwcCWwQ==", - "requires": { + "dependencies": { "better-ajv-errors": "^0.6.1", "call-me-maybe": "^1.0.1", "node-fetch-h2": "^2.3.0", @@ -2195,218 +2611,258 @@ "reftools": "^1.1.5", "yaml": "^1.8.3", "yargs": "^15.3.1" + }, + "bin": { + "boast": "boast.js", + "oas-validate": "oas-validate.js", + "swagger2openapi": "swagger2openapi.js" + }, + "funding": { + "url": "https://github.com/Mermade/oas-kit?sponsor=1" } }, - "timers-browserify": { + "node_modules/timers-browserify": { "version": "2.0.11", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", - "requires": { + "dependencies": { "setimmediate": "^1.0.4" + }, + "engines": { + "node": ">=0.6.0" } }, - "tiny-emitter": { + "node_modules/tiny-emitter": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", "optional": true }, - "to-arraybuffer": { + "node_modules/to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" }, - "to-fast-properties": { + "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "engines": { + "node": ">=4" + } }, - "to-regex-range": { + "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { + "dependencies": { "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" } }, - "tslib": { + "node_modules/tslib": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.1.tgz", "integrity": "sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ==" }, - "tty-browserify": { + "node_modules/tty-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" }, - "uglify-js": { + "node_modules/uglify-js": { "version": "3.10.4", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.10.4.tgz", "integrity": "sha512-kBFT3U4Dcj4/pJ52vfjCSfyLyvG9VYYuGYPmrPvAxRw/i7xHiT4VvCev+uiEMcEEiu6UNB6KgWmGtSUYIWScbw==", - "optional": true + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } }, - "uri-js": { + "node_modules/uri-js": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", - "requires": { - "punycode": "^2.1.0" - }, "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - } + "punycode": "^2.1.0" + } + }, + "node_modules/uri-js/node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" } }, - "url": { + "node_modules/url": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "requires": { + "dependencies": { "punycode": "1.3.2", "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - } } }, - "url-template": { + "node_modules/url-template": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", "integrity": "sha1-/FZaPMy/93MMd19WQflVV5FDnyE=" }, - "util": { + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + }, + "node_modules/util": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "requires": { - "inherits": "2.0.3" - }, "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - } + "inherits": "2.0.3" } }, - "util-deprecate": { + "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, - "uuid": { + "node_modules/util/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "node_modules/uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", + "bin": { + "uuid": "bin/uuid" + } }, - "validate.io-array": { + "node_modules/validate.io-array": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/validate.io-array/-/validate.io-array-1.0.6.tgz", "integrity": "sha1-W1osr9j4uFq7L4hroVPy2Tond00=" }, - "validate.io-function": { + "node_modules/validate.io-function": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/validate.io-function/-/validate.io-function-1.0.2.tgz", "integrity": "sha1-NDoZgC7TsZaCaceA5VjpNBHAutc=" }, - "validate.io-integer": { + "node_modules/validate.io-integer": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/validate.io-integer/-/validate.io-integer-1.0.5.tgz", "integrity": "sha1-FoSWSAuVviJH7EQ/IjPeT4mHgGg=", - "requires": { + "dependencies": { "validate.io-number": "^1.0.3" } }, - "validate.io-integer-array": { + "node_modules/validate.io-integer-array": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/validate.io-integer-array/-/validate.io-integer-array-1.0.0.tgz", "integrity": "sha1-LKveAzKTpry+Bj/q/pHq9GsToIk=", - "requires": { + "dependencies": { "validate.io-array": "^1.0.3", "validate.io-integer": "^1.0.4" } }, - "validate.io-number": { + "node_modules/validate.io-number": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/validate.io-number/-/validate.io-number-1.0.3.tgz", "integrity": "sha1-9j/+2iSL8opnqNSODjtGGhZluvg=" }, - "vm-browserify": { + "node_modules/vm-browserify": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" }, - "which-module": { + "node_modules/which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" }, - "wordwrap": { + "node_modules/wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" }, - "wrap-ansi": { + "node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "requires": { + "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - } + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "xtend": { + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } }, - "y18n": { + "node_modules/y18n": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" }, - "yaml": { + "node_modules/yaml": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", - "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==" + "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", + "engines": { + "node": ">= 6" + } }, - "yargs": { + "node_modules/yargs": { "version": "15.4.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "requires": { + "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", "find-up": "^4.1.0", @@ -2418,15 +2874,21 @@ "which-module": "^2.0.0", "y18n": "^4.0.0", "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" } }, - "yargs-parser": { + "node_modules/yargs-parser": { "version": "18.1.3", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "requires": { + "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" } } } diff --git a/package.json b/package.json index 0286b5a..ed087d1 100644 --- a/package.json +++ b/package.json @@ -35,5 +35,10 @@ "redoc-cli": "^0.9.12", "yaml": "^1.10.0" }, - "devDependencies": {} + "devDependencies": {}, + "overrides": { + "redoc": { + "styled-components": "^5.2.0" + } + } } diff --git a/redoc-static.html b/redoc-static.html deleted file mode 100644 index a150286..0000000 --- a/redoc-static.html +++ /dev/null @@ -1,1011 +0,0 @@ - - - - - - SeerBit API Reference - - - - - - - - - -
- -
- -

SeerBit API Reference (1.0)

Download OpenAPI specification:Download

Authentication

Bearer

Security Scheme Type API Key
Header parameter name: Authorization

Basic

Security Scheme Type HTTP
HTTP Authorization Scheme basic

AUTHENTICATION

Generate Encrypted Secret Key

To make API calls on SeerBit, you will be required to pass a bearer token. To generate a token simply pass your pubic and secret key to rceive a token to process further API calls.

-
Request Body schema: application/json
key
required
string

This consist of the PrivateKey and the publicKey separated with a '.' in the middle(eg:{privateKey.publicKey}

-

Responses

Request samples

Content type
application/json
{
  • "key": "SBTESTSECK_9Cb8dbqR5Rc2JwZaa77P5QYHzQaeGUcrkEMD1dEi.SBTESTPUBK_9sN3TuLgW6a9redEfY48cKKkUa09Pz2u"
}

Response samples

Content type
application/json
{
  • "status": "SUCCESS",
  • "data":
    {
    }
}

STANDARD CHECKOUT

Generate Hash

This is used to ensure the request payload has not been altered

-
Request Body schema: application/json
publicKey
required
string

This is the merchant public key.

-
amount
required
string

This is the amount to be paid.

-
currency
required
string

This is the currency the transaction is to be carried out in.

-
country
required
string

This is the country from which the transaction is been carried out from

-
paymentReference
required
string

This is the unique identifier for a transaction, to be generated by merchant.

-
email
required
string

This is the email of the customer.

-
productId
required
string

This is the product id entered by the merchant.

-
productDescription
required
string

This is the product description supplied by the merchant.

-
callbackUrl
required
string

Responses

Request samples

Content type
application/json
{
  • "publicKey": "SBTESTPUBK_9sN3TuLgW6a9redEfY48cKKkUa09Pz2u",
  • "amount": "10.00",
  • "currency": "NGN",
  • "country": "NG",
  • "paymentReference": "3791090233047WZ73QN",
  • "email": "mamadou.diouf@intouchgroup.net",
  • "productId": "15013",
  • "productDescription": "touch badge",
  • "callbackUrl": "https://gutouch.com"
}

Response samples

Content type
application/json
{
  • "status": "SUCCESS",
  • "data":
    {
    }
}

Payment Link From Checkout

SeerBit Checkout Standard Initialises a transaction from merchants server to generate a payment link which redirects your customers to a page to make payment and after payment has been made the customer is redirected back to the merchants website.

-
Authorizations:
Request Body schema: application/json
publicKey
required
string

This is the merchant public key.

-
amount
required
string

This is the amount to be paid.

-
currency
required
string

This is the currency the transaction is to be carried out in.

-
country
required
string

This is the country from which the transaction is been carried out from

-
paymentReference
required
string

This is the unique identifier for a transaction, to be generated by merchant.

-
email
required
string

This is the email of the customer.

-
fullName
required
string

This is the full name of the customer.

-
tokenize
required
boolean

This indicates whether the card should be tokenized for future transactions.

-
callbackUrl
required
string

This is the callback url supplied by the merchant so that Seerbit can redirect back to it .

-

Responses

Request samples

Content type
application/json
{
  • "publicKey": "YOUR_PUBLIC_KEY",
  • "amount": "10.00",
  • "currency": "NGN",
  • "country": "NG",
  • "paymentReference": "payment_reference",
  • "email": "mamadou.diouf@intouchgroup.net",
  • "fullName": "Mamadou Diouf",
  • "tokenize": false,
  • "callbackUrl": "https://seerbit.com"
}

Response samples

Content type
application/json
{}

ORDER CHECKOUT

Create Order Before Payment

Create an order before payment

-
Authorizations:
Request Body schema: application/json

Responses

Request samples

Content type
application/json
{
  • "email": "test@mvaa.com",
  • "publicKey": "SBTESTPUBK_9sN3TuLgW6a9redEfY48cKKkUa09Pz2u",
  • "paymentReference": "2PPTG108Q13432E29P23R5L6W93I9",
  • "fullName": "",
  • "orderType": "BULK_BULK",
  • "mobileNumber": "",
  • "country": "NG",
  • "currency": "NGN",
  • "amount": "250.00",
  • "orders":
    [
    ]
}

Response samples

Content type
application/json
{}

Create Order After Payment

Create an order after payment

-
Authorizations:
Request Body schema: application/json

Responses

Request samples

Content type
application/json
{
  • "paymentReference": "0w0eimkizc41602513327447",
  • "publicKey": "SBTESTPUBK_9sN3TuLgW6a9redEfY48cKKkUa09Pz2u",
  • "orders":
    [
    ]
}

Response samples

Content type
application/json
{
  • "status": "SUCCESS",
  • "data":
    {
    }
}

Update Order

Update an order

-
Authorizations:
Request Body schema: application/json

Responses

Request samples

Content type
application/json
{
  • "paymentReference": "0w0eimkizc41602513327447",
  • "publicKey": "SBTESTPUBK_9sN3TuLgW6a9redEfY48cKKkUa09Pz2u",
  • "orders":
    [
    ]
}

Response samples

Content type
application/json
{
  • "status": "SUCCESS",
  • "data":
    {
    }
}

Get Orders

Get a list of orders

-
Authorizations:

Responses

Response samples

Content type
application/json
{
  • "status": "SUCCESS",
  • "data":
    {
    }
}

Get an Order with Payment Reference

Get order details with payment reference

-
Authorizations:

Responses

Response samples

Content type
application/json
{
  • "status": "SUCCESS",
  • "data":
    {
    }
}

Get Order with Order Id

Get order details with OrderId

-
Authorizations:

Responses

Response samples

Content type
application/json
{
  • "status": "SUCCESS",
  • "data":
    {
    }
}

PAYMENT METHOD

Initiate Payment

Accept more payments with our unified payments API. Accept payments from all major cards and the most popular local and alternative payment methods all in a single integration.

-
Authorizations:
Request Body schema: application/json

Responses

Request samples

Content type
application/json
Example
{
  • "fullName": "john doe",
  • "email": "johndoe@gmail.com",
  • "mobileNumber": 248360953,
  • "publicKey": "SBPUBK_QGOX9NBAHWDYY1PAFSG2PTDOSSZYEWXM",
  • "paymentReference": "O456S5077907982QWEuWAT05M",
  • "deviceType": "nokia 3310",
  • "sourceIP": "1.0.1.0",
  • "currency": "GHS",
  • "productDescription": "snacks",
  • "country": "GH",
  • "network": "MTN",
  • "voucherCode": "",
  • "fee": "0.00",
  • "amount": "1.00",
  • "productId": "grocery",
  • "paymentType": "MOMO"
}

Response samples

Content type
application/json
Example
{
  • "status": "SUCCESS",
  • "data":
    {
    }
}

Get Banks

Get list of banks

-

Responses

Response samples

Content type
application/json
{
  • "status": "SUCCESS",
  • "data":
    {
    }
}

MOMO

OTP Momo

When making MOMO transfers, and OTP is required to complete the payment

-
Authorizations:
Request Body schema: application/json
linkingReference
required
string

This is the internal gateway reference

-
otp
required
string

This is the TOKEN sent to customer’s phone or email

-

Responses

Request samples

Content type
application/json
{
  • "linkingReference": "CF630837081601460887752",
  • "otp": "81015"
}

Response samples

Content type
application/json
Example
null

NON 3DS PAYMENT

Charge Card

This payment option is used to charge non 3d transactions

-
Authorizations:
Request Body schema: application/json

Responses

Request samples

Content type
application/json
{
  • "publicKey": "SBTESTPUBK_dhrpzbRpR34l6VmqkCFOKA94L5E1jSTu",
  • "amount": "10.00",
  • "fullName": "Diei Okechukwu Peter",
  • "mobileNumber": 8030540611,
  • "currency": "NGN",
  • "country": "NG",
  • "paymentReference": "NGN0000037Q35",
  • "email": "okechukwu.diei2@gmail.com",
  • "productId": "Foods",
  • "productDescription": "RASPBERRY",
  • "cardNumber": "5123450000000008",
  • "expiryMonth": "05",
  • "expiryYear": "21"
}

Response samples

Content type
application/json
Example
{
  • "status": "SUCCESS",
  • "data":
    {
    }
}

CARD

Check Status

This Operation allows you to check the status of a transaction via the status check api. This is done by making a Get request to the endpoint below with your payment reference.

-
Authorizations:

Responses

Response samples

Content type
application/json
{
  • "status": "SUCCESS",
  • "data":
    {
    }
}

ACCOUNT

Validate Transaction

This option is used to complete an account transaction, when OTP is required

-
Authorizations:
Request Body schema: application/json
linkingReference
required
string

This is the internal gateway reference

-
otp
required
string

This is the TOKEN sent to customer’s phone or email

-

Responses

Request samples

Content type
application/json
{
  • "linkingReference": "F092648971601293723061",
  • "otp": "123456"
}

Response samples

Content type
application/json
Example
{
  • "status": "SUCCESS",
  • "data":
    {
    }
}

TOKENIZE

Tokenize a Card

In order to store your customers payment details, you need to pass some additional parameter when making the first payment request using the payments/tokenize endpoint, the Cvv field and pin are optional(this could be null). After the first payment is made, the payment details is collected and a token is generated for it which is then stored for future use.

-
Authorizations:
Request Body schema: application/json

Responses

Request samples

Content type
application/json
{
  • "publicKey": "SBPUBK_OMX6ZNRZPLIHQ9Y0ZG6FCNR0EAYIGIAT",
  • "amount": "0.00",
  • "fullName": "john doe",
  • "mobileNumber": 8033456599,
  • "currency": "NGN",
  • "country": "NG",
  • "paymentReference": "KES0092992991",
  • "email": "johndoe@gmail.com",
  • "productId": "Foods",
  • "productDescription": "RASPBERRY",
  • "cardNumber": "5123450000000008",
  • "cvv": "100",
  • "expiryMonth": "05",
  • "expiryYear": "21"
}

Response samples

Content type
application/json
{
  • "status": "SUCCESS",
  • "data":
    {
    }
}

AUTHORISE

Authorise

In SeerBit API, the term “authorisation” indicates, that payment is authorised but not captured. This allows a merchant to cancel transaction at their discretion, typically based but not limited to fraud-related activities. This authorisation state is valid for a limited period of time, which provides a window to cancel the transaction.

-
Authorizations:
Request Body schema: application/json

Responses

Request samples

Content type
application/json
Example
{
  • "paymentReference": "PREAUTH124456789798765k3K1CB0",
  • "publicKey": "SBTESTPUBK_dhrpzbRpR34l6VmqkCFOKA94L5E1jSTu",
  • "cardNumber": "5123450000000008",
  • "cvv": "100",
  • "expiryMonth": "05",
  • "expiryYear": "21",
  • "currency": "NGN",
  • "country": "NG",
  • "productDescription": "preauth test capture",
  • "amount": "100.00",
  • "email": "johndoe@gmail.com",
  • "fullName": "john doe"
}

Response samples

Content type
application/json
Example
{
  • "status": "SUCCESS",
  • "data":
    {
    }
}

3DS Authorise

PIN and CVV are not Required to complete Transaction. Authorization is completed on 3DS.

-
Authorizations:
Request Body schema: application/json

Responses

Request samples

Content type
application/json
{
  • "paymentReference": "30451B789S987643108hgfdsfP6W",
  • "publicKey": "SBPUBK_OMX6ZNRZPLIHQ9Y0ZG6FCNR0EAYIGIAT",
  • "cardNumber": "5242820813772165",
  • "cvv": "865",
  • "expiryMonth": "02",
  • "expiryYear": "22",
  • "currency": "NGN",
  • "country": "NG",
  • "productDescription": "preauth test capture",
  • "amount": "1.00",
  • "email": "johndoe@gmail.com",
  • "fullName": "john doe",
  • "callbackUrl": "https://google.com"
}

Response samples

Content type
application/json
Example
{}

RECURRENT

Initiate Subscription

To complete this transaction, merchant is expected to redirect to the 3DSecure site via the redirect URL provided with the response below. However if the redirect url is not returned and the code is S20 and the message is transaction is pending, the Validate OTP endpoint should be called as the customer would have received a token either by email or sms on the customers phone. To get the subscription created or the status of a subscription for the customer, the GET Subscription endpoint is called by passing the paymentReference as billingId.

-
Authorizations:
Request Body schema: application/json

Responses

Request samples

Content type
application/json
{
  • "publicKey": "SBTESTPUBK_9sN3TuLgW6a9redEfY48cKKkUa09Pz2u",
  • "paymentReference": "TPR2181t55PKR540RPP1U1W4392WO",
  • "planId": "",
  • "cardNumber": "5123450000000008",
  • "expiryMonth": "05",
  • "callbackUrl": "https://www.google.com",
  • "expiryYear": "21",
  • "cvv": "100",
  • "amount": "1000.00",
  • "currency": "NGN",
  • "productDescription": "Pilot Test Subscription",
  • "productId": "Terrain",
  • "country": "NG",
  • "startDate": "2020-02-25 00:00:00",
  • "cardName": "Kolade Samuel",
  • "billingCycle": "WEEKLY",
  • "email": "akintoyekolawole@gmail.com",
  • "mobileNumber": "08033456500",
  • "customerId": "12345678901234",
  • "pin": "0999",
  • "type": "3DSECURE",
  • "billingPeriod": "1",
  • "subscriptionAmount": true
}

Response samples

Content type
application/json
{}

Get a Subscription

Get customer subscription

-
Authorizations:

Responses

Response samples

Content type
application/json
{
  • "status": "SUCCESS",
  • "data":
    {
    }
}

Create Plan

Create a new recurring payment plan.

-
Authorizations:
header Parameters
Content-Type
required
string
Default: application/json
Request Body schema: application/json
productId
required
string

The name of the plan.

-
productDescription
required
string

The description of the plan.

-
amount
required
string

The amount for the plan.

-
billingCycle
required
string

The billing cycle (e.g., HOURLY).

-
limit
required
integer

The maximum number of cycles.

-
publicKey
required
string

The merchant public key.

-
country
required
string

The country code.

-
currency
required
string

The currency code.

-
allowPartialDebit
required
boolean

Whether partial debit is allowed.

-

Responses

Request samples

Content type
application/json
{
  • "productId": "Plan name",
  • "productDescription": "Description of Plan",
  • "amount": "100",
  • "billingCycle": "HOURLY",
  • "limit": 5,
  • "publicKey": "SBPUBK_xxxxx",
  • "country": "NG",
  • "currency": "NGN",
  • "allowPartialDebit": false
}

Response samples

Content type
application/json
{
  • "payload":
    {
    },
  • "message": "Successful",
  • "status": "SUCCESS",
  • "responseCode": "00"
}

Get Merchant Subscription

Retrieve all subscriptions for a merchant by their public key.

-
Authorizations:
path Parameters
publicKey
required
string

The merchant public key.

-

Responses

Response samples

Content type
application/json
{
  • "status": "SUCCESS",
  • "data":
    {
    }
}

Charge Subscription

Charge a recurring subscription using an authorization code.

-
Authorizations:
header Parameters
Content-Type
required
string
Default: application/json
Request Body schema: application/json
amount
required
string
publicKey
required
string
email
required
string
allowPartialDebit
required
boolean
authorizationCode
required
string
paymentReference
required
string
currency
required
string

Responses

Request samples

Content type
application/json
{
  • "amount": "200",
  • "publicKey": "YOUR_PUBLIC_KEY",
  • "email": "js@emaildomain.com",
  • "allowPartialDebit": true,
  • "authorizationCode": "1234567898765325",
  • "paymentReference": "2938765582R37065687631",
  • "currency": "NGN"
}

Response samples

Content type
application/json
{
  • "status": "SUCCESS",
  • "data":
    {
    }
}

Get Customer Subscription

Retrieve all subscriptions for a customer by their customerId and merchant public key.

-
Authorizations:
path Parameters
publicKey
required
string

The merchant public key.

-
customerId
required
string

The customer ID.

-

Responses

Response samples

Content type
application/json
{
  • "status": "SUCCESS",
  • "data":
    {
    }
}

Update Customer Subscription

Update a customer's subscription details.

-
Authorizations:
header Parameters
Content-Type
required
string
Default: application/json
Request Body schema: application/json
amount
required
string
currency
required
string
country
required
string
mobileNumber
required
string
billingId
required
string
publicKey
required
string
status
required
string

Responses

Request samples

Content type
application/json
{
  • "amount": "20000",
  • "currency": "NGN",
  • "country": "NG",
  • "mobileNumber": "08033456500",
  • "billingId": "PUBK_PjQ5d1578650322483",
  • "publicKey": "YOUR_PUBLIC_KEY",
  • "status": "INACTIVE"
}

Response samples

Content type
application/json
{
  • "status": "SUCCESS",
  • "data":
    {
    }
}

INVOICE

Create And Send Invoice

This endpoint is used to create an invoice for a customer.

-
Request Body schema: application/json
publicKey
required
string

This is the merchant public key.

-
orderNo
string

This is the order number.

-
dueDate
string

This is the date the invoice is due.

-
currency
required
string

This is the currency the transaction is to be carried out in.

-
recieversName
string

This is the name of the customer.

-
customerEmail
required
string

This is the email of the customer.

-
Array of objects

This is the list of items in the invoice.

-

Responses

Request samples

Content type
application/json
{
  • "publicKey": "SBTESTPUBK_9sN3TuLgW6a9redEfY48cKKkUa09Pz2u",
  • "orderNo": 3333332213212,
  • "dueDate": "2023-10-31",
  • "currency": "NGN",
  • "recieversName": "Muyiwa Akintade",
  • "customerEmail": "janesmith@emaildomain.com",
  • "invoiceItems":
    [
    ]
}

Response samples

Content type
application/json
{
  • "message": "Invoice created successfully",
  • "payload":
    {
    },
  • "code": "00"
}

Resend An Invoice

This endpoint is used to resend an invoice to a customer.

-
Authorizations:
path Parameters
publicKey
required
string

This is the merchant public key.

-
invoiceNo
required
string

This is the invoice number.

-

Responses

Response samples

Content type
application/json
{
  • "message": "Invoice has been sent successfully",
  • "code": "00"
}

Get Invoice By Customer Email

Retrieve all invoices for a customer by their email address.

-
Authorizations:
path Parameters
publicKey
required
string

The merchant public key.

-
customerEmail
required
string

The customer's email address.

-

Responses

Response samples

Content type
application/json
{
  • "payload":
    [
    ],
  • "code": "00"
}

Get Invoice By Invoice Number

Retrieve an invoice by its invoice number.

-
Authorizations:
path Parameters
publicKey
required
string

The merchant public key.

-
invoiceNo
required
string

The invoice number.

-

Responses

Response samples

Content type
application/json
{
  • "payload":
    [
    ],
  • "code": "00"
}

Get Invoice By Order Number

Retrieve an invoice by its order number.

-
Authorizations:
path Parameters
publicKey
required
string

The merchant public key.

-
orderNo
required
string

The order number.

-

Responses

Response samples

Content type
application/json
{
  • "payload":
    [
    ],
  • "code": "00"
}

POCKET

Authenticate Pocket

This endpoint is used to authenticate a pocket using the provided key.

-
Request Body schema: application/json
email
required
string <email>
password
required
string

Responses

Request samples

Content type
application/json
{
  • "email": "your pocket email",
  • "password": "your password"
}

Response samples

Content type
application/json
{
  • "responseCode": "00",
  • "message": "Success",
  • "data":
    {
    }
}

Add Sub-Pocket

Create a sub-pocket under a parent pocket.

-
Authorizations:
path Parameters
PocketID
required
string

The parent pocket ID.

-
header Parameters
public-key
required
string

The merchant public key.

-
Content-Type
required
string
Default: application/json
Request Body schema: application/json
Array ()
tagGroup
string
reference
required
string
pocketFunction
required
string
Enum: "BOTH" "CREDIT" "DEBIT"
currency
required
string
tagName
string
selfOwned
required
boolean
required
object

Responses

Request samples

Content type
application/json
[
  • {
    }
]

Response samples

Content type
application/json
{
  • "responseCode": "00",
  • "message": "Success",
  • "data":
    [
    ]
}

Get Pocket Details

Retrieve details of a pocket by its ID.

-
Authorizations:
path Parameters
PocketID
required
string

The pocket ID.

-
header Parameters
public-key
required
string

The merchant public key.

-

Responses

Response samples

Content type
application/json
{
  • "responseCode": "00",
  • "message": "Success",
  • "data":
    {
    }
}

Get Pocket Balance

Retrieve the balance of a pocket by its ID.

-
Authorizations:
path Parameters
PocketID
required
string

The pocket ID.

-
header Parameters
public-key
required
string

The merchant public key.

-

Responses

Response samples

Content type
application/json
{
  • "responseCode": "00",
  • "message": "Success",
  • "data":
    {
    }
}

Get Merchant Sum

Retrieve the sum of balances for a merchant's pockets.

-
Authorizations:
path Parameters
PocketID
required
string

The pocket ID.

-
header Parameters
public-key
required
string

The merchant public key.

-

Responses

Response samples

Content type
application/json
{
  • "responseCode": "00",
  • "message": "Success",
  • "data":
    {
    }
}

Get Transaction Details

Retrieve details of a pocket transaction by its reference.

-
Authorizations:
path Parameters
reference
required
string

The transaction reference.

-
header Parameters
public-key
required
string

The merchant public key.

-

Responses

Response samples

Content type
application/json
{
  • "responseCode": "00",
  • "message": "Success",
  • "data":
    {
    }
}

Find Transactions

Search for pocket transactions with pagination.

-
Authorizations:
query Parameters
pocketId
required
string

The pocket ID.

-
page
required
integer
Default: 0

Page number (zero-based).

-
size
required
integer
Default: 10

Number of records per page.

-
header Parameters
public-key
required
string

The merchant public key.

-
Content-Type
required
string
Default: application/json

Responses

Response samples

Content type
application/json
{
  • "responseCode": "00",
  • "message": "Success",
  • "data":
    {
    }
}

Pocket to Pocket Transfer

Transfer funds from one pocket to another.

-
Authorizations:
path Parameters
fromPocketID
required
string

The source pocket ID.

-
toPocketID
required
string

The destination pocket ID.

-
header Parameters
public-key
required
string

The merchant public key.

-
Content-Type
required
string
Default: application/json
Request Body schema: application/json
amount
required
number

The amount to transfer.

-
currency
required
string

The currency of the transfer.

-
reference
required
string

The unique reference for the transfer.

-
description
required
string

A description for the transfer.

-

Responses

Request samples

Content type
application/json
{
  • "amount": 100,
  • "currency": "NGN",
  • "reference": "00112827",
  • "description": "Transfer from one pocket to another"
}

Response samples

Content type
application/json
{
  • "responseCode": "00",
  • "message": "Successful",
  • "data": { }
}

PAYOUT

Generate OTP

Generate an OTP for a pocket action. The OTP provided in the otp field should be passed as the passKey in the generatesignature and payout request.

-
Authorizations:
header Parameters
public-key
required
string

The merchant public key.

-
Content-Type
required
string
Default: application/json
Request Body schema: application/json
actionItem
required
string

The action for which the OTP is generated.

-
pocketId
required
string

The pocket ID.

-

Responses

Request samples

Content type
application/json
{
  • "actionItem": "APPROVE_DISBURSEMENT",
  • "pocketId": "your_pocket_id_here"
}

Response samples

Content type
application/json
{
  • "responseCode": "00",
  • "message": "Success",
  • "data":
    {
    }
}

Generate Signature

Generate a signature for a payout action. Instead of manually creating a signature, use the Get Signature endpoint.

-
Authorizations:
header Parameters
Content-Type
required
string
Default: application/json
Request Body schema: application/json
reference
required
string

The transaction reference.

-
amount
required
string

The amount for the payout.

-
currency
required
string

The currency for the payout.

-
description
required
string

The payout description.

-
accountNumber
required
string

The account number to credit.

-
bankCode
required
string

The bank code of the destination bank.

-
actionType
required
string

The action type (e.g., APPROVE_DISBURSEMENT).

-
passKey
required
string

The OTP or passKey for the payout.

-

Responses

Request samples

Content type
application/json
{
  • "reference": "REF123456",
  • "amount": "10",
  • "currency": "NGN",
  • "description": "test",
  • "accountNumber": "1234567890",
  • "bankCode": "000013",
  • "actionType": "APPROVE_DISBURSEMENT",
  • "passKey": "028087"
}

Response samples

Content type
application/json
{
  • "responseCode": "00",
  • "message": "Success",
  • "data": "{signature}"
}

Initiate Payout

Use the Initiate Payout endpoint, passing the generated signature in the request body.

-
Authorizations:
path Parameters
pocketId
required
string

The pocket ID.

-
header Parameters
public-key
required
string

The merchant public key.

-
Content-Type
required
string
Default: application/json
Request Body schema: application/json
reference
required
string

The transaction reference.

-
amount
required
string

The amount for the payout.

-
currency
required
string

The currency for the payout.

-
description
required
string

The payout description.

-
accountNumber
required
string

The account number to credit.

-
bankCode
required
string

The bank code of the destination bank.

-
passKey
required
string

The OTP or passKey for the payout.

-
actionType
required
string

The action type (e.g., APPROVE_DISBURSEMENT).

-
signature
required
string

The generated signature for the payout.

-

Responses

Request samples

Content type
application/json
{
  • "reference": "JIN-12345678901101",
  • "amount": "10",
  • "currency": "NGN",
  • "description": "test",
  • "accountNumber": "1234567890",
  • "bankCode": "000013",
  • "passKey": "028087",
  • "actionType": "APPROVE_DISBURSEMENT",
  • "signature": "signature-value"
}

Response samples

Content type
application/json
{
  • "responseCode": "00",
  • "message": "Successful",
  • "data":
    {
    }
}

VIRTUAL ACCOUNT

Create Virtual Account

The Virtual Account API allows you to create reserve accounts for your customers to make payments.

-
Authorizations:
header Parameters
Content-Type
required
string
Default: application/json
Request Body schema: application/json
publicKey
required
string

The merchant public key.

-
fullName
required
string

The full name of the account holder.

-
bankVerificationNumber
required
string

The BVN of the account holder.

-
currency
required
string

The currency for the account.

-
country
required
string

The country code.

-
reference
required
string

The unique reference for the account.

-
email
required
string

The email address of the account holder.

-

Responses

Request samples

Content type
application/json
{
  • "publicKey": "YOUR_PUBLIC_KEY",
  • "fullName": "Jane Smith",
  • "bankVerificationNumber": "",
  • "currency": "NGN",
  • "country": "NG",
  • "reference": "FIRST_VIRTUAl_17",
  • "email": "js@emaildomain.com"
}

Response samples

Content type
application/json
{
  • "status": "SUCCESS",
  • "data":
    {
    }
}

Get Virtual Account

Retrieve details of a virtual account by its payment reference.

-
Authorizations:
path Parameters
paymentReference
required
string

The virtual account payment reference.

-

Responses

Response samples

Content type
application/json
{
  • "status": "SUCCESS",
  • "data":
    {
    }
}

Delete a Virtual Account

Delete a virtual account by its reference.

-
Authorizations:
path Parameters
reference
required
string

The virtual account reference.

-

Responses

Response samples

Content type
application/json
{
  • "status": "SUCCESS",
  • "data":
    {
    }
}

Get Payment

Retrieve payment details for a virtual account using the public key and account number.

-
Authorizations:
path Parameters
publicKey
required
string

The merchant public key.

-
accountNumber
required
string

The customer's account number.

-

Responses

Response samples

Content type
application/json
{
  • "status": "SUCCESS",
  • "data":
    {
    }
}

CARD TOKENISATION

Create Card Token

Create a card token for future payments.

-
Authorizations:
header Parameters
Content-Type
required
string
Default: application/json
Request Body schema: application/json
publicKey
required
string
amount
required
string
fullName
required
string
mobileNumber
required
string
redirectUrl
required
string
currency
required
string
country
required
string
paymentReference
required
string
email
required
string
paymentType
required
string
cardNumber
required
string
expiryMonth
required
string
expiryYear
required
string
cvv
required
string
pin
required
string

Responses

Request samples

Content type
application/json
{
  • "publicKey": "YOUR_PUBLIC_KEY",
  • "amount": "50",
  • "fullName": "Jane Smith",
  • "mobileNumber": "03447522256",
  • "redirectUrl": "http://example.com",
  • "currency": "NGN",
  • "country": "NG",
  • "paymentReference": "204g4de74a7ib0j18dg6bi521aiaejf4",
  • "email": "janesmith@seerbit.com",
  • "paymentType": "CARD",
  • "cardNumber": "512348984984988883",
  • "expiryMonth": "01",
  • "expiryYear": "25",
  • "cvv": "000",
  • "pin": "2222"
}

Response samples

Content type
application/json
{
  • "status": "SUCCESS",
  • "data":
    {
    }
}

Get Card Authorisation Code

After the first successful transaction, you can query the transaction with the payment reference endpoint to confirm the status of transaction. The queried payment reference returns the authorizationCode that will be used for subsequent charges.

-
path Parameters
paymentReference
required
string

The payment reference for the transaction.

-

Responses

Response samples

Content type
application/json
{
  • "status": "SUCCESS",
  • "data":
    {
    }
}

Charge Authorisation Token

Charge a card using a previously obtained authorisation code (token).

-
Authorizations:
header Parameters
Content-Type
required
string
Default: application/json
Request Body schema: application/json
publicKey
required
string
amount
required
string
paymentReference
required
string
authorizationCode
required
string

Responses

Request samples

Content type
application/json
{
  • "publicKey": "YOUR_PUBLIC_KEY",
  • "amount": "110",
  • "paymentReference": "charge_test_3451",
  • "authorizationCode": "ye773838jje8837abe"
}

Response samples

Content type
application/json
{
  • "status": "SUCCESS",
  • "data":
    {
    }
}

Bulk Charge Token

Charge multiple cards using authorization tokens in a single request.

-
Authorizations:
header Parameters
Content-Type
required
string
Default: application/json
Request Body schema: application/json
Array ()
publicKey
required
string
amount
required
string
paymentReference
required
string
authorizationCode
required
string

Responses

Request samples

Content type
application/json
[
  • {
    },
  • {
    }
]

Response samples

Content type
application/json
{
  • "code": "00",
  • "message": "Successful",
  • "payload":
    {
    }
}

Query Bulk Charge with BatchId

Query the status and results of a bulk charge operation using the batchId.

-
Authorizations:
query Parameters
batchId
required
string

The batch ID of the bulk charge operation.

-

Responses

Response samples

Content type
application/json
{
  • "code": "00",
  • "message": "Successful",
  • "payload":
    {
    }
}
- - - - \ No newline at end of file diff --git a/scripts/modify-pm-collection.js b/scripts/modify-pm-collection.js index 960d6d2..cc8d746 100644 --- a/scripts/modify-pm-collection.js +++ b/scripts/modify-pm-collection.js @@ -21,15 +21,16 @@ const apiSpec = YAML.parse(fs.readFileSync(apiSpecFile).toString()); console.log("Reading auths from examples in " + apiSpecFile); -var specToken, specPK; -try { - specPK = apiSpec.components.schemas.GenerateHashRequest.example.publicKey; - specToken = - apiSpec.components.schemas.GenerateEncryptedSecretKeyResponse.example.data - .EncrytedSecKey.encryptedKey; -} catch (err) { - throw err; -} +// The OpenAPI definition now keeps request samples with their operations rather +// than in legacy named component schemas. Read the current Generate Hash sample +// and retain Postman variables for values a user supplies at runtime. +const hashExamples = + apiSpec.paths?.["/api/v2/encrypt/hashs"]?.post?.requestBody?.content?.[ + "application/json" + ]?.examples; +const hashExample = hashExamples && Object.values(hashExamples)[0]?.value; +const specPK = hashExample?.publicKey || "{{publicKey}}"; +const specToken = "{{BearerToken}}"; console.log("Token: " + specToken); console.log("Username (Public Key): " + specPK); diff --git a/specs/external-api.yml b/specs/external-api.yml index 6c69959..733c972 100644 --- a/specs/external-api.yml +++ b/specs/external-api.yml @@ -1,3860 +1,1656 @@ -openapi: 3.0.1 +openapi: 3.0.3 info: - title: SeerBit API Reference - contact: {} + title: SeerBit External API Reference version: "1.0" + description: OpenAPI reference generated from the current Postman collection. + Each operation corresponds directly to a request in the Postman collection. servers: - - url: https://seerbitapi.com/api/v2 + - url: https://seerbitapi.com tags: - name: AUTHENTICATION + description: Create the encrypted key used as the Bearer token for authenticated + SeerBit API requests. - name: STANDARD CHECKOUT - - name: ORDER CHECKOUT - - name: PAYMENT METHOD - - name: MOMO - - name: NON 3DS PAYMENT - - name: CARD - - name: ACCOUNT - - name: TOKENIZE - - name: AUTHORISE - # - name: PREAUTHORIZATION - - name: RECURRENT - - name: INVOICE + description: Create hosted checkout payment links, including normal and + split-payment flows. + - name: VIRTUAL ACCOUNTS + description: Create and manage virtual bank accounts and retrieve their payment + activity. + - name: PAYMENT METHODS + description: Initiate direct payments by card, bank account, transfer, USSD, or + mobile money. + - name: PAYMENT QUERY + description: Look up the current result and details of a payment using its reference. + - name: INVOICING + description: Create, send, retrieve, and manage merchant invoices. + - name: TOKENIZATION + description: Tokenize cards and use authorization tokens for subsequent or bulk charges. + - name: RECURRING & SUBSCRIPTIONS + description: Create and manage subscription plans, customer subscriptions, and + recurring charges. + - name: PAYMENT LINKS + description: Create, retrieve, update, and remove reusable payment links. - name: POCKET + description: Authenticate and manage SeerBit Pockets, including balances, + sub-pockets, and internal transfers. - name: PAYOUT - - name: VIRTUAL ACCOUNT - - name: PAYMENT LINK - - name: CARD TOKENISATION + description: Verify destination accounts and initiate or confirm external bank payouts. + - name: PARTNERS API + description: Authenticate partner accounts and manage invited businesses, + commissions, and partner credentials. + - name: WEBHOOKS (REFERENCE) + description: Reference payloads SeerBit sends to your callback URL for + payment-related events. paths: - /encrypt/keys: + /api/v2/encrypt/keys: post: tags: - AUTHENTICATION - summary: Generate Encrypted Secret Key - description: "To make API calls on SeerBit, you will be required to pass a bearer token. To generate a token simply pass your pubic and secret key to rceive a token to process further API calls." - operationId: GenerateEncryptedSecretKey + summary: Generate Encrypted Key + description: >- + Exchanges your `SECRET_KEY` and `publicKey` for an `EncryptedSecKey`. + Use that value as the `BearerToken` collection variable — it's the + Bearer token for every other authenticated request here. Call this once + per session, or whenever your key changes; it does not expire on a fixed + schedule but should be re-generated if a request starts failing auth. + + + **Body fields** + + + | Field | Type | Required | Description | + + |---|---|---|---| + + | `key` | string | Yes | Your `SECRET_KEY` and `publicKey` joined with a period: `SECRET_KEY.publicKey` | + + + This endpoint is intentionally **No Auth** — you don't have a token yet when you call it. + operationId: post_generate-encrypted-key_0 + servers: + - url: https://seerbitapi.com requestBody: + required: true content: application/json: schema: - $ref: "#/components/schemas/GenerateEncryptedSecretKeyRequest" - required: true + type: object + examples: + generate-encrypted-key: + summary: Generate Encrypted Key + value: + key: "{{SECRET_KEY}}.{{publicKey}}" responses: - 200: - description: SUCCESS - content: - application/json: - schema: - $ref: "#/components/schemas/GenerateEncryptedSecretKeyResponse" - 400: - description: Bad Request - content: - application/json: - schema: - type: object - examples: - 400Response: - $ref: "#/components/examples/400Response" - 404: - description: Not Found - content: - application/json: - schema: - type: object - examples: - 404Response: - $ref: "#/components/examples/404Response" - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - 500Response: - $ref: "#/components/examples/500Response" - deprecated: false - x-codegen-request-body-name: Body - /encrypt/hashs: + "200": + description: Successful response + /api/v2/encrypt/hashs: post: tags: - - STANDARD CHECKOUT + - AUTHENTICATION summary: Generate Hash - description: "This is used to ensure the request payload has not been altered" - operationId: GenerateHash + description: >- + Generic hash-generation endpoint — you pass the exact same body as the + request you want a hash for, and SeerBit returns a hash you attach to + that other call. The doc page's own worked example happens to use a + subscription-creation payload (shown in this request's saved body); swap + the body for whatever request you're actually hashing, keeping the same + field names and types that request expects. + + + **Not independently re-confirmed in this pass:** the doc page's response example describes the _downstream_ payment response (redirectUrl, paymentReference) rather than what this endpoint itself returns — no saved example response here; verify against a live sandbox call before relying on the shape. + operationId: post_generate-hash_1 + servers: + - url: https://seerbitapi.com requestBody: + required: true content: application/json: schema: - $ref: "#/components/schemas/GenerateHashRequest" - required: true + type: object + examples: + generate-hash: + summary: Generate Hash + value: + publicKey: "{{publicKey}}" + paymentReference: sub_ref_001 + planId: "{{planId}}" + cardNumber: "5123450000000008" + expiryMonth: "01" + callbackUrl: https://example.com/callback + expiryYear: "28" + cvv: "000" + amount: "100" + currency: NGN + productDescription: Subscription + productId: product222 + country: NG + startDate: 2026-09-01 + cardName: Jane Doe + billingCycle: MONTHLY + email: customer@example.com + mobileNumber: "08012345678" + billingPeriod: "1" + subscriptionAmount: false responses: - 200: - description: "" - content: - application/json: - schema: - $ref: "#/components/schemas/GenerateHashResponse" - 400: - description: Method Not Allowed - content: - application/json: - schema: - type: object - examples: - 400Response: - $ref: "#/components/examples/400Response" - 404: - description: Not Found - content: - application/json: - schema: - type: object - examples: - 404Response: - $ref: "#/components/examples/404Response1" - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - 500Response: - $ref: "#/components/examples/500Response" - deprecated: false - x-codegen-request-body-name: Body - /payments: + "200": + description: Successful response + /api/v2/payments: post: tags: - STANDARD CHECKOUT - summary: Payment Link From Checkout - description: "SeerBit Checkout Standard Initialises a transaction from merchants server to generate a payment link which redirects your customers to a page to make payment and after payment has been made the customer is redirected back to the merchants website." - operationId: PaymentLinkFromCheckout + summary: Normal Payment (No Split) + description: >- + Creates a transaction and returns a `redirectLink` to SeerBit's hosted + checkout page — send the customer there to enter payment details and + complete the charge. No card data touches your server with this flow, + and the full amount settles to your main merchant account with no split. + + + **Body fields** + + + | Field | Type | Required | Description | + + |---|---|---|---| + + | `publicKey` | string | Yes | Merchant public key from the dashboard | + + | `amount` | string | Yes | Amount to charge | + + | `currency` | string | Yes | Transaction currency, e.g. `NGN`, `USD` | + + | `country` | string | Yes | Country the transaction originates from | + + | `paymentReference` | string | Yes | Unique reference you generate per transaction | + + | `email` | string | Yes | Customer email address | + + | `fullName` | string | Yes | Customer full name | + + | `callbackUrl` | string | Yes | Where SeerBit redirects the customer after payment | + + | `tokenize` | boolean | No | **Confirmed by SeerBit.** If `true`: (1) the checkout page on `redirectLink` only offers **Card** as a payment method — no bank transfer, USSD, or other channels; (2) SeerBit tokenizes the card, and the resulting `authorizationCode` is not in this endpoint's own response — it's returned when you call **Check Payment Status** afterward with the `paymentReference`. Use that `authorizationCode` with *Charge Authorization Token* / *Bulk Charge Token* to charge the same card again. Defaults to `false` if omitted. | + + + This is the baseline request with no split fields — see the sibling requests in this folder **Standard Checkout — Easy Split (Split Code)** and **Standard Checkout — Full Dynamic Split** for the two ways to divide a payment across sub-accounts. + + + A `409` means `paymentReference` has already been used — generate a new one per attempt, don't retry with the same value. + operationId: post_normal-payment-no-split_2 + servers: + - url: https://seerbitapi.com requestBody: + required: true content: application/json: schema: - $ref: "#/components/schemas/PaymentLinkFromCheckoutRequest" - required: true + type: object + examples: + normal-payment-no-split: + summary: Normal Payment (No Split) + value: + publicKey: "{{publicKey}}" + amount: "5000.00" + currency: NGN + country: NG + paymentReference: payment_reference8 + email: customer@example.com + fullName: Jane Doe + tokenize: false + callbackUrl: https://example.com/callback responses: - 200: - description: "" - content: - application/json: - schema: - $ref: "#/components/schemas/PaymentLinkFromCheckoutResponse" - 400: - description: Method Not Allowed - content: - application/json: - schema: - type: object - examples: - 400Response: - $ref: "#/components/examples/400Response" - 401: - description: Unauthorized - content: - application/json: - schema: - type: object - examples: - 401Response: - $ref: "#/components/examples/401Response" - 403: - description: Header Token Missing - content: - application/json: - schema: - type: object - examples: - 403Response: - $ref: "#/components/examples/403Response" - 403Response1: - $ref: "#/components/examples/403Response1" - 404: - description: Not Found - content: - application/json: - schema: - type: object - examples: - 404Response: - $ref: "#/components/examples/404Response" - 400Response1: - $ref: "#/components/examples/404Response1" - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - PaymentLinkFromCheckout500Response: - $ref: "#/components/examples/PaymentLinkFromCheckout500Response" - PaymentLinkFromCheckout500Response1: - $ref: "#/components/examples/PaymentLinkFromCheckout500Response1" - PaymentLinkFromCheckout500Response2: - $ref: "#/components/examples/PaymentLinkFromCheckout500Response2" - 500Response: - $ref: "#/components/examples/500Response" - deprecated: false + "200": + description: Successful response security: - - Bearer: [] - x-codegen-request-body-name: Body - /payments/order: + - BearerAuth: [] + /api/v2/payments#standard-checkout-easy-split-split-code: post: tags: - - ORDER CHECKOUT - summary: Create Order Before Payment - description: "Create an order before payment" - operationId: CreateOrderBeforePayment + - STANDARD CHECKOUT + summary: Standard Checkout — Easy Split (Split Code) + description: >- + Same Standard Checkout flow as **Normal Payment (No Split)**, plus a + single `splitCode` field: the code of a split rule you pre-configure + once (recipients, percentages/amounts, fee bearer) on the SeerBit + dashboard, then reference by code at payment time. This is the "easy" + option — you don't specify recipients or amounts inline; the rule + already defines them. + + + | Field | Type | Required | Description | + + |---|---|---|---| + + | `splitCode` | string | Yes (for this variant) | Reference to a split rule created in advance on the SeerBit dashboard. | + + | `tokenize` | boolean | No | **Confirmed by SeerBit.** If `true`, the checkout page restricts payment to **Card only**, and the `authorizationCode` for the tokenized card comes back from **Check Payment Status**, not this endpoint's own response. Defaults to `false`. | + + | *(all other fields)* | | Yes | Same as **Normal Payment (No Split)** | + + + Use this when your split recipients and their shares are fixed and known ahead of time. If you need to set the split's recipients or shares dynamically per transaction, use **Standard Checkout — Full Dynamic Split** instead. + + + **Not fully confirmed**: doc.seerbit.com documents `splitCode` only as `"Split rule Code"` in an example body, without a dedicated page describing how split rules are created on the dashboard or the exact code format — check your dashboard's split-rule setup screen for the value to use here. + operationId: post_standard-checkout-easy-split-split-code_3 + servers: + - url: https://seerbitapi.com requestBody: + required: true content: application/json: schema: type: object examples: - # CreateOrderRequest: - # $ref: '#/components/examples/CreateOrderRequest' - CreateOrderRequest1: - $ref: "#/components/examples/CreateOrderRequest2" - - required: true + standard-checkout-easy-split-split-code: + summary: Standard Checkout — Easy Split (Split Code) + value: + publicKey: "{{publicKey}}" + amount: "5000.00" + currency: NGN + country: NG + paymentReference: payment_reference_split_code1 + email: customer@example.com + fullName: Jane Doe + tokenize: false + callbackUrl: https://example.com/callback + splitCode: SPLIT_RULE_CODE responses: - 200: - description: "" - content: - application/json: - schema: - type: object - examples: - CreateOrder200Response: - $ref: "#/components/examples/CreateOrder200Response" - 400: - description: Method Not Allowed - content: - application/json: - schema: - type: object - examples: - 400Response: - $ref: "#/components/examples/400Response" - 401: - description: Unauthorized - content: - application/json: - schema: - type: object - examples: - 401Response: - $ref: "#/components/examples/401Response" - 403: - description: Missing Header Token - content: - application/json: - schema: - type: object - examples: - Order403Response: - $ref: "#/components/examples/Order403Response" - 403Response: - $ref: "#/components/examples/403Response" - 404: - description: Not Found - content: - application/json: - schema: - type: object - examples: - 400Response: - $ref: "#/components/examples/404Response" - CreateOrder400Response1: - $ref: "#/components/examples/Order404Response1" - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - 500Response: - $ref: "#/components/examples/500Response" - 500Response5: - $ref: "#/components/examples/500Response5" - deprecated: false + "200": + description: Successful response security: - - Bearer: [] - x-codegen-request-body-name: Body - /products/orders: + - BearerAuth: [] + /api/v2/payments#standard-checkout-full-dynamic-split: post: tags: - - ORDER CHECKOUT - summary: Create Order After Payment - description: "Create an order after payment" - operationId: CreateOrder + - STANDARD CHECKOUT + summary: Standard Checkout — Full Dynamic Split + description: >- + Same Standard Checkout flow as **Normal Payment (No Split)**, plus a + `splits` object defining recipients and shares inline, at payment time — + no pre-configured split rule needed. Use this when split details aren't + known in advance (e.g. a marketplace computing a different vendor split + per order). + + + **`splits` object fields** + + + | Field | Type | Required | Description | + + |---|---|---|---| + + | `type` | string | Yes | `FLAT` (fixed amount per recipient) or `PERCENTAGE` | + + | `transactionFee` | string | Yes | Who bears the transaction fee — `ALL_ACCOUNTS`, `PROPORTIONATE`, `SUB_ACCOUNT`, or `PARENT_ACCOUNT` | + + | `bearerSubAccountCode` | string | Only if `transactionFee` is `SUB_ACCOUNT` | Which sub-account bears the fee | + + | `items` | array | Yes | Each entry: `subAccountCode` and its `value` (amount or percentage, matching `type`) | + + + | Field | Type | Required | Description | + + |---|---|---|---| + + | `tokenize` | boolean | No | **Confirmed by SeerBit.** If `true`, the checkout page restricts payment to **Card only**, and the `authorizationCode` for the tokenized card comes back from **Check Payment Status**, not this endpoint's own response. Defaults to `false`. | + + | *(all other core fields)* | | Yes | Same as **Normal Payment (No Split)** | + + + Compare **Standard Checkout — Easy Split (Split Code)**, which references a split rule you configured ahead of time instead of specifying recipients inline. + operationId: post_standard-checkout-full-dynamic-split_4 + servers: + - url: https://seerbitapi.com requestBody: + required: true content: application/json: schema: type: object examples: - CreateOrderRequest: - $ref: "#/components/examples/CreateOrderRequest" - # CreateOrderRequest1: - # $ref: '#/components/examples/CreateOrderRequest2' - - required: true + standard-checkout-full-dynamic-split: + summary: Standard Checkout — Full Dynamic Split + value: + publicKey: "{{publicKey}}" + amount: "5000.00" + currency: NGN + country: NG + paymentReference: payment_reference_dynamic1 + email: customer@example.com + fullName: Jane Doe + tokenize: false + callbackUrl: https://example.com/callback + splits: + type: PERCENTAGE + transactionFee: PARENT_ACCOUNT + items: + - subAccountCode: SUB_ACC_001 + value: "30" responses: - 201: - description: "" - content: - application/json: - schema: - $ref: "#/components/schemas/CreateOrder201Response" - 400: - description: Method Not Allowed - content: - application/json: - schema: - type: object - examples: - 400Response: - $ref: "#/components/examples/400Response" - 401: - description: Unauthorized - content: - application/json: - schema: - type: object - examples: - 401Response: - $ref: "#/components/examples/401Response" - 403: - description: Missing Header Token - content: - application/json: - schema: - type: object - examples: - Order403Response: - $ref: "#/components/examples/Order403Response" - 403Response: - $ref: "#/components/examples/403Response" - 404: - description: Not Found - content: - application/json: - schema: - type: object - examples: - 400Response: - $ref: "#/components/examples/404Response" - CreateOrder400Response1: - $ref: "#/components/examples/Order404Response1" - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - 500Response: - $ref: "#/components/examples/500Response" - deprecated: false + "200": + description: Successful response security: - - Bearer: [] - x-codegen-request-body-name: Body - put: + - BearerAuth: [] + /api/v2/virtual-accounts: + post: tags: - - ORDER CHECKOUT - summary: Update Order - description: "Update an order" - operationId: UpdateOrder + - VIRTUAL ACCOUNTS + summary: Create Virtual Account + description: >- + Issues a dedicated bank account number for one customer. Transfers into + that account are reconciled back to the customer automatically — use + *Get Payments* to see what's landed on it. + + + **Body fields** + + + | Field | Type | Required | Description | + + |---|---|---|---| + + | `publicKey` | string | Yes | Merchant public key | + + | `fullName` | string | Yes | Customer's full name, used as the account name | + + | `email` | string | Yes | Customer email | + + | `currency` | string | Yes | Currency code, e.g. `NGN` | + + | `country` | string | Yes | Country code, e.g. `NG` | + + | `reference` | string | Yes | Your unique reference for this virtual account — also used to fetch/delete it later | + + | `bankVerificationNumber` | string | No | Customer's BVN, for verification | + + + Response returns `walletName`, `bankName`, and `accountNumber` for the customer to pay into. + operationId: post_create-virtual-account_5 + servers: + - url: https://seerbitapi.com requestBody: + required: true content: application/json: schema: type: object examples: - UpdateOrderRequest: - $ref: "#/components/examples/UpdateOrderRequest" - required: true + create-virtual-account: + summary: Create Virtual Account + value: + publicKey: "{{publicKey}}" + fullName: Jane Smith + bankVerificationNumber: "" + currency: NGN + country: NG + reference: FIRST_VIRTUAL_17 + email: js@emaildomain.com responses: - 201: - description: "" - content: - application/json: - schema: - $ref: "#/components/schemas/UpdateOrder201Response" - 400: - description: Method Not Allowed - content: - application/json: - schema: - type: object - examples: - 400Response: - $ref: "#/components/examples/400Response" - 401: - description: Unauthorized - content: - application/json: - schema: - type: object - examples: - 401Response: - $ref: "#/components/examples/401Response" - 403: - description: Missing Header Token - content: - application/json: - schema: - type: object - examples: - CreateOrder403Response: - $ref: "#/components/examples/Order403Response" - 403Response: - $ref: "#/components/examples/403Response" - 404: - description: Not Found - content: - application/json: - schema: - type: object - examples: - 400Response: - $ref: "#/components/examples/404Response" - CreateOrder400Response1: - $ref: "#/components/examples/Order404Response1" - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - 500Response: - $ref: "#/components/examples/500Response" - deprecated: false + "200": + description: Successful response security: - - Bearer: [] - x-codegen-request-body-name: Body - /products/orders/publicKey/SBTESTPUBK_9sN3TuLgW6a9redEfY48cKKkUa09Pz2u: + - BearerAuth: [] + "/api/v2/virtual-accounts/{paymentReference}": get: tags: - - ORDER CHECKOUT - summary: Get Orders - description: "Get a list of orders" - operationId: GetOrderByPublicKey + - VIRTUAL ACCOUNTS + summary: Get Virtual Account + description: Fetches details for one virtual account by the `reference` used to + create it (passed here as `paymentReference`). Response includes + `linkingReference`, `wallet`, `bankName`, and `accountNumber`. + operationId: get_get-virtual-account_6 + servers: + - url: https://seerbitapi.com + parameters: + - name: paymentReference + in: path + required: true + description: Value of paymentReference + schema: + type: string responses: - 201: - description: "" - content: - application/json: - schema: - $ref: "#/components/schemas/GetOrderByPublicKey201Response" - 400: - description: Method Not Allowed - content: - application/json: - schema: - type: object - examples: - 400Response: - $ref: "#/components/examples/400Response" - 401: - description: Unauthorized - content: - application/json: - schema: - type: object - examples: - 401Response: - $ref: "#/components/examples/401Response" - 403: - description: Missing Header Token - content: - application/json: - schema: - type: object - examples: - CreateOrder403Response: - $ref: "#/components/examples/Order403Response" - 403Response: - $ref: "#/components/examples/403Response" - 404: - description: Not Found - content: - application/json: - schema: - type: object - examples: - 400Response: - $ref: "#/components/examples/404Response" - CreateOrder400Response2: - $ref: "#/components/examples/Order404Response2" - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - 500Response: - $ref: "#/components/examples/500Response" - deprecated: false + "200": + description: Successful response security: - - Bearer: [] - /products/orders/publicKey/SBTESTPUBK_9sN3TuLgW6a9redEfY48cKKkUa09Pz2u/paymentReference/0w0eimkizc41602513327447: - get: + - BearerAuth: [] + "/api/v2/virtual-accounts/{reference}": + delete: tags: - - ORDER CHECKOUT - summary: Get an Order with Payment Reference - description: "Get order details with payment reference" - operationId: GetOrderByPublicKeyAndPaymentReference + - VIRTUAL ACCOUNTS + summary: Delete Virtual Account + description: Deactivates a virtual account by its `reference`. On success, + returns a confirmation message — "Virtual account has been deleted". + operationId: delete_delete-virtual-account_7 + servers: + - url: https://seerbitapi.com + parameters: + - name: reference + in: path + required: true + description: Value of reference + schema: + type: string responses: - 201: - description: "" - content: - application/json: - schema: - $ref: "#/components/schemas/GetOrderByPublicKeyAndPaymentReference201Response" - 400: - description: Method Not Allowed - content: - application/json: - schema: - type: object - examples: - 400Response: - $ref: "#/components/examples/400Response" - 401: - description: Unauthorized - content: - application/json: - schema: - type: object - examples: - 401Response: - $ref: "#/components/examples/401Response" - 403: - description: Missing Header Token - content: - application/json: - schema: - type: object - examples: - CreateOrder403Response: - $ref: "#/components/examples/Order403Response" - 403Response: - $ref: "#/components/examples/403Response" - 404: - description: Not Found - content: - application/json: - schema: - type: object - examples: - 400Response: - $ref: "#/components/examples/404Response" - CreateOrder400Response2: - $ref: "#/components/examples/Order404Response2" - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - 500Response: - $ref: "#/components/examples/500Response" - deprecated: false + "200": + description: Successful response security: - - Bearer: [] - /products/orders/publicKey/SBTESTPUBK_9sN3TuLgW6a9redEfY48cKKkUa09Pz2u/orderId/wil0f47b62: + - BearerAuth: [] + "/api/v2/virtual-accounts/{publicKey}/{accountNumber}": get: tags: - - ORDER CHECKOUT - summary: Get Order with Order Id - description: "Get order details with OrderId" - operationId: GetOrderByPublicKeyandOrderId + - VIRTUAL ACCOUNTS + summary: Get Payments + description: "Lists transactions that have landed on one virtual account, + identified by `publicKey` and `accountNumber` in the path. Each entry + includes `amount`, customer name, `paymentType`, `status`, settlement + info, and `transferType: RESERVE_ACCOUNT`." + operationId: get_get-payments_8 + servers: + - url: https://seerbitapi.com + parameters: + - name: publicKey + in: path + required: true + description: Value of publicKey + schema: + type: string + - name: accountNumber + in: path + required: true + description: Value of accountNumber + schema: + type: string responses: - # 200: - # description: "" - # content: - # application/json: - # schema: - # $ref: '#/components/schemas/GetOrderByPublicKeyAndOrderIdResponse' - 201: - description: "" - content: - application/json: - schema: - $ref: "#/components/schemas/GetOrderByPublicKeyAndOrderId201Response" - 400: - description: Method Not Allowed - content: - application/json: - schema: - type: object - examples: - 400Response: - $ref: "#/components/examples/400Response" - 401: - description: Unauthorized - content: - application/json: - schema: - type: object - examples: - 401Response: - $ref: "#/components/examples/401Response" - 403: - description: Missing Header Token - content: - application/json: - schema: - type: object - examples: - CreateOrder403Response: - $ref: "#/components/examples/Order403Response" - 403Response: - $ref: "#/components/examples/403Response" - 404: - description: Not Found - content: - application/json: - schema: - type: object - examples: - 400Response: - $ref: "#/components/examples/404Response" - CreateOrder400Response2: - $ref: "#/components/examples/Order404Response2" - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - 500Response: - $ref: "#/components/examples/500Response" - deprecated: false + "200": + description: Successful response security: - - Bearer: [] - x-codegen-request-body-name: Body - /payments/initiates: + - BearerAuth: [] + /api/v2/payments/initiates: post: tags: - - PAYMENT METHOD - summary: Initiate Payment - description: "Accept more payments with our unified payments API. Accept payments from all major cards and the most popular local and alternative payment methods all in a single integration." - operationId: InitiatePayment - requestBody: - content: - application/json: - schema: - type: object - examples: - momoRequestPaylaod: - $ref: "#/components/examples/momoRequestPaylaod" - cardRequestPaylaod: - $ref: "#/components/examples/cardRequestPayload" - accountRequestPaylaod: - $ref: "#/components/examples/accountRequestPaylaod" - transferRequestPaylaod: - $ref: "#/components/examples/transferRequestPaylaod" - ussdRequestPaylaod: - $ref: "#/components/examples/ussdRequestPaylaod" + - PAYMENT METHODS + summary: Card Payment + description: >- + Direct/inline card charge — you collect the card's PAN, expiry and CVV + on your own form and POST them here, instead of redirecting the customer + to SeerBit's hosted page (compare **Standard Checkout**, which never + touches raw card data on your server). Because this endpoint receives + raw card details, your integration is in PCI-DSS scope — SeerBit's + hosted **Standard Checkout** flow is the lower-compliance-burden + alternative most integrators should default to. - required: true - responses: - 200: - description: "" - content: - application/json: - schema: - type: object - examples: - InitiateAccountPaymentResponse: - $ref: "#/components/examples/InitiateAccountPaymentResponse" - InitiateUSSDPaymentResponse: - $ref: "#/components/examples/InitiateUSSDPaymentResponse" - InitiateAccountPaymentS12Response: - $ref: "#/components/examples/InitiateAccountPaymentS12Response" - InitiateAccountPaymentS7Response: - $ref: "#/components/examples/InitiateAccountPaymentS7Response" - InitiateCardPaymentResponse: - $ref: "#/components/examples/InitiateCardTransactionsResponse" - InitiateCardTransactionsS12Response: - $ref: "#/components/examples/InitiateCardTransactionsS12Response" - InitiateCardTransactionsS18Response: - $ref: "#/components/examples/InitiateCardTransactionsS18Response" - InitiateTransferResponse: - $ref: "#/components/examples/InitiateTransferResponse" - GhanaMomoResponse: - $ref: "#/components/examples/GhanaMomoResponse" - 400: - description: Bad Request - content: - application/json: - schema: - type: object - # $ref: '#/components/schemas/InitiatePayment400Response' - examples: - InitiatePayment400InputResponse: - $ref: "#/components/examples/InitiatePayment400InputResponse" - InitiatePayment400Response: - $ref: "#/components/examples/InitiatePayment400Response" - 401: - description: Unauthorized - content: - application/json: - schema: - type: object - examples: - 401Response: - $ref: "#/components/examples/401Response" - 403: - description: Missing Header Token - content: - application/json: - schema: - type: object - # $ref: '#/components/schemas/InitiatePayment403Response' - examples: - InitiatePayment403Response: - $ref: "#/components/examples/403Response" - InitiateCardTransactionsResponse403Response: - $ref: "#/components/examples/403Response1" - 404: - description: Not Found - content: - application/json: - schema: - type: object - examples: - 400Response1: - $ref: "#/components/examples/404Response1" - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - 500Response: - $ref: "#/components/examples/500Response" - 500Response1: - $ref: "#/components/examples/500Response1" - deprecated: false - security: - - Bearer: [] - x-codegen-request-body-name: Body - /banks/merchant/SBTESTPUBK_p8GqvFSFNCBahSJinczKd9aIPoRUZfda: - get: - tags: - - PAYMENT METHOD - summary: Get Banks - description: "Get list of banks" - operationId: GetBanks - responses: - 201: - description: "" - content: - application/json: - schema: - type: object - examples: - BanksResponse: - $ref: "#/components/examples/BanksResponse" - 400: - description: Method Not Allowed - content: - application/json: - schema: - $ref: "#/components/schemas/OTPMomo400Response" - 404: - description: Not Found - content: - application/json: - schema: - type: object - examples: - 400Response: - $ref: "#/components/examples/404Response" - 404Response1: - $ref: "#/components/examples/404Response1" - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - 500Response: - $ref: "#/components/examples/500Response" - deprecated: false - # security: - # - Bearer: [] - x-codegen-request-body-name: Body - - /payments/momo/otp: - post: - tags: - - MOMO - summary: OTP Momo - description: "When making MOMO transfers, and OTP is required to complete the payment" - operationId: OTPMomo + **Body fields** + + + | Field | Type | Required | Description | + + |---|---|---|---| + + | `publicKey` | string | Yes | Merchant public key | + + | `amount` | string | Yes | Amount to charge | + + | `currency` | string | Yes | e.g. `NGN` | + + | `country` | string | Yes | Country code | + + | `paymentReference` | string | Yes | Unique reference you generate | + + | `email` | string | Yes | Customer email | + + | `fullName` | string | Yes | Customer full name | + + | `paymentType` | string | Yes | `CARD` for this flow | + + | `cardDetails.pan` | string | Yes | Card number | + + | `cardDetails.expiryMonth` / `expiryYear` | string | Yes | Card expiry | + + | `cardDetails.cvv` | string | Yes | Card CVV | + + | `callbackUrl` | string | Yes | Where SeerBit sends the final result | + + + **OTP step**: many card transactions come back requiring 3DS/OTP authentication. Per the Card Payment doc page, you complete this by POSTing again to this **same** `/api/v2/payments/initiates` URL with a body shaped like: + + ```json + + { + "transaction": { + "linkingreference": "", + "otp": "" + } + } + + ``` + + Then poll **Check Payment Status** (Payment Query folder) with `paymentReference` to confirm the final state. + operationId: post_card-payment_9 + servers: + - url: https://seerbitapi.com requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/OTPMomoRequest" required: true - responses: - 200: - description: "" - content: - application/json: - schema: - type: object - examples: - OTPMomoResponse: - $ref: "#/components/schemas/OTPMomoResponse" - OTPMomoResponse1: - $ref: "#/components/examples/OTPMomoResponse1" - 400: - description: Method Not Allowed - content: - application/json: - schema: - $ref: "#/components/schemas/OTPMomo400Response" - 404: - description: Not Found - content: - application/json: - schema: - type: object - examples: - 400Response: - $ref: "#/components/examples/404Response" - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - 500Response: - $ref: "#/components/examples/500Response" - deprecated: false - security: - - Bearer: [] - x-codegen-request-body-name: Body - /payments/charge: - post: - tags: - - NON 3DS PAYMENT - summary: Charge Card - description: "This payment option is used to charge non 3d transactions" - operationId: ChargeCard - requestBody: content: application/json: schema: type: object examples: - ChargeCardRequest: - $ref: "#/components/examples/ChargeCardRequest" - required: true - responses: - 201: - description: "" - content: - application/json: - schema: - type: object - examples: - ChargeCardResponse: - $ref: "#/components/examples/ChargeCardResponse" - ChargeCardResponse1: - $ref: "#/components/examples/ChargeCardResponse1" - 400: - description: Method Not Allowed - content: - application/json: - schema: - type: object - examples: - 400Response: - $ref: "#/components/examples/400Response" - 400Response1: - $ref: "#/components/examples/400Response1" - 400Response2: - $ref: "#/components/examples/400Response2" - 400Response3: - $ref: "#/components/examples/400Response3" - 400Response4: - $ref: "#/components/examples/400Response4" - 400Response5: - $ref: "#/components/examples/400Response5" - 400Response6: - $ref: "#/components/examples/400Response6" - 400Response7: - $ref: "#/components/examples/400Response7" - 400Response8: - $ref: "#/components/examples/400Response8" - 403: - description: Missing Header Token - content: - application/json: - schema: - type: object - examples: - CreateOrder403Response: - $ref: "#/components/examples/Order403Response" - 403Response: - $ref: "#/components/examples/403Response" - 403Response2: - $ref: "#/components/examples/403Response2" - 403Response3: - $ref: "#/components/examples/403Response3" - 403Response4: - $ref: "#/components/examples/403Response4" - 404: - description: Not Found - content: - application/json: - schema: - type: object - examples: - 400Response: - $ref: "#/components/examples/404Response" - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - 500Response: - $ref: "#/components/examples/500Response" - deprecated: false - security: - - Basic: [] - x-codegen-request-body-name: Body - /payments/query/STG10948E242065R569A22tAQM85EQW4: - get: - tags: - - CARD - summary: Check Status - description: "This Operation allows you to check the status of a transaction via the status check api. This is done by making a Get request to the endpoint below with your payment reference." - operationId: CheckStatus + card-payment: + summary: Card Payment + value: + publicKey: "{{publicKey}}" + amount: "5000.00" + currency: NGN + country: NG + paymentReference: payment_reference_card1 + email: customer@example.com + fullName: Jane Doe + paymentType: CARD + cardDetails: + pan: "5060990580000217499" + expiryMonth: "03" + expiryYear: "2027" + cvv: "111" + callbackUrl: https://example.com/callback responses: - 200: - description: "" - content: - application/json: - schema: - $ref: "#/components/schemas/CheckStatusResponse" - 400: - description: Method Not Allowed - content: - application/json: - schema: - type: object - examples: - 400Response: - $ref: "#/components/examples/400Response" - 404: - description: Not Found - content: - application/json: - schema: - type: object - examples: - 400Response: - $ref: "#/components/examples/404Response" - CreateOrder400Response1: - $ref: "#/components/examples/404Response1" - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - 500Response: - $ref: "#/components/examples/500Response" - 500Response4: - $ref: "#/components/examples/500Response4" - deprecated: false + "200": + description: Successful response security: - - Bearer: [] - x-codegen-request-body-name: Body - /payments/validate: + - BearerAuth: [] + /api/v2/payments/initiates#bank-account-payment: post: tags: - - ACCOUNT - summary: Validate Transaction - description: "This option is used to complete an account transaction, when OTP is required" - operationId: ValidateTransaction + - PAYMENT METHODS + summary: Bank Account Payment + description: >- + Initiates a direct bank-account debit: the customer authorizes a charge + straight from their bank account (via account number + bank code) rather + than a card, USSD code, or transfer-in. + + + **Not confirmed against doc.seerbit.com** — two details on the Bank Account Payment doc page could not be pinned down and are flagged rather than guessed: + + 1. The exact `paymentType` value for this flow (unlike `CARD`/`USSD`/`TRANSFER`/`MOMO`, the doc page doesn't spell this one out explicitly) — placeholder left in the sample body above; check the dashboard/API response or contact SeerBit support to confirm before using this request. + + 2. The doc page references a separate **`/payments/validate`** endpoint for the OTP/authorization step, but doesn't give its full URL, method, or body — this conflicts with the Card Payment page, which documents OTP validation as a second POST to this *same* `/api/v2/payments/initiates` URL with a `{"transaction": {"linkingreference":..., "otp":...}}` body. It's unclear whether Bank Account Payment genuinely uses a different endpoint or the doc page is just describing the same flow loosely. + + + **Body fields** (`accountNumber` + `bankCode` identify the account to debit; other fields match Card Payment). Verify the `paymentType` value and validation step directly with SeerBit before relying on this request. + operationId: post_bank-account-payment_10 + servers: + - url: https://seerbitapi.com requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/ValidateTransactionRequest" required: true - responses: - 200: - description: "" - content: - application/json: - schema: - type: object - examples: - ValidateTransactionResponse: - $ref: "#/components/examples/ValidateTransactionResponse" - ValidateTransactionResponse1: - $ref: "#/components/examples/ValidateTransactionResponse1" - ValidateTransactionResponse2: - $ref: "#/components/examples/ValidateTransactionResponse2" - ValidateTransactionResponse3: - $ref: "#/components/examples/ValidateTransactionResponse3" - 400: - description: Method Not Allowed - content: - application/json: - schema: - type: object - examples: - 400Response: - $ref: "#/components/examples/400Response" - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - 500Response: - $ref: "#/components/examples/500Response" - deprecated: false - security: - - Bearer: [] - x-codegen-request-body-name: Body - /payments/tokenize: - post: - tags: - - TOKENIZE - summary: Tokenize a Card - description: "In order to store your customers payment details, you need to pass some additional parameter when making the first payment request using the payments/tokenize endpoint, the Cvv field and pin are optional(this could be null). After the first payment is made, the payment details is collected and a token is generated for it which is then stored for future use." - operationId: TokenizeaCard - requestBody: content: application/json: schema: type: object examples: - TokenizeaCardRequest: - $ref: "#/components/examples/TokenizeaCardRequest" - required: true + bank-account-payment: + summary: Bank Account Payment + value: + publicKey: "{{publicKey}}" + amount: "5000.00" + currency: NGN + country: NG + paymentReference: payment_reference_bank1 + email: customer@example.com + fullName: Jane Doe + paymentType: "**Not confirmed** — see description" + accountNumber: "0000000000" + bankCode: "058" + callbackUrl: https://example.com/callback responses: - 200: - description: "" - content: - application/json: - schema: - $ref: "#/components/schemas/TokenizeCardResponse" - 400: - description: Method Not Allowed - content: - application/json: - schema: - type: object - examples: - 400Response: - $ref: "#/components/examples/400Response" - 400Response9: - $ref: "#/components/examples/400Response9" - 400Response10: - $ref: "#/components/examples/400Response10" - 401: - description: Unauthorized - content: - application/json: - schema: - $ref: "#/components/schemas/TokenizeCard401Response" - 403: - description: Missing Header Token - content: - application/json: - schema: - type: object - examples: - 403Response3: - $ref: "#/components/examples/403Response3" - 404: - description: Not Found - content: - application/json: - schema: - type: object - examples: - 404Response1: - $ref: "#/components/examples/404Response1" - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - 500Response: - $ref: "#/components/examples/500Response" - deprecated: false + "200": + description: Successful response security: - - Basic: [] - x-codegen-request-body-name: Body - /payments/authorise: + - BearerAuth: [] + /api/v2/payments/initiates#transfer: post: tags: - - AUTHORISE - summary: Authorise - description: "In SeerBit API, the term “authorisation” indicates, that payment is authorised but not captured. This allows a merchant to cancel transaction at their discretion, typically based but not limited to fraud-related activities. This authorisation state is valid for a limited period of time, which provides a window to cancel the transaction." - operationId: Authorise + - PAYMENT METHODS + summary: Transfer + description: >- + Initiates a bank-transfer payment: SeerBit returns a dynamic virtual + account number for this transaction that the customer transfers the + exact amount into from their own banking app; SeerBit matches the credit + and confirms the transaction. This is distinct from the **Virtual + Accounts** folder, which provisions a *persistent* account number for a + customer across many transactions — this is a one-off, per-transaction + account. + + + **Body fields** + + + | Field | Type | Required | Description | + + |---|---|---|---| + + | `paymentType` | string | Yes | `TRANSFER` | + + | (other fields) | | Yes | Same core fields as Card Payment | + + + Poll **Check Payment Status** (Payment Query folder) with `paymentReference`, or listen for the `transaction` webhook, to detect when the transfer lands. + operationId: post_transfer_11 + servers: + - url: https://seerbitapi.com requestBody: + required: true content: application/json: schema: type: object examples: - AuthoriseRequest: - $ref: "#/components/examples/AuthoriseRequest" - AuthorisewithCardTokenRequest: - $ref: "#/components/examples/AuthorisewithCardTokenRequest" - required: true + transfer: + summary: Transfer + value: + publicKey: "{{publicKey}}" + amount: "5000.00" + currency: NGN + country: NG + paymentReference: payment_reference_transfer1 + email: customer@example.com + fullName: Jane Doe + paymentType: TRANSFER + callbackUrl: https://example.com/callback responses: - 201: - description: "" - content: - application/json: - schema: - type: object - examples: - Authorise201Response: - $ref: "#/components/examples/Authorise201Response" - Authorise201Response1: - $ref: "#/components/examples/Authorise201Response1" - AuthorisewithCardTokenResponse1: - $ref: "#/components/examples/AuthorisewithCardTokenResponse1" - AuthorisewithCardTokenResponse: - $ref: "#/components/examples/AuthorisewithCardTokenResponse" - - 400: - description: Method Not Allowed - content: - application/json: - schema: - type: object - examples: - 400Response: - $ref: "#/components/examples/400Response" - 400Response1: - $ref: "#/components/examples/400Response1" - 400Response3: - $ref: "#/components/examples/400Response3" - 400Response5: - $ref: "#/components/examples/400Response5" - 400Response6: - $ref: "#/components/examples/400Response6" - 400Response7: - $ref: "#/components/examples/400Response7" - 400Response8: - $ref: "#/components/examples/400Response8" - 401: - description: Unauthorized - content: - application/json: - schema: - type: object - examples: - 401Response1: - $ref: "#/components/examples/401Response1" - 403: - description: Missing Header Token - content: - application/json: - schema: - type: object - examples: - CreateOrder403Response: - $ref: "#/components/examples/Order403Response" - 403Response: - $ref: "#/components/examples/403Response" - 403Response2: - $ref: "#/components/examples/403Response2" - 403Response3: - $ref: "#/components/examples/403Response3" - 403Response4: - $ref: "#/components/examples/403Response4" - 404: - description: Not Found - content: - application/json: - schema: - type: object - examples: - 404Response1: - $ref: "#/components/examples/404Response1" - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - 500Response: - $ref: "#/components/examples/500Response" - deprecated: false + "200": + description: Successful response security: - - Basic: [] - x-codegen-request-body-name: Body - /payments/authorise3ds: + - BearerAuth: [] + /api/v2/payments/initiates#ussd-payment: post: tags: - - AUTHORISE - summary: 3DS Authorise - description: "PIN and CVV are not Required to complete Transaction. Authorization is completed on 3DS." - operationId: 3DSAuthorise + - PAYMENT METHODS + summary: USSD Payment + description: >- + Initiates a USSD payment: SeerBit returns a USSD string (e.g. + `*723*...#`) the customer dials on their phone from the bank account + linked to `bankCode` to authorize the debit — no card or app needed. + + + **Body fields** + + + | Field | Type | Required | Description | + + |---|---|---|---| + + | `paymentType` | string | Yes | `USSD` | + + | `bankCode` | string | Yes | Bank's USSD routing code, e.g. `058` for GTBank | + + | (other fields) | | Yes | Same `publicKey`/`amount`/`currency`/`country`/`paymentReference`/`email`/`fullName`/`callbackUrl` as Card Payment | + + + The initial response includes the USSD code to display to the customer. Poll **Check Payment Status** (Payment Query folder) with `paymentReference` — there's no separate OTP step; authorization happens on the phone via the USSD session itself. + operationId: post_ussd-payment_12 + servers: + - url: https://seerbitapi.com requestBody: + required: true content: application/json: schema: type: object examples: - 3DSAuthoriseRequest: - $ref: "#/components/examples/3DSAuthoriseRequest" - required: true + ussd-payment: + summary: USSD Payment + value: + publicKey: "{{publicKey}}" + amount: "5000.00" + currency: NGN + country: NG + paymentReference: payment_reference_ussd1 + email: customer@example.com + fullName: Jane Doe + paymentType: USSD + bankCode: "058" + callbackUrl: https://example.com/callback responses: - 200: - description: "" - content: - application/json: - schema: - type: object - examples: - 3DSAuthoriseResponse: - $ref: "#/components/examples/3DSAuthoriseResponse" - 3DSAuthoriseResponse1: - $ref: "#/components/examples/3DSAuthoriseResponse1" - 400: - description: Method Not Allowed - content: - application/json: - schema: - type: object - examples: - 400Response: - $ref: "#/components/examples/400Response" - 401: - description: Unauthorized - content: - application/json: - schema: - type: object - examples: - 401Response: - $ref: "#/components/examples/401Response" - 403: - description: Missing Header Token - content: - application/json: - schema: - type: object - examples: - CreateOrder403Response: - $ref: "#/components/examples/Order403Response" - 403Response: - $ref: "#/components/examples/403Response" - 403Response2: - $ref: "#/components/examples/403Response2" - 403Response3: - $ref: "#/components/examples/403Response3" - 403Response4: - $ref: "#/components/examples/403Response4" - 404: - description: Not Found - content: - application/json: - schema: - type: object - examples: - 400Response1: - $ref: "#/components/examples/404Response1" - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - 500Response: - $ref: "#/components/examples/500Response" - deprecated: false + "200": + description: Successful response security: - - Bearer: [] - x-codegen-request-body-name: Body - # /payments/capture: - # post: - # tags: - # - PREAUTHORIZATION - # summary: Capture - # description: "Captures a payment if supported by the payment method." - # operationId: Capture - # requestBody: - # content: - # application/json: - # schema: - # $ref: "#/components/schemas/CaptureRequest" - # required: true - # responses: - # 201: - # description: "" - # content: - # application/json: - # schema: - # type: object - # examples: - # CaptureResponse: - # $ref: "#/components/examples/Capture201Response" - # CaptureResponse1: - # $ref: "#/components/examples/Capture201Response1" - # 400: - # description: Method Not Allowed - # content: - # application/json: - # schema: - # type: object - # examples: - # 400Response: - # $ref: "#/components/examples/400Response" - # 400Response2: - # $ref: "#/components/examples/400Response2" - # 400Response3: - # $ref: "#/components/examples/400Response3" - # 400Response4: - # $ref: "#/components/examples/400Response4" - # 400Response5: - # $ref: "#/components/examples/400Response5" - # 400Response6: - # $ref: "#/components/examples/400Response6" - # 400Response8: - # $ref: "#/components/examples/400Response8" - # 400Response11: - # $ref: "#/components/examples/400Response11" - - # 403: - # description: Missing Header Token - # content: - # application/json: - # schema: - # type: object - # examples: - # 403Response: - # $ref: "#/components/examples/403Response" - # 403Response2: - # $ref: "#/components/examples/403Response2" - # 403Response3: - # $ref: "#/components/examples/403Response3" - # 404: - # description: Not Found - # content: - # application/json: - # schema: - # type: object - # examples: - # 400Response: - # $ref: "#/components/examples/404Response1" - # 500: - # description: Internal Server Error - # content: - # application/json: - # schema: - # type: object - # examples: - # 500Response: - # $ref: "#/components/examples/500Response" - # deprecated: false - # security: - # - Basic: [] - # x-codegen-request-body-name: Body - # /payments/refund: - # post: - # tags: - # - PREAUTHORIZATION - # summary: Refund - # description: "Refunds a payment if supported by the payment method." - # operationId: Refund - # requestBody: - # content: - # application/json: - # schema: - # $ref: "#/components/schemas/RefundRequest" - # required: true - # responses: - # 201: - # description: "" - # content: - # application/json: - # schema: - # $ref: "#/components/schemas/Refund201Response" - # 400: - # description: Method Not Allowed - # content: - # application/json: - # schema: - # type: object - # examples: - # 400Response: - # $ref: "#/components/examples/400Response" - # 400Response2: - # $ref: "#/components/examples/400Response2" - # 400Response3: - # $ref: "#/components/examples/400Response3" - # 400Response4: - # $ref: "#/components/examples/400Response4" - # 400Response5: - # $ref: "#/components/examples/400Response5" - # 400Response6: - # $ref: "#/components/examples/400Response6" - # 400Response8: - # $ref: "#/components/examples/400Response8" - # 400Response11: - # $ref: "#/components/examples/400Response11" - # 403: - # description: Missing Header Token - # content: - # application/json: - # schema: - # type: object - # examples: - # 403Response: - # $ref: "#/components/examples/403Response" - # 403Response2: - # $ref: "#/components/examples/403Response2" - # 403Response3: - # $ref: "#/components/examples/403Response3" - # 404: - # description: Not Found - # content: - # application/json: - # schema: - # type: object - # examples: - # 400Response: - # $ref: "#/components/examples/404Response1" - # 500: - # description: Internal Server Error - # content: - # application/json: - # schema: - # type: object - # examples: - # 500Response: - # $ref: "#/components/examples/500Response" - # deprecated: false - # security: - # - Basic: [] - # x-codegen-request-body-name: Body - # /payments/cancel: - # post: - # tags: - # - PREAUTHORIZATION - # summary: Cancel - # description: "Cancel a payment if supported by the payment method." - # operationId: Cancel - # requestBody: - # content: - # application/json: - # schema: - # $ref: "#/components/schemas/CancelRequest" - # required: true - # responses: - # 201: - # description: "" - # content: - # application/json: - # schema: - # $ref: "#/components/schemas/Cancel201Response" - # 400: - # description: Method Not Allowed - # content: - # application/json: - # schema: - # type: object - # examples: - # 400Response: - # $ref: "#/components/examples/400Response" - # 400Response2: - # $ref: "#/components/examples/400Response2" - # 400Response3: - # $ref: "#/components/examples/400Response3" - # 400Response4: - # $ref: "#/components/examples/400Response4" - # 400Response5: - # $ref: "#/components/examples/400Response5" - # 400Response6: - # $ref: "#/components/examples/400Response6" - # 400Response11: - # $ref: "#/components/examples/400Response11" - # 403: - # description: Missing Header Token - # content: - # application/json: - # schema: - # type: object - # examples: - # 403Response2: - # $ref: "#/components/examples/403Response2" - # 403Response3: - # $ref: "#/components/examples/403Response3" - # 404: - # description: Not Found - # content: - # application/json: - # schema: - # type: object - # examples: - # 400Response: - # $ref: "#/components/examples/404Response1" - # 500: - # description: Internal Server Error - # content: - # application/json: - # schema: - # type: object - # examples: - # 500Response: - # $ref: "#/components/examples/500Response" - # deprecated: false - # security: - # - Basic: [] - # x-codegen-request-body-name: Body - /recurring/subscribes: + - BearerAuth: [] + /api/v2/payments/initiates#mobile-money-payment: post: tags: - - RECURRENT - summary: Initiate Subscription - description: "To complete this transaction, merchant is expected to redirect to the 3DSecure site via the redirect URL provided with the response below. However if the redirect url is not returned and the code is S20 and the message is transaction is pending, the Validate OTP endpoint should be called as the customer would have received a token either by email or sms on the customers phone. To get the subscription created or the status of a subscription for the customer, the GET Subscription endpoint is called by passing the paymentReference as billingId." - operationId: InitiateSubscription + - PAYMENT METHODS + summary: Mobile Money Payment + description: >- + Initiates a mobile-money payment (e.g. MTN MoMo, AirtelTigo) — SeerBit + sends a prompt to the customer's phone on the given + `mobileNumber`/`network`, and the customer approves the debit directly + on their handset. Used primarily for Ghana (`GHS`) and other African + mobile-money markets. + + + **Body fields** + + + | Field | Type | Required | Description | + + |---|---|---|---| + + | `paymentType` | string | Yes | `MOMO` | + + | `mobileNumber` | string | Yes | Customer's mobile-money-linked phone number | + + | `network` | string | Yes | Mobile network operator, e.g. `MTN`, `AIRTELTIGO`, `VODAFONE` | + + | (other fields) | | Yes | Same core fields as Card Payment | + + + Poll **Check Payment Status** (Payment Query folder) with `paymentReference` after the customer approves the prompt on their phone. + operationId: post_mobile-money-payment_13 + servers: + - url: https://seerbitapi.com requestBody: + required: true content: application/json: schema: type: object examples: - InitiateSubscriptionRequest: - $ref: "#/components/examples/InitiateSubscriptionRequest" - required: true + mobile-money-payment: + summary: Mobile Money Payment + value: + publicKey: "{{publicKey}}" + amount: "5000.00" + currency: GHS + country: GH + paymentReference: payment_reference_momo1 + email: customer@example.com + fullName: Jane Doe + paymentType: MOMO + mobileNumber: "233241234567" + network: MTN + callbackUrl: https://example.com/callback responses: - 200: - description: "" - content: - application/json: - schema: - $ref: "#/components/schemas/InitiateSubscriptionResponse" - 400: - description: Method Not Allowed - content: - application/json: - schema: - type: object - examples: - 400Response: - $ref: "#/components/examples/400Response" - 400Response1: - $ref: "#/components/examples/400Response12" - 400Response3: - $ref: "#/components/examples/400Response13" - 400Response4: - $ref: "#/components/examples/400Response14" - 400Response5: - $ref: "#/components/examples/400Response15" - 400Response6: - $ref: "#/components/examples/400Response16" - 401: - description: Unauthorized - content: - application/json: - schema: - type: object - examples: - 401Response: - $ref: "#/components/examples/401Response" - 403: - description: Missing Header Token - content: - application/json: - schema: - type: object - examples: - CreateOrder403Response: - $ref: "#/components/examples/Order403Response" - 403Response: - $ref: "#/components/examples/403Response" - 404: - description: Not Found - content: - application/json: - schema: - type: object - examples: - 400Response: - $ref: "#/components/examples/404Response" - 409: - description: Conflict - content: - application/json: - schema: - type: object - examples: - 409Response: - $ref: "#/components/examples/409Response" - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - 500Response: - $ref: "#/components/examples/500Response" - deprecated: false + "200": + description: Successful response security: - - Bearer: [] - x-codegen-request-body-name: Body - /recurring/billingId/TPR2181t55PER542RPP1U1W4391WO: + - BearerAuth: [] + "/api/v3/payments/query/{paymentReference}": get: tags: - - RECURRENT - summary: Get a Subscription - description: "Get customer subscription" - operationId: GetaSubscription - responses: - 200: - description: "" - content: - application/json: - schema: - $ref: "#/components/schemas/GetSubscriptionResponse" - 400: - description: Method Not Allowed - content: - application/json: - schema: - type: object - examples: - 400Response: - $ref: "#/components/examples/400Response" - 404: - description: Not Found - content: - application/json: - schema: - type: object - examples: - 400Response1: - $ref: "#/components/examples/404Response1" - 400Response2: - $ref: "#/components/examples/404Response2" - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - 500Response: - $ref: "#/components/examples/500Response" - deprecated: false - security: - - Bearer: [] - x-codegen-request-body-name: Body + - PAYMENT QUERY + summary: Check Payment Status + description: >- + Looks up the current status of a transaction by its `paymentReference`. + **Corrected to v3** — the doc.seerbit.com page for this actually + documents `/api/v3/payments/query/{paymentReference}` (matching what + *Get Card Authorization Code* already used), not v2 as this request + previously had it. The v3 response includes fuller detail: status, + amount, gateway message, masked card details, and customer info. - # create a plan - /recurrent/plan/create: - post: - tags: - - RECURRENT - summary: Create Plan - description: "Create a new recurring payment plan." - operationId: CreatePlan - servers: - - url: https://merchants.seerbitapi.com/api/v1 - description: SeerBit Merchant Recurring Server - parameters: - - name: Content-Type - in: header - required: true - schema: - type: string - default: application/json - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/CreatePlanRequest" - examples: - CreatePlanRequest: - value: - productId: "Plan name" - productDescription: "Description of Plan" - amount: "100" - billingCycle: "HOURLY" - limit: 5 - publicKey: "SBPUBK_xxxxx" - country: "NG" - currency: "NGN" - allowPartialDebit: false - responses: - 200: - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/CreatePlanResponse" - examples: - CreatePlanResponse: - value: - payload: - country: "NG" - createdAt: 1715607343498 - amount: 100 - productId: "Plan name" - billingCycle: "HOURLY" - currency: "NGN" - payUrl: "https://pay.seerbitapi.com/db1ea861993689a57dac" - details: - country: "NG" - amount: 100 - productId: "Plan name" - allowPartialDebit: false - payLinkUrl: "https://pay.seerbitapi.com/db1ea861993689a57dac" - publicKey: "SBPUBK_xxxxx" - createdAt: 1715607343498 - trialDuration: 0 - trialPeriod: false - billingCycle: "HOURLY" - limit: 5 - planId: "db1ea861993689a57dac" - currency: "NGN" - id: 20031 - productDescription: "Description of Plan" - updatedAt: null - status: "ACTIVE" - publicKey: "SBPUBK_xxxxx" - plan: "db1ea861993689a57dac" - productDescription: "Description of Plan" - message: "Successful" - status: "SUCCESS" - responseCode: "00" - 401: - description: Unauthorized - content: - application/json: - schema: - type: object - examples: - UnauthorizedPlan: - value: - message: "Invalid Authentication Token" - error: "INPUT" - 404: - description: Bad Request - content: - application/json: - schema: - type: object - examples: - BadRequestPlan: - value: - message: "Bad Request" - error: "There has been a problem with reading or understanding the request." - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - Plan500Response: - value: - message: "Internal server error" - security: - - Bearer: [] - deprecated: false - # get merchant subscription plans - /recurring/publicKey/{publicKey}: - get: - tags: - - RECURRENT - summary: Get Merchant Subscription - description: "Retrieve all subscriptions for a merchant by their public key." - operationId: GetMerchantSubscription + + Use this after Standard Checkout, Create Token, or any flow that returns a `paymentReference`, to confirm the final state rather than relying only on the initial response's `code`. + + + **Tokenized Standard Checkout**: if the original Standard Checkout call had `tokenize: true`, this is where the `authorizationCode` for the saved card actually comes back — it is not in Standard Checkout's own response. Save it from here to use with *Charge Authorization Token* / *Bulk Charge Token*. + operationId: get_check-payment-status_14 servers: - - url: https://seerbitapi.com/api/v2 - description: SeerBit API Server + - url: https://seerbitapi.com parameters: - - name: publicKey + - name: paymentReference in: path required: true - description: The merchant public key. + description: Value of paymentReference schema: type: string responses: - 200: - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/GetMerchantSubscriptionResponse" - examples: - GetMerchantSubscriptionResponse: - value: - status: "SUCCESS" - data: - subscriptions: - - publicKey: "SBTEST**************************viTF" - amount: "20" - country: "NG" - customerId: "651d33a62ad69c9f37c4" - cardName: "Jane Smith" - cardNumber: "2223-00xx-xxxx-0007" - plan: "ae702f51220000722dca" - status: "ACTIVE" - billingId: "WQ6676yPOpr12348o" - authorizationCode: "2beb0ccdd347e604552a" - startDate: "2019-01-11 00:00:00" - createdAt: 1578648329000 - - publicKey: "SBTEST**************************viTF" - amount: "100" - country: "NG" - customerId: "ba981a0b7ed1c68ad245" - cardName: "Jane Smith" - cardNumber: "5123-45xx-xxxx-0008" - plan: "ead5e697f42c1cd60813" - status: "ACTIVE" - billingId: "PUBK_PjQ5d1578649732262" - authorizationCode: "145a3bb3418824c14d65" - startDate: "2020-10-01 10:47:49" - createdAt: 1578649752000 - code: "00" - message: "successful" - 401: - description: Unauthorized - content: - application/json: - schema: - type: object - examples: - UnauthorizedMerchantSubscription: - value: - message: "Invalid Authentication Token" - error: "INPUT" - 404: - description: Not Found - content: - application/json: - schema: - type: object - examples: - NotFoundMerchantSubscription: - value: - message: "Not Found" - error: "The server can not find the requested resource" - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - MerchantSubscription500Response: - value: - message: "Internal Server Error" + "200": + description: Successful response security: - - Bearer: [] - deprecated: false - # charge subscription - /recurring/charge: + - BearerAuth: [] + /invoice/create: post: tags: - - RECURRENT - summary: Charge Subscription - description: "Charge a recurring subscription using an authorization code." - operationId: ChargeSubscription + - INVOICING + summary: Create Invoice + description: >- + Creates and sends an itemised invoice to a customer by email, without + you building a checkout flow. Source: + doc.seerbit.com/online-payment/payment-features/invoicing, cross-checked + with the original collection (the doc page's own code samples only show + empty placeholder URLs, so the exact host/path is carried over from the + original working collection, not independently re-confirmed). + + + **Body fields** + + + | Field | Type | Required | Description | + + |---|---|---|---| + + | `publicKey` | string | Yes | Merchant public key | + + | `orderNo` | string | Yes | Unique order identifier | + + | `dueDate` | string | Yes | Invoice due date | + + | `currency` | string | Yes | Currency code, e.g. `NGN` | + + | `receiversName` | string | Yes | Customer name shown on the invoice | + + | `customerEmail` | string | Yes | Where the invoice is sent | + + | `invoiceItems` | array | Yes | Line items, each with `itemName`, `quantity`, `rate`, `tax` (tax as a percentage) | + operationId: post_create-invoice_15 servers: - - url: https://seerbitapi.com/api/v2 - description: SeerBit API Server - parameters: - - name: Content-Type - in: header - required: true - schema: - type: string - default: application/json + - url: https://merchant.seerbitapi.com requestBody: required: true content: application/json: schema: - $ref: "#/components/schemas/ChargeSubscriptionRequest" + type: object examples: - ChargeSubscriptionRequest: + create-invoice: + summary: Create Invoice value: - amount: "200" - publicKey: "YOUR_PUBLIC_KEY" - email: "js@emaildomain.com" - allowPartialDebit: true - authorizationCode: "1234567898765325" - paymentReference: "2938765582R37065687631" - currency: "NGN" + publicKey: "{{publicKey}}" + orderNo: "333333221321" + dueDate: 2026-10-23 + currency: NGN + receiversName: Jane Smith + customerEmail: janesmith@emaildomain.com + invoiceItems: + - itemName: Bluetooth Pods + quantity: 1 + rate: 25000 + tax: 7.5 + - itemName: Quest 10 + quantity: 4 + rate: 100000 + tax: 7.5 responses: - 200: - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/ChargeSubscriptionResponse" - examples: - ChargeSubscriptionResponse: - value: - status: "SUCCESS" - data: - code: "00" - payments: - code: "00" - message: "Successful" - paymentReference: "2938765582R37065687631" - publicKey: "SBTEST**************************viTF" - amount: "200" - currency: "NGN" - country: "NG" - email: "js@emaildomain.com" - productDescription: "Authorised charge" - message: "Successful" - 401: - description: Unauthorized - content: - application/json: - schema: - type: object - examples: - UnauthorizedChargeSubscription: - value: - message: "Invalid Authentication Token" - error: "INPUT" - 404: - description: Not Found - content: - application/json: - schema: - type: object - examples: - NotFoundChargeSubscription: - value: - message: "Not Found" - error: "The server can not find the requested resource" - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - ChargeSubscription500Response: - value: - message: "Internal Server Error" + "200": + description: Successful response security: - - Bearer: [] - deprecated: false - # get customer subscription - /recurring/{publicKey}/customerId/{customerId}: - get: + - BearerAuth: [] + "/invoice/{publicKey}/bulk-requests": + post: tags: - - RECURRENT - summary: Get Customer Subscription - description: "Retrieve all subscriptions for a customer by their customerId and merchant public key." - operationId: GetCustomerSubscription + - INVOICING + summary: Bulk Invoice Requests + description: >- + Same as *Create Invoice*, but accepts a JSON array to send multiple + invoices in one call. Same sourcing caveat as Create Invoice — host/path + carried over from the original collection, not independently + re-confirmed against a doc.seerbit.com code sample. + + + **Body:** array of invoice objects, each shaped like *Create Invoice*'s body (`receiversName` is optional per the saved example — the other fields are required). + operationId: post_bulk-invoice-requests_16 servers: - - url: https://seerbitapi.com/api/v2 - description: SeerBit API Server + - url: https://merchant.seerbitapi.com parameters: - name: publicKey in: path required: true - description: The merchant public key. + description: Value of publicKey schema: type: string - - name: customerId - in: path - required: true - description: The customer ID. - schema: - type: string - responses: - 200: - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/GetCustomerSubscriptionResponse" - examples: - GetCustomerSubscriptionResponse: - value: - status: "SUCCESS" - data: - subscriptions: - - publicKey: "SBTEST**************************viTF" - amount: "100" - country: "NG" - customerId: "ba981a0b7ed1c68ad245" - cardName: "Jane Smith" - cardNumber: "5123-45xx-xxxx-0008" - plan: "ead5e697f42c1cd60813" - status: "ACTIVE" - billingId: "PUBK_PjQ5d1578649732262" - authorizationCode: "145a3bb3418824c14d65" - startDate: "2020-10-01 10:47:49" - createdAt: 1578649752000 - - publicKey: "SBTEST**************************viTF" - amount: "20000" - country: "NG" - customerId: "ba981a0b7ed1c68ad245" - cardName: "John Smith" - cardNumber: "5123-45xx-xxxx-0008" - plan: "80b0854b35a0e279efc3" - status: "INACTIVE" - billingId: "PUBK_PjQ5d1578650322483" - authorizationCode: "ddfce36aa4f3abc7cf72" - startDate: "2020-10-01 10:58:25" - createdAt: 1578650353000 - code: "00" - 401: - description: Unauthorized - content: - application/json: - schema: - type: object - examples: - UnauthorizedCustomerSubscription: - value: - message: "Invalid Authentication Token" - error: "INPUT" - 404: - description: Not Found - content: - application/json: - schema: - type: object - examples: - NotFoundCustomerSubscription: - value: - message: "Not Found" - error: "The server can not find the requested resource" - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - CustomerSubscription500Response: - value: - message: "Internal Server Error" - security: - - Bearer: [] - deprecated: false - # update customer subscription - /recurring/updates: - post: - tags: - - RECURRENT - summary: Update Customer Subscription - description: "Update a customer's subscription details." - operationId: UpdateCustomerSubscription - servers: - - url: https://seerbitapi.com/api/v2 - description: SeerBit API Server - parameters: - - name: Content-Type - in: header - required: true - schema: - type: string - default: application/json requestBody: required: true content: application/json: schema: - $ref: "#/components/schemas/UpdateCustomerSubscriptionRequest" + type: object examples: - UpdateCustomerSubscriptionRequest: + bulk-invoice-requests: + summary: Bulk Invoice Requests value: - amount: "20000" - currency: "NGN" - country: "NG" - mobileNumber: "08033456500" - billingId: "PUBK_PjQ5d1578650322483" - publicKey: "YOUR_PUBLIC_KEY" - status: "INACTIVE" + - orderNo: AZPOP12929322 + dueDate: 2026-03-19 + currency: NGN + customerEmail: testtechblazer1@mailinator.com + invoiceItems: + - itemName: Air Pod 2 + quantity: 1 + rate: 5 + tax: 1.5 + - itemName: Quest 1 + quantity: 4 + rate: 10 + tax: 2.5 + - itemName: Earpod + quantity: 1 + rate: 100 + tax: 0.5 + - orderNo: AZPOP12929323 + dueDate: 2026-03-28 + currency: NGN + receiversName: Frank John + customerEmail: testtechblazer2@mailinator.com + invoiceItems: + - itemName: Power Bulb + quantity: 10 + rate: 5 + tax: 0.5 responses: - 200: - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/UpdateCustomerSubscriptionResponse" - examples: - UpdateCustomerSubscriptionResponse: - value: - status: "SUCCESS" - data: - subscriptions: - publicKey: "SBTEST**************************viTF" - amount: "20000" - country: "NG" - customerId: "ba981a0b7ed1c68ad245" - cardName: "Jane Smith" - cardNumber: "5123-45xx-xxxx-0008" - plan: "80b0854b35a0e279efc3" - status: "INACTIVE" - billingId: "PUBK_PjQ5d1578650322483" - authorizationCode: "ddfce36aa4f3abc7cf72" - startDate: "2020-10-01 10:58:25" - createdAt: 1578650353000 - code: "00" - message: "Successful" - 401: - description: Unauthorized - content: - application/json: - schema: - type: object - examples: - UnauthorizedUpdateCustomerSubscription: - value: - message: "Invalid Authentication Token" - error: "INPUT" - 404: - description: Not Found - content: - application/json: - schema: - type: object - examples: - NotFoundUpdateCustomerSubscription: - value: - message: "Not Found" - error: "The server can not find the requested resource" - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - UpdateCustomerSubscription500Response: - value: - message: "Internal Server Error" + "200": + description: Successful response security: - - Bearer: [] - deprecated: false - # invoice - /invoice/create: - post: - servers: - - url: https://merchant.seerbitapi.com - description: SeerBit Merchant Server - tags: - - INVOICE - summary: Create And Send Invoice - description: "This endpoint is used to create an invoice for a customer." - operationId: CreateInvoice - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/CreateInvoiceRequest" - required: true - responses: - 201: - description: "Created" - content: - application/json: - schema: - $ref: "#/components/schemas/CreateInvoiceResponse" - 400: - description: Method Not Allowed - content: - application/json: - schema: - type: object - examples: - 400Response: - $ref: "#/components/examples/400Response" - 400Response1: - $ref: "#/components/examples/400Response1" - 400Response2: - $ref: "#/components/examples/400Response2" - - 404: - description: Not Found - content: - application/json: - schema: - type: object - examples: - 400Response1: - $ref: "#/components/examples/404Response1" - 400Response2: - $ref: "#/components/examples/404Response2" - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - 500Response: - $ref: "#/components/examples/500Response" - /invoice/{publicKey}/send/{invoiceNo}: + - BearerAuth: [] + "/invoice/{publicKey}/send/{InvoiceNo}": get: - servers: - - url: https://merchant.seerbitapi.com - description: SeerBit Merchant Server tags: - - INVOICE - summary: Resend An Invoice - description: "This endpoint is used to resend an invoice to a customer." - operationId: ResendInvoice + - INVOICING + summary: Re-send an Invoice + description: >- + Re-sends an existing invoice (identified by `InvoiceNo`) to its customer + by email — use this when the original invoice email didn't arrive or + needs to go out again, rather than creating a duplicate invoice with + Create Invoice. + + + **Path parameters** + + + | Param | Description | + + |---|---| + + | `publicKey` | Merchant public key | + + | `InvoiceNo` | The invoice's number, e.g. `SBT-INV-000054`, from Create Invoice's response | + + + Returns a `code`/`payload` confirmation; it doesn't return the invoice body again. + operationId: get_re-send-an-invoice_17 + servers: + - url: https://seerbitapi.com parameters: - name: publicKey in: path required: true - description: "This is the merchant public key." + description: Value of publicKey schema: type: string - - name: invoiceNo + - name: InvoiceNo in: path required: true - description: "This is the invoice number." + description: Value of InvoiceNo schema: type: string responses: - 200: - description: "Created" - content: - application/json: - schema: - $ref: "#/components/schemas/ResendInvoiceResponse" - - 400: - description: Method Not Allowed - content: - application/json: - schema: - type: object - examples: - 400Response: - $ref: "#/components/examples/400Response" - 400Response1: - $ref: "#/components/examples/400Response1" - 400Response2: - $ref: "#/components/examples/400Response2" - 404: - description: Not Found - content: - application/json: - schema: - type: object - examples: - 400Response1: - $ref: "#/components/examples/404Response1" - 400Response2: - $ref: "#/components/examples/404Response2" - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - 500Response: - $ref: "#/components/examples/500Response" + "200": + description: Successful response security: - - Bearer: [] - # get invoice by customer email - /invoice/{publicKey}/customer/{customerEmail}: + - BearerAuth: [] + "/invoice/{publicKey}/customer/{customerEmail}": get: - servers: - - url: https://merchant.seerbitapi.com - description: SeerBit Merchant Server tags: - - INVOICE - summary: Get Invoice By Customer Email - description: "Retrieve all invoices for a customer by their email address." - operationId: GetInvoiceByCustomerEmail + - INVOICING + summary: Get Invoice by Customer Email + description: >- + Looks up invoice(s) associated with a given customer email address — + useful when you know who the invoice was billed to but not its invoice + or order number. + + + **Path parameters** + + + | Param | Description | + + |---|---| + + | `publicKey` | Merchant public key | + + | `customerEmail` | The customer's email address the invoice was billed to | + + + Add a `customerEmail` collection variable with the address you're looking up, or replace the path segment directly. + operationId: get_get-invoice-by-customer-email_18 + servers: + - url: https://seerbitapi.com parameters: - name: publicKey in: path required: true - description: The merchant public key. + description: Value of publicKey schema: type: string - name: customerEmail in: path required: true - description: The customer's email address. + description: Value of customerEmail schema: type: string responses: - 200: - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/GetInvoiceByCustomerEmailResponse" - examples: - GetInvoiceByCustomerEmailResponse: - $ref: "#/components/examples/GetInvoiceByCustomerEmailResponse" - 400: - description: Method Not Allowed - content: - application/json: - schema: - type: object - examples: - 400Response: - $ref: "#/components/examples/400Response" - 400Response1: - $ref: "#/components/examples/400Response1" - 400Response2: - $ref: "#/components/examples/400Response2" - 404: - description: Not Found - content: - application/json: - schema: - type: object - examples: - 400Response1: - $ref: "#/components/examples/404Response1" - 400Response2: - $ref: "#/components/examples/404Response2" - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - 500Response: - $ref: "#/components/examples/500Response" - deprecated: false + "200": + description: Successful response security: - - Bearer: [] - - # get invoice by invoice number - /invoice/{publicKey}/{invoiceNo}: + - BearerAuth: [] + "/invoice/{publicKey}/{InvoiceNo}": get: - servers: - - url: https://merchant.seerbitapi.com - description: SeerBit Merchant Server tags: - - INVOICE - summary: Get Invoice By Invoice Number - description: "Retrieve an invoice by its invoice number." - operationId: GetInvoiceByInvoiceNumber + - INVOICING + summary: Get Invoice by Invoice Number + description: >- + Fetches a single invoice's full detail — including its line items + (`invoiceItems`) — by `InvoiceNo`. + + + **Path parameters** + + + | Param | Description | + + |---|---| + + | `publicKey` | Merchant public key | + + | `InvoiceNo` | The invoice's number, e.g. `SBT-INV-000054` | + + + Response includes `status` (e.g. `DRAFT`), `totalAmount`, `dueDate`, `currency`, and the itemized `invoiceItems` array — unlike **Get Invoice by orderNo**, which returns a summary without line items. + operationId: get_get-invoice-by-invoice-number_19 + servers: + - url: https://seerbitapi.com parameters: - name: publicKey in: path required: true - description: The merchant public key. + description: Value of publicKey schema: type: string - - name: invoiceNo + - name: InvoiceNo in: path required: true - description: The invoice number. + description: Value of InvoiceNo schema: type: string responses: - 200: - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/GetInvoiceByInvoiceNumberResponse" - examples: - GetInvoiceByInvoiceNumberResponse: - $ref: "#/components/examples/GetInvoiceByInvoiceNumberResponse" - 400: - description: Method Not Allowed - content: - application/json: - schema: - type: object - examples: - 400Response: - $ref: "#/components/examples/400Response" - 400Response1: - $ref: "#/components/examples/400Response1" - 400Response2: - $ref: "#/components/examples/400Response2" - 404: - description: Not Found - content: - application/json: - schema: - type: object - examples: - 400Response1: - $ref: "#/components/examples/404Response1" - 400Response2: - $ref: "#/components/examples/404Response2" - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - 500Response: - $ref: "#/components/examples/500Response" - deprecated: false + "200": + description: Successful response security: - - Bearer: [] - - # get invoice by orderNo - /invoice/{publicKey}/order/{orderNo}: + - BearerAuth: [] + "/invoice/{publicKey}/order/{orderNo}": get: - servers: - - url: https://merchant.seerbitapi.com - description: SeerBit Merchant Server tags: - - INVOICE - summary: Get Invoice By Order Number - description: "Retrieve an invoice by its order number." - operationId: GetInvoiceByOrderNumber + - INVOICING + summary: Get Invoice by Order Number + description: >- + Looks up an invoice by the `orderNo` you supplied when creating it via + Create Invoice — useful when your own system tracks orders and you don't + have SeerBit's `InvoiceNo` on hand. + + + **Path parameters** + + + | Param | Description | + + |---|---| + + | `publicKey` | Merchant public key | + + | `orderNo` | The order number you passed to Create Invoice | + + + Returns a summary (no itemized `invoiceItems` array) — use **Get Invoice by Invoice Number** with the `invoiceNo` from this response if you need line-item detail. + operationId: get_get-invoice-by-order-number_20 + servers: + - url: https://seerbitapi.com parameters: - name: publicKey in: path required: true - description: The merchant public key. + description: Value of publicKey schema: type: string - name: orderNo in: path required: true - description: The order number. + description: Value of orderNo schema: type: string responses: - 200: - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/GetInvoiceByOrderNumberResponse" - examples: - GetInvoiceByOrderNumberResponse: - $ref: "#/components/examples/GetInvoiceByOrderNumberResponse" - 400: - description: Method Not Allowed - content: - application/json: - schema: - type: object - examples: - 400Response: - $ref: "#/components/examples/400Response" - 400Response1: - $ref: "#/components/examples/400Response1" - 400Response2: - $ref: "#/components/examples/400Response2" - 404: - description: Not Found - content: - application/json: - schema: - type: object - examples: - 400Response1: - $ref: "#/components/examples/404Response1" - 400Response2: - $ref: "#/components/examples/404Response2" - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - 500Response: - $ref: "#/components/examples/500Response" - deprecated: false + "200": + description: Successful response security: - - Bearer: [] - # authenticate pocket - /pocket/authenticate: + - BearerAuth: [] + /api/v2/payments/create-token: post: - servers: - - url: https://pocket.seerbitapi.com - description: SeerBit Pocket Server tags: - - POCKET - summary: Authenticate Pocket - description: "This endpoint is used to authenticate a pocket using the provided key." - operationId: AuthenticatePocket + - TOKENIZATION + summary: Create Token + description: >- + Charges a card for the first time **and** saves it, returning card + details you can later exchange for an `authorizationCode` (via *Get Card + Authorization Code*) to charge the same card again without re-collecting + details. Requires the customer to complete 3DS/OTP authentication on + `redirectUrl`. + + + **Body fields** + + + | Field | Type | Required | Description | + + |---|---|---|---| + + | `publicKey` | string | Yes | Merchant public key | + + | `amount` | string | Yes | Charge amount — minimum is currency-dependent (e.g. NGN 50, GHS 1, KES 1, USD 0.50) | + + | `fullName` | string | Yes | Cardholder's name | + + | `mobileNumber` | string | Yes | Customer phone number | + + | `email` | string | Yes | Customer email | + + | `currency` | string | Yes | Transaction currency | + + | `country` | string | Yes | Country of the transaction | + + | `paymentType` | string | Yes | Must be `"CARD"` | + + | `cardNumber` | string | Yes | Full card number | + + | `expiryMonth` | string | Yes | Two-digit expiry month (`01`–`12`) | + + | `expiryYear` | string | Yes | Card expiry year | + + | `cvv` | string | Yes | Card security code | + + | `pin` | string | Yes | Card PIN (required by some card schemes/issuers) | + + | `redirectUrl` | string | Yes | Where the customer lands after completing 3DS/OTP authentication | + + | `paymentReference` | string | Yes | Unique reference you generate per transaction | + operationId: post_create-token_21 + servers: + - url: https://seerbitapi.com requestBody: required: true content: application/json: schema: - $ref: "#/components/schemas/PocketAuthRequest" + type: object examples: - PocketAuthRequest: + create-token: + summary: Create Token value: - email: your pocket email - password: your password + publicKey: "{{publicKey}}" + amount: "50" + fullName: Jane Smith + mobileNumber: "03447522256" + redirectUrl: http://example.com + currency: NGN + country: NG + paymentReference: 204g4de74a7ib0j18dg6bi521aiaejf4 + email: janesmith@seerbit.com + paymentType: CARD + cardNumber: "512348984984988883" + expiryMonth: "01" + expiryYear: "25" + cvv: "000" + pin: "2222" responses: - 200: - description: Authentication successful - content: - application/json: - schema: - $ref: "#/components/schemas/PocketAuthResponse" - examples: - PocketAuthResponse: - value: - responseCode: "00" - message: Success - data: - bearerToken: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.randomtoken" - expiryTime: "2025-07-07T20:12:28" - requirePasswordChange: true - 401: - description: Unauthorized - content: - application/json: - schema: - type: object - examples: - UnauthorizedPocketAuth: - value: - responseCode: "01" - message: Invalid credentials - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - PocketAuth500Response: - value: - responseCode: "96" - message: Internal Server Error - deprecated: false - # adding a sub-pocket - /pocket/pocket-id/{PocketID}/sub-pocket: - post: - servers: - - url: https://pocket.seerbitapi.com - description: SeerBit Pocket Server + "200": + description: Successful response + security: + - BearerAuth: [] + "/api/v3/payments/query/{paymentReference}#get-card-authorization-code": + get: tags: - - POCKET - summary: Add Sub-Pocket - description: "Create a sub-pocket under a parent pocket." - operationId: AddSubPocket + - TOKENIZATION + summary: Get Card Authorization Code + description: >- + Returns authorizationCode, customerId and maskedPan for a tokenized + transaction. Note this is v3, unlike the v2 Payment Query endpoint. + + + **Response fields to read** + + + | Field | Description | + + |---|---| + + | `authorizationCode` | Token to pass into *Charge Authorization Token* / *Bulk Charge Token* for future charges | + + | `customerId` | SeerBit's identifier for this customer, reusable across subscriptions | + + | `maskedPan` | Redacted card number for display, e.g. `5123-40xx-xxxx-0008` | + operationId: get_get-card-authorization-code_22 + servers: + - url: https://seerbitapi.com parameters: - - name: PocketID + - name: paymentReference in: path required: true - description: The parent pocket ID. - schema: - type: string - - name: public-key - in: header - required: true - description: The merchant public key. + description: Value of paymentReference schema: type: string - - name: Content-Type - in: header - required: true - schema: - type: string - default: application/json + responses: + "200": + description: Successful response + security: + - BearerAuth: [] + /api/v2/payments/charge-token: + post: + tags: + - TOKENIZATION + summary: Charge Authorization Token + description: >- + Charges a previously tokenized card using its `authorizationCode`, + without asking the customer for card details again. Use this for one-off + repeat charges; for scheduled recurring billing, use *Charge + Subscription* instead. + + + **Body fields** + + + | Field | Type | Required | Description | + + |---|---|---|---| + + | `publicKey` | string | Yes | Merchant public key | + + | `amount` | string | Yes | Amount to charge | + + | `paymentReference` | string | Yes | New, unique reference for this charge | + + | `authorizationCode` | string | Yes | From *Get Card Authorization Code* | + operationId: post_charge-authorization-token_23 + servers: + - url: https://seerbitapi.com requestBody: required: true content: application/json: schema: - type: array - items: - $ref: "#/components/schemas/AddSubPocketRequest" + type: object examples: - AddSubPocketRequest: + charge-authorization-token: + summary: Charge Authorization Token value: - - tagGroup: "" - reference: "Create_subpo77899ck987et45" - pocketFunction: "BOTH" - currency: "NGN" - tagName: "" - selfOwned: false - pocketOwner: - existingPocketOwner: "false" - pocketOwnerDetails: - firstName: "Bola" - lastName: "Are" - emailAddress: "youremail.com" - phoneNumber: "08824485749" - businessName: "samsn and sons" + publicKey: "{{publicKey}}" + amount: "5000.00" + paymentReference: charge_token_ref_001 + authorizationCode: "{{authorizationCode}}" responses: - 200: - description: Sub-pocket created successfully - content: - application/json: - schema: - $ref: "#/components/schemas/AddSubPocketResponse" - examples: - AddSubPocketResponse: - value: - responseCode: "00" - message: Success - data: - - pocketId: "SBP0018103" - parentId: 3771 - bankAccountNumber: "7750209735" - bankAccountName: "samsn and sons" - bankCode: "WEMA" - bankName: "Wema Bank" - canRetailPockets: false - subPocketUserResponse: - userName: "youremail.com" - password: "$2a$12$VCyQhEK0ULRoxuZXXEEzJ.N56.fE5tiY6u2fxm7KWzEAUnVVDMn5K" - 401: - description: Unauthorized - content: - application/json: - schema: - type: object - examples: - UnauthorizedPocket: - value: - responseCode: "01" - message: Invalid credentials - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - Pocket500Response: - value: - responseCode: "400" - message: Internal Server Error + "200": + description: Successful response security: - - Bearer: [] - deprecated: false - # get pocket details - /pocket/pocket-id/{PocketID}: - get: - servers: - - url: https://pocket.seerbitapi.com - description: SeerBit Pocket Server + - BearerAuth: [] + /api/v2/payments/bulk-tokenize-charge: + post: tags: - - POCKET - summary: Get Pocket Details - description: "Retrieve details of a pocket by its ID." - operationId: GetPocketDetails - parameters: - - name: PocketID - in: path - required: true - description: The pocket ID. - schema: - type: string - - name: public-key - in: header - required: true - description: The merchant public key. - schema: - type: string - responses: - 200: - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/GetPocketDetailsResponse" - examples: - GetPocketDetailsResponse: - value: - responseCode: "00" - message: "Success" - data: - pocketId: "SBP0016348" - accountNumber: "0010028394" - status: "ACTIVE" - pocketFunction: "BOTH" - availableBalanceAmount: "2873651.75" - availableBalanceCurrency: "NGN" - ledgerBalanceAmount: "2873651.75" - ledgerBalanceCurrency: "NGN" - parentId: null - fundingLink: "?ps=JJUGwRt5&po=SBP0016348" - accountVerifierScheme: "BVN" - accountVerifierNumber: "00000000000" - reference: "primary-zbscq5nj" - tier: "UNLIMITED" - subPockets: null - pocketOwner: - pocketOwnerId: "JJUGwRt5" - businessName: "Kings Cafe" - firstName: "Kings Cafe" - lastName: "Kings Cafe" - emailAddress: "tonyadeyeye1@gmail.com" - phoneNumber: "08033453733" - ownerVerifierScheme: "NIN" - ownerVerifierNumber: "00000000000" - pocketAccounts: - - accountId: "ag61lht8d5i0" - accountNumber: "4013383325" - bankCode: "9PSB" - bankName: "9 Payment Service Bank " - reference: "9gyw1pcbfvo74l3ns" - pocketFundings: null - pocketLimits: [] - pocketMomos: [] - 401: - description: Unauthorized - content: - application/json: - schema: - type: object - examples: - UnauthorizedPocket: - value: - responseCode: "01" - message: Invalid credentials - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - Pocket500Response: - value: - responseCode: "400" - message: Internal Server Error - security: - - Bearer: [] - deprecated: false - # get pocket balance - /pocket/balance/pocket-id/{PocketID}: - get: + - TOKENIZATION + summary: Bulk Charge Token + description: >- + Same as *Charge Authorization Token*, but accepts a JSON array so you + can charge many tokenized cards in one call. Each array entry needs its + own unique `paymentReference`. Returns a `batchId` — poll *Query Bulk + Charge* with it to see per-entry results, since a bulk call can + partially succeed. + + + **Body:** array of objects, each with the same fields as *Charge Authorization Token* (`publicKey`, `amount`, `paymentReference`, `authorizationCode`). + operationId: post_bulk-charge-token_24 servers: - - url: https://pocket.seerbitapi.com - description: SeerBit Pocket Server - tags: - - POCKET - summary: Get Pocket Balance - description: "Retrieve the balance of a pocket by its ID." - operationId: GetPocketBalance - parameters: - - name: PocketID - in: path - required: true - description: The pocket ID. - schema: - type: string - - name: public-key - in: header - required: true - description: The merchant public key. - schema: - type: string + - url: https://seerbitapi.com + requestBody: + required: true + content: + application/json: + schema: + type: object + examples: + bulk-charge-token: + summary: Bulk Charge Token + value: + - publicKey: "{{publicKey}}" + amount: "5000.00" + paymentReference: bulk_ref_001 + authorizationCode: "{{authorizationCode}}" + - publicKey: "{{publicKey}}" + amount: "2500.00" + paymentReference: bulk_ref_002 + authorizationCode: "{{authorizationCode}}" responses: - 200: - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/GetPocketBalanceResponse" - examples: - GetPocketBalanceResponse: - value: - responseCode: "00" - message: "Success" - data: - balanceAt: "2025-07-07T15:44:00" - availableBalanceCurrency: "NGN" - availableBalanceAmount: "2873651.75" - lastTransactionAt: "2025-07-07T08:49:23" - 401: - description: Unauthorized - content: - application/json: - schema: - type: object - examples: - UnauthorizedPocket: - value: - responseCode: "01" - message: Invalid credentials - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - Pocket500Response: - value: - responseCode: "400" - message: Internal Server Error + "200": + description: Successful response security: - - Bearer: [] - deprecated: false - # Get merchant sum - /pocket/balances-summation/pocket-id/{PocketID}: + - BearerAuth: [] + /api/v2/payments/bulk-tokenize-charge-search: get: - servers: - - url: https://pocket.seerbitapi.com - description: SeerBit Pocket Server tags: - - POCKET - summary: Get Merchant Sum - description: "Retrieve the sum of balances for a merchant's pockets." - operationId: GetMerchantSum + - TOKENIZATION + summary: Query Bulk Charge + description: Looks up the outcome of a *Bulk Charge Token* batch by `batchId`. + Returns paginated per-entry results (authorization codes, status codes, + card details, amounts) — check each entry's own status rather than + assuming the whole batch succeeded or failed together. + operationId: get_query-bulk-charge_25 + servers: + - url: https://seerbitapi.com parameters: - - name: PocketID - in: path - required: true - description: The pocket ID. - schema: - type: string - - name: public-key - in: header - required: true - description: The merchant public key. + - name: batchId + in: query + required: false + description: Query parameter batchId schema: type: string responses: - 200: - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/GetMerchantSumResponse" - examples: - GetMerchantSumResponse: - value: - responseCode: "00" - message: "Success" - data: - merchantSubPocketsBalanceSummation: "" - merchantSubPocketsBalanceSummationCurrency: "NGN" - merchantAllPocketsBalanceSummation: "631.75" - merchantAllPocketsBalanceSummationCurrency: "NGN" - 401: - description: Unauthorized - content: - application/json: - schema: - type: object - examples: - UnauthorizedPocket: - value: - responseCode: "01" - message: Invalid credentials - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - Pocket500Response: - value: - responseCode: "400" - message: Internal Server Error + "200": + description: Successful response security: - - Bearer: [] - deprecated: false - # Get Transaction details - /pocket/transaction/reference/{reference}: - get: - servers: - - url: https://pocket.seerbitapi.com - description: SeerBit Pocket Server + - BearerAuth: [] + /api/v1/recurrent/plan/create: + post: tags: - - POCKET - summary: Get Transaction Details - description: "Retrieve details of a pocket transaction by its reference." - operationId: GetPocketTransactionDetails - parameters: - - name: reference - in: path - required: true - description: The transaction reference. - schema: - type: string - - name: public-key - in: header - required: true - description: The merchant public key. - schema: - type: string - responses: - 200: - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/GetPocketTransactionDetailsResponse" - examples: - GetPocketTransactionDetailsResponse: - value: - responseCode: "00" - message: "Success" - data: - reference: "Charge-000015250618102028000001302219-pr6ndt" - pocketId: "SBP0016348" - transactionLeg: "DEBIT" - transactionAmount: "0.00" - transactionCurrency: "NGN" - narration: "Reason:Fee:Debited:SBP0016348:Amount:NGN0.00" - description: "Fee - Funding by account - Primary pockets" - createdAt: "2025-06-18T09:21:07" - createdBy: "pockets@seerbit.com" - transactionId: "n1a0sl6q29d5" - transactionType: "FEE" - batchId: null - status: "00" - message: "Success" - receiverName: "Office" - receiverAccountNumber: "0010010001" - receiverBankCode: "SEERBIT" - receiverBankName: null - sender: "Kings Cafe" - 401: - description: Unauthorized - content: - application/json: - schema: - type: object - examples: - UnauthorizedPocket: - value: - responseCode: "01" - message: Invalid credentials - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - Pocket500Response: - value: - responseCode: "400" - message: Internal Server Error - security: - - Bearer: [] - deprecated: false - # Find transactions - /pocket/transaction/search?pocketId={pocketId}&page={page}&size={size}: - get: - servers: - - url: https://pocket.seerbitapi.com - description: SeerBit Pocket Server - tags: - - POCKET - summary: Find Transactions - description: "Search for pocket transactions with pagination." - operationId: FindPocketTransactions - parameters: - - name: pocketId - in: query - required: true - description: The pocket ID. - schema: - type: string - - name: page - in: query - required: true - description: Page number (zero-based). - schema: - type: integer - default: 0 - - name: size - in: query - required: true - description: Number of records per page. - schema: - type: integer - default: 10 - - name: public-key - in: header - required: true - description: The merchant public key. - schema: - type: string - - name: Content-Type - in: header - required: true - schema: - type: string - default: application/json - responses: - 200: - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/FindPocketTransactionsResponse" - examples: - FindPocketTransactionsResponse: - value: - responseCode: "00" - message: "Success" - data: - content: - - createdAt: "2025-07-07T15:58:10" - reference: "Charge-F00016450103-x7heaw" - pocketId: "SBP0016348" - transactionLeg: "DEBIT" - transactionCurrency: "NGN" - availableBalanceCurrency: "NGN" - ledgerBalanceCurrency: "NGN" - narration: "Reason:Fee:Debited:SBP0016348:Amount:NGN20.00" - transactionId: "hvizyx70bdge" - description: "Fee - Pocket to gl transfer - Primary pockets" - tagGroup: "GENERIC" - tagName: "ALL-PURPOSE" - pocketTier: "UNLIMITED" - receiverName: "Office" - receiverAccountNumber: "0010010001" - receiverBankCode: "SEERBIT" - transactionType: "FEE" - publicKey: "JJUGwRt5" - status: "00" - message: "Success" - batchId: null - transactionSource: "Fee: Pocket-to-Bank" - transactionOrigin: null - linkingReference: null - transactionAmount: "20.00" - availableBalanceAmount: "2873631.75" - ledgerBalanceAmount: "2873631.75" - accountNumber: "4013383325" - - createdAt: "2025-07-07T08:49:18" - reference: "000015250707094843000001100434-C" - pocketId: "SBP0016348" - transactionLeg: "CREDIT" - transactionCurrency: "NGN" - availableBalanceCurrency: "NGN" - ledgerBalanceCurrency: "NGN" - narration: "Reason:Funding:Debited:SBP0000001:Amount:NGN157213.94" - transactionId: "1pg25outak4x" - description: "63C2O6XI8K7PMEV KINGS CAFE LTD" - tagGroup: "GENERIC" - tagName: "ALL-PURPOSE" - pocketTier: "UNLIMITED" - receiverName: "Kings Cafe" - receiverAccountNumber: "0010028394" - receiverBankCode: "SEERBIT" - transactionType: "FUNDING" - publicKey: "Office" - status: "00" - message: "Success" - batchId: null - transactionSource: "Bank-To-Pocket" - transactionOrigin: null - linkingReference: "9PSB241126145618012260602" - transactionAmount: "157213.94" - availableBalanceAmount: "1338300.85" - ledgerBalanceAmount: "1338300.85" - accountNumber: "4013383325" - pageable: - sort: - empty: false - sorted: true - unsorted: false - offset: 0 - pageSize: 10 - pageNumber: 0 - unpaged: false - paged: true - totalElements: 590 - totalPages: 59 - last: false - size: 10 - number: 0 - sort: - empty: false - sorted: true - unsorted: false - numberOfElements: 10 - first: true - empty: false - 401: - description: Unauthorized - content: - application/json: - schema: - type: object - examples: - UnauthorizedPocket: - value: - responseCode: "01" - message: Invalid credentials - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - Pocket500Response: - value: - responseCode: "400" - message: Internal Server Error - security: - - Bearer: [] - deprecated: false - # Pocket to Pocket Transfer - /pocket/transfer/from-pocket/{fromPocketID}/to-pocket/{toPocketID}: - post: - servers: - - url: https://pocket.seerbitapi.com - description: SeerBit Pocket Server - tags: - - POCKET - summary: Pocket to Pocket Transfer - description: "Transfer funds from one pocket to another." - operationId: PocketToPocketTransfer - parameters: - - name: fromPocketID - in: path - required: true - description: The source pocket ID. - schema: - type: string - - name: toPocketID - in: path - required: true - description: The destination pocket ID. - schema: - type: string - - name: public-key - in: header - required: true - description: The merchant public key. - schema: - type: string - - name: Content-Type - in: header - required: true + - RECURRING & SUBSCRIPTIONS + summary: Create Plan + description: >- + Defines a recurring billing plan (amount + cadence + how many cycles to + run). Once created, subscribe a tokenized card to it and SeerBit charges + automatically on schedule. Host is `merchants.seerbitapi.com` (plural) — + a documented inconsistency vs. the `merchant.seerbitapi.com` (singular) + invoicing host, easy to mistype. - schema: - type: string - default: application/json - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/PocketToPocketTransferRequest" - examples: - PocketToPocketTransferRequest: - value: - amount: 100 - currency: "NGN" - reference: "00112827" - description: "Transfer from one pocket to another" - responses: - 200: - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/PocketToPocketTransferResponse" - examples: - PocketToPocketTransferResponse: - value: - responseCode: "00" - message: "Successful" - data: {} - 401: - description: Unauthorized - content: - application/json: - schema: - type: object - examples: - UnauthorizedPocket: - value: - responseCode: "01" - message: Invalid credentials - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - Pocket500Response: - value: - responseCode: "400" - message: Internal Server Error - security: - - Bearer: [] - deprecated: false - # start of payout + **Body fields** - # generate OTP - /pocket/getOtp: - post: - servers: - - url: https://pocket.seerbitapi.com - description: SeerBit Pocket Server - tags: - - PAYOUT - summary: Generate OTP - description: "Generate an OTP for a pocket action. The OTP provided in the *otp* field should be passed as the *passKey* in the generatesignature and payout request." - operationId: GeneratePocketOtp - parameters: - - name: public-key - in: header - required: true - description: The merchant public key. - schema: - type: string - - name: Content-Type - in: header - required: true - schema: - type: string - default: application/json - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/GeneratePocketOtpRequest" - examples: - GeneratePocketOtpRequest: - value: - actionItem: "APPROVE_DISBURSEMENT" - pocketId: "your_pocket_id_here" - responses: - 200: - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/GeneratePocketOtpResponse" - examples: - GeneratePocketOtpResponse: - value: - responseCode: "00" - message: "Success" - data: - otp: "028087" - category: "APPROVE_DISBURSEMENT" - expires: "2025-02-25T19:20:12.649104071" - 401: - description: Unauthorized - content: - application/json: - schema: - type: object - examples: - UnauthorizedPocket: - value: - responseCode: "01" - message: Invalid credentials - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - Pocket500Response: - value: - responseCode: "400" - message: Internal Server Error - security: - - Bearer: [] - deprecated: false - # generate signature - /pocket/payout/get-signature: - post: + | Field | Type | Required | Description | + + |---|---|---|---| + + | `productId` | string | Yes | Plan name/identifier | + + | `productDescription` | string | Yes | Description of the plan | + + | `amount` | string | Yes | Amount charged per cycle | + + | `billingCycle` | string | Yes | `HOURLY`, `DAILY`, `WEEKLY`, `MONTHLY`, or `ANNUALLY` | + + | `limit` | integer | Yes | Maximum number of billing cycles before the plan stops | + + | `publicKey` | string | Yes | Merchant public key | + + | `country` | string | Yes | Country code, e.g. `NG` | + + | `currency` | string | Yes | Currency code, e.g. `NGN` | + + | `allowPartialDebit` | boolean | Yes | Whether to charge whatever's available if the customer has insufficient funds for the full amount | + + + Response includes `planId`, `payUrl`, and `status: "ACTIVE"` — save `planId` for future reference. + operationId: post_create-plan_26 servers: - - url: https://pocket.seerbitapi.com - description: SeerBit Pocket Server - tags: - - PAYOUT - summary: Generate Signature - description: "Generate a signature for a payout action. Instead of manually creating a signature, use the *Get Signature* endpoint." - operationId: GeneratePocketSignature - parameters: - - name: Content-Type - in: header - required: true - schema: - type: string - default: application/json + - url: https://merchants.seerbitapi.com requestBody: required: true content: application/json: schema: - $ref: "#/components/schemas/GeneratePocketSignatureRequest" + type: object examples: - GeneratePocketSignatureRequest: + create-plan: + summary: Create Plan value: - reference: "REF123456" - amount: "10" - currency: "NGN" - description: "test" - accountNumber: "1234567890" - bankCode: "000013" - actionType: "APPROVE_DISBURSEMENT" - passKey: "028087" + productId: product222 + productDescription: + amount: "100" + billingCycle: HOURLY + limit: 5 + publicKey: "{{publicKey}}" + country: NG + currency: NGN + allowPartialDebit: false responses: - 200: - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/GeneratePocketSignatureResponse" - examples: - GeneratePocketSignatureResponse: - value: - responseCode: "00" - message: "Success" - data: "{signature}" - 401: - description: Unauthorized - content: - application/json: - schema: - type: object - examples: - UnauthorizedPocket: - value: - responseCode: "01" - message: Invalid credentials - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - Pocket500Response: - value: - responseCode: "400" - message: Internal Server Error + "200": + description: Successful response security: - - Bearer: [] - deprecated: false - # Initiate Payout - /pocket/payout/encrypted/pocket-id/{{pocketID}}: - post: - servers: - - url: https://pocket.seerbitapi.com - description: SeerBit Pocket Server + - BearerAuth: [] + "/api/v2/recurring/publicKey/{publicKey}": + get: tags: - - PAYOUT - summary: Initiate Payout - description: "Use the *Initiate Payout* endpoint, passing the generated signature in the request body." - operationId: InitiatePocketPayout + - RECURRING & SUBSCRIPTIONS + summary: Get Merchant Subscriptions + description: Lists every subscription under this `publicKey`, with `amount`, + `customerId`, `cardName`, `cardNumber` (masked), `plan`, `status`, + `billingId`, `authorizationCode`, `startDate`, and `createdAt` per + entry. + operationId: get_get-merchant-subscriptions_27 + servers: + - url: https://seerbitapi.com parameters: - - name: pocketId + - name: publicKey in: path required: true - description: The pocket ID. - schema: - type: string - - name: public-key - in: header - required: true - description: The merchant public key. - schema: - type: string - - name: Content-Type - in: header - required: true + description: Value of publicKey schema: type: string - default: application/json - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/InitiatePocketPayoutRequest" - examples: - InitiatePocketPayoutRequest: - value: - reference: "JIN-12345678901101" - amount: "10" - currency: "NGN" - description: "test" - accountNumber: "1234567890" - bankCode: "000013" - passKey: "028087" - actionType: "APPROVE_DISBURSEMENT" - signature: "signature-value" responses: - 200: - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/InitiatePocketPayoutResponse" - examples: - InitiatePocketPayoutResponse: - value: - responseCode: "00" - message: "Successful" - data: - reference: "JIN-12345678901101" - linkingreference: "F00230472990" - 401: - description: Unauthorized - content: - application/json: - schema: - type: object - examples: - UnauthorizedPocket: - value: - responseCode: "01" - message: Invalid credentials - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - Pocket500Response: - value: - responseCode: "400" - message: Internal Server Error + "200": + description: Successful response security: - - Bearer: [] - deprecated: false - # end of payout - - # start of VA - # Create a VA - /virtual-accounts: + - BearerAuth: [] + /api/v2/recurring/charge: post: tags: - - VIRTUAL ACCOUNT - summary: Create Virtual Account - description: "The Virtual Account API allows you to create reserve accounts for your customers to make payments." - operationId: CreateVirtualAccount + - RECURRING & SUBSCRIPTIONS + summary: Charge Subscription + description: >- + Manually triggers a charge against an existing subscription's tokenized + card, outside the automatic billing schedule (e.g. to bill immediately + rather than wait for the next cycle). + + + **Body fields** + + + | Field | Type | Required | Description | + + |---|---|---|---| + + | `amount` | string | Yes | Amount to charge | + + | `publicKey` | string | Yes | Merchant public key | + + | `email` | string | Yes | Customer email | + + | `authorizationCode` | string | Yes | From the customer's completed subscription | + + | `paymentReference` | string | Yes | New, unique reference for this charge | + + | `currency` | string | Yes | Currency code | + + | `allowPartialDebit` | string | No | Whether to allow a partial charge on insufficient funds | + operationId: post_charge-subscription_28 servers: - - url: https://seerbitapi.com/api/v2 - description: SeerBit API Server - parameters: - - name: Content-Type - in: header - required: true - schema: - type: string - default: application/json + - url: https://seerbitapi.com requestBody: required: true content: application/json: schema: - $ref: "#/components/schemas/CreateVirtualAccountRequest" + type: object examples: - CreateVirtualAccountRequest: + charge-subscription: + summary: Charge Subscription value: - publicKey: "YOUR_PUBLIC_KEY" - fullName: "Jane Smith" - bankVerificationNumber: "" - currency: "NGN" - country: "NG" - reference: "FIRST_VIRTUAl_17" - email: "js@emaildomain.com" - responses: - 200: - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/CreateVirtualAccountResponse" - examples: - CreateVirtualAccountResponse: - value: - status: "SUCCESS" - data: - code: "S20" - payments: - reference: "FIRST_VIRTUAl_7" - walletName: "SEERBIT(Business Name)" - bankName: "9PAYMENT SERVICE BANK" - accountNumber: "Account Number" - message: "Account created " - 401: - description: Unauthorized - content: - application/json: - schema: - type: object - examples: - UnauthorizedAccount: - value: - status: "ERROR" - message: "Invalid credentials" - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - Account500Response: - value: - status: "ERROR" - message: "Internal Server Error" - security: - - Bearer: [] - deprecated: false - - # Get VA - /virtual-accounts/{paymentReference}: - get: - tags: - - VIRTUAL ACCOUNT - summary: Get Virtual Account - description: "Retrieve details of a virtual account by its payment reference." - operationId: GetVirtualAccount - servers: - - url: https://seerbitapi.com/api/v2 - description: SeerBit API Server - parameters: - - name: paymentReference - in: path - required: true - description: The virtual account payment reference. - schema: - type: string - responses: - 200: - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/GetVirtualAccountResponse" - examples: - GetVirtualAccountResponse: - value: - status: "SUCCESS" - data: - code: "00" - payments: - reference: "VA_1" - linkingReference: "9PSB641860391656618499020" - walletName: "SEERBIT(Business Name)" - wallet: "Account Number" - bankName: "_9PAYMENT_SERVICE_BANK" - accountNumber: "Account Number" - message: "" - 401: - description: Unauthorized - content: - application/json: - schema: - type: object - examples: - UnauthorizedAccount: - value: - status: "ERROR" - message: "Invalid credentials" - 404: - description: Not Found - content: - application/json: - schema: - type: object - examples: - NotFoundAccount: - value: - status: "ERROR" - message: "Virtual account not found" - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - Account500Response: - value: - status: "ERROR" - message: "Internal Server Error" - security: - - Bearer: [] - deprecated: false - - # Delete VA - /virtual-accounts/{reference}: - delete: - tags: - - VIRTUAL ACCOUNT - summary: Delete a Virtual Account - description: "Delete a virtual account by its reference." - operationId: DeleteVirtualAccount - servers: - - url: https://seerbitapi.com/api/v2 - description: SeerBit API Server - parameters: - - name: reference - in: path - required: true - description: The virtual account reference. - schema: - type: string + amount: "100" + publicKey: "{{publicKey}}" + email: customer@example.com + authorizationCode: "{{authorizationCode}}" + paymentReference: sub_charge_ref_001 + currency: NGN + allowPartialDebit: false responses: - 200: - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/DeleteVirtualAccountResponse" - examples: - DeleteVirtualAccountResponse: - value: - status: "SUCCESS" - data: - code: "00" - message: "Virtual account has been deleted" - 401: - description: Unauthorized - content: - application/json: - schema: - type: object - examples: - UnauthorizedAccount: - value: - status: "ERROR" - message: "Invalid credentials" - 404: - description: Not Found - content: - application/json: - schema: - type: object - examples: - NotFoundAccount: - value: - status: "ERROR" - message: "Virtual account not found" - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - Account500Response: - value: - status: "ERROR" - message: "Internal Server Error" + "200": + description: Successful response security: - - Bearer: [] - deprecated: false - - # Get A Payment - /virtual-accounts/{publicKey}/{accountNumber}: + - BearerAuth: [] + "/api/v2/recurring/{publicKey}/customerId/{customerId}": get: tags: - - VIRTUAL ACCOUNT - summary: Get Payment - description: "Retrieve payment details for a virtual account using the public key and account number." - operationId: GetVirtualAccountPayment + - RECURRING & SUBSCRIPTIONS + summary: Get Customer Subscription + description: Lists the subscriptions belonging to one customer (`customerId`) + under this `publicKey` — a customer can have more than one active plan. + operationId: get_get-customer-subscription_29 servers: - - url: https://seerbitapi.com/api/v2 - description: SeerBit API Server + - url: https://seerbitapi.com parameters: - name: publicKey in: path required: true - description: The merchant public key. + description: Value of publicKey schema: type: string - - name: accountNumber + - name: customerId in: path required: true - description: The customer's account number. + description: Value of customerId schema: type: string responses: - 200: - description: Ok - content: - application/json: - schema: - $ref: "#/components/schemas/GetVirtualAccountPaymentResponse" - examples: - GetVirtualAccountPaymentResponse: - value: - status: "SUCCESS" - data: - code: "00" - payload: - - id: 14705414 - fullName: "Customer Name" - publicKey: "YOUR_PUBLIC_KEY" - processor: "_9PAYMENT_SERVICE_BANK" - paymentType: "TRANSFER" - amount: 100.0 - email: "customeremail@gmail.com" - gateway: "_9PAYMENT_SERVICE_BANK" - gatewayMessage: "Successful" - gatewayCode: "00" - transactionRef: "GT-01" - gatewayRef: "100004230627104826104793084015" - businessName: "Business Name" - mode: "LIVE" - channelType: "transfer" - country: "NG" - currency: "NGN" - internalreference: "_SBT_N7N7EU523C" - accountNumber: "customer account number" - creditAccountName: "Seerbit(Tola Sambo)" - transferType: "RESERVE_ACCOUNT" - paymentReference: "GT-01_SBT_N7N7EU523C" - creditAccountNumber: "4015310501" - settlementCode: "00" - settlementMessage: "Push Successful" - settlementTime: "2023-06-27 11:49:37" - status: "PUSHED" - mobileNumber: "404" - transferedAmount: 100.0 - isCardInternational: "LOCAL" - reason: "Successful" - retry: false - createdAt: "2023-06-27T10:49:28.000+0000" - updatedAt: "2023-06-27T10:49:28.000+0000" - processorCode: "00" - processorMessage: "Successful" - message: "successful" - 401: - description: Unauthorized - content: - application/json: - schema: - type: object - examples: - UnauthorizedAccount: - value: - status: "ERROR" - message: "Invalid credentials" - 404: - description: Not Found - content: - application/json: - schema: - type: object - examples: - NotFoundAccount: - value: - status: "ERROR" - message: "Payment not found" - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - Account500Response: - value: - status: "ERROR" - message: "Internal Server Error" + "200": + description: Successful response security: - - Bearer: [] - deprecated: false + - BearerAuth: [] + /api/v2/recurring/updates: + put: + tags: + - RECURRING & SUBSCRIPTIONS + summary: Update Customer Subscription + description: >- + Changes an existing subscription's status or terms, identified by + `billingId`. + + + **Body fields** + + + | Field | Type | Required | Description | - # end of VA + |---|---|---|---| - #start of Payment Link + | `billingId` | string | Yes | Identifies the subscription being updated | - # create payment link + | `publicKey` | string | Yes | Merchant public key | + + | `currency` | string | Yes | Currency code | + + | `country` | string | Yes | Country code | + + | `amount` | string | No | New charge amount | + + | `status` | string | No | `ACTIVE` or `INACTIVE` — set to `INACTIVE` to cancel future billing | + + | `mobileNumber` | string | No | Update the customer's phone number on file | + operationId: put_update-customer-subscription_30 + servers: + - url: https://seerbitapi.com + requestBody: + required: true + content: + application/json: + schema: + type: object + examples: + update-customer-subscription: + summary: Update Customer Subscription + value: + billingId: "{{billingId}}" + publicKey: "{{publicKey}}" + status: ACTIVE + amount: "100" + currency: NGN + country: NG + responses: + "200": + description: Successful response + security: + - BearerAuth: [] /paymentlink/v2/payLinks/api: post: tags: - - PAYMENT LINK + - PAYMENT LINKS summary: Create Payment Link - description: "Create a new payment link for collecting payments." - operationId: CreatePaymentLink + description: >- + Creates a hosted, shareable payment URL — send it directly to a customer + instead of building a checkout flow. Supports one-time links and + recurring links. + + + **Body fields** + + + | Field | Type | Required | Description | + + |---|---|---|---| + + | `status` | string | Yes | `ACTIVE` or `INACTIVE` | + + | `paymentLinkName` | string | Yes | Internal name for the link | + + | `description` | string | Yes | Shown to the customer on the payment page | + + | `currency` | string | Yes | Currency code, e.g. `NGN` | + + | `publicKey` | string | Yes | Merchant public key | + + | `paymentFrequency` | string | Yes | `ONE_TIME` or `RECURRENT` | + + | `requiredFields` | object | Yes | Which customer fields the payer must fill in: `address`, `amount`, `customerName`, `mobileNumber`, `invoiceNumber` (each boolean) | + + | `email` | string | No | Notification email | + + | `successMessage` | string | No | Shown after a successful payment | + + | `customizationName` | string | No | Branding/customization preset | + + | `additionalData` | string | No | Free-text metadata attached to the link | + + | `linkExpirable` | boolean | No | Whether the link expires | + + | `expiryDate` | string | No | Expiry date, required if `linkExpirable` is true | + + | `oneTime` | boolean | No | Whether the link is invalidated after first use | + + + Response returns `paymentLinkUrl` and `paymentLinkId` — save the latter, it's needed to update or delete the link later. + operationId: post_create-payment-link_31 servers: - - url: https://paymentlink.seerbitapi.com - description: SeerBit Payment Link Server - parameters: - - name: Content-Type - in: header - required: true - schema: - type: string - default: application/json + - url: https://seerbitapi.com requestBody: required: true content: application/json: schema: - $ref: "#/components/schemas/CreatePaymentLinkRequest" + type: object examples: - CreatePaymentLinkRequest: + create-payment-link: + summary: Create Payment Link value: - status: "ACTIVE" - paymentLinkName: "Donations" - description: "Give out donations" - currency: "NGN" - successMessage: "Thank you for your payment" - publicKey: "YOUR_PUBLIC_KEY" - customizationName: "testing1" - paymentFrequency: "ONE_TIME" + status: ACTIVE + paymentLinkName: testing out + description: Give out donations + currency: NGN + successMessage: Thank you for your payment + publicKey: "{{publicKey}}" + customizationName: dot dty it + paymentFrequency: ONE_TIME paymentReference: "" - email: "js@emaildomain.com" + email: js@emaildomain.com requiredFields: address: true amount: true @@ -3866,100 +1662,51 @@ paths: expiryDate: "" oneTime: false responses: - 200: - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/CreatePaymentLinkResponse" - examples: - CreatePaymentLinkResponse: - value: - data: - paymentLinks: - publicKey: "SBPUBK_******************PHI" - status: "ACTIVE" - additionalData: "custom1:null||custom2:null||custom3:null" - paymentLinkName: "Donationas" - description: "Donation" - successMessage: "Payment made successfully!" - paymentLinkId: "000000000" - currency: "NGN" - paymentReference: "" - paymentFrequency: "RECURRENT" - paymentLinkUrl: "https://pay.seerbitapi.com/paymentLinkId" - customizationName: "utbesti22" - environment: "LIVE" - requiredFields: - address: true - amount: true - customerName: true - mobileNumber: true - invoiceNumber: false - expiryDuration: 0 - linkExpirable: false - createdAt: "2021-09-21T10:49:17.728" - updatedAt: "2021-09-21T10:49:17.728" - oneTime: false - splitPayment: false - 401: - description: Unauthorized - content: - application/json: - schema: - type: object - examples: - UnauthorizedPaymentLink: - value: - message: "Invalid credentials" - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - PaymentLink500Response: - value: - message: "Internal Server Error" + "200": + description: Successful response security: - - Bearer: [] - deprecated: false - # Update Payment Link + - BearerAuth: [] put: tags: - - PAYMENT LINK + - PAYMENT LINKS summary: Update Payment Link - description: "Update an existing payment link." - operationId: UpdatePaymentLink + description: >- + Updates an existing payment link's configuration. Source: + doc.seerbit.com/online-payment/payment-features/payment-links. + + + **Body fields** + + + | Field | Type | Required | Description | + + |---|---|---|---| + + | `paymentLinkId` | string | Yes | From *Create Payment Link*'s response, or *Get Merchant Payment Links* | + + | `status`, `description`, `successMessage`, `customizationName`, `paymentFrequency`, `requiredFields`, `linkExpirable`, `expiryDate`, `oneTime` | — | No | Any subset of these can be updated; omit fields you don't want to change | + operationId: put_update-payment-link_33 servers: - - url: https://paymentlink.seerbitapi.com - description: SeerBit Payment Link Server - parameters: - - name: Content-Type - in: header - required: true - schema: - type: string - default: application/json + - url: https://seerbitapi.com requestBody: required: true content: application/json: schema: - $ref: "#/components/schemas/UpdatePaymentLinkRequest" + type: object examples: - UpdatePaymentLinkRequest: + update-payment-link: + summary: Update Payment Link value: - paymentLinkId: "0000000" - status: "INACTIVE" - description: "Test paymentLink" - successMessage: "Payment made successfully!" - businessName: "My Business" - publicKey: "publickKey" - customizationName: "my_link_3" - paymentFrequency: "RECURRENT" - email: "customer@seerbit.com" + paymentLinkId: "77287988" + status: INACTIVE + description: Test paymentLink + successMessage: Payment made successfully! + businessName: My Business + publicKey: "{{publicKey}}" + customizationName: my_link_4 + paymentFrequency: RECURRENT + email: customer@seerbit.com requiredFields: address: true amount: true @@ -3970,4342 +1717,1379 @@ paths: expiryDate: "" oneTime: false responses: - 200: - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/UpdatePaymentLinkResponse" - examples: - UpdatePaymentLinkResponse: - value: - data: - paymentLinks: - publicKey: "PublicKey" - status: "INACTIVE" - description: "Test paymentLink" - successMessage: "Payment made successfully!" - paymentLinkId: "0000000" - paymentFrequency: "RECURRENT" - paymentLinkUrl: "null/my_link_3" - customizationName: "my_link_3" - environment: "LIVE" - requiredFields: - address: true - amount: true - customerName: true - mobileNumber: true - invoiceNumber: false - expiryDuration: 0 - linkExpirable: false - updatedAt: "2021-09-21T11:12:57.404" - oneTime: false - splitPayment: false - 401: - description: Unauthorized - content: - application/json: - schema: - type: object - examples: - UnauthorizedPaymentLink: - value: - message: "Invalid credentials" - 404: - description: Not Found - content: - application/json: - schema: - type: object - examples: - NotFoundPaymentLink: - value: - message: "Payment link not found" - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - PaymentLink500Response: - value: - message: "Internal Server Error" + "200": + description: Successful response security: - - Bearer: [] - deprecated: false - - # Get Payment Link - /paymentlink/v2/payLinks/api/{publicKey}: + - BearerAuth: [] + "/paymentlink/v2/payLinks/api/{publicKey}": get: tags: - - PAYMENT LINK + - PAYMENT LINKS summary: Get Merchant Payment Links - description: "Retrieve all payment links for a merchant by their public key." - operationId: GetMerchantPaymentLinks + description: Lists every payment link created under this `publicKey`, with their + current status, configuration, and timestamps. Use this to find a + `paymentLinkId` if you didn't save it when creating the link. + operationId: get_get-merchant-payment-links_32 servers: - - url: https://paymentlink.seerbitapi.com - description: SeerBit Payment Link Server + - url: https://seerbitapi.com parameters: - name: publicKey in: path required: true - description: The merchant public key. + description: Value of publicKey schema: type: string responses: - 200: - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/GetMerchantPaymentLinksResponse" - examples: - GetMerchantPaymentLinksResponse: - value: - currentPage: 0 - responseCode: "00" - payload: - - businessId: "00000051" - publicKey: "publickey" - status: "ACTIVE" - amount: 10000.00 - customisationName: "SeerBitPay" - additionalData: "" - paymentLinkName: "SeerBit Payment Link" - description: "Buy Items" - paymentLinkId: "00000000" - paymentFrequency: "ONE_TIME" - paymentLinkUrl: "https://pay.seerbitapi.com/paymentLinkID" - pocketReference: "" - environment: "LIVE" - requiredFields: - address: true - amount: false - customerName: true - mobileNumber: false - invoiceNumber: false - expiryDuration: 0 - linkExpirable: false - customTime: "" - createdAt: "2021-07-17T12:05:55" - updatedAt: "2021-07-17T12:05:55" - oneTime: false - splitPayment: false - responseMessage: "successful" - 401: - description: Unauthorized - content: - application/json: - schema: - type: object - examples: - UnauthorizedPaymentLink: - value: - message: "Invalid credentials" - 404: - description: Not Found - content: - application/json: - schema: - type: object - examples: - NotFoundPaymentLink: - value: - message: "No payment links found" - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - PaymentLink500Response: - value: - message: "Internal Server Error" + "200": + description: Successful response security: - - Bearer: [] - deprecated: false - # Delete Payment Link - /paymentlink/v2/payLinks/api/deleteLink/{paymentLinkId}: + - BearerAuth: [] + "/paymentlink/v2/payLinks/api/deleteLink/{paymentLinkId}": delete: tags: - - PAYMENT LINK + - PAYMENT LINKS summary: Delete Payment Link - description: "Delete a payment link by its paymentLinkId." - operationId: DeletePaymentLink + description: "Permanently deactivates a payment link. Source: + doc.seerbit.com/online-payment/payment-features/payment-links, which + documents this as DELETE (the original collection request used GET — + fixed)." + operationId: delete_delete-payment-link_34 servers: - - url: https://paymentlink.seerbitapi.com - description: SeerBit Payment Link Server + - url: https://seerbitapi.com parameters: - name: paymentLinkId in: path required: true - description: The payment link ID to delete. + description: Value of paymentLinkId schema: type: string responses: - 200: - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/DeletePaymentLinkResponse" - examples: - DeletePaymentLinkResponse: - value: - status: "Deleted" - 401: - description: Unauthorized - content: - application/json: - schema: - type: object - examples: - UnauthorizedPaymentLink: - value: - message: "Invalid credentials" - 404: - description: Not Found - content: - application/json: - schema: - type: object - examples: - NotFoundPaymentLink: - value: - message: "Payment link not found" - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - PaymentLink500Response: - value: - message: "Internal Server Error" + "200": + description: Successful response security: - - Bearer: [] - deprecated: false - - # end of Payment Link - - # start of card tokenisation - /payments/create-token: + - BearerAuth: [] + /pocket/authenticate: post: tags: - - CARD TOKENISATION - summary: Create Card Token - description: "Create a card token for future payments." - operationId: CreateCardToken + - POCKET + summary: Authenticate + description: >- + Logs in to a Pocket (SeerBit's wallet product) and returns a Bearer + token scoped to Pocket and Payout endpoints — **not** the same token as + `{{BearerToken}}` (the OAuth token from *Get Access Token* in the + Authentication folder, used everywhere else in this collection). Pocket + is a **separate feature from Payout**: the doc site describes Pocket as + sending funds between pockets, sub-pockets, or out to banks (that last + case *is* a payout), while the Payout folder above covers the signed, + OTP-gated bank-payout flow specifically — both folders share this same + login and the same token. + + + **Body fields** + + + | Field | Type | Required | Description | + + |---|---|---|---| + + | `email` | string | Yes | Pocket account email | + + | `password` | string | Yes | Your **Pocket password** — not your SeerBit merchant dashboard password. This is the password for your Pocket account at flow.seerbitapi.com. | + + + Response includes `bearerToken`, `expiryTime`, and `requirePasswordChange` — check the last one and call *Change Password* if true. Save `bearerToken` as `{{pocketAuthToken}}` — the variable used on Pocket and Payout requests that require this login, kept distinct from `{{BearerToken}}` on purpose. + operationId: post_authenticate_35 servers: - - url: https://seerbitapi.com/api/v2 - description: SeerBit API Server - parameters: - - name: Content-Type - in: header - required: true - schema: - type: string - default: application/json + - url: https://seerbitapi.com requestBody: required: true content: application/json: schema: - $ref: "#/components/schemas/CreateCardTokenRequest" + type: object examples: - CreateCardTokenRequest: + authenticate: + summary: Authenticate value: - publicKey: "YOUR_PUBLIC_KEY" - amount: "50" - fullName: "Jane Smith" - mobileNumber: "03447522256" - redirectUrl: "http://example.com" - currency: "NGN" - country: "NG" - paymentReference: "204g4de74a7ib0j18dg6bi521aiaejf4" - email: "janesmith@seerbit.com" - paymentType: "CARD" - cardNumber: "512348984984988883" - expiryMonth: "01" - expiryYear: "25" - cvv: "000" - pin: "2222" + email: "{{pocketEmail}}" + password: "{{pocketPassword}}" responses: - 200: - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/CreateCardTokenResponse" - examples: - CreateCardTokenResponse: - value: - status: "SUCCESS" - data: - code: "S20" - message: "Transaction is pending" - payments: - paymentReference: "204g4de74a7ib0j18dg6bi521aiaejf4" - linkingReference: "SEERBIT60416746746373661414266005" - redirectUrl: "https://seerbitapi.com/50E84E82C25D" - 401: - description: Unauthorized - content: - application/json: - schema: - type: object - examples: - UnauthorizedCreateCardToken: - value: - message: "Invalid Authentication Token" - error: "INPUT" - 404: - description: Not Found - content: - application/json: - schema: - type: object - examples: - NotFoundCreateCardToken: - value: - message: "Not Found" - error: "The server can not find the requested resource" - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - CreateCardToken500Response: - value: - message: "Internal Server Error" + "200": + description: Successful response security: - - Bearer: [] - deprecated: false - - # get card auth token - /payments/query/{paymentReference}: - get: + - BearerAuth: [] + /pocket/user/change-password: + post: tags: - - CARD TOKENISATION - summary: Get Card Authorisation Code - description: "After the first successful transaction, you can query the transaction with the payment reference endpoint to confirm the status of transaction. The queried payment reference returns the authorizationCode that will be used for subsequent charges." - operationId: GetCardAuthorisationCode + - POCKET + summary: Change Password + description: >- + Changes the Pocket account's password — required on first login if + *Authenticate*'s response flagged `requirePasswordChange: true`. + + + **Body fields** + + + | Field | Type | Required | Description | + + |---|---|---|---| + + | `currentPassword` | string | Yes | Current Pocket password | + + | `newPassword` | string | Yes | New Pocket password | + operationId: post_change-password_36 servers: - - url: https://seerbitapi.com/api/v3 - description: SeerBit API v3 Server - parameters: - - name: paymentReference - in: path - required: true - description: The payment reference for the transaction. - schema: - type: string + - url: https://seerbitapi.com + requestBody: + required: true + content: + application/json: + schema: + type: object + examples: + change-password: + summary: Change Password + value: + currentPassword: "{{pocketPassword}}" + newPassword: "{{newPocketPassword}}" responses: - 200: - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/GetCardAuthorisationCodeResponse" - examples: - GetCardAuthorisationCodeResponse: - value: - status: "SUCCESS" - data: - code: "00" - message: "Successful" - payments: - amount: 50 - mobilenumber: "08387522256" - publicKey: "{{publicKey}}" - paymentType: "CARD" - maskedPan: "5123-40xx-xxxx-0008" - gatewayMessage: "Successful" - gatewayCode: "00" - gatewayref: "SEERBIT674774783883" - businessName: "Green Technological Concepts" - mode: "live" - channelType: "MASTERCARD" - cardBin: "5123" - lastFourDigits: "0008" - country: "NG" - currency: "NGN" - paymentReference: "{{paymentReference}}" - transactionProcessTime: "2022-08-25 08:57:45.634" - reason: "Successful" - authorizationCode: "6636373737222" - customers: - customerId: "SBT56736733yye663737" - customerName: "Jane Smith" - customerMobile: "08387522256" - customerEmail: "seerbit@emaildomain.com" - 404: - description: Not Found - content: - application/json: - schema: - type: object - examples: - NotFoundCardAuthorisationCode: - value: - message: "Not Found" - error: "The server can not find the requested resource" - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - CardAuthorisationCode500Response: - value: - message: "Internal Server Error" - deprecated: false - - # charge authorised token - /payments/charge-token: + "200": + description: Successful response + security: + - BearerAuth: [] + "/pocket/pocket-id/{pocketID}/sub-pocket": post: tags: - - CARD TOKENISATION - summary: Charge Authorisation Token - description: "Charge a card using a previously obtained authorisation code (token)." - operationId: ChargeAuthorisationToken + - POCKET + summary: Add Sub-Pocket + description: >- + Creates a sub-pocket under a parent pocket — e.g. one wallet per vendor, + department, or customer, all rolling up to the parent. Body is an array, + so you can create several sub-pockets in one call. + + + **Body fields (per array entry)** + + + | Field | Type | Required | Description | + + |---|---|---|---| + + | `reference` | string | Yes | Your unique reference for this sub-pocket | + + | `pocketFunction` | string | Yes | e.g. `BOTH` (can send and receive) | + + | `currency` | string | Yes | Currency the sub-pocket holds | + + | `selfOwned` | boolean | Yes | Whether the sub-pocket belongs to you or an external owner | + + | `pocketOwner` | object | Yes | `existingPocketOwner` plus `pocketOwnerDetails` (`firstName`, `lastName`, `emailAddress`, `phoneNumber`, `businessName`) | + + | `tagGroup` | string | No | Grouping label | + + | `tagName` | string | No | Display label | + + + Response returns the new `pocketId`, its dedicated `bankAccountNumber`/`bankAccountName`/`bankName`, and login details for the sub-pocket's own user. + operationId: post_add-sub-pocket_37 servers: - - url: https://seerbitapi.com/api/v2 - description: SeerBit API Server + - url: https://seerbitapi.com parameters: - - name: Content-Type - in: header + - name: pocketID + in: path required: true + description: Value of pocketID schema: type: string - default: application/json requestBody: required: true content: application/json: schema: - $ref: "#/components/schemas/ChargeAuthorisationTokenRequest" + type: object examples: - ChargeAuthorisationTokenRequest: + add-sub-pocket: + summary: Add Sub-Pocket value: - publicKey: "YOUR_PUBLIC_KEY" - amount: "110" - paymentReference: "charge_test_3451" - authorizationCode: "ye773838jje8837abe" + - reference: subpocket_ref_001 + pocketFunction: BOTH + currency: NGN + selfOwned: true + pocketOwner: + existingPocketOwner: "false" + pocketOwnerDetails: + firstName: Jane + lastName: Doe + emailAddress: jane@example.com + phoneNumber: "08012345678" + businessName: Acme Ltd responses: - 200: - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/ChargeAuthorisationTokenResponse" - examples: - ChargeAuthorisationTokenResponse: - value: - status: "SUCCESS" - data: - code: "00" - message: "APPROVED" - payments: - paymentReference: "9288383999393" - linkingReference: "SEERBIT43376378378377720196" - 401: - description: Unauthorized - content: - application/json: - schema: - type: object - examples: - UnauthorizedChargeAuthorisationToken: - value: - message: "Invalid Authentication Token" - error: "INPUT" - 404: - description: Not Found - content: - application/json: - schema: - type: object - examples: - NotFoundChargeAuthorisationToken: - value: - message: "Not Found" - error: "The server can not find the requested resource" - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - ChargeAuthorisationToken500Response: - value: - message: "Internal Server Error" + "200": + description: Successful response security: - - Bearer: [] - deprecated: false - - # Bulk charge token - /payments/bulk-tokenize-charge: + - BearerAuth: [] + "/pocket/transfer/from-pocket/{pocketID}/to-pocket/{destinationPocketID}": post: tags: - - CARD TOKENISATION - summary: Bulk Charge Token - description: "Charge multiple cards using authorization tokens in a single request." - operationId: BulkChargeToken + - POCKET + summary: Pocket to Pocket Transfer + description: >- + Moves funds between two pockets (parent-to-sub-pocket, sub-to-sub, etc.) + — an internal transfer, not a bank payout. + + + **Body fields** + + + | Field | Type | Required | Description | + + |---|---|---|---| + + | `amount` | string | Yes | Amount to move | + + | `currency` | string | Yes | Currency, must match both pockets | + + | `reference` | string | Yes | Unique reference for this transfer | + + | `description` | string | Yes | Free-text note | + operationId: post_pocket-to-pocket-transfer_38 servers: - - url: https://seerbitapi.com/api/v2 - description: SeerBit API Server + - url: https://seerbitapi.com parameters: - - name: Content-Type - in: header + - name: pocketID + in: path + required: true + description: Value of pocketID + schema: + type: string + - name: destinationPocketID + in: path required: true + description: Value of destinationPocketID schema: type: string - default: application/json requestBody: required: true content: application/json: schema: - type: array - items: - $ref: "#/components/schemas/ChargeAuthorisationTokenRequest" + type: object examples: - BulkChargeTokenRequest: + pocket-to-pocket-transfer: + summary: Pocket to Pocket Transfer value: - - publicKey: "publickKey" - amount: "11" - paymentReference: "reference" - authorizationCode: "authorizationCode" - - publicKey: "publickKey" - amount: "11" - paymentReference: "reference" - authorizationCode: "authorizationCode" + amount: "5000.00" + currency: NGN + reference: transfer_ref_001 + description: Internal transfer responses: - 200: - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/BulkChargeTokenResponse" - examples: - BulkChargeTokenResponse: - value: - code: "00" - message: "Successful" - payload: - batchId: "d4wnvzc" - 401: - description: Unauthorized - content: - application/json: - schema: - type: object - examples: - UnauthorizedBulkChargeToken: - value: - message: "Invalid Authentication Token" - error: "INPUT" - 404: - description: Not Found - content: - application/json: - schema: - type: object - examples: - NotFoundBulkChargeToken: - value: - message: "Not Found" - error: "The server can not find the requested resource" - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - BulkChargeToken500Response: - value: - message: "Internal Server Error" + "200": + description: Successful response security: - - Bearer: [] - deprecated: false - - # query bulk charge token - /payments/bulk-tokenize-charge-search?batchId={batchId}: + - BearerAuth: [] + "/pocket/pocket-id/{pocketID}": get: tags: - - CARD TOKENISATION - summary: Query Bulk Charge with BatchId - description: "Query the status and results of a bulk charge operation using the batchId." - operationId: QueryBulkChargeWithBatchId + - POCKET + summary: Get Pocket Details + description: "Fetches a pocket's full profile: status, balances, its own + dedicated bank account (`accountNumber`, `fundingLink`), owner details, + and any linked `pocketAccounts`." + operationId: get_get-pocket-details_39 servers: - - url: https://seerbitapi.com/api/v2 - description: SeerBit API Server + - url: https://seerbitapi.com parameters: - - name: batchId - in: query + - name: pocketID + in: path required: true - description: The batch ID of the bulk charge operation. + description: Value of pocketID schema: type: string responses: - 200: - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/QueryBulkChargeWithBatchIdResponse" - examples: - QueryBulkChargeWithBatchIdResponse: - value: - code: "00" - message: "Successful" - payload: - content: - - id: 7 - authorizationCode: "authocode" - statusCode: "00" - message: "Successful" - createdAt: "2022-10-12T09:58:40.102" - updatedAt: "2022-10-12T09:58:40.102" - batchId: "k2auyutyr" - currency: "NGN" - cardBin: "5123400" - cardLastFourDigits: "0739" - cardType: "VISA" - amount: "10.00" - - id: 8 - authorizationCode: "authocode" - statusCode: "00" - message: "Successful" - createdAt: "2022-10-12T09:58:46.443" - updatedAt: "2022-10-12T09:58:46.443" - batchId: "kuiuyu" - currency: "NGN" - cardBin: "5123400" - cardLastFourDigits: "0008" - cardType: "VISA" - amount: "15.00" - pageable: - sort: - sorted: true - unsorted: false - empty: false - pageNumber: 0 - pageSize: 10 - offset: 0 - paged: true - unpaged: false - last: true - totalElements: 2 - totalPages: 1 - sort: - sorted: true - unsorted: false - empty: false - first: true - numberOfElements: 2 - size: 10 - number: 0 - empty: false - 401: - description: Unauthorized - content: - application/json: - schema: - type: object - examples: - UnauthorizedQueryBulkChargeWithBatchId: - value: - message: "Invalid Authentication Token" - error: "INPUT" - 404: - description: Not Found - content: - application/json: - schema: - type: object - examples: - NotFoundQueryBulkChargeWithBatchId: - value: - message: "Not Found" - error: "The server can not find the requested resource" - 500: - description: Internal Server Error - content: - application/json: - schema: - type: object - examples: - QueryBulkChargeWithBatchId500Response: - value: - message: "Internal Server Error" + "200": + description: Successful response + security: + - BearerAuth: [] + "/pocket/balance/pocket-id/{pocketID}": + get: + tags: + - POCKET + summary: Get Pocket Balance + description: Fast balance-only lookup for one pocket — + `availableBalanceAmount`/`Currency` and `lastTransactionAt`. Use *Get + Pocket Details* instead when you also need the account number or owner + info. + operationId: get_get-pocket-balance_40 + servers: + - url: https://seerbitapi.com + parameters: + - name: pocketID + in: path + required: true + description: Value of pocketID + schema: + type: string + responses: + "200": + description: Successful response + security: + - BearerAuth: [] + "/pocket/balances-summation/pocket-id/{pocketID}": + get: + tags: + - POCKET + summary: Get Merchant Balance Summation + description: "Rolls up balances across pockets: + `merchantSubPocketsBalanceSummation` (just the sub-pockets under this + one) and `merchantAllPocketsBalanceSummation` (every pocket under the + merchant)." + operationId: get_get-merchant-balance-summation_41 + servers: + - url: https://seerbitapi.com + parameters: + - name: pocketID + in: path + required: true + description: Value of pocketID + schema: + type: string + responses: + "200": + description: Successful response + security: + - BearerAuth: [] + "/pocket/transaction/reference/{reference}": + get: + tags: + - POCKET + summary: Get Transaction by Reference + description: Looks up one Pocket transaction (funding, transfer, fee, etc.) by + its `reference`. Returns `transactionLeg` (`DEBIT`/`CREDIT`), + `transactionType`, `status`, and counterparty details. + operationId: get_get-transaction-by-reference_42 + servers: + - url: https://seerbitapi.com + parameters: + - name: reference + in: path + required: true + description: Value of reference + schema: + type: string + responses: + "200": + description: Successful response security: - - Bearer: [] - deprecated: false + - BearerAuth: [] + /pocket/transaction/search: + get: + tags: + - POCKET + summary: Search Transactions + description: >- + Lists a pocket's transaction history, paginated. -components: - schemas: - GenerateEncryptedSecretKeyRequest: - title: GenerateEncryptedSecretKeyRequest - required: - - key - type: object - properties: - key: - type: string - description: This consist of the PrivateKey and the publicKey separated with a '.' in the middle(eg:{privateKey.publicKey} - example: - key: SBTESTSECK_9Cb8dbqR5Rc2JwZaa77P5QYHzQaeGUcrkEMD1dEi.SBTESTPUBK_9sN3TuLgW6a9redEfY48cKKkUa09Pz2u - GenerateHashRequest: - title: GenerateHashRequest - required: - - amount - - callbackUrl - - country - - currency - - email - - paymentReference - - productDescription - - productId - - publicKey - type: object - properties: - publicKey: - type: string - description: This is the merchant public key. - amount: - type: string - description: This is the amount to be paid. - currency: - type: string - description: This is the currency the transaction is to be carried out in. - country: - type: string - description: This is the country from which the transaction is been carried out from - paymentReference: - type: string - description: This is the unique identifier for a transaction, to be generated by merchant. - email: - type: string - description: This is the email of the customer. - productId: - type: string - description: This is the product id entered by the merchant. - productDescription: - type: string - description: This is the product description supplied by the merchant. - callbackUrl: - type: string - example: - publicKey: SBTESTPUBK_9sN3TuLgW6a9redEfY48cKKkUa09Pz2u - amount: "10.00" - currency: NGN - country: NG - paymentReference: 3791090233047WZ73QN - email: mamadou.diouf@intouchgroup.net - productId: "15013" - productDescription: touch badge - callbackUrl: https://gutouch.com - PaymentLinkFromCheckoutRequest: - title: PaymentLinkFromCheckoutRequest - required: - - amount - - callbackUrl - - country - - currency - - email - - fullName - - tokenize - - paymentReference - # - productDescription - # - productId - - publicKey - type: object - properties: - publicKey: - type: string - description: This is the merchant public key. - amount: - type: string - description: This is the amount to be paid. - currency: - type: string - description: This is the currency the transaction is to be carried out in. - country: - type: string - description: This is the country from which the transaction is been carried out from - paymentReference: - type: string - description: This is the unique identifier for a transaction, to be generated by merchant. - email: - type: string - description: This is the email of the customer. - fullName: - type: string - description: This is the full name of the customer. - tokenize: - type: boolean - description: This indicates whether the card should be tokenized for future transactions. - # productId: - # type: string - # description: This is the product id entered by the merchant. - # productDescription: - # type: string - # description: This is the product description supplied by the merchant. - callbackUrl: - type: string - description: This is the callback url supplied by the merchant so that Seerbit can redirect back to it . - # hash: - # type: string - # description: This is the hash of the concatenated string for payment. Check hash module for more clarification. - # hashType: - # type: string - # description: This refers to the hash type used in generating the hash - example: - publicKey: YOUR_PUBLIC_KEY - amount: "10.00" - currency: NGN - country: NG - paymentReference: payment_reference - email: mamadou.diouf@intouchgroup.net - fullName: Mamadou Diouf - tokenize: false - # productId: "15013" - # productDescription: touch badge - callbackUrl: https://seerbit.com - # hash: cfb5464ea21cce315ea72fb28f7ea45c4b61c443783eeff82dea98e57d445e15 - # hashType: sha256 - OTPMomoRequest: - title: OTPMomoRequest - required: - - linkingReference - - otp - type: object - properties: - linkingReference: - type: string - description: This is the internal gateway reference - otp: - type: string - description: This is the TOKEN sent to customer’s phone or email - example: - linkingReference: CF630837081601460887752 - otp: "81015" - ValidateTransactionRequest: - title: ValidateTransactionRequest - required: - - linkingReference - - otp - type: object - properties: - linkingReference: - type: string - description: This is the internal gateway reference - otp: - type: string - description: This is the TOKEN sent to customer’s phone or email - example: - linkingReference: F092648971601293723061 - otp: "123456" - - # start of preauth - # CaptureRequest: - # title: CaptureRequest - # required: - # - amount - # - country - # - currency - # - paymentReference - # - productDescription - # - publicKey - # type: object - # properties: - # paymentReference: - # type: string - # description: This is the unique identifier for a transaction, to be generated by merchant. - # currency: - # type: string - # description: This is the currency the transaction is to be carried out in. - # country: - # type: string - # description: This is the country the customer is doing the transaction from - # productDescription: - # type: string - # description: This is the product description supplied by the merchant. - # amount: - # type: string - # description: This is the amount to be paid. - # publicKey: - # type: string - # description: This is the merchant public key. - # example: - # paymentReference: PREAUTH124456789798765k321CB0 - # currency: NGN - # country: NG - # productDescription: preauth test capture - # amount: "5.10" - # publicKey: SBTESTPUBK_dhrpzbRpR34l6VmqkCFOKA94L5E1jSTu - # RefundRequest: - # title: RefundRequest - # required: - # - amount - # - country - # - currency - # - paymentReference - # - productDescription - # - publicKey - # type: object - # properties: - # paymentReference: - # type: string - # description: This is the unique identifier for a transaction, to be generated by merchant. - # currency: - # type: string - # description: This is the currency the transaction is to be carried out in. - # country: - # type: string - # description: This is the country the customer is doing the transaction from - # productDescription: - # type: string - # description: This is the product description supplied by the merchant. - # amount: - # type: string - # description: This is the amount to be paid. - # publicKey: - # type: string - # description: This is the merchant public key. - # example: - # paymentReference: PREAUTH124456789798765432CB0 - # currency: NGN - # country: NG - # productDescription: preauth test capture - # amount: "5.10" - # publicKey: SBTESTPUBK_dhrpzbRpR34l6VmqkCFOKA94L5E1jSTu - # CancelRequest: - # title: CancelRequest - # required: - # - country - # - paymentReference - # - productDescription - # - publicKey - # type: object - # properties: - # paymentReference: - # type: string - # description: This is the unique identifier for a transaction, to be generated by merchant. - # publicKey: - # type: string - # description: This is the merchant public key. - # country: - # type: string - # description: This is the country the customer is doing the transaction from - # productDescription: - # type: string - # description: This is the product description supplied by the merchant. - # example: - # paymentReference: PREAUTH124456789798765k3L1CB0 - # publicKey: SBTESTPUBK_dhrpzbRpR34l6VmqkCFOKA94L5E1jSTu - # country: NG - # productDescription: test void - # invoice - CreateInvoiceRequest: - title: CreateInvoiceRequest - required: - - amount - - currency - - customerEmail - - customerName - - description - - invoiceNumber - - publicKey - type: object - properties: - publicKey: - type: string - description: This is the merchant public key. - orderNo: - type: string - description: This is the order number. - dueDate: - type: string - description: This is the date the invoice is due. - currency: - type: string - description: This is the currency the transaction is to be carried out in. - recieversName: - type: string - description: This is the name of the customer. - customerEmail: - type: string - description: This is the email of the customer. - invoiceItems: - type: array - items: - type: object - properties: - itemName: - type: string - description: This is the name of the item. - quantity: - type: string - description: This is the quantity of the item. - rate: - type: string - description: This is the price of the item. - tax: - type: string - description: This is the tax on the item. - required: - - itemName - - quantity - - rate - - tax - description: This is the list of items in the invoice. - example: - publicKey: SBTESTPUBK_9sN3TuLgW6a9redEfY48cKKkUa09Pz2u - orderNo: 3333332213212 - dueDate: "2023-10-31" - currency: NGN - recieversName: Muyiwa Akintade - customerEmail: janesmith@emaildomain.com - invoiceItems: - - itemName: Bluetooth Pods - quantity: 1 - rate: 2500 - tax: 7.5 - - itemName: Quest 10 - quantity: 4 - rate: 1500 - tax: 7.5 - # invoice respsonse - CreateInvoiceResponse: - title: CreateInvoiceResponse - type: object - example: - message: Invoice created successfully - payload: - InvoiceID: 2039 - InvoiceNo: SBT-INV-002039 - code: "00" - - ResendInvoiceResponse: - title: ResendInvoiceResponse - type: object - example: - message: Invoice has been sent successfully - code: "00" - - # get invoice by customer email response - GetInvoiceByCustomerEmailResponse: - type: object - properties: - payload: - type: array - items: - type: object - properties: - invoiceId: - type: integer - invoiceNo: - type: string - totalAmount: - type: number - subTotal: - type: number - publicKey: - type: string - testKey: - type: string - supportEmail: - type: string - receiversName: - type: string - customerEmail: - type: string - businessName: - type: string - tax: - type: number - dueDate: - type: string - currency: - type: string - invoiceItems: - type: array - items: - type: object - properties: - itemName: - type: string - unitPrice: - type: number - vat: - type: number - amount: - type: number - quantity: - type: integer - customer: - type: object - properties: - externalIdentify: - type: string - businessName: - type: string - customerEmail: - type: string - businessId: - type: string - id: - type: integer - billingCycle: - type: boolean - payButtonOnInvoices: - type: boolean - enableAdvancedOptions: - type: boolean - partialPayment: - type: boolean - status: - type: string - createdAt: - type: string - mode: - type: string - code: - type: string - - # invocie by invoiceNo - GetInvoiceByInvoiceNumberResponse: - type: object - properties: - payload: - type: array - items: - type: object - properties: - invoiceId: - type: integer - invoiceNo: - type: string - totalAmount: - type: number - subTotal: - type: number - publicKey: - type: string - testKey: - type: string - supportEmail: - type: string - receiversName: - type: string - customerEmail: - type: string - businessName: - type: string - tax: - type: number - dueDate: - type: string - currency: - type: string - invoiceItems: - type: array - items: - type: object - properties: - itemName: - type: string - unitPrice: - type: number - vat: - type: number - amount: - type: number - quantity: - type: integer - customer: - type: object - properties: - externalIdentify: - type: string - businessName: - type: string - customerEmail: - type: string - businessId: - type: string - id: - type: integer - billingCycle: - type: boolean - payButtonOnInvoices: - type: boolean - enableAdvancedOptions: - type: boolean - partialPayment: - type: boolean - status: - type: string - createdAt: - type: string - mode: - type: string - code: - type: string - # get invoice by orderNo - GetInvoiceByOrderNumberResponse: - type: object - properties: - payload: - type: array - items: - type: object - properties: - invoiceId: - type: integer - invoiceNo: - type: string - totalAmount: - type: number - subTotal: - type: number - publicKey: - type: string - testKey: - type: string - supportEmail: - type: string - receiversName: - type: string - customerEmail: - type: string - businessName: - type: string - tax: - type: number - dueDate: - type: string - currency: - type: string - invoiceItems: - type: array - items: - type: object - properties: - itemName: - type: string - unitPrice: - type: number - vat: - type: number - amount: - type: number - quantity: - type: integer - customer: - type: object - properties: - externalIdentify: - type: string - businessName: - type: string - customerEmail: - type: string - businessId: - type: string - id: - type: integer - billingCycle: - type: boolean - payButtonOnInvoices: - type: boolean - enableAdvancedOptions: - type: boolean - partialPayment: - type: boolean - status: - type: string - createdAt: - type: string - mode: - type: string - code: - type: string - - # end of invoice - # start of pocket - - # authenticate pocket - PocketAuthRequest: - type: object - required: - - email - - password - properties: - email: - type: string - format: email - password: - type: string - - PocketAuthResponse: - type: object - properties: - responseCode: - type: string - message: - type: string - data: - type: object - properties: - bearerToken: - type: string - expiryTime: - type: string - format: date-time - requirePasswordChange: - type: boolean - # add sub-pocket - AddSubPocketRequest: - type: object - required: - - reference - - pocketFunction - - currency - - selfOwned - - pocketOwner - properties: - tagGroup: - type: string - reference: - type: string - pocketFunction: - type: string - enum: [BOTH, CREDIT, DEBIT] - currency: - type: string - tagName: - type: string - selfOwned: - type: boolean - pocketOwner: - type: object - required: - - existingPocketOwner - - pocketOwnerDetails - properties: - existingPocketOwner: - type: string - enum: ["true", "false"] - pocketOwnerDetails: - type: object - required: - - firstName - - lastName - - emailAddress - - phoneNumber - - businessName - properties: - firstName: - type: string - lastName: - type: string - emailAddress: - type: string - phoneNumber: - type: string - businessName: - type: string - - AddSubPocketResponse: - type: object - properties: - responseCode: - type: string - message: - type: string - data: - type: array - items: - type: object - properties: - pocketId: - type: string - parentId: - type: integer - bankAccountNumber: - type: string - bankAccountName: - type: string - bankCode: - type: string - bankName: - type: string - canRetailPockets: - type: boolean - subPocketUserResponse: - type: object - properties: - userName: - type: string - password: - type: string - # get pocket details - GetPocketDetailsResponse: - type: object - properties: - responseCode: - type: string - message: - type: string - data: - type: object - properties: - pocketId: - type: string - accountNumber: - type: string - status: - type: string - pocketFunction: - type: string - availableBalanceAmount: - type: string - availableBalanceCurrency: - type: string - ledgerBalanceAmount: - type: string - ledgerBalanceCurrency: - type: string - parentId: - type: string - nullable: true - fundingLink: - type: string - accountVerifierScheme: - type: string - accountVerifierNumber: - type: string - reference: - type: string - tier: - type: string - subPockets: - nullable: true - pocketOwner: - type: object - properties: - pocketOwnerId: - type: string - businessName: - type: string - firstName: - type: string - lastName: - type: string - emailAddress: - type: string - phoneNumber: - type: string - ownerVerifierScheme: - type: string - ownerVerifierNumber: - type: string - pocketAccounts: - type: array - items: - type: object - properties: - accountId: - type: string - accountNumber: - type: string - bankCode: - type: string - bankName: - type: string - reference: - type: string - pocketFundings: - nullable: true - pocketLimits: - type: array - items: {} - pocketMomos: - type: array - items: {} - - # get pocket balance - GetPocketBalanceResponse: - type: object - properties: - responseCode: - type: string - message: - type: string - data: - type: object - properties: - balanceAt: - type: string - format: date-time - availableBalanceCurrency: - type: string - availableBalanceAmount: - type: string - lastTransactionAt: - type: string - format: date-time - # get merchant sum - GetMerchantSumResponse: - type: object - properties: - responseCode: - type: string - message: - type: string - data: - type: object - properties: - merchantSubPocketsBalanceSummation: - type: string - merchantSubPocketsBalanceSummationCurrency: - type: string - merchantAllPocketsBalanceSummation: - type: string - merchantAllPocketsBalanceSummationCurrency: - type: string - - # get transaction details - GetPocketTransactionDetailsResponse: - type: object - properties: - responseCode: - type: string - message: - type: string - data: - type: object - properties: - reference: - type: string - pocketId: - type: string - transactionLeg: - type: string - transactionAmount: - type: string - transactionCurrency: - type: string - narration: - type: string - description: - type: string - createdAt: - type: string - format: date-time - createdBy: - type: string - transactionId: - type: string - transactionType: - type: string - batchId: - type: string - nullable: true - status: - type: string - message: - type: string - receiverName: - type: string - receiverAccountNumber: - type: string - receiverBankCode: - type: string - receiverBankName: - type: string - nullable: true - sender: - type: string - # find pocket transactions - FindPocketTransactionsResponse: - type: object - properties: - responseCode: - type: string - message: - type: string - data: - type: object - properties: - content: - type: array - items: - type: object - properties: - createdAt: - type: string - format: date-time - reference: - type: string - pocketId: - type: string - transactionLeg: - type: string - transactionCurrency: - type: string - availableBalanceCurrency: - type: string - ledgerBalanceCurrency: - type: string - narration: - type: string - transactionId: - type: string - description: - type: string - tagGroup: - type: string - tagName: - type: string - pocketTier: - type: string - receiverName: - type: string - receiverAccountNumber: - type: string - receiverBankCode: - type: string - transactionType: - type: string - publicKey: - type: string - status: - type: string - message: - type: string - batchId: - type: string - nullable: true - transactionSource: - type: string - transactionOrigin: - type: string - nullable: true - linkingReference: - type: string - nullable: true - transactionAmount: - type: string - availableBalanceAmount: - type: string - ledgerBalanceAmount: - type: string - accountNumber: - type: string - pageable: - type: object - properties: - sort: - type: object - properties: - empty: - type: boolean - sorted: - type: boolean - unsorted: - type: boolean - offset: - type: integer - pageSize: - type: integer - pageNumber: - type: integer - unpaged: - type: boolean - paged: - type: boolean - totalElements: - type: integer - totalPages: - type: integer - last: - type: boolean - size: - type: integer - number: - type: integer - sort: - type: object - properties: - empty: - type: boolean - sorted: - type: boolean - unsorted: - type: boolean - numberOfElements: - type: integer - first: - type: boolean - empty: - type: boolean - - # pocket to pocket transfer - PocketToPocketTransferRequest: - type: object - required: - - amount - - currency - - reference - - description - properties: - amount: - type: number - description: The amount to transfer. - currency: - type: string - description: The currency of the transfer. - reference: - type: string - description: The unique reference for the transfer. - description: - type: string - description: A description for the transfer. - - PocketToPocketTransferResponse: - type: object - properties: - responseCode: - type: string - message: - type: string - data: - type: object - description: Empty object on success. - - # end of pocket - - # start of payout - # generate pocket otp - GeneratePocketOtpRequest: - type: object - required: - - actionItem - - pocketId - properties: - actionItem: - type: string - description: The action for which the OTP is generated. - pocketId: - type: string - description: The pocket ID. - - GeneratePocketOtpResponse: - type: object - properties: - responseCode: - type: string - message: - type: string - data: - type: object - properties: - otp: - type: string - category: - type: string - expires: - type: string - format: date-time - - # generate pocket signature - GeneratePocketSignatureRequest: - type: object - required: - - reference - - amount - - currency - - description - - accountNumber - - bankCode - - actionType - - passKey - properties: - reference: - type: string - description: The transaction reference. - amount: - type: string - description: The amount for the payout. - currency: - type: string - description: The currency for the payout. - description: - type: string - description: The payout description. - accountNumber: - type: string - description: The account number to credit. - bankCode: - type: string - description: The bank code of the destination bank. - actionType: - type: string - description: The action type (e.g., APPROVE_DISBURSEMENT). - passKey: - type: string - description: The OTP or passKey for the payout. - - GeneratePocketSignatureResponse: - type: object - properties: - responseCode: - type: string - message: - type: string - data: - type: string - description: The generated signature. - - # initiate payout - InitiatePocketPayoutRequest: - type: object - required: - - reference - - amount - - currency - - description - - accountNumber - - bankCode - - passKey - - actionType - - signature - properties: - reference: - type: string - description: The transaction reference. - amount: - type: string - description: The amount for the payout. - currency: - type: string - description: The currency for the payout. - description: - type: string - description: The payout description. - accountNumber: - type: string - description: The account number to credit. - bankCode: - type: string - description: The bank code of the destination bank. - passKey: - type: string - description: The OTP or passKey for the payout. - actionType: - type: string - description: The action type (e.g., APPROVE_DISBURSEMENT). - signature: - type: string - description: The generated signature for the payout. - - InitiatePocketPayoutResponse: - type: object - properties: - responseCode: - type: string - message: - type: string - data: - type: object - properties: - reference: - type: string - linkingreference: - type: string - # end of payout - - # start of VA - # create VA - CreateVirtualAccountRequest: - type: object - required: - - publicKey - - fullName - - bankVerificationNumber - - currency - - country - - reference - - email - properties: - publicKey: - type: string - description: The merchant public key. - fullName: - type: string - description: The full name of the account holder. - bankVerificationNumber: - type: string - description: The BVN of the account holder. - currency: - type: string - description: The currency for the account. - country: - type: string - description: The country code. - reference: - type: string - description: The unique reference for the account. - email: - type: string - description: The email address of the account holder. - - CreateVirtualAccountResponse: - type: object - properties: - status: - type: string - data: - type: object - properties: - code: - type: string - payments: - type: object - properties: - reference: - type: string - walletName: - type: string - bankName: - type: string - accountNumber: - type: string - message: - type: string - # get VA by payment reference - GetVirtualAccountResponse: - type: object - properties: - status: - type: string - data: - type: object - properties: - code: - type: string - payments: - type: object - properties: - reference: - type: string - linkingReference: - type: string - walletName: - type: string - wallet: - type: string - bankName: - type: string - accountNumber: - type: string - message: - type: string - # delete a VA - DeleteVirtualAccountResponse: - type: object - properties: - status: - type: string - data: - type: object - properties: - code: - type: string - message: - type: string - # Get Payment - GetVirtualAccountPaymentResponse: - type: object - properties: - status: - type: string - data: - type: object - properties: - code: - type: string - payload: - type: array - items: - type: object - properties: - id: - type: integer - fullName: - type: string - publicKey: - type: string - processor: - type: string - paymentType: - type: string - amount: - type: number - email: - type: string - gateway: - type: string - gatewayMessage: - type: string - gatewayCode: - type: string - transactionRef: - type: string - gatewayRef: - type: string - businessName: - type: string - mode: - type: string - channelType: - type: string - country: - type: string - currency: - type: string - internalreference: - type: string - accountNumber: - type: string - creditAccountName: - type: string - transferType: - type: string - paymentReference: - type: string - creditAccountNumber: - type: string - settlementCode: - type: string - settlementMessage: - type: string - settlementTime: - type: string - status: - type: string - mobileNumber: - type: string - transferedAmount: - type: number - isCardInternational: - type: string - reason: - type: string - retry: - type: boolean - createdAt: - type: string - updatedAt: - type: string - processorCode: - type: string - processorMessage: - type: string - message: - type: string - # end of VA - - # start of payment link - # create payment link - CreatePaymentLinkRequest: - type: object - required: - - status - - paymentLinkName - - description - - currency - - successMessage - - publicKey - - customizationName - - paymentFrequency - - email - - requiredFields - - linkExpirable - - oneTime - properties: - status: - type: string - paymentLinkName: - type: string - description: - type: string - currency: - type: string - successMessage: - type: string - publicKey: - type: string - customizationName: - type: string - paymentFrequency: - type: string - paymentReference: - type: string - email: - type: string - requiredFields: - type: object - properties: - address: - type: boolean - amount: - type: boolean - customerName: - type: boolean - mobileNumber: - type: boolean - invoiceNumber: - type: boolean - additionalData: - type: string - linkExpirable: - type: boolean - expiryDate: - type: string - oneTime: - type: boolean - - CreatePaymentLinkResponse: - type: object - properties: - data: - type: object - properties: - paymentLinks: - type: object - properties: - publicKey: - type: string - status: - type: string - additionalData: - type: string - paymentLinkName: - type: string - description: - type: string - successMessage: - type: string - paymentLinkId: - type: string - currency: - type: string - paymentReference: - type: string - paymentFrequency: - type: string - paymentLinkUrl: - type: string - customizationName: - type: string - environment: - type: string - requiredFields: - type: object - properties: - address: - type: boolean - amount: - type: boolean - customerName: - type: boolean - mobileNumber: - type: boolean - invoiceNumber: - type: boolean - expiryDuration: - type: integer - linkExpirable: - type: boolean - createdAt: - type: string - updatedAt: - type: string - oneTime: - type: boolean - splitPayment: - type: boolean - - # get payment link by public key - GetMerchantPaymentLinksResponse: - type: object - properties: - currentPage: - type: integer - responseCode: - type: string - payload: - type: array - items: - type: object - properties: - businessId: - type: string - publicKey: - type: string - status: - type: string - amount: - type: number - customisationName: - type: string - additionalData: - type: string - paymentLinkName: - type: string - description: - type: string - paymentLinkId: - type: string - paymentFrequency: - type: string - paymentLinkUrl: - type: string - pocketReference: - type: string - environment: - type: string - requiredFields: - type: object - properties: - address: - type: boolean - amount: - type: boolean - customerName: - type: boolean - mobileNumber: - type: boolean - invoiceNumber: - type: boolean - expiryDuration: - type: integer - linkExpirable: - type: boolean - customTime: - type: string - createdAt: - type: string - updatedAt: - type: string - oneTime: - type: boolean - splitPayment: - type: boolean - responseMessage: - type: string - - # Update payment link - UpdatePaymentLinkRequest: - type: object - required: - - paymentLinkId - - status - - description - - successMessage - - businessName - - publicKey - - customizationName - - paymentFrequency - - email - - requiredFields - - linkExpirable - - oneTime - properties: - paymentLinkId: - type: string - status: - type: string - description: - type: string - successMessage: - type: string - businessName: - type: string - publicKey: - type: string - customizationName: - type: string - paymentFrequency: - type: string - email: - type: string - requiredFields: - type: object - properties: - address: - type: boolean - amount: - type: boolean - customerName: - type: boolean - mobileNumber: - type: boolean - invoiceNumber: - type: boolean - linkExpirable: - type: boolean - expiryDate: - type: string - oneTime: - type: boolean - - UpdatePaymentLinkResponse: - type: object - properties: - data: - type: object - properties: - paymentLinks: - type: object - properties: - publicKey: - type: string - status: - type: string - description: - type: string - successMessage: - type: string - paymentLinkId: - type: string - paymentFrequency: - type: string - paymentLinkUrl: - type: string - customizationName: - type: string - environment: - type: string - requiredFields: - type: object - properties: - address: - type: boolean - amount: - type: boolean - customerName: - type: boolean - mobileNumber: - type: boolean - invoiceNumber: - type: boolean - expiryDuration: - type: integer - linkExpirable: - type: boolean - updatedAt: - type: string - oneTime: - type: boolean - splitPayment: - type: boolean - # Delete payment link - DeletePaymentLinkResponse: - type: object - properties: - status: - type: string - - # end of payment link - - # start of card tokenisation - CreateCardTokenRequest: - type: object - required: - - publicKey - - amount - - fullName - - mobileNumber - - redirectUrl - - currency - - country - - paymentReference - - email - - paymentType - - cardNumber - - expiryMonth - - expiryYear - - cvv - - pin - properties: - publicKey: - type: string - amount: - type: string - fullName: - type: string - mobileNumber: - type: string - redirectUrl: - type: string - currency: - type: string - country: - type: string - paymentReference: - type: string - email: - type: string - paymentType: - type: string - cardNumber: - type: string - expiryMonth: - type: string - expiryYear: - type: string - cvv: - type: string - pin: - type: string - - CreateCardTokenResponse: - type: object - properties: - status: - type: string - data: - type: object - properties: - code: - type: string - message: - type: string - payments: - type: object - properties: - paymentReference: - type: string - linkingReference: - type: string - redirectUrl: - type: string - - # get card auth token' - GetCardAuthorisationCodeResponse: - type: object - properties: - status: - type: string - data: - type: object - properties: - code: - type: string - message: - type: string - payments: - type: object - properties: - amount: - type: number - mobilenumber: - type: string - publicKey: - type: string - paymentType: - type: string - maskedPan: - type: string - gatewayMessage: - type: string - gatewayCode: - type: string - gatewayref: - type: string - businessName: - type: string - mode: - type: string - channelType: - type: string - cardBin: - type: string - lastFourDigits: - type: string - country: - type: string - currency: - type: string - paymentReference: - type: string - transactionProcessTime: - type: string - reason: - type: string - authorizationCode: - type: string - customers: - type: object - properties: - customerId: - type: string - customerName: - type: string - customerMobile: - type: string - customerEmail: - type: string - - # charge authorisation token - ChargeAuthorisationTokenRequest: - type: object - required: - - publicKey - - amount - - paymentReference - - authorizationCode - properties: - publicKey: - type: string - amount: - type: string - paymentReference: - type: string - authorizationCode: - type: string - - ChargeAuthorisationTokenResponse: - type: object - properties: - status: - type: string - data: - type: object - properties: - code: - type: string - message: - type: string - payments: + + **Query parameters** + + + | Field | Type | Required | Description | + + |---|---|---|---| + + | `pocketId` | string | Yes | The pocket to list transactions for | + + | `page` | integer | Yes | Zero-based page number | + + | `size` | integer | Yes | Records per page | + + + Response wraps results in `content` plus `pageable`, `totalElements`, `totalPages` for pagination. + operationId: get_search-transactions_43 + servers: + - url: https://seerbitapi.com + parameters: + - name: pocketId + in: query + required: false + description: Query parameter pocketId + schema: + type: string + - name: page + in: query + required: false + description: Query parameter page + schema: + type: string + - name: size + in: query + required: false + description: Query parameter size + schema: + type: string + responses: + "200": + description: Successful response + security: + - BearerAuth: [] + /pocket/payout/account-enquiry: + post: + tags: + - PAYOUT + summary: Account Enquiry + description: >- + Reconfirms the account holder's name for a bank account before sending a + payout — use it to catch a wrong account number before money moves. + + + **Body fields** + + + | Field | Type | Required | Description | + + |---|---|---|---| + + | `accountnumber` | string | Yes | Recipient bank account number | + + | `bankcode` | string | Yes | Recipient bank's code, from *Bank List* | + + + **Note:** the payout flow (*Authenticate for Payout* → *Initiate Single/Bulk Payout* → *Confirm Payout with OTP*) doesn't call this endpoint — it goes straight from authentication to initiating the payout, with no separate account-name-confirmation step built in. Whether it's still expected to run first, is optional, or belongs to a different flow isn't stated; use it as a manual pre-check if you want extra assurance before sending funds. + operationId: post_account-enquiry_44 + servers: + - url: https://seerbitapi.com + requestBody: + required: true + content: + application/json: + schema: type: object - properties: - paymentReference: - type: string - linkingReference: - type: string - - # Bulk charge token - BulkChargeTokenResponse: - type: object - properties: - code: - type: string - message: - type: string - payload: - type: object - properties: - batchId: - type: string - - # query bulk charge token - QueryBulkChargeWithBatchIdResponse: - type: object - properties: - code: - type: string - message: - type: string - payload: - type: object - properties: - content: - type: array - items: - type: object - properties: - id: - type: integer - authorizationCode: - type: string - statusCode: - type: string - message: - type: string - createdAt: - type: string - updatedAt: - type: string - batchId: - type: string - currency: - type: string - cardBin: - type: string - cardLastFourDigits: - type: string - cardType: - type: string - amount: - type: string - pageable: + examples: + account-enquiry: + summary: Account Enquiry + value: + accountnumber: "0123456789" + bankcode: "058" + responses: + "200": + description: Successful response + security: + - BearerAuth: [] + /pocket/banks/category/NIP: + get: + tags: + - PAYOUT + summary: Bank List + description: Returns the banks supported for payouts in a given category — `NIP` + in the saved URL is Nigeria's instant transfer network; swap the path + segment if a different category is documented for your corridor. + Requires Bearer auth plus a Public-Key header. + operationId: get_bank-list_45 + servers: + - url: https://seerbitapi.com + responses: + "200": + description: Successful response + security: + - BearerAuth: [] + /pocket/authenticate#authenticate-for-payout: + post: + tags: + - PAYOUT + summary: Authenticate for Payout + description: >- + Logs in with your merchant account email and Pocket password to obtain + the bearer token required by every other request in this payout flow. + + + **Body fields** + + + | Field | Type | Required | Description | + + |---|---|---|---| + + | `email` | string | Yes | Your merchant account's login email | + + | `password` | string | Yes | Your **Pocket password** — not your SeerBit merchant dashboard password. This is the password for your Pocket account at flow.seerbitapi.com. | + + + **Response: 200 OK** + + ```json + + { + "data": { + "bearerToken": "..." + } + } + + ``` + + Save `data.bearerToken` as `{{pocketAuthToken}}` — used as the `Authorization: Bearer` value on *Initiate Single Payout*, *Initiate Bulk Payout*, and *Confirm Payout with OTP*. This is the same login and token as *Authenticate* in the Pocket folder — kept as one shared variable, `{{pocketAuthToken}}`, and kept distinct from `{{BearerToken}}` (the OAuth token used everywhere else in this collection). + + + **Note:** this is the only endpoint in this collection that authenticates with an email/password pair rather than an API key or OAuth token. + operationId: post_authenticate-for-payout_46 + servers: + - url: https://seerbitapi.com + requestBody: + required: true + content: + application/json: + schema: type: object - properties: - sort: - type: object - properties: - sorted: - type: boolean - unsorted: - type: boolean - empty: - type: boolean - pageNumber: - type: integer - pageSize: - type: integer - offset: - type: integer - paged: - type: boolean - unpaged: - type: boolean - last: - type: boolean - totalElements: - type: integer - totalPages: - type: integer - sort: + examples: + authenticate-for-payout: + summary: Authenticate for Payout + value: + email: your-merchant-login-email@example.com + password: your-merchant-password + responses: + "200": + description: Successful response + security: + - BearerAuth: [] + /pocket/v2/payouts: + post: + tags: + - PAYOUT + summary: Initiate Single Payout + description: >- + Phase 1 of 2 — initiates a single payout. Validates the request + signature, encrypts the payload, and emails an OTP to the merchant; the + payout only moves money once that OTP is submitted to *Confirm Payout + with OTP*. + + + **Required headers** + + + | Header | Description | + + |---|---| + + | `Public-Key` | Your merchant public key (`{{publicKey}}`) | + + | `X-Seerbit-Signature` | HMAC-SHA256 of the exact raw JSON request body, computed with your merchant secret key (`{{SECRET_KEY}}`), hex-encoded. | + + | `Authorization` | `Bearer {{pocketAuthToken}}` — from *Authenticate for Payout* (same token as Pocket's *Authenticate*), not the OAuth `{{BearerToken}}`. | + + + **Body fields** + + + | Field | Type | Required | Description | + + |---|---|---|---| + + | `pocketId` | string | Yes | The Pocket to pay out from | + + | `reference` | string | Yes | Your unique reference for this payout. Re-submitting the same `reference` is idempotent — it returns the existing `payoutId` and a message that the OTP was already sent, rather than sending a new OTP. | + + | `currency` | string | Yes | Currency code | + + | `amount` | number | Yes | Amount to send | + + | `description` | string | No | Free-text note for the payout | + + | `accountNumber` | string | Yes | Recipient bank account number | + + | `bankCode` | string | Yes | Recipient bank's code — see *Bank List* | + + + **Response: 202 Accepted** + + ```json + + { + "payoutId": "PV2-ABCDEF123456", + "status": "PENDING_OTP", + "message": "OTP sent to registered email. Please confirm to proceed." + } + + ``` + + Save `payoutId` as the `{{payoutId}}` collection variable — it's the path parameter for *Confirm Payout with OTP*. + + + **Error responses:** + + - 401 Unauthorized — missing or invalid `X-Seerbit-Signature` + + - 400 Bad Request — missing `Public-Key` header + + - 400 Bad Request — missing/invalid required fields (e.g. "currency is required", "amount must be positive") + + + **Note:** this flow doesn't include a separate account-name-confirmation step before initiating — call *Account Enquiry* first if you want to verify the recipient's account name. + operationId: post_initiate-single-payout_47 + servers: + - url: https://seerbitapi.com + requestBody: + required: true + content: + application/json: + schema: type: object - properties: - sorted: - type: boolean - unsorted: - type: boolean - empty: - type: boolean - first: - type: boolean - numberOfElements: - type: integer - size: - type: integer - number: - type: integer - empty: - type: boolean - GenerateEncryptedSecretKeyResponse: - title: GenerateEncryptedSecretKeyRequest - type: object - example: - status: SUCCESS - data: - code: "00" - EncrytedSecKey: - encryptedKey: oAX1OeAlwNt9BI5VEwBLlxtWgL2WaLT9kTc4EMaaZgXMfdhHXaqqVgapnQSOO4OZM2oLRPtqjJzwNLEEGqFSvam8MFz06U4fl/5TVwfWLMsRHq4mML9ExIaXRVn3bVm8 - message: Successful - GenerateHashResponse: - title: GenerateHashResponse - type: object - example: - status: SUCCESS - data: - code: "00" - message: Successful - hash: - hash: ae18321b005df1b9f16ca8590425e213366da3ab1d8aa2fa30d78dfa6ab9850a - PaymentLinkFromCheckoutResponse: - title: PaymentLinkFromCheckoutResponse - type: object - example: - status: SUCCESS - data: - code: "00" - payments: - redirectLink: https://checkout.seerbitapi.com/#/?mid=SBTESTPUBK_9sN3TuLgW6a9redEfY48cKKkUa09Pz2u&paymentReference=39910902330P7WZ73QN - paymentStatus: "08" - message: Successful - CreateOrder201Response: - title: CreateOrderResponse - type: object - example: - status: SUCCESS - data: - code: "00" - message: Successful - products: - - amount: 100 - currency: NGN - productId: 1089162.0 - productDescription: FODD ITEM - paymentReference: 0w0eimkizc41602513327447 - orderId: wil61c8cd7 - createdAt: 2020-10-16T11:41:05.723 - updatedAt: 2020-10-16T11:41:05.723 - - amount: 300 - currency: NGN - productId: 3081869.0 - productDescription: SKIN CARE - paymentReference: 0w0eimkizc41602513327447 - orderId: wil9b10fbe - createdAt: 2020-10-16T11:41:07.17 - updatedAt: 2020-10-16T11:41:07.17 - UpdateOrder201Response: - title: CreateOrderResponse - type: object - example: - status: SUCCESS - data: - code: "00" - message: Successful - products: - - amount: 800 - currency: NGN - productId: 1089162.0 - productDescription: FODD ITEM UPDATE - paymentReference: 0w0eimkizc41602513327447 - orderId: wil0f47b62 - - amount: 400 - currency: NGN - productId: 3081869.0 - productDescription: SKIN CARE UPDATE TEST - paymentReference: 0w0eimkizc41602513327447 - orderId: wil1cc231f - - GetOrderByPublicKey201Response: - title: GetOrderByPublicKeyResponse - type: object - example: - status: SUCCESS - data: - code: "00" - message: Successful - products: - - amount: 100 - currency: NGN - productId: 1089162.0 - productDescription: FODD ITEM UPDATE - paymentReference: 0w0eimkizc41602513327447 - orderId: wil0f47b62 - createdAt: 2020-10-12T15:38:28 - updatedAt: 2020-10-17T21:56:54 - - amount: 300 - currency: NGN - productId: 1089162.0 - productDescription: FODD ITEM UPDATE - paymentReference: 0w0eimkizc41602513327447 - orderId: wil0f47b62 - createdAt: 2020-10-12T15:38:29 - updatedAt: 2020-10-17T21:56:54 - GetOrderByPublicKeyAndPaymentReference201Response: - title: GetOrderByPublicKeyResponse - type: object - example: - status: SUCCESS - data: - code: "00" - message: Successful - products: - - amount: 100 - currency: NGN - productId: 1089162.0 - productDescription: FODD ITEM UPDATE - paymentReference: 0w0eimkizc41602513327447 - orderId: wil0f47b62 - createdAt: 2020-10-12T15:38:28 - updatedAt: 2020-10-17T21:56:54 - - amount: 300 - currency: NGN - productId: 1089162.0 - productDescription: FODD ITEM UPDATE - paymentReference: 0w0eimkizc41602513327447 - orderId: wil0f47b62 - createdAt: 2020-10-12T15:38:29 - updatedAt: 2020-10-17T21:56:54 - GetOrderByPublicKeyAndOrderId201Response: - title: GetOrderByPublicKeyResponse - type: object - example: - status: SUCCESS - data: - code: "00" - message: Successful - products: - - amount: 100 - currency: NGN - productId: 1089162.0 - productDescription: FODD ITEM UPDATE - paymentReference: 0w0eimkizc41602513327447 - orderId: wil0f47b62 - createdAt: 2020-10-12T15:38:28 - updatedAt: 2020-10-17T21:56:54 - - amount: 300 - currency: NGN - productId: 1089162.0 - productDescription: FODD ITEM UPDATE - paymentReference: 0w0eimkizc41602513327447 - orderId: wil0f47b62 - createdAt: 2020-10-12T15:38:29 - updatedAt: 2020-10-17T21:56:54 - OTPMomoResponse: - title: OTPMomoResponse - type: object - example: - status: SUCCESS - data: - code: S20 - payments: - paymentReference: O456S5077987982QWEuWAT05M - linkingReference: CF580053381599564199316 - message: Transaction is pending - OTPMomo400Response: - title: OTPMomoResponse - type: object - example: - message: Bad Request - error: There has been a problem with reading or understanding the request. - CheckStatusResponse: - title: CheckStatusResponse - type: object - example: - status: SUCCESS - data: - code: S20 - payments: - redirectLink: http://checkout-seerbit.surge.sh - amount: 100 - internationalChargedAmount: 155.2 - mobilenumber: 8.033456599E9 - publicKey: SBTESTPUBK_PjQ5dFOi522L383MlsQYUMAe6cZYviTF - paymentType: CARD - productId: Foods - productDescription: RASPBERRY - maskedPan: 5123-45xx-xxxx-0008 - gatewayMessage: Transaction is pending - gatewayCode: S20 - gatewayref: F002672971602775508582 - mode: test - redirecturl: http://checkout-seerbit.surge.sh - channelType: Mastercard - sourceIP: 127.0.0.1:3456 - deviceType: Apple Laptop - cardBin: "512345" - lastFourDigits: "0008" - type: 3DSECURE - country: NG - currency: NGN - paymentReference: SSQ22POtAQMVC85EQWB8 - processorCode: S20 - processorMessage: Transaction is pending - reason: Transaction is pending - customers: - customerId: SBTfd3024f89b67e2f8a121 - customerName: Kola Victor - customerMobile: 8.033456599E9 - customerEmail: kolawole@gmail.com - message: Transaction is pending - TokenizeCardResponse: - title: CheckStatusResponse - type: object - example: - status: SUCCESS - data: - code: S20 - payments: - paymentReference: KES0092992991 - linkingReference: SEERBIT428813491603106540088 - status: TOKENIZED - card: - bin: "512345" - last4: "0008" - token: tk_fa12ee73-9807-4a8a-bc91-8e81ca3c47ce - TokenizeCard401Response: - title: CheckStatusResponse - type: object - example: - message: Invalid Authentication Token - error: INPUT - Refund201Response: - title: RefundResponse - type: object - example: - status: SUCCESS - data: - code: "00" - payments: - paymentReference: PREAUTH1244567890987654321CB0 - status: REFUNDED - card: - bin: "512345" - last4: "0008" - token: tk_40a0503d-4586-4220-a69e-c69cc9293016 - message: APPROVED - Cancel201Response: - title: CancelResponse - type: object - example: - status: SUCCESS - data: - code: "00" - payments: - paymentReference: PREAUTH1244567890987654321CB0 - status: CANCELLED - card: - bin: "512345" - last4: "0008" - message: APPROVED - - # start of subscription - InitiateSubscriptionResponse: - title: InitiateSubscriptionResponse - type: object - example: - status: SUCCESS - data: - code: S20 - payments: - paymentReference: TPR2181t55PER540RPP1U1W4392WO - linkingReference: F365652421603189345033 - redirectUrl: https://staging.seerbitapigateway.com/seerbit/card-dispatch?sredref=F365652421603189345033 - message: Transaction is pending - GetSubscriptionResponse: - title: GetSubscriptionResponse - type: object - example: - status: SUCCESS - data: - subscriptions: - publicKey: SBTESTPUBK_9sN3TuLgW6a9redEfY48cKKkUa09Pz2u - amount: 100 - country: NG - customerId: SBT4d26d47dcb33f9430507 - cardName: Kolade Samuel - cardNumber: 5123-45xx-xxxx-0008 - plan: c6d4096c8244b5e0dbda - status: INACTIVE - billingId: TPR2181t55PER542RPP1U1W4391WO - authorizationCode: 5f818a9f1191c423446b - startDate: 2020-02-25 00:00:00 - createdAt: 1601385265000 - code: "00" - message: Successful - # create a plan - CreatePlanRequest: - type: object - required: - - productId - - productDescription - - amount - - billingCycle - - limit - - publicKey - - country - - currency - - allowPartialDebit - properties: - productId: - type: string - description: The name of the plan. - productDescription: - type: string - description: The description of the plan. - amount: - type: string - description: The amount for the plan. - billingCycle: - type: string - description: The billing cycle (e.g., HOURLY). - limit: - type: integer - description: The maximum number of cycles. - publicKey: - type: string - description: The merchant public key. - country: - type: string - description: The country code. - currency: - type: string - description: The currency code. - allowPartialDebit: - type: boolean - description: Whether partial debit is allowed. - - CreatePlanResponse: - type: object - properties: - payload: - type: object - properties: - country: - type: string - createdAt: - type: integer - amount: - type: number - productId: - type: string - billingCycle: - type: string - currency: - type: string - payUrl: - type: string - details: + examples: + initiate-single-payout: + summary: Initiate Single Payout + value: + pocketId: SBP0016878 + reference: PAY-SINGLE-Ideal-001 + currency: NGN + amount: 10 + description: Single Payout API test + accountNumber: "0522376248" + bankCode: "000013" + responses: + "200": + description: Successful response + security: + - BearerAuth: [] + "/pocket/v2/payouts/{payoutId}/confirm": + post: + tags: + - PAYOUT + summary: Confirm Payout with OTP + description: >- + Phase 2 of 2 — submits the OTP emailed to the merchant during *Initiate + Single Payout* / *Initiate Bulk Payout*. On success, SeerBit decrypts + the payload and dispatches it for processing; this is what actually + moves money. + + + **Path parameter** + + + | Parameter | Description | + + |---|---| + + | `payoutId` (in URL path) | From the Initiate call's response, saved to `{{payoutId}}` | + + + **Body fields** + + + | Field | Type | Required | Description | + + |---|---|---|---| + + | `otp` | string | Yes | 6-digit code emailed to the merchant. Expires 5 minutes after being issued. It's presumably sent to the email used to log in via *Authenticate for Payout*, though this isn't stated explicitly. | + + + **Response: 200 OK** + + ```json + + { + "payoutId": "PV2-ABCDEF123456", + "status": "QUEUED", + "message": "Payout confirmed and queued for processing", + "batchId": "BATCH-XYZ" + } + + ``` + + + **Error responses (400):** + + - Payout not found + + - Unauthorized access + + - Not in `PENDING_OTP` state + + - OTP has expired + + - Invalid OTP + + - Insufficient funds + operationId: post_confirm-payout-with-otp_48 + servers: + - url: https://seerbitapi.com + parameters: + - name: payoutId + in: path + required: true + description: Value of payoutId + schema: + type: string + requestBody: + required: true + content: + application/json: + schema: type: object - properties: - country: - type: string - amount: - type: number - productId: - type: string - allowPartialDebit: - type: boolean - payLinkUrl: - type: string - publicKey: - type: string - createdAt: - type: integer - trialDuration: - type: integer - trialPeriod: - type: boolean - billingCycle: - type: string - limit: - type: integer - planId: - type: string - currency: - type: string - id: - type: integer - productDescription: - type: string - updatedAt: - nullable: true - status: - type: string - publicKey: - type: string - plan: - type: string - productDescription: - type: string - message: - type: string - status: - type: string - responseCode: - type: string - - # get merchant plans - GetMerchantSubscriptionResponse: - type: object - properties: - status: - type: string - data: - type: object - properties: - subscriptions: - type: array - items: - type: object - properties: - publicKey: - type: string - amount: - type: string - country: - type: string - customerId: - type: string - cardName: - type: string - cardNumber: - type: string - plan: - type: string - status: - type: string - billingId: - type: string - authorizationCode: - type: string - startDate: - type: string - createdAt: - type: integer - code: - type: string - message: - type: string - # charge subscription - ChargeSubscriptionRequest: - type: object - required: - - amount - - publicKey - - email - - allowPartialDebit - - authorizationCode - - paymentReference - - currency - properties: - amount: - type: string - publicKey: - type: string - email: - type: string - allowPartialDebit: - type: boolean - authorizationCode: - type: string - paymentReference: - type: string - currency: - type: string - - ChargeSubscriptionResponse: - type: object - properties: - status: - type: string - data: - type: object - properties: - code: - type: string - payments: + examples: + confirm-payout-with-otp: + summary: Confirm Payout with OTP + value: + otp: "123456" + responses: + "200": + description: Successful response + security: + - BearerAuth: [] + /pocket/v2/payouts#initiate-bulk-payout: + post: + tags: + - PAYOUT + summary: Initiate Bulk Payout + description: >- + Phase 1 of 2 — initiates a payout to multiple recipients in one call, + sharing a single OTP confirmation. Same endpoint as *Initiate Single + Payout*; a non-empty `transfers` array is what puts the request in bulk + mode. + + + **Required headers:** same as *Initiate Single Payout* — `Public-Key`, `X-Seerbit-Signature` (HMAC-SHA256 of the raw body using `{{SECRET_KEY}}`), `Authorization: Bearer {{pocketAuthToken}}` from *Authenticate for Payout*. + + + **Body fields** + + + | Field | Type | Required | Description | + + |---|---|---|---| + + | `pocketId` | string | Yes | The Pocket to pay out from | + + | `batchReference` | string | Yes | Your unique reference for the whole batch. Re-submitting the same `batchReference` is idempotent — returns the existing `payoutId` rather than creating a new batch. | + + | `transfers` | array | Yes | One entry per recipient — see fields below. Must be non-empty to trigger bulk mode. | + + | `transfers[].reference` | string | Yes | Your unique reference for this individual transfer within the batch | + + | `transfers[].currency` | string | Yes | Currency code | + + | `transfers[].amount` | number | Yes | Amount to send to this recipient | + + | `transfers[].description` | string | No | Free-text note for this transfer | + + | `transfers[].accountNumber` | string | Yes | Recipient bank account number | + + | `transfers[].bankCode` | string | Yes | Recipient bank's code — see *Bank List* | + + + **Response: 202 Accepted** — same shape as *Initiate Single Payout*: one `payoutId` for the whole batch, `status: "PENDING_OTP"`. + + + **Note:** there's no documented endpoint for checking an individual transfer's outcome within a batch — only the batch-level `batchId` returned by *Confirm Payout with OTP*. + operationId: post_initiate-bulk-payout_49 + servers: + - url: https://seerbitapi.com + requestBody: + required: true + content: + application/json: + schema: type: object - properties: - code: - type: string - message: - type: string - paymentReference: - type: string - publicKey: - type: string - amount: - type: string - currency: - type: string - country: - type: string - email: - type: string - productDescription: - type: string - message: - type: string - # get customer subscriptions - GetCustomerSubscriptionResponse: - type: object - properties: - status: - type: string - data: - type: object - properties: - subscriptions: - type: array - items: - type: object - properties: - publicKey: - type: string - amount: - type: string - country: - type: string - customerId: - type: string - cardName: - type: string - cardNumber: - type: string - plan: - type: string - status: - type: string - billingId: - type: string - authorizationCode: - type: string - startDate: - type: string - createdAt: - type: integer - code: - type: string - - # update subscription - UpdateCustomerSubscriptionRequest: - type: object - required: - - amount - - currency - - country - - mobileNumber - - billingId - - publicKey - - status - properties: - amount: - type: string - currency: - type: string - country: - type: string - mobileNumber: - type: string - billingId: - type: string - publicKey: - type: string - status: - type: string - - UpdateCustomerSubscriptionResponse: - type: object - properties: - status: - type: string - data: - type: object - properties: - subscriptions: + examples: + initiate-bulk-payout: + summary: Initiate Bulk Payout + value: + pocketId: SBP0003440 + batchReference: BATCH-PAY-001 + transfers: + - reference: BULK-REF-001 + currency: NGN + amount: 500 + description: Payment to vendor A + accountNumber: "0522376248" + bankCode: "000013" + - reference: BULK-REF-002 + currency: NGN + amount: 500 + description: Payment to vendor B + accountNumber: "0522376248" + bankCode: "000013" + responses: + "200": + description: Successful response + security: + - BearerAuth: [] + /auth/login: + post: + tags: + - PARTNERS API + summary: Partner Login + description: >- + Authenticates a SeerBit partner and returns a Bearer token for the + Partners API endpoints below (a separate token from the merchant + `BearerToken` used elsewhere in this collection). No auth required to + call it. + + + **Body fields** + + + | Field | Type | Required | Description | + + |---|---|---|---| + + | `email` | string | Yes | Partner's registered email | + + | `password` | string | Yes | Partner account password | + operationId: post_partner-login_50 + servers: + - url: https://seerbitapi.com + requestBody: + required: true + content: + application/json: + schema: + type: object + examples: + partner-login: + summary: Partner Login + value: + email: partner@example.com + password: "{{partnerPassword}}" + responses: + "200": + description: Successful response + security: + - BearerAuth: [] + /auth/password: + post: + tags: + - PARTNERS API + summary: Request Password Reset + description: >- + Triggers a password-reset email containing an OTP, which you then pass + to *Reset Password*. No auth required. + + + **Body fields** + + + | Field | Type | Required | Description | + + |---|---|---|---| + + | `email` | string | Yes | Registered partner email | + operationId: post_request-password-reset_51 + servers: + - url: https://seerbitapi.com + requestBody: + required: true + content: + application/json: + schema: + type: object + examples: + request-password-reset: + summary: Request Password Reset + value: + email: partner@example.com + responses: + "200": + description: Successful response + security: + - BearerAuth: [] + /auth/reset: + post: + tags: + - PARTNERS API + summary: Reset Password + description: >- + Completes a password reset using the OTP emailed by *Request Password + Reset*. + + + **Body fields** + + + | Field | Type | Required | Description | + + |---|---|---|---| + + | `email` | string | Yes | Registered partner email | + + | `newPassword` | string | Yes | Minimum 8 characters, must include an uppercase letter and a special character | + + | `otp` | string | Yes | Code sent by *Request Password Reset* | + operationId: post_reset-password_52 + servers: + - url: https://seerbitapi.com + requestBody: + required: true + content: + application/json: + schema: type: object - properties: - publicKey: - type: string - amount: - type: string - country: - type: string - customerId: - type: string - cardName: - type: string - cardNumber: - type: string - plan: - type: string - status: - type: string - billingId: - type: string - authorizationCode: - type: string - startDate: - type: string - createdAt: - type: integer - code: - type: string - message: - type: string - - # end of subscription + examples: + reset-password: + summary: Reset Password + value: + email: partner@example.com + newPassword: "{{newPartnerPassword}}" + otp: "123456" + responses: + "200": + description: Successful response + security: + - BearerAuth: [] + /api/v1/business/invite: + post: + tags: + - PARTNERS API + summary: Invite Business + description: >- + Invites a new sub-merchant business under this partner account. Auth is + via a Public-Key header rather than Bearer alone. + + + **Body fields** + + + | Field | Type | Required | Description | + + |---|---|---|---| + + | `name` | string | Yes | Contact person's name at the business | + + | `businessName` | string | Yes | Business's registered name | + + | `email` | string | Yes | Business contact email — the invite is sent here | + + | `countryCode` | string | Yes | Defaults to `NG`; change only if the business operates outside Nigeria | + + | `partnerId` | string | Yes | Your partner ID — don't modify this | + operationId: post_invite-business_53 + servers: + - url: https://seerbitapi.com + requestBody: + required: true + content: + application/json: + schema: + type: object + examples: + invite-business: + summary: Invite Business + value: + name: Jane Doe + businessName: Acme Ltd + email: jane@acme.com + countryCode: NG + partnerId: "{{partnerId}}" + responses: + "200": + description: Successful response + security: + - BearerAuth: [] + /api/v1/business/SBT0050/invite: + get: + tags: + - PARTNERS API + summary: Get Business Invite + description: Lists businesses invited under a given business/partner ID. + `SBT0050` in the saved URL is the example ID shown in the doc — replace + it with a real one. Returns each invited business's ID, name, and email. + operationId: get_get-business-invite_54 + servers: + - url: https://seerbitapi.com + responses: + "200": + description: Successful response + security: + - BearerAuth: [] + /api/v1/business/commission: + post: + tags: + - PARTNERS API + summary: Set Business Commission + description: >- + Sets the commission SeerBit deducts on transactions for one sub-merchant + business. Auth is via a Public-Key header rather than Bearer alone. + + + **Body fields** + + + | Field | Type | Required | Description | + + |---|---|---|---| + + | `businessId` | string | Yes | The sub-merchant business to set commission for | + + | `mccPercentage` | number | Yes | Commission percentage charged per transaction | + + | `cappedAmount` | string | Yes | Maximum commission amount per transaction, regardless of percentage | + operationId: post_set-business-commission_55 + servers: + - url: https://seerbitapi.com + requestBody: + required: true + content: + application/json: + schema: + type: object + examples: + set-business-commission: + summary: Set Business Commission + value: + cappedAmount: "10000" + mccPercentage: "1.5" + businessId: "{{businessId}}" + responses: + "200": + description: Successful response + security: + - BearerAuth: [] + /api/v1/business/password: + post: + tags: + - PARTNERS API + summary: Change Partner Password + description: >- + Changes the logged-in partner's password. Requires Bearer auth (the + partner token from *Partner Login*). + + + **Body fields** + + + | Field | Type | Required | Description | + + |---|---|---|---| + + | `currentPassword` | string | Yes | Partner's current password | + + | `newPassword` | string | Yes | Must meet the same complexity rules as *Reset Password* | + operationId: post_change-partner-password_56 + servers: + - url: https://seerbitapi.com + requestBody: + required: true + content: + application/json: + schema: + type: object + examples: + change-partner-password: + summary: Change Partner Password + value: + currentPassword: "{{partnerPassword}}" + newPassword: "{{newPartnerPassword}}" + responses: + "200": + description: Successful response + security: + - BearerAuth: [] + /webhooks: + post: + tags: + - WEBHOOKS (REFERENCE) + summary: refund + description: >- + **Reference only — not a request you send.** This documents the `refund` + payload SeerBit POSTs to *your* configured webhook URL after the + matching event happens; there is nothing at SeerBit to call here. The + body below is the shape of what you'll receive. + + + Sent when a refund is processed against one of your transactions (full or partial, per `type`). + + + Your endpoint must respond with HTTP 200 within the acknowledgment window (see this folder's description for V1 vs V2 timing/format) or SeerBit will retry. + operationId: post_refund_57 + servers: + - url: https://seerbitapi.com + requestBody: + required: true + content: + application/json: + schema: + type: object + examples: + refund: + summary: refund + value: + eventType: refund + eventDate: 2026-05-01 12:55:57 + eventId: 3fa85f64-5717-4562-b3fc-2c963f66afa6 + data: + amount: "5000.00" + createdAt: 2026-05-01T12:55:00Z + transactionRef: payment_reference8 + description: Customer requested refund + type: FULL_REFUND + mode: LIVE + updatedAt: 2026-05-01T12:55:57Z + responses: + "200": + description: Successful response + security: + - BearerAuth: [] + /webhooks#dispute: + post: + tags: + - WEBHOOKS (REFERENCE) + summary: dispute + description: >- + **Reference only — not a request you send.** This documents the + `dispute` payload SeerBit POSTs to *your* configured webhook URL after + the matching event happens; there is nothing at SeerBit to call here. + The body below is the shape of what you'll receive. + + + Sent when a chargeback/dispute is raised against one of your transactions; `evidence` carries whatever supporting material is attached. + + + Your endpoint must respond with HTTP 200 within the acknowledgment window (see this folder's description for V1 vs V2 timing/format) or SeerBit will retry. + operationId: post_dispute_58 + servers: + - url: https://seerbitapi.com + requestBody: + required: true + content: + application/json: + schema: + type: object + examples: + dispute: + summary: dispute + value: + eventType: dispute + eventDate: 2026-05-01 12:56:07 + eventId: 3fa85f64-5717-4562-b3fc-2c963f66afa6 + data: + evidence: + - images: + - image: https://example.com/evidence1.png + responses: + "200": + description: Successful response + security: + - BearerAuth: [] + /webhooks#transaction: + post: + tags: + - WEBHOOKS (REFERENCE) + summary: transaction + description: >- + **Reference only — not a request you send.** This documents the + `transaction` payload SeerBit POSTs to *your* configured webhook URL + after the matching event happens; there is nothing at SeerBit to call + here. The body below is the shape of what you'll receive. + + + Sent for a card payment (e.g. from Standard Checkout or Tokenization) reaching a final state — this is the async counterpart to polling *Check Payment Status*. + + + Your endpoint must respond with HTTP 200 within the acknowledgment window (see this folder's description for V1 vs V2 timing/format) or SeerBit will retry. + operationId: post_transaction_59 + servers: + - url: https://seerbitapi.com + requestBody: + required: true + content: + application/json: + schema: + type: object + examples: + transaction: + summary: transaction + value: + eventType: transaction + eventDate: 2026-07-01 08:56:16 + eventId: 3fa85f64-5717-4562-b3fc-2c963f66afa6 + data: + amount: 5000 + reference: payment_reference8 + gatewayMessage: Successful + publicKey: "{{publicKey}}" + businessName: Your Business + fee: 50 + channelType: MASTERCARD + maskedPan: 5123-40xx-xxxx-0008 + fullname: Jane Doe + email: customer@example.com + gatewayReference: GW-REF-001 + country: NG + currency: NGN + paymentType: CARD + gatewayCode: "00" + code: "00" + createdAt: 2026-07-01T08:56:00Z + updatedAt: 2026-07-01T08:56:16Z + responses: + "200": + description: Successful response + security: + - BearerAuth: [] + /webhooks#transactionwallet: + post: + tags: + - WEBHOOKS (REFERENCE) + summary: transaction.wallet + description: >- + **Reference only — not a request you send.** This documents the + `transaction.wallet` payload SeerBit POSTs to *your* configured webhook + URL after the matching event happens; there is nothing at SeerBit to + call here. The body below is the shape of what you'll receive. + + + Sent when a bank transfer lands on a Virtual Account or Pocket — this is what tells you a *Get Payments* or Pocket balance actually changed, without you having to poll. + + + Your endpoint must respond with HTTP 200 within the acknowledgment window (see this folder's description for V1 vs V2 timing/format) or SeerBit will retry. + operationId: post_transactionwallet_60 + servers: + - url: https://seerbitapi.com + requestBody: + required: true + content: + application/json: + schema: + type: object + examples: + transactionwallet: + summary: transaction.wallet + value: + eventType: transaction.wallet + eventDate: 2026-05-01 12:52:28 + eventId: 3fa85f64-5717-4562-b3fc-2c963f66afa6 + data: + amount: 5000 + fee: 0 + mobile: "08012345678" + reference: va_ref_001 + gatewayMessage: APPROVED + bankCode: "000016" + description: Wallet funding + type: Transfer + fullname: Jane Doe + email: customer@example.com + country: NG + currency: NGN + creditAccountName: Jane Doe + creditAccountNumber: "1234567890" + originatorAccountnumber: "0987654321" + originatorName: John Smith + narration: Funding + createdAt: 2026-05-01T12:52:00Z + updatedAt: 2026-05-01T12:52:28Z + responses: + "200": + description: Successful response + security: + - BearerAuth: [] + /webhooks#transactionrecurrent: + post: + tags: + - WEBHOOKS (REFERENCE) + summary: transaction.recurrent + description: >- + **Reference only — not a request you send.** This documents the + `transaction.recurrent` payload SeerBit POSTs to *your* configured + webhook URL after the matching event happens; there is nothing at + SeerBit to call here. The body below is the shape of what you'll + receive. + + + Sent when a subscription's scheduled charge (from *Create Plan* / *Charge Subscription*) completes. + + + Your endpoint must respond with HTTP 200 within the acknowledgment window (see this folder's description for V1 vs V2 timing/format) or SeerBit will retry. + operationId: post_transactionrecurrent_61 + servers: + - url: https://seerbitapi.com + requestBody: + required: true + content: + application/json: + schema: + type: object + examples: + transactionrecurrent: + summary: transaction.recurrent + value: + eventType: transaction.recurrent + eventDate: 2026-05-01 12:50:33 + eventId: 3fa85f64-5717-4562-b3fc-2c963f66afa6 + data: + amount: 100 + mobile: "08012345678" + reference: sub_charge_ref_001 + publicKey: "{{publicKey}}" + description: Subscription charge + productId: product222 + maskedPan: 5123-40xx-xxxx-0008 + email: customer@example.com + country: NG + narration: Recurrent + createdAt: 2026-05-01T12:50:00Z + updatedAt: 2026-05-01T12:50:33Z + responses: + "200": + description: Successful response + security: + - BearerAuth: [] + /webhooks#transactionrecurringdebit: + post: + tags: + - WEBHOOKS (REFERENCE) + summary: transaction.recurring.debit + description: >- + **Reference only — not a request you send.** This documents the + `transaction.recurring.debit` payload SeerBit POSTs to *your* configured + webhook URL after the matching event happens; there is nothing at + SeerBit to call here. The body below is the shape of what you'll + receive. + + + Sent for a subsequent automated debit against a stored token (e.g. *Charge Authorization Token*) outside the subscription schedule. + + + Your endpoint must respond with HTTP 200 within the acknowledgment window (see this folder's description for V1 vs V2 timing/format) or SeerBit will retry. + operationId: post_transactionrecurringdebit_62 + servers: + - url: https://seerbitapi.com + requestBody: + required: true + content: + application/json: + schema: + type: object + examples: + transactionrecurringdebit: + summary: transaction.recurring.debit + value: + eventType: transaction.recurring.debit + eventDate: 2026-05-01 12:55:32 + eventId: 3fa85f64-5717-4562-b3fc-2c963f66afa6 + data: + amount: 5000 + reference: charge_token_ref_001 + gatewayMessage: Successful + publicKey: "{{publicKey}}" + description: Authorised charge + channelType: Recurring Debit + maskedPan: 5123-40xx-xxxx-0008 + type: TOKEN + fullname: Jane Doe + email: customer@example.com + country: NG + currency: NGN + narration: Authorised charge + paymentType: card + createdAt: 2026-05-01T12:55:00Z + updatedAt: 2026-05-01T12:55:32Z + responses: + "200": + description: Successful response + security: + - BearerAuth: [] +components: securitySchemes: - Bearer: - type: apiKey - name: Authorization - in: header - Basic: + BearerAuth: type: http - scheme: basic - examples: - CreateOrderRequest: - summary: An example of order after payment request payload - value: - paymentReference: 0w0eimkizc41602513327447 - publicKey: SBTESTPUBK_9sN3TuLgW6a9redEfY48cKKkUa09Pz2u - orders: - - amount: "100.00" - productId: 1089162.0 - productDescription: FODD ITEM - currency: NGN - - amount: "300.00" - productId: 3081869.0 - productDescription: SKIN CARE - currency: NGN - CreateOrderRequest2: - summary: An example of order before payment request payload - value: - email: test@mvaa.com - publicKey: SBTESTPUBK_9sN3TuLgW6a9redEfY48cKKkUa09Pz2u - paymentReference: 2PPTG108Q13432E29P23R5L6W93I9 - fullName: "" - orderType: BULK_BULK - mobileNumber: "" - callbackUrl: http://mvaa.ebs-rcm.com/payment - country: NG - currency: NGN - amount: "250.00" - orders: - - orderId: "1235567-113227878-64332q" - currency: NGN - amount: "125.00" - productId: "0008162" - productDescription: FRSC PLATE NUMBER - - orderId: "2211567-2230578-754332" - currency: NGN - amount: "125.00" - productId: "4030018" - productDescription: WEIGHING AND ADMIN CHARGES - - cardRequestPayload: - summary: An example of card request payload - value: - publicKey: YOUR_PUBLIC_KEY - amount: "100.00" - fee: "10" - fullName: Kola Victor - mobileNumber: 8.028089445E9 - currency: NGN - country: NG - paymentReference: STG10948E242P65R569A20tAQM85EQW4 - email: kolawole@gmail.com - productId: Foods - productDescription: RASPBERRY - clientAppCode: kpp64 - redirectUrl: http://checkout-seerbit.surge.sh - paymentType: CARD - scheduleId: "" - channelType: Mastercard - deviceType: Apple Laptop - sourceIP: 127.0.0.1:3456 - cardNumber: "5123450000000008" - cvv: "100" - expiryMonth: "05" - expiryYear: "21" - pin: "####" - source: "" - retry: "false" - # invoiceNumber: 10000123abc123 - # isCvv: "true" - accountRequestPaylaod: - summary: An example of account request payload - value: - publicKey: SBTESTPUBK_9sN3TuLgW6a9redEfY48cKKkUa09Pz2u - amount: "2000.00" - fee: "10" - fullName: Samuel Tosin - mobileNumber: 8.028089445E9 - currency: NGN - country: NG - paymentReference: VERS2FURTHERTESTAc029456784 - email: kolawole@gmail.com - productId: Foods - productDescription: "Uba Account Transaction " - clientAppCode: kpp64 - # channelType: BANK_ACCOUNT - redirectUrl: https://checkout.seerbit.com - # callbackUrl: https://checkout.seerbit.com - # paymentType: ACCOUNT - # deviceType: Apple Laptop - # sourceIP: 127.0.0.1:3456 - # accountName: kolawole Alagbon - # accountNumber: "1234567890" - # bankCode: "033" - # bvn: "12345678901" - # dateOfBirth: 4011984.0 - # source: "" - # retry: "false" - # invoiceNumber: 1234567891abc123ac - transferRequestPaylaod: - summary: An example of transfer request payload - value: - publicKey: Public-Key - fullName: Samuel Teas - amount: "20.00" - # fee: 10 - redirectUrl: http://checkout-seerbit.surge.sh - # sourceIP: 127.0.0.1:3456 - # cardNumber: 5123450000000008 - # isCvv: "true" - # pocketReference: "12345678543" - callbackUrl: https://checkout.seerbit.com - # accountName: kolawole Alagbon - # accountNumber: "1234567890" - # bankCode: "033" - # bvn: "12345678901" - # amountControl: FIXEDAMOUNT - # channelType: Mastercard - mobileNumber: "08033456539" - # cvv: "100" - # expiryMonth: 5 - # expiryYear: 21 - # pin: "####" - # type: 3DSECURE - # source: "" - currency: NGN - country: NG - paymentReference: L16FDE3311RSEY2AUA3QWERQPU - email: kolawole@gmail.com - # productId: Foods - # productDescription: RASPBERRY - # clientAppCode: kpp64 - paymentType: TRANSFER - # deviceType: Apple Laptop - # walletDaysActive: "1" - # retry: "false" - # invoiceNumber: 1234567890abc123ac - momoRequestPaylaod: - summary: An example of momo request payload - value: - fullName: john doe - email: johndoe@gmail.com - mobileNumber: 2.48360953E8 - publicKey: SBPUBK_QGOX9NBAHWDYY1PAFSG2PTDOSSZYEWXM - paymentReference: O456S5077907982QWEuWAT05M - deviceType: nokia 3310 - sourceIP: 1.0.1.0 - currency: GHS - productDescription: snacks - country: GH - network: MTN - voucherCode: "" - fee: "0.00" - amount: "1.00" - productId: grocery - paymentType: MOMO - ussdRequestPaylaod: - summary: An example of ussd request payload - value: - fullName: FirstName LastName - email: firstname@mail.com - mobileNumber: customer mobile number - publicKey: YOUR_PUBLIC_KEY - paymentReference: dsffererer - callbackUrl: http://yourdomain.com - redirectUrl: http://yourdomain.com - currency: NGN - country: NG - amount: "100" - paymentType: USSD - bankCode: "033" - AuthoriseRequest: - summary: An example of Authorise Request payload - value: - paymentReference: PREAUTH124456789798765k3K1CB0 - publicKey: SBTESTPUBK_dhrpzbRpR34l6VmqkCFOKA94L5E1jSTu - cardNumber: "5123450000000008" - cvv: "100" - expiryMonth: "05" - expiryYear: "21" - currency: NGN - country: NG - productDescription: preauth test capture - amount: "100.00" - email: johndoe@gmail.com - fullName: john doe - AuthorisewithCardTokenRequest: - summary: AuthorisewithCardToken Request payload - value: - paymentReference: 30451A789S987643128hgffsfP6K - publicKey: SBTESTPUBK_dhrpzbRpR34l6VmqkCFOKA94L5E1jSTu - cardToken: tk_b0a4b2f6-9ac1-485b-b031-9e018d9479bd - currency: NGN - country: NG - productDescription: preauth test capture - amount: "1.00" - email: johndoe@gmail.com - fullName: john doe - callbackUrl: https://google.com - 3DSAuthoriseRequest: - summary: 3DSAuthorise Request payload - value: - paymentReference: 30451B789S987643108hgfdsfP6W - publicKey: SBPUBK_OMX6ZNRZPLIHQ9Y0ZG6FCNR0EAYIGIAT - cardNumber: "5242820813772165" - cvv: "865" - expiryMonth: "02" - expiryYear: "22" - currency: NGN - country: NG - productDescription: preauth test capture - amount: "1.00" - email: johndoe@gmail.com - fullName: john doe - callbackUrl: https://google.com - TokenizeaCardRequest: - summary: 3DSAuthorise Request payload - value: - publicKey: SBPUBK_OMX6ZNRZPLIHQ9Y0ZG6FCNR0EAYIGIAT - amount: "0.00" - fullName: john doe - mobileNumber: 8.033456599E9 - currency: NGN - country: NG - paymentReference: KES0092992991 - email: johndoe@gmail.com - productId: Foods - productDescription: RASPBERRY - cardNumber: "5123450000000008" - cvv: "100" - expiryMonth: "05" - expiryYear: "21" - InitiateSubscriptionRequest: - summary: Initiate Subscription Request payload - value: - publicKey: SBTESTPUBK_9sN3TuLgW6a9redEfY48cKKkUa09Pz2u - paymentReference: TPR2181t55PKR540RPP1U1W4392WO - planId: "" - cardNumber: "5123450000000008" - expiryMonth: "05" - callbackUrl: https://www.google.com - expiryYear: "21" - cvv: "100" - amount: "1000.00" - currency: NGN - productDescription: Pilot Test Subscription - productId: Terrain - country: NG - startDate: "2020-02-25 00:00:00" - cardName: Kolade Samuel - billingCycle: WEEKLY - email: akintoyekolawole@gmail.com - mobileNumber: 08033456500 - customerId: "12345678901234" - pin: 0999 - type: 3DSECURE - billingPeriod: "1" - subscriptionAmount: true - ChargeCardRequest: - summary: 3DSAuthorise Request payload - value: - publicKey: SBTESTPUBK_dhrpzbRpR34l6VmqkCFOKA94L5E1jSTu - amount: "10.00" - fullName: Diei Okechukwu Peter - mobileNumber: 8.030540611E9 - currency: NGN - country: NG - paymentReference: NGN0000037Q35 - email: okechukwu.diei2@gmail.com - productId: Foods - productDescription: RASPBERRY - cardNumber: "5123450000000008" - expiryMonth: "05" - expiryYear: "21" - UpdateOrderRequest: - summary: 3DSAuthorise Request payload - value: - paymentReference: 0w0eimkizc41602513327447 - publicKey: SBTESTPUBK_9sN3TuLgW6a9redEfY48cKKkUa09Pz2u - orders: - - amount: "800.00" - productId: 1089162.0 - productDescription: FODD ITEM UPDATE - currency: NGN - orderId: wil0f47b62 - - amount: "400.00" - productId: 3081869.0 - productDescription: SKIN CARE UPDATE TEST - currency: NGN - orderId: wil1cc231f - InitiateAccountPaymentResponse: - summary: An example of account response payload - value: - status: SUCCESS - data: - code: "20" - payments: - paymentReference: VERS2FURTHERTESTAc722456784 - linkingReference: F282866521599191373372 - message: Transaction is pending - InitiateUSSDPaymentResponse: - summary: An example of USSD response payload - value: - status: SUCCESS - data: - code: "20" - payments: - paymentReference: VERS2FURTHERTESTAc722456784 - linkingReference: F282866521599191373372 - providerreference: 8206 - ussdDailCode: "*901*000*8206" - message: null - InitiateAccountPaymentS12Response: - summary: An example of account response S12 payload - value: - status: SUCCESS - data: - code: "S12" - payments: {} - message: Cant process at this moment, please try again Transaction reference must be unique - InitiateAccountPaymentS7Response: - summary: An example of account response S7 payload - value: - status: SUCCESS - data: - code: "S7" - payments: {} - message: Cant process at this moment, please try again Invalid Amount = Amount cannot be less than 100.0 - InitiateCardTransactionsResponse: - summary: An example of card response payload - value: - status: SUCCESS - data: - code: "S20" - payments: - paymentReference: STG10342E29R569A22QAQMP5EQW8 - linkingReference: F569896131602965690855 - redirectUrl: https://staging.seerbitapigateway.com/seerbit/card-dispatch?sredref=F569896131602965690855 - message: Transaction is pending - InitiateCardTransactionsS18Response: - summary: An example of card S18 response payload - value: - status: SUCCESS - data: - code: "S18" - payments: {} - message: Transaction reference must be unique - InitiateCardTransactionsS12Response: - summary: An example of card S12 response payload - value: - status: SUCCESS - data: - code: "S12" - payments: {} - message: Transaction Failed - InitiateTransferResponse: - summary: An example of transfer response payload - value: - status: SUCCESS - data: - code: "00" - payments: - paymentReference: NGN0100067Q35 - amount: 20 - walletName: SeerBit - wallet: "9956411533" - bankName: Providus Bank - accountNumber: "9956411533" - message: ACCOUNT OPENED SUCCESSFULLY - GhanaMomoResponse: - summary: An example of momo response payload - value: - status: SUCCESS - data: - code: NIP - payments: - paymentReference: O456S5077987982QWEuWAT05M - linkingReference: CF580053381599564199316 - message: Kindly Enter Otp - 404Response: - summary: An example of 404 response payload - value: - error: Not Found - 404Response1: - summary: An example of 404 response payload - value: - message: Not Found - error: The server can not find the requested resource - 404Response2: - summary: An example of 404 response payload - value: - message: Subscription Not Found - error: NOT_FOUND - 401Response: - summary: An example of 401 response payload - value: - message: Invalid Authentication Token - error: INPUT - 400Response: - summary: An example of 400 response payload - value: - message: Bad Request - error: There has been a problem with reading or understanding the request. - - 403Response1: - summary: An example of 403 response payload - value: - message: Header Token Missing - error: PERMISSION - 403Response: - summary: An example of 403 response payload - value: - message: Confirm Merchant Environment - error: PERMISSION - InitiatePayment400Response: - summary: An example of 400 response payload - value: - message: Payment Type cannot be null - error: INPUT - InitiatePayment400InputResponse: - summary: An example of 400 response payload - value: - message: Bad Request - error: There has been a problem with reading or understanding the request. - 500Response: - summary: An example of 500 response payload - value: - message: Internal Server Error - error: PROCESSING - 500Response1: - summary: An example of 500 response payload - value: - message: Transaction with reference exists - error: PROCESSING - 500Response2: - summary: An example of 500 response payload - value: - message: Transaction with paymentReference does not exist - error: PROCESSING - 500Response3: - summary: An example of 500 response payload - value: - message: Transaction with paymentReference does not exist - error: PROCESSING - 500Response4: - summary: An example of 500 response payload - value: - message: No transaction found - error: PROCESSING - 500Response5: - summary: An example of 500 response payload - value: - message: Transaction Exists - error: PROCESSING - PaymentLinkFromCheckout500Response: - summary: An example of PaymentLinkFromCheckout 500 response payload - value: - message: INVALID HASH - error: PROCESSING - PaymentLinkFromCheckout500Response1: - summary: An example of PaymentLinkFromCheckout 500 response payload - value: - message: Transaction Exists - error: PROCESSING - PaymentLinkFromCheckout500Response2: - summary: An example of PaymentLinkFromCheckout 500 response payload - value: - error: PROCESSING - CreateOrder404Response: - summary: An example of 404 response payload - value: - message: Not Found - error: The server can not find the requested resource - Order404Response1: - summary: An example of 404 response payload - value: - message: Transaction Not Found - error: NOT_FOUND - Order404Response2: - summary: An example of 404 response payload - value: - message: Orders Not Found - error: NOT_FOUND - Order403Response: - summary: An example of 403 response payload - value: - message: Header Token Missing - error: PERMISSION - OTPMomoResponse1: - summary: An example of 403 response payload - value: - status: SUCCESS - data: - code: S12 - payments: - reference: O456S5077907982QWEuWAT05M - linkingreference: CF630837081601460887752 - message: Header Token Missing - 403Response2: - summary: An example of 403 response payload - value: - status: ERROR - data: - code: S12 - message: Bad credentials = invalid public key - 403Response3: - summary: An example of 403 response payload - value: - status: ERROR - data: - code: S12 - message: Bad credentials - 403Response4: - summary: An example of 403 response payload - value: - data: - code: S12 - message: Invalid/Missing parameters = paymentReference - 400Response1: - summary: An example of 400 response payload - value: - status: ERROR - data: - code: S12 - message: Duplicate transaction reference - 400Response2: - summary: An example of 400 response payload - value: - status: ERROR - data: - code: S12 - message: Invalid/Missing parameters = publicKey - 400Response3: - summary: An example of 400 response payload - value: - status: ERROR - data: - code: S12 - message: Invalid/Missing parameters = amount - 400Response4: - summary: An example of 400 response payload - value: - status: ERROR - data: - code: S12 - message: Invalid/Missing parameters = paymentReference - 400Response5: - summary: An example of 400 response payload - value: - status: ERROR - data: - code: S12 - message: Invalid/Missing parameters = currency - 400Response6: - summary: An example of 400 response payload - value: - status: ERROR - data: - code: S12 - message: Invalid/Missing parameters = country - 400Response7: - summary: An example of 400 response payload - value: - status: ERROR - data: - code: S12 - message: Missing Card details - 400Response8: - summary: An example of 400 response payload - value: - status: ERROR - data: - code: S12 - message: Incomplete Card details - 400Response9: - summary: An example of 400 response payload - value: - status: ERROR - data: - code: S12 - message: Invalid Card Number - 400Response10: - summary: An example of 400 response payload - value: - status: ERROR - data: - code: S12 - message: Bad credentials = invalid public key - 400Response11: - summary: An example of 400 response payload - value: - status: ERROR - data: - code: S12 - message: No authorised transaction found for this reference - 400Response12: - summary: An example of 400 response payload - value: - message: Payment Reference cannot be null - error: INPUT - 400Response13: - summary: An example of 400 response payload - value: - message: Amount cannot be null - error: INPUT - 400Response14: - summary: An example of 400 response payload - value: - message: Public Key cannot be null - error: INPUT - 400Response15: - summary: An example of 400 response payload - value: - message: Country cannot be null - error: INPUT - 400Response16: - summary: An example of 400 response payload - value: - message: Currency cannot be null - error: INPUT - 409Response: - summary: An example of 409 response payload - value: - message: Transaction with reference exists - error: PROCESSING - ChargeCardResponse: - summary: An example of 200 response payload - value: - status: SUCCESS - data: - code: "00" - payments: - paymentReference: NGN0100067Q35 - linkingReference: SEERBIT146140441602959589412 - status: CAPTURED - card: - bin: "512345" - last4: "0008" - token: tk_edcac221-63e5-4baf-8846-4922af4a10e6 - message: APPROVED - ChargeCardResponse1: - summary: An example of 200 response payload - value: - status: SUCCESS - data: - code: "S12-91" - payments: - paymentReference: NGN0100067Q35 - linkingReference: SEERBIT146140441602959589412 - status: FAILED - card: - bin: "512345" - last4: "0008" - token: tk_edcac221-63e5-4baf-8846-4922af4a10e6 - message: FAILURE = TIMED_OUT (Issuer or switch inoperative) - ValidateTransactionResponse: - summary: An example of 200 response payload - value: - status: SUCCESS - data: - code: "00" - payments: - paymentReference: VERS2FURTHERTESTAc722456784 - linkingReference: F282866521599191373372 - authoption: [] - message: Successful - ValidateTransactionResponse1: - summary: An example of 200 response payload - value: - status: SUCCESS - data: - code: "RR" - payments: - paymentReference: VERS2FURTHERTESTAc722456784 - linkingReference: F282866521599191373372 - authoption: [] - message: Sorry payment already processed - ValidateTransactionResponse2: - summary: An example of 200 response payload - value: - status: SUCCESS - data: - code: "S7" - payments: null - message: operation failed - ValidateTransactionResponse3: - summary: An example of 200 response payload - value: - status: SUCCESS - data: - code: "S5" - payments: - reference: VERS2FURTHERTESTAc722456784 - authoption: [] - message: Invalid/Missing parameters = transaction/otp - Authorise201Response: - summary: An example of 200 response payload - value: - status: SUCCESS - data: - code: "00" - payments: - paymentReference: PREAUTH1244567890987654321CB0 - linkingReference: F938003831601492624719 - status: AUTHORIZED - card: - bin: "512345" - last4: "0008" - token: tk_40a0503d-4586-4220-a69e-c69cc9293016 - message: APPROVED - Authorise201Response1: - summary: An example of 200 response payload - value: - status: SUCCESS - data: - code: "00" - payments: - paymentReference: PREAUTH1244567890987654321CB0 - linkingReference: F938003831601492624719 - status: AUTHORIZED - card: - bin: "512345" - last4: "0008" - token: tk_40a0503d-4586-4220-a69e-c69cc9293016 - message: FAILURE = TIMED_OUT (Issuer or switch inoperative) - 401Response1: - summary: An example of 401 response payload - value: - status: ERROR - data: - code: S12 - message: Invalid credentials - 3DSAuthoriseResponse: - summary: An example of 3DSAuthoriseResponse payload - value: - status: SUCCESS - data: - code: "00" - payments: - paymentReference: 30451A789S987643128hgfdsfP6W - redirectLink: https://seerbitapigateway.com/seerbit/card-dispatch?sredref=F535459411601493328771 - linkingReference: F535459411601493328771 - status: AUTHORISATION PENDING - message: Transaction is pending - 3DSAuthoriseResponse1: - summary: An example of 3DSAuthoriseResponse payload - value: - status: SUCCESS - data: - code: "S100" - message: Transaction Not Completed - AuthorisewithCardTokenResponse1: - summary: An example of Authorise with Card Token Response payload - value: - status: SUCCESS - data: - code: "S12-91" - payments: - paymentReference: 31451A789S987643128hgffsfP6K - linkingReference: F535459411601493328771 - status: FAILED - card: - bin: "512345" - last4: 0008 - token: tk_b0a4b2f6-9ac1-485b-b031-9e018d9479bd - message: FAILURE = TIMED_OUT (Issuer or switch inoperative) - AuthorisewithCardTokenResponse: - summary: An example of Authorise with Card Token Response payload - value: - status: SUCCESS - data: - code: "00" - payments: - paymentReference: 30451A789S987643128hgfdsfP6W - linkingReference: F135171921601494142535 - status: AUTHORIZED - card: - bin: "512345" - last4: 0008 - token: tk_b0a4b2f6-9ac1-485b-b031-9e018d9479bd - message: APPROVED - Capture201Response: - summary: An example of A Capture 201 Response payload - value: - status: SUCCESS - data: - code: "00" - payments: - paymentReference: PREAUTH1244567890987654321CB0 - status: PARTIALLY_CAPTURED - card: - bin: "512345" - last4: "0008" - token: tk_40a0503d-4586-4220-a69e-c69cc9293016 - message: APPROVED - Capture201Response1: - summary: An example of A Capture 201 Response payload - value: - status: SUCCESS - data: - code: "S12" - payments: - paymentReference: PREAUTH1244567890987654321CB0 - card: - bin: "512345" - last4: "0008" - token: tk_40a0503d-4586-4220-a69e-c69cc9293016 - message: INVALID_REQUEST = Transaction already exists. Retry not supported as it is not the last transaction on the order. - CreateOrder200Response: - summary: An example of A Create order before payment 200 Response payload - value: - status: SUCCESS - data: - code: "00" - payments: - amount: 250 - paymentReference: 2PPTG108QL13432E29P23R5L6W93I9 - paymentStatus: "08" - redirectLink: "https://checkout.seerbitapi.com/?mid=SBTESTPUBK_9sN3TuLgW6a9redEfY48cKKkUa09Pz2u&paymentReference=2PPTG108QL13432E29P23R5L6W93I9" - message: Successful - BanksResponse: - summary: An example of A Get Bank 201 Response payload - value: - status: SUCCESS - data: - code: "00" - merchantBanks: - - bankName: Guarantee Trust Bank - bankCode: "058" - url: - logo: - status: "ACTIVE" - minimumAmount: 100 - requiredFields: - accountName: YES - accountNumber: NO - isBankCode: YES - bvn: NO - dateOfBirth: NO - mobileNumber: NO - - bankName: United Bank for Africa - bankCode: 033 - url: - logo: - status: ACTIVE - minimumAmount: 100 - requiredFields: - accountName: YES - accountNumber: YES - isBankCode: YES - bvn: YES - dateOfBirth: YES - mobileNumber: NO - - bankName: First Bank of Nigeria - bankCode: 011 - url: - logo: - status: ACTIVE - minimumAmount: 100 - requiredFields: - accountName: NO - accountNumber: NO - isBankCode: YES - bvn: NO - dateOfBirth: NO - mobileNumber: NO - - bankName: Sterling Bank - bankCode: 232 - url: - logo: - status: ACTIVE - minimumAmount: 100 - requiredFields: - accountName: YES - accountNumber: YES - isBankCode: YES - bvn: NO - dateOfBirth: NO - mobileNumber: YES - - bankName: Wema Bank - bankCode: 035 - url: - logo: - status: ACTIVE - minimumAmount: 100 - requiredFields: - accountName: YES - accountNumber: YES - isBankCode: YES - bvn: NO - dateOfBirth: NO - mobileNumber: YES - - bankName: Zenith Bank - bankCode: 057 - url: - logo: - status: ACTIVE - minimumAmount: 100 - requiredFields: - accountName: YES - accountNumber: YES - isBankCode: YES - bvn: YES - dateOfBirth: YES - mobileNumber: NO - message: "Successful" - # get invoice by customer email response - GetInvoiceByCustomerEmailResponse: - summary: Example response for Get Invoice by Customer Email - value: - payload: - - invoiceId: 2037 - invoiceNo: SBT-INV-002037 - totalAmount: 9137.50 - subTotal: 8500.00 - publicKey: SBPUBK_V1YL57ICZQSNCADEWE5XEVTNB72TLWZA - testKey: SBTESTPUBK_wLVXnn6YuGaTlOpUESrR7TzFwaDb2auC - supportEmail: skylah@mailinator.com - receiversName: Muyiwa Akintade - customerEmail: janesmith@emaildomain.com - businessName: Skylah Integrated Services Limited - tax: 637.50 - dueDate: "2025-07-01" - currency: NGN - invoiceItems: - - itemName: Bluetooth Pods - unitPrice: 2500.00 - vat: 187.50 - amount: 2500.00 - quantity: 1 - - itemName: Quest 10 - unitPrice: 6000.00 - vat: 450.00 - amount: 6000.00 - quantity: 4 - customer: - externalIdentify: "2784824" - businessName: Muyiwa Akintade - customerEmail: janesmith@emaildomain.com - businessId: "00019601" - id: 1219 - billingCycle: false - payButtonOnInvoices: false - enableAdvancedOptions: false - partialPayment: false - status: PENDING - createdAt: "2025-06-30T14:48:39.635034" - mode: LIVE - - invoiceId: 2039 - invoiceNo: SBT-INV-002039 - totalAmount: 9137.50 - subTotal: 8500.00 - publicKey: SBPUBK_V1YL57ICZQSNCADEWE5XEVTNB72TLWZA - testKey: SBTESTPUBK_wLVXnn6YuGaTlOpUESrR7TzFwaDb2auC - supportEmail: skylah@mailinator.com - receiversName: Muyiwa Akintade - customerEmail: janesmith@emaildomain.com - businessName: Skylah Integrated Services Limited - tax: 637.50 - dueDate: "2025-07-09" - currency: NGN - invoiceItems: - - itemName: Bluetooth Pods - unitPrice: 2500.00 - vat: 187.50 - amount: 2500.00 - quantity: 1 - - itemName: Quest 10 - unitPrice: 6000.00 - vat: 450.00 - amount: 6000.00 - quantity: 4 - customer: - externalIdentify: "2784824" - businessName: Muyiwa Akintade - customerEmail: janesmith@emaildomain.com - businessId: "00019601" - id: 1219 - billingCycle: false - payButtonOnInvoices: false - enableAdvancedOptions: false - partialPayment: false - status: PENDING - createdAt: "2025-07-07T12:30:51.227383" - mode: LIVE - code: "00" - # invoice by invoiceNo - GetInvoiceByInvoiceNumberResponse: - summary: Example response for Get Invoice by Customer Email - value: - payload: - - invoiceId: 2037 - invoiceNo: SBT-INV-002037 - totalAmount: 9137.50 - subTotal: 8500.00 - publicKey: SBPUBK_V1YL57ICZQSNCADEWE5XEVTNB72TLWZA - testKey: SBTESTPUBK_wLVXnn6YuGaTlOpUESrR7TzFwaDb2auC - supportEmail: skylah@mailinator.com - receiversName: Muyiwa Akintade - customerEmail: janesmith@emaildomain.com - businessName: Skylah Integrated Services Limited - tax: 637.50 - dueDate: "2025-07-01" - currency: NGN - invoiceItems: - - itemName: Bluetooth Pods - unitPrice: 2500.00 - vat: 187.50 - amount: 2500.00 - quantity: 1 - - itemName: Quest 10 - unitPrice: 6000.00 - vat: 450.00 - amount: 6000.00 - quantity: 4 - customer: - externalIdentify: "2784824" - businessName: Muyiwa Akintade - customerEmail: janesmith@emaildomain.com - businessId: "00019601" - id: 1219 - billingCycle: false - payButtonOnInvoices: false - enableAdvancedOptions: false - partialPayment: false - status: PENDING - createdAt: "2025-06-30T14:48:39.635034" - mode: LIVE - code: "00" - # invoice by invoiceNo - GetInvoiceByOrderNumberResponse: - summary: Example response for Get Invoice by Customer Email - value: - payload: - - invoiceId: 2037 - invoiceNo: SBT-INV-002037 - totalAmount: 9137.50 - subTotal: 8500.00 - publicKey: SBPUBK_V1YL57ICZQSNCADEWE5XEVTNB72TLWZA - testKey: SBTESTPUBK_wLVXnn6YuGaTlOpUESrR7TzFwaDb2auC - supportEmail: skylah@mailinator.com - receiversName: Muyiwa Akintade - customerEmail: janesmith@emaildomain.com - businessName: Skylah Integrated Services Limited - tax: 637.50 - dueDate: "2025-07-01" - currency: NGN - invoiceItems: - - itemName: Bluetooth Pods - unitPrice: 2500.00 - vat: 187.50 - amount: 2500.00 - quantity: 1 - - itemName: Quest 10 - unitPrice: 6000.00 - vat: 450.00 - amount: 6000.00 - quantity: 4 - customer: - externalIdentify: "2784824" - businessName: Muyiwa Akintade - customerEmail: janesmith@emaildomain.com - businessId: "00019601" - id: 1219 - billingCycle: false - payButtonOnInvoices: false - enableAdvancedOptions: false - partialPayment: false - status: PENDING - createdAt: "2025-06-30T14:48:39.635034" - mode: LIVE - code: "00" + scheme: bearer + bearerFormat: EncryptedSecKey