openapi: 3.0.1 info: title: Paystack description: The OpenAPI specification of the Paystack API that merchants and developers can harness to build financial solutions in Africa. version: 1.0.0 servers: - url: 'https://api.paystack.co' description: Base API endpoint tags: - name: Transaction - name: Split - name: Customer - name: Dedicated Virtual Account - name: Subaccount - name: Plan - name: Subscription - name: Product - name: Page - name: Payment Request - name: Settlement - name: Transfer Recipient - name: Transfer - name: Balance - name: Charge - name: Bulk Charge - name: Integration - name: Refund - name: Dispute - name: Verification paths: /transaction/initialize: post: tags: - Transaction summary: Initialize Transaction operationId: transaction_initialize description: Create a new transaction requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/paths/~1transaction~1initialize/post/requestBody/content/application~1json/schema' application/json: schema: type: object required: - email - amount properties: email: description: Customer's email address type: string amount: description: 'Amount should be in kobo if currency is NGN, pesewas, if currency is GHS, and cents, if currency is ZAR' type: integer currency: description: The transaction currency type: string enum: - NGN - GHS - ZAR - USD reference: description: 'Unique transaction reference. Only -, ., = and alphanumeric characters allowed.' type: string callback_url: description: 'Fully qualified url, e.g. https://example.com/ . Use this to override the callback url provided on the dashboard for this transaction' type: string plan: description: |- If transaction is to create a subscription to a predefined plan, provide plan code here. This would invalidate the value provided in amount type: string invoice_limit: description: Number of times to charge customer during subscription to plan type: integer metadata: description: Stringified JSON object of custom data type: string channels: description: An array of payment channels to control what channels you want to make available to the user to make a payment with type: array items: type: string enum: - card - bank - ussd - qr - eft - mobile_money - bank_transfer split_code: description: The split code of the transaction split type: string subaccount: description: The code for the subaccount that owns the payment type: string transaction_charge: description: |- A flat fee to charge the subaccount for a transaction. This overrides the split percentage set when the subaccount was created type: string bearer: description: The beare of the transaction charge type: string enum: - account - subaccount responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error '/transaction/verify/{reference}': get: tags: - Transaction summary: Verify Transaction operationId: transaction_verify parameters: - name: reference in: path description: The transaction reference to verify required: true schema: type: string responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /transaction: get: tags: - Transaction summary: List Transactions operationId: transaction_list parameters: - in: query name: perPage schema: type: integer description: Number of records to fetch per page - in: query name: page schema: type: integer description: The section to retrieve - in: query name: from schema: type: string format: date-time description: The start date - in: query name: to schema: type: string format: date-time description: The end date responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error '/transaction/{id}': get: tags: - Transaction summary: Fetch Transaction operationId: transaction_fetch parameters: - name: id in: path description: The ID of the transaction to fetch required: true schema: type: string responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error '/transaction/timeline/{id_or_reference}': get: tags: - Transaction summary: Fetch Transaction Timeline operationId: transaction_timeline parameters: - name: id_or_reference in: path required: true schema: type: string responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /transaction/totals: get: tags: - Transaction summary: Transaction Totals operationId: transaction_totals parameters: - in: query name: perPage schema: type: integer description: Number of records to fetch per page - in: query name: page schema: type: integer description: The section to retrieve - in: query name: from schema: type: string format: date-time description: The start date - in: query name: to schema: type: string format: date-time description: The end date responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /transaction/export: get: tags: - Transaction summary: Export Transactions operationId: transaction_download parameters: - in: query name: perPage schema: type: integer description: Number of records to fetch per page - in: query name: page schema: type: integer description: The section to retrieve - in: query name: from schema: type: string format: date-time description: The start date - in: query name: to schema: type: string format: date-time description: The end date responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /transaction/charge_authorization: post: tags: - Transaction summary: Charge Authorization operationId: transaction_chargeAuthorization requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/paths/~1transaction~1charge_authorization/post/requestBody/content/application~1json/schema' application/json: schema: type: object required: - email - amount - authorization_code properties: email: description: Customer's email address type: string amount: description: 'Amount should be in kobo if currency is NGN, pesewas, if currency is GHS, and cents, if currency is ZAR' type: integer authorization_code: description: Valid authorization code to charge type: string reference: description: 'Unique transaction reference. Only -, ., = and alphanumeric characters allowed.' type: string currency: description: The transaction currency type: string enum: - NGN - GHS - ZAR - USD metadata: description: Stringified JSON object of custom data type: string split_code: description: The split code of the transaction split type: string subaccount: description: The code for the subaccount that owns the payment type: string transaction_charge: description: |- A flat fee to charge the subaccount for a transaction. This overrides the split percentage set when the subaccount was created type: string bearer: description: The beare of the transaction charge type: string enum: - account - subaccount queue: description: 'If you are making a scheduled charge call, it is a good idea to queue them so the processing system does not get overloaded causing transaction processing errors.' type: boolean responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /transaction/check_authorization: post: tags: - Transaction summary: Check Authorization operationId: transaction_checkAuthorization requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/paths/~1transaction~1check_authorization/post/requestBody/content/application~1json/schema' application/json: schema: type: object required: - email - amount properties: email: description: Customer's email address type: string amount: description: 'Amount should be in kobo if currency is NGN, pesewas, if currency is GHS, and cents, if currency is ZAR' type: integer authorization_code: description: Valid authorization code to charge type: string currency: description: The transaction currency type: string enum: - NGN - GHS - ZAR - USD responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /transaction/partial_debit: post: tags: - Transaction summary: Partial Debit operationId: transaction_partialDebit requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/paths/~1transaction~1partial_debit/post/requestBody/content/application~1json/schema' application/json: schema: type: object required: - email - amount - authorization_code - currency properties: email: description: Customer's email address type: string amount: description: 'Amount should be in kobo if currency is NGN, pesewas, if currency is GHS, and cents, if currency is ZAR' type: integer authorization_code: description: Valid authorization code to charge type: string currency: description: The transaction currency type: string enum: - NGN - GHS - ZAR - USD reference: description: 'Unique transaction reference. Only -, ., = and alphanumeric characters allowed.' type: string at_least: description: Minimum amount to charge type: string responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error '/transaction/{id}/event': get: tags: - Transaction summary: Get Transaction Event operationId: transaction_event parameters: - name: id in: path required: true schema: type: string responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error '/transaction/{id}/session': get: tags: - Transaction summary: Get Transaction Session operationId: transaction_session parameters: - name: id in: path required: true schema: type: string responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /split: post: tags: - Split summary: Create Split operationId: split_create requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/paths/~1split/post/requestBody/content/application~1json/schema' application/json: schema: type: object required: - name - type - subaccounts - currency properties: name: description: Name of the transaction split type: string type: description: The type of transaction split you want to create. type: string enum: - percentage - flat subaccounts: description: A list of object containing subaccount code and number of shares type: array items: $ref: '#/paths/~1split~1%7Bid%7D~1subaccount~1add/post/requestBody/content/application~1json/schema' currency: description: The transaction currency type: string enum: - NGN - GHS - ZAR - USD bearer_type: description: This allows you specify how the transaction charge should be processed type: string enum: - subaccount - account - all-proportional - all bearer_subaccount: description: This is the subaccount code of the customer or partner that would bear the transaction charge if you specified subaccount as the bearer type type: string responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error get: tags: - Split summary: List Splits operationId: split_list parameters: - name: name in: query schema: type: string - name: active in: query schema: type: string - name: sort_by in: query schema: type: string - name: from in: query schema: type: string - name: to in: query schema: type: string - name: perPage in: query schema: type: string - name: page in: query schema: type: string responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error '/split/{id}': parameters: - name: id in: path required: true schema: type: string get: tags: - Split summary: Fetch Split operationId: split_fetch responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error put: tags: - Split summary: Update Split operationId: split_update requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/paths/~1split~1%7Bid%7D/put/requestBody/content/application~1json/schema' application/json: schema: type: object properties: name: description: Name of the transaction split type: string active: description: 'Toggle status of split. When true, the split is active, else it''s inactive' type: boolean bearer_type: description: This allows you specify how the transaction charge should be processed type: string enum: - subaccount - account - all-proportional - all bearer_subaccount: description: This is the subaccount code of the customer or partner that would bear the transaction charge if you specified subaccount as the bearer type type: string responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error '/split/{id}/subaccount/add': post: tags: - Split summary: Add Subaccount to Split operationId: split_addSubaccount requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/paths/~1split~1%7Bid%7D~1subaccount~1add/post/requestBody/content/application~1json/schema' application/json: schema: type: object properties: subaccount: description: Subaccount code of the customer or partner type: string share: description: The percentage or flat quota of the customer or partner type: string parameters: - name: id in: path required: true schema: type: string example: application/json responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error '/split/{id}/subaccount/remove': post: tags: - Split summary: Remove Subaccount from split operationId: split_removeSubaccount requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/paths/~1split~1%7Bid%7D~1subaccount~1add/post/requestBody/content/application~1json/schema' application/json: schema: $ref: '#/paths/~1split~1%7Bid%7D~1subaccount~1add/post/requestBody/content/application~1json/schema' parameters: - name: id in: path required: true schema: type: string example: application/json responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /customer: post: tags: - Customer summary: Create Customer operationId: customer_create requestBody: content: application/x-www-form-urlencoded: schema: allOf: - $ref: '#/components/schemas/Customer/allOf/0' - $ref: '#/components/schemas/Customer/allOf/1' application/json: schema: allOf: - $ref: '#/components/schemas/Customer/allOf/0' - $ref: '#/components/schemas/Customer/allOf/1' responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error get: tags: - Customer summary: List Customers operationId: customer_list description: List customers on your integration parameters: - name: use_cursor in: query schema: type: boolean - name: next in: query schema: type: string - name: previous in: query schema: type: string - name: from in: query schema: type: string - name: to in: query schema: type: string - name: perPage in: query schema: type: string - name: page in: query schema: type: string responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error '/customer/{code}': parameters: - name: code in: path required: true schema: type: string get: tags: - Customer summary: Fetch Customer operationId: customer_fetch responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error put: tags: - Customer summary: Update Customer operationId: customer_update requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/Customer/allOf/1' application/json: schema: $ref: '#/components/schemas/Customer/allOf/1' responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /customer/set_risk_action: post: tags: - Customer summary: White/blacklist Customer description: Set customer's risk action by whitelisting or blacklisting the customer operationId: customer_riskAction requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/Customer/allOf/3' application/json: schema: $ref: '#/components/schemas/Customer/allOf/3' responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /customer/deactivate_authorization: post: tags: - Customer summary: Deactivate Authorization operationId: customer_deactivateAuthorization description: Deactivate a customer's card requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/Customer/allOf/2' application/json: schema: $ref: '#/components/schemas/Customer/allOf/2' responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error '/customer/{code}/identification': post: tags: - Customer summary: Validate Customer operationId: customer_validatte description: Validate a customer's identity requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/Customer/allOf/4' application/json: schema: $ref: '#/components/schemas/Customer/allOf/4' responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /dedicated_account: post: tags: - Dedicated Virtual Account summary: Create Dedicated Account operationId: dedicatedAccount_create requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/paths/~1dedicated_account/post/requestBody/content/application~1json/schema' application/json: schema: type: object required: - customer properties: customer: description: Customer ID or code type: string preferred_bank: description: 'The bank slug for preferred bank. To get a list of available banks, use the List Providers endpoint' type: string subaccount: description: Subaccount code of the account you want to split the transaction with type: string split_code: description: Split code consisting of the lists of accounts you want to split the transaction with type: string responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error get: tags: - Dedicated Virtual Account summary: List Dedicated Accounts operationId: dedicatedAccount_list parameters: - name: account_number in: query schema: type: string - name: customer in: query schema: type: string - name: active in: query schema: type: boolean - name: currency in: query schema: type: string - name: provider_slug in: query schema: type: string - name: bank_id in: query schema: type: string - name: perPage in: query schema: type: string - name: page in: query schema: type: string responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error '/dedicated_account/{account_id}': parameters: - name: account_id in: path required: true schema: type: string get: tags: - Dedicated Virtual Account summary: Fetch Dedicated Account operationId: dedicatedAccount_fetch responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error delete: tags: - Dedicated Virtual Account summary: Deactivate Dedicated Account operationId: dedicatedAccount_deactivate responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /dedicated_account/available_providers: get: tags: - Dedicated Virtual Account summary: Fetch Bank Providers operationId: dedicatedAccount_availableProviders responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /dedicated_account/split: post: tags: - Dedicated Virtual Account summary: Split Dedicated Account Transaction operationId: dedicatedAccount_addSplit requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/paths/~1dedicated_account~1split/post/requestBody/content/application~1json/schema' application/json: schema: type: object required: - account_number properties: account_number: description: Valid Dedicated virtual account type: string subaccount: description: Subaccount code of the account you want to split the transaction with type: string split_code: description: Split code consisting of the lists of accounts you want to split the transaction with type: string responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /subaccount: post: tags: - Subaccount summary: Create Subaccount operationId: subaccount_create requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/paths/~1subaccount/post/requestBody/content/application~1json/schema' application/json: schema: type: object required: - business_name - settlement_bank - account_number - percentage_charge properties: business_name: description: Name of business for subaccount type: string settlement_bank: description: Bank code for the bank. You can get the list of Bank Codes by calling the List Banks endpoint. type: string account_number: description: Bank account number type: string percentage_charge: description: Customer's phone number type: number format: float description: description: A description for this subaccount type: string primary_contact_email: description: A contact email for the subaccount type: string primary_contact_name: description: The name of the contact person for this subaccount type: string primary_contact_phone: description: A phone number to call for this subaccount type: string metadata: description: Stringified JSON object of custom data type: string responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error get: tags: - Subaccount summary: List Subaccounts operationId: subaccount_list parameters: - in: query name: perPage schema: type: integer description: Number of records to fetch per page - in: query name: page schema: type: integer description: The section to retrieve - in: query name: from schema: type: string format: date-time description: The start date - in: query name: to schema: type: string format: date-time description: The end date responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error '/subaccount/{code}': parameters: - name: code in: path required: true schema: type: string get: tags: - Subaccount summary: Fetch Subaccount operationId: subaccount_fetch responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error put: tags: - Subaccount summary: Update Subaccount operationId: subaccount_update requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/paths/~1subaccount~1%7Bcode%7D/put/requestBody/content/application~1json/schema' application/json: schema: type: object properties: business_name: description: Name of business for subaccount type: string settlement_bank: description: Bank code for the bank. You can get the list of Bank Codes by calling the List Banks endpoint. type: string account_number: description: Bank account number type: string active: description: Activate or deactivate a subaccount type: boolean percentage_charge: description: Customer's phone number type: number format: float description: description: A description for this subaccount type: string primary_contact_email: description: A contact email for the subaccount type: string primary_contact_name: description: The name of the contact person for this subaccount type: string primary_contact_phone: description: A phone number to call for this subaccount type: string metadata: description: Stringified JSON object of custom data type: string responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /plan: post: tags: - Plan summary: Create Plan operationId: plan_create requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/paths/~1plan/post/requestBody/content/application~1json/schema' application/json: schema: type: object required: - name - amount - interval properties: name: description: Name of plan type: string amount: description: 'Amount should be in kobo if currency is NGN, pesewas, if currency is GHS, and cents, if currency is ZAR' type: integer interval: description: 'Interval in words. Valid intervals are daily, weekly, monthly,biannually, annually' type: string description: description: A description for this plan type: boolean send_invoices: description: Set to false if you don't want invoices to be sent to your customers type: boolean send_sms: description: Set to false if you don't want text messages to be sent to your customers type: boolean currency: description: 'Currency in which amount is set. Allowed values are NGN, GHS, ZAR or USD' type: string invoice_limit: description: |- Number of invoices to raise during subscription to this plan. Can be overridden by specifying an invoice_limit while subscribing. type: integer responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error get: tags: - Plan summary: List Plans operationId: plan_list parameters: - in: query name: perPage schema: type: integer description: Number of records to fetch per page - in: query name: page schema: type: integer description: The section to retrieve - in: query name: interval schema: type: string description: Specify interval of the plan - in: query name: amount schema: type: integer description: The amount on the plans to retrieve - in: query name: from schema: type: string format: date-time description: The start date - in: query name: to schema: type: string format: date-time description: The end date responses: '200': description: Resource created content: application/json: schema: $ref: '#/components/responses/Ok/content/application~1json/schema' '401': description: Unauthorized operation content: application/json: schema: type: object properties: status: type: boolean message: type: string '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error '/plan/{code}': parameters: - name: code in: path required: true schema: type: string get: tags: - Plan summary: Fetch Plan operationId: plan_fetch responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error put: tags: - Plan summary: Update Plan operationId: plan_update requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/paths/~1plan~1%7Bcode%7D/put/requestBody/content/application~1json/schema' application/json: schema: type: object properties: name: description: Name of plan type: string amount: description: 'Amount should be in kobo if currency is NGN, pesewas, if currency is GHS, and cents, if currency is ZAR' type: integer interval: description: 'Interval in words. Valid intervals are daily, weekly, monthly,biannually, annually' type: string description: description: A description for this plan type: boolean send_invoices: description: Set to false if you don't want invoices to be sent to your customers type: boolean send_sms: description: Set to false if you don't want text messages to be sent to your customers type: boolean currency: description: 'Currency in which amount is set. Allowed values are NGN, GHS, ZAR or USD' type: string invoice_limit: description: |- Number of invoices to raise during subscription to this plan. Can be overridden by specifying an invoice_limit while subscribing. type: integer responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /subscription: post: tags: - Subscription summary: Create Subscription operationId: subscription_create requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/paths/~1subscription/post/requestBody/content/application~1json/schema' application/json: schema: type: object required: - customer - plan properties: customer: description: Customer's email address or customer code type: string plan: description: Plan code type: string authorization: description: |- If customer has multiple authorizations, you can set the desired authorization you wish to use for this subscription here. If this is not supplied, the customer's most recent authorization would be used type: string start_date: description: 'Set the date for the first debit. (ISO 8601 format) e.g. 2017-05-16T00:30:13+01:00' type: string format: date-time responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error get: tags: - Subscription summary: List Subscriptions operationId: subscription_list parameters: - in: query name: perPage schema: type: integer description: Number of records to fetch per page - in: query name: page schema: type: integer description: The section to retrieve - in: query name: plan schema: type: string description: Plan ID - in: query name: customer schema: type: string description: Customer ID - in: query name: from schema: type: string format: date-time description: The start date - in: query name: to schema: type: string format: date-time description: The end date responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error '/subscription/{code}': parameters: - name: code in: path required: true schema: type: string get: tags: - Subscription summary: Fetch Subscription operationId: subscription_fetch responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /subscription/disable: post: tags: - Subscription summary: Disable Subscription operationId: subscription_disable requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/paths/~1subscription~1enable/post/requestBody/content/application~1json/schema' application/json: schema: $ref: '#/paths/~1subscription~1enable/post/requestBody/content/application~1json/schema' responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /subscription/enable: post: tags: - Subscription summary: Enable Subscription operationId: subscription_enable requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/paths/~1subscription~1enable/post/requestBody/content/application~1json/schema' application/json: schema: type: object required: - code - token - authorization properties: code: description: Subscription code type: string token: description: Email token type: string responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error '/subscription/{code}/manage/link': post: tags: - Subscription summary: Generate Update Subscription Link operationId: subscription_manageLink parameters: - name: code in: path required: true schema: type: string responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error '/subscription/{code}/manage/email': post: tags: - Subscription summary: Send Update Subscription Link operationId: subscription_manageEmail parameters: - name: code in: path required: true schema: type: string responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /product: post: tags: - Product summary: Create Product operationId: product_create requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/paths/~1product/post/requestBody/content/application~1json/schema' application/json: schema: type: object required: - name - description - price - currency properties: name: description: Name of product type: string description: description: The description of the product type: string price: description: 'Price should be in kobo if currency is NGN, pesewas, if currency is GHS, and cents, if currency is ZAR' type: integer currency: description: 'Currency in which price is set. Allowed values are: NGN, GHS, ZAR or USD' type: string limited: description: Set to true if the product has limited stock. Leave as false if the product has unlimited stock type: boolean quantity: description: Number of products in stock. Use if limited is true type: integer responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error get: tags: - Product summary: List Products operationId: product_list parameters: - name: perPage in: query schema: type: integer - name: page in: query schema: type: integer - name: active in: query schema: type: boolean - in: query name: from schema: type: string format: date-time description: The start date - in: query name: to schema: type: string format: date-time description: The end date responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error '/product/{id}': parameters: - name: id in: path required: true schema: type: string get: tags: - Product summary: Fetch Product operationId: product_fetch responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error put: tags: - Product summary: Update product operationId: product_update requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/paths/~1product~1%7Bid%7D/put/requestBody/content/application~1json/schema' application/json: schema: type: object properties: name: description: Name of product type: string description: description: The description of the product type: string price: description: 'Price should be in kobo if currency is NGN, pesewas, if currency is GHS, and cents, if currency is ZAR' type: integer currency: description: 'Currency in which price is set. Allowed values are: NGN, GHS, ZAR or USD' type: string limited: description: Set to true if the product has limited stock. Leave as false if the product has unlimited stock type: boolean quantity: description: Number of products in stock. Use if limited is true type: integer responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error delete: tags: - Product summary: Delete Product operationId: product_delete responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /page: post: tags: - Page summary: Create Page operationId: page_create requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/paths/~1page/post/requestBody/content/application~1json/schema' application/json: schema: type: object required: - name properties: name: description: Name of page type: string description: description: The description of the page type: string amount: description: 'Amount should be in kobo if currency is NGN, pesewas, if currency is GHS, and cents, if currency is ZAR' type: integer slug: description: 'URL slug you would like to be associated with this page. Page will be accessible at https://paystack.com/pay/[slug]' type: string metadata: description: Stringified JSON object of custom data type: string redirect_url: description: 'If you would like Paystack to redirect to a URL upon successful payment, specify the URL here.' type: string custom_fields: description: 'If you would like to accept custom fields, specify them here.' type: array items: type: object responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error get: tags: - Page summary: List Pages operationId: page_list parameters: - in: query name: perPage schema: type: integer description: Number of records to fetch per page - in: query name: page schema: type: integer description: The section to retrieve - in: query name: from schema: type: string format: date-time description: The start date - in: query name: to schema: type: string format: date-time description: The end date responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error '/page/{id}': parameters: - name: id in: path required: true schema: type: string get: tags: - Page summary: Fetch Page operationId: page_fetch responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error put: tags: - Page summary: Update Page operationId: page_update requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/paths/~1page~1%7Bid%7D/put/requestBody/content/application~1json/schema' application/json: schema: type: object properties: name: description: Name of page type: string description: description: The description of the page type: string amount: description: 'Amount should be in kobo if currency is NGN, pesewas, if currency is GHS, and cents, if currency is ZAR' type: integer active: description: Set to false to deactivate page url type: boolean responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error '/page/check_slug_availability/{slug}': parameters: - name: slug in: path required: true schema: type: string get: tags: - Page summary: Check Slug Availability operationId: page_checkSlugAvailability responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error '/page/{id}/product': parameters: - name: id in: path required: true schema: type: string post: tags: - Page summary: Add Products operationId: page_addProducts requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/paths/~1page~1%7Bid%7D~1product/post/requestBody/content/application~1json/schema' application/json: schema: type: object required: - product properties: product: description: IDs of all products to add to a page type: array items: type: string responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /paymentrequest: post: tags: - Payment Request summary: Create Payment Request operationId: paymentRequest_create requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/paths/~1paymentrequest/post/requestBody/content/application~1json/schema' application/json: schema: type: object required: - customer properties: customer: description: Customer id or code type: string amount: description: |- Payment request amount. Only useful if line items and tax values are ignored. The endpoint will throw a friendly warning if neither is available. type: integer currency: description: 'Specify the currency of the invoice. Allowed values are NGN, GHS, ZAR and USD. Defaults to NGN' type: string due_date: description: ISO 8601 representation of request due date type: string format: date-time description: description: A short description of the payment request type: string line_items: description: Array of line items type: array items: type: object tax: description: Array of taxes type: array items: type: object send_notification: description: Indicates whether Paystack sends an email notification to customer. Defaults to true type: boolean items: type: object draft: description: Indicate if request should be saved as draft. Defaults to false and overrides send_notification type: boolean items: type: object has_invoice: description: |- Set to true to create a draft invoice (adds an auto incrementing invoice number if none is provided) even if there are no line_items or tax passed type: boolean items: type: object invoice_number: description: |- Numeric value of invoice. Invoice will start from 1 and auto increment from there. This field is to help override whatever value Paystack decides. Auto increment for subsequent invoices continue from this point. type: integer split_code: description: The split code of the transaction split. type: string responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error get: tags: - Payment Request summary: List Payment Request operationId: paymentRequest_list parameters: - in: query name: perPage schema: type: integer description: Number of records to fetch per page - in: query name: page schema: type: integer description: The section to retrieve - in: query name: customer schema: type: string description: Customer ID - in: query name: status schema: type: string description: Invoice status to filter - in: query name: currency schema: type: string description: 'If your integration supports more than one currency, choose the one to filter' - in: query name: from schema: type: string format: date-time description: The start date - in: query name: to schema: type: string format: date-time description: The end date responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error '/paymentrequest/{id}': parameters: - name: id in: path required: true schema: type: string get: tags: - Payment Request summary: Fetch Payment Request operationId: paymentRequest_fetch responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error put: tags: - Payment Request summary: Update Payment Request operationId: paymentRequest_update requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/paths/~1paymentrequest~1%7Bid%7D/put/requestBody/content/application~1json/schema' application/json: schema: type: object properties: customer: description: Customer id or code type: string amount: description: |- Payment request amount. Only useful if line items and tax values are ignored. The endpoint will throw a friendly warning if neither is available. type: integer currency: description: 'Specify the currency of the invoice. Allowed values are NGN, GHS, ZAR and USD. Defaults to NGN' type: string due_date: description: ISO 8601 representation of request due date type: string format: date-time description: description: A short description of the payment request type: string line_items: description: Array of line items type: array items: type: object tax: description: Array of taxes type: array items: type: object send_notification: description: Indicates whether Paystack sends an email notification to customer. Defaults to true type: boolean items: type: object draft: description: Indicate if request should be saved as draft. Defaults to false and overrides send_notification type: boolean items: type: object has_invoice: description: |- Set to true to create a draft invoice (adds an auto incrementing invoice number if none is provided) even if there are no line_items or tax passed type: boolean items: type: object invoice_number: description: |- Numeric value of invoice. Invoice will start from 1 and auto increment from there. This field is to help override whatever value Paystack decides. Auto increment for subsequent invoices continue from this point. type: integer split_code: description: The split code of the transaction split. type: string responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error '/paymentrequest/verify/{id}': parameters: - name: id in: path required: true schema: type: string get: tags: - Payment Request summary: Verify Payment Request operationId: paymentRequest_verify responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error '/paymentrequest/notify/{id}': parameters: - name: id in: path required: true schema: type: string post: tags: - Payment Request summary: Send Notification operationId: paymentRequest_notify responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /paymentrequest/totals: get: tags: - Payment Request summary: Payment Request Total operationId: paymentRequest_totals responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error '/paymentrequest/finalize/{id}': parameters: - name: id in: path required: true schema: type: string post: tags: - Payment Request summary: Finalize Payment Request operationId: paymentRequest_finalize responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error '/paymentrequest/archive/{id}': parameters: - name: id in: path required: true schema: type: string post: tags: - Payment Request summary: Archive Payment Request operationId: paymentRequest_archive responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /settlement: get: tags: - Settlement summary: Fetch Settlements operationId: settlements_fetch parameters: - name: perPage in: query schema: type: integer example: '50' - name: page in: query schema: type: integer example: '2' responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error '/settlement/{id}/transaction': get: tags: - Settlement summary: Settlement Transactions operationId: settlements_transaction parameters: - name: perPage in: query schema: type: integer example: '50' - name: page in: query schema: type: integer example: '2' responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /transferrecipient: post: tags: - Transfer Recipient summary: Create Transfer Recipient operationId: transferrecipient_create requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/paths/~1transferrecipient/post/requestBody/content/application~1json/schema' application/json: schema: type: object required: - type - name - account_number - bank_code properties: type: description: Recipient Type (Only nuban at this time) type: string name: description: Recipient's name type: string account_number: description: Recipient's bank account number type: string bank_code: description: Recipient's bank code. You can get the list of Bank Codes by calling the List Banks endpoint type: string description: description: A description for this recipient type: string currency: description: Currency for the account receiving the transfer type: string authorization_code: description: An authorization code from a previous transaction type: string metadata: description: Stringified JSON object of custom data type: string responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error get: tags: - Transfer Recipient summary: List Transfer Recipients operationId: transferrecipient_list parameters: - in: query name: perPage schema: type: integer description: Number of records to fetch per page - in: query name: page schema: type: integer description: The section to retrieve - in: query name: from schema: type: string format: date-time description: The start date - in: query name: to schema: type: string format: date-time description: The end date responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /transferrecipient/bulk: post: tags: - Transfer Recipient summary: Bulk Create Transfer Recipient operationId: transferrecipient_bulk requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/paths/~1transferrecipient~1bulk/post/requestBody/content/application~1json/schema' application/json: schema: type: object required: - batch properties: batch: description: |- A list of transfer recipient object. Each object should contain type, name, and bank_code. Any Create Transfer Recipient param can also be passed. type: array items: $ref: '#/paths/~1transferrecipient/post/requestBody/content/application~1json/schema' responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error '/transferrecipient/{code}': parameters: - name: code description: Transfer recipient code in: path required: true schema: type: string get: tags: - Transfer Recipient summary: Fetch Transfer recipient operationId: transferrecipient_fetch responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error put: tags: - Transfer Recipient summary: Update Transfer recipient requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/paths/~1transferrecipient~1%7Bcode%7D/put/requestBody/content/application~1json/schema' application/json: schema: type: object required: - batch properties: name: description: Recipient's name type: string email: description: Recipient's email address type: string responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error delete: tags: - Transfer Recipient summary: Delete Transfer Recipient responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /transfer: post: tags: - Transfer summary: Initiate Transfer operationId: transfer_initiate requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/paths/~1transfer/post/requestBody/content/application~1json/schema' application/json: schema: type: object required: - source - amount - recipient properties: source: description: Where should we transfer from? Only balance is allowed for now type: string amount: description: Amount to transfer in kobo if currency is NGN and pesewas if currency is GHS. type: string recipient: description: The transfer recipient's code type: string reason: description: The reason or narration for the transfer. type: string currency: description: Specify the currency of the transfer. Defaults to NGN. type: string reference: description: |- If specified, the field should be a unique identifier (in lowercase) for the object. Only -,_ and alphanumeric characters are allowed. type: string responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error get: tags: - Transfer summary: List Transfers operationId: transfer_list parameters: - in: query name: perPage schema: type: integer description: Number of records to fetch per page - in: query name: page schema: type: integer description: The section to retrieve - in: query name: status schema: type: string - in: query name: from schema: type: string format: date-time description: The start date - in: query name: to schema: type: string format: date-time description: The end date responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /transfer/finalize_transfer: post: tags: - Transfer summary: Finalize Transfer operationId: transfer_finalize requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/paths/~1transfer~1finalize_transfer/post/requestBody/content/application~1json/schema' application/json: schema: type: object required: - transfer_code - otp properties: transfer_code: description: The transfer code you want to finalize type: string otp: description: OTP sent to business phone to verify transfer type: string responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /transfer/bulk: post: tags: - Transfer summary: Initiate Bulk Transfer operationId: transfer_bulk requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/paths/~1transfer~1bulk/post/requestBody/content/application~1json/schema' application/json: schema: type: object required: - batch properties: source: description: Where should we transfer from? Only balance is allowed for now type: string transfers: description: 'A list of transfer object. Each object should contain amount, recipient, and reference' type: array items: $ref: '#/paths/~1transfer/post/requestBody/content/application~1json/schema' responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error '/transfer/{code}': parameters: - name: code description: Transfer code in: path required: true schema: type: string get: tags: - Transfer summary: Fetch Transfer operationId: transfer_fetch responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error '/transfer/verify/{reference}': parameters: - name: reference in: path required: true schema: type: string get: tags: - Transfer summary: Verify Transfer operationId: transfer_verify responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /transfer/export: get: tags: - Transfer summary: Export Transfers operationId: transfer_download parameters: - in: query name: perPage schema: type: integer description: Number of records to fetch per page - in: query name: page schema: type: integer description: The section to retrieve - in: query name: status schema: type: string - in: query name: from schema: type: string format: date-time description: The start date - in: query name: to schema: type: string format: date-time description: The end date responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /transfer/resend_otp: post: tags: - Transfer summary: Resend OTP for Transfer operationId: transfer_resendOtp requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/paths/~1transfer~1resend_otp/post/requestBody/content/application~1json/schema' application/json: schema: type: object required: - transfer_code - reason properties: transfer_code: description: The transfer code that requires an OTP validation type: string reason: description: Either resend_otp or transfer type: string responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /transfer/disable_otp: post: tags: - Transfer summary: Disable OTP requirement for Transfers operationId: transfer_disableOtp responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /transfer/disable_otp_finalize: post: tags: - Transfer summary: Finalize Disabling of OTP requirement for Transfers operationId: transfer_disableOtpFinalize requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/paths/~1transfer~1disable_otp_finalize/post/requestBody/content/application~1json/schema' application/json: schema: type: object required: - otp properties: otp: description: OTP sent to business phone to verify disabling OTP requirement type: string responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /transfer/enable_otp: post: tags: - Transfer summary: Enable OTP requirement for Transfers operationId: transfer_enableOtp responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /balance: get: tags: - Balance summary: Fetch Balance operationId: balance_fetch description: Check your Paystack account balance responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /balance/ledger: get: tags: - Balance summary: Balance Ledger operationId: balance_ledger parameters: - in: query name: perPage schema: type: integer description: Number of records to fetch per page - in: query name: page schema: type: integer description: The section to retrieve - in: query name: from schema: type: string format: date-time description: The start date - in: query name: to schema: type: string format: date-time description: The end date responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /charge: post: tags: - Charge summary: Create Charge operationId: charge_create requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/paths/~1charge/post/requestBody/content/application~1json/schema' application/json: schema: allOf: - type: object required: - email - amount properties: email: description: Customer's email address type: string amount: description: 'Amount should be in kobo if currency is NGN, pesewas, if currency is GHS, and cents, if currency is ZAR' type: string authorization_code: description: An authorization code to charge. type: string pin: description: 4-digit PIN (send with a non-reusable authorization code) type: string reference: description: 'Unique transaction reference. Only -, .`, = and alphanumeric characters allowed.' type: string birthday: description: The customer's birthday in the format YYYY-MM-DD e.g 2017-05-16 type: string format: date-time device_id: description: |- This is the unique identifier of the device a user uses in making payment. Only -, .`, = and alphanumeric characters are allowed. type: string metadata: description: Stringified JSON object of custom data type: string - type: object properties: bank: type: object properties: code: description: Customer's bank code type: string account_number: description: Customer's account number type: string - type: object properties: mobile_money: type: object properties: phone: description: Customer's phone number type: string provider: description: | The telco provider of customer's phone number. This can be fetched from the List Bank endpoint type: string - type: object properties: ussd: type: object properties: type: description: The three-digit USSD code type: string enum: - 737 - 919 - 822 - 966 - type: object properties: eft: type: object properties: provider: description: The EFT provider type: string enum: - ozow responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /charge/submit_pin: post: tags: - Charge summary: Submit PIN operationId: charge_submitPin requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/paths/~1charge~1submit_pin/post/requestBody/content/application~1json/schema' application/json: schema: type: object required: - pin - reference properties: pin: description: Customer's PIN type: string reference: description: Transaction reference that requires the PIN type: string responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /charge/submit_otp: post: tags: - Charge summary: Submit OTP operationId: charge_submitOtp requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/paths/~1charge~1submit_otp/post/requestBody/content/application~1json/schema' application/json: schema: type: object required: - otp - reference properties: otp: description: Customer's OTP type: string reference: description: The reference of the ongoing transaction type: string responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /charge/submit_phone: post: tags: - Charge summary: Submit Phone operationId: charge_submitPhone requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/paths/~1charge~1submit_phone/post/requestBody/content/application~1json/schema' application/json: schema: type: object required: - phone - reference properties: phone: description: Customer's mobile number type: string reference: description: The reference of the ongoing transaction type: string responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /charge/submit_birthday: post: tags: - Charge summary: Submit Birthday operationId: charge_submitBirthday requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/paths/~1charge~1submit_birthday/post/requestBody/content/application~1json/schema' application/json: schema: type: object required: - birthday - reference properties: birthday: description: Customer's birthday in the format YYYY-MM-DD e.g 2016-09-21 type: string reference: description: The reference of the ongoing transaction type: string responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /charge/submit_address: post: tags: - Charge summary: Submit Address operationId: charge_submitAddress requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/paths/~1charge~1submit_address/post/requestBody/content/application~1json/schema' application/json: schema: type: object required: - address - reference - city - state - zipcode properties: address: description: Customer's address type: string city: description: Customer's city type: string state: description: Customer's state type: string zipcode: description: Customer's zipcode type: string reference: description: The reference of the ongoing transaction type: string responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error '/charge/{reference}': get: tags: - Charge summary: Check pending charge operationId: charge_check parameters: - name: reference in: path required: true schema: type: string responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /bulkcharge: post: tags: - Bulk Charge summary: Initiate Bulk Charge operationId: bulkCharge_initiate requestBody: content: application/x-www-form-urlencoded: schema: type: array items: type: object required: - authorization - amount properties: authorization: description: Customer's card authorization code type: string amount: description: Amount to charge on the authorization type: string reference: description: 'Unique transaction reference. Only -, ., = and alphanumeric characters allowed.' type: string application/json: schema: type: array items: properties: charges: title: charges type: object items: $ref: '#/paths/~1bulkcharge/post/requestBody/content/application~1x-www-form-urlencoded/schema/items' responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error get: tags: - Bulk Charge summary: List Bulk Charge Batches operationId: bulkCharge_list parameters: - in: query name: perPage schema: type: integer description: Number of records to fetch per page - in: query name: page schema: type: integer description: The section to retrieve - in: query name: from schema: type: string format: date-time description: The start date - in: query name: to schema: type: string format: date-time description: The end date responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error '/bulkcharge/{code}': parameters: - name: code description: Batch code in: path required: true schema: type: string get: tags: - Bulk Charge summary: Fetch Bulk Charge Batch operationId: bulkCharge_fetch responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error '/bulkcharge/{code}/charges': get: tags: - Bulk Charge summary: Fetch Charges in a Batch operationId: bulkCharge_charges parameters: - name: code description: Batch code in: path required: true schema: type: string responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error '/bulkcharge/pause/{code}': get: tags: - Bulk Charge summary: Pause Bulk Charge Batch operationId: bulkCharge_pause parameters: - name: code description: Batch code in: path required: true schema: type: string responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error '/bulkcharge/resume/{code}': get: tags: - Bulk Charge summary: Resume Bulk Charge Batch operationId: bulkCharge_resume parameters: - name: code description: Batch code in: path required: true schema: type: string responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /integration/payment_session_timeout: get: tags: - Integration summary: Fetch Payment Session Timeout operationId: integration_fetchPaymentSessionTimeout responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error put: tags: - Integration summary: Update Payment Session Timeout operationId: integration_updatePaymentSessionTimeout requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/paths/~1integration~1payment_session_timeout/put/requestBody/content/application~1json/schema' application/json: schema: type: object required: - timeout properties: timeout: description: Time in seconds before a transaction becomes invalid type: string responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /refund: post: tags: - Refund summary: Create Refund operationId: refund_create requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/paths/~1refund/post/requestBody/content/application~1json/schema' application/json: schema: type: object required: - transaction properties: transaction: description: Transaction reference or id type: string amount: description: |- Amount ( in kobo if currency is NGN, pesewas, if currency is GHS, and cents, if currency is ZAR ) to be refunded to the customer. Amount cannot be more than the original transaction amount type: integer currency: description: Three-letter ISO currency type: string enum: - NGN - GHS - ZAR - USD customer_note: description: Customer reason type: string merchant_note: description: Merchant reason type: string responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error get: tags: - Refund summary: List Refunds operationId: refund_list parameters: - in: query name: perPage schema: type: integer description: Number of records to fetch per page - in: query name: page schema: type: integer description: The section to retrieve - in: query name: from schema: type: string format: date-time description: The start date - in: query name: to schema: type: string format: date-time description: The end date responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error '/refund/{id}': get: tags: - Refund summary: Fetch Refund operationId: refund_fetch parameters: - name: id in: path required: true schema: type: string responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /dispute: get: tags: - Dispute summary: List Disputes operationId: dispute_list parameters: - in: query name: perPage description: Number of records to fetch per page schema: type: integer - in: query name: page description: The section to retrieve schema: type: integer - in: query name: status description: Dispute Status. schema: type: string enum: - awaiting-merchant-feedback - awaiting-bank-feedback - pending - resolved - in: query name: transaction description: Transaction ID schema: type: string - in: query name: from schema: type: string format: date-time description: The start date - in: query name: to schema: type: string format: date-time description: The end date responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error '/dispute/{id}': parameters: - name: id description: Dispute ID in: path required: true schema: type: string get: tags: - Dispute summary: Fetch Dispute operationId: dispute_fetch responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error put: tags: - Dispute summary: Update Dispute operationId: dispute_update requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/paths/~1dispute~1%7Bid%7D/put/requestBody/content/application~1json/schema' application/json: schema: type: object required: - refund_amount properties: refund_amount: description: 'The amount to refund, in kobo if currency is NGN, pesewas, if currency is GHS, and cents, if currency is ZAR' type: string uploaded_filename: description: Filename of attachment returned via response from the Dispute upload URL type: string responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error '/dispute/{id}/upload_url': get: tags: - Dispute summary: Get Upload URL operationId: dispute_uploadUrl parameters: - name: id description: Dispute ID in: path required: true schema: type: string responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /dispute/export: get: tags: - Dispute summary: Export Disputes operationId: dispute_download parameters: - in: query name: perPage schema: type: integer description: Number of records to fetch per page - in: query name: page schema: type: integer description: The section to retrieve - in: query name: status schema: type: string - in: query name: from schema: type: string format: date-time description: The start date - in: query name: to schema: type: string format: date-time description: The end date responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error '/dispute/transaction/{id}': get: tags: - Dispute summary: List Transaction Disputes operationId: dispute_transaction parameters: - name: id description: Transaction ID in: path required: true schema: type: string responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error '/dispute/{id}/resolve': put: tags: - Dispute summary: Resolve a Dispute operationId: dispute_resolve parameters: - name: id description: Dispute ID in: path required: true schema: type: string requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/paths/~1dispute~1%7Bid%7D~1resolve/put/requestBody/content/application~1json/schema' application/json: schema: type: object required: - resolution - message - refund_amount - uploaded_filename properties: resolution: description: Dispute resolution. type: string enum: - merchant-accepted - declined message: description: Reason for resolving type: string refund_amount: description: 'The amount to refund, in kobo if currency is NGN, pesewas, if currency is GHS, and cents, if currency is ZAR' type: string uploaded_filename: description: Filename of attachment returned via response from the Dispute upload URL type: string evidence: description: Evidence Id for fraud claims type: integer responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error '/dispute/{id}/evidence': post: tags: - Dispute summary: Add Evidence operationId: dispute_evidence requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/paths/~1dispute~1%7Bid%7D~1evidence/post/requestBody/content/application~1json/schema' application/json: schema: type: object required: - customer_email - customer_name - customer_phone - service_details properties: customer_email: description: Customer email type: string customer_name: description: Customer name type: string customer_phone: description: Customer mobile number type: string service_details: description: Details of service offered type: string delivery_address: description: Delivery address type: string delivery_date: description: ISO 8601 representation of delivery date (YYYY-MM-DD) type: string format: date-time parameters: - name: id description: Dispute ID in: path required: true schema: type: string responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /bvn/match: post: tags: - Verification summary: Match Service operationId: verification_bvnMatch requestBody: content: application/x-www-form-urlencoded: schema: $ref: '#/paths/~1bvn~1match/post/requestBody/content/application~1json/schema' application/json: schema: type: object required: - account_number - bank_code - bvn properties: account_number: description: Bank Account Number type: string bank_code: description: You can get the list of banks codes by calling the List Bank endpoint type: integer bvn: description: 11 digits Bank Verification Number type: string first_name: description: Customer's first name type: string middle_name: description: Customer's middle name type: string last_name: description: Customer's last name type: string responses: '201': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error '/bank/resolve_bvn/{bvn}': get: tags: - Verification summary: Resolve BVN operationId: verification_resolveBvn parameters: - name: bvn in: path required: true schema: type: string responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /bank/resolve: get: tags: - Verification summary: Resolve Account Number operationId: verification_resolveAccountNumber parameters: - name: account_number in: query schema: type: integer example: 0022728151 - name: bank_code in: query schema: type: integer example: '063' responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error '/decision/bin/{bin}': get: tags: - Verification summary: Resolve Card BIN operationId: verification_resolveCardBin parameters: - name: bin in: path required: true schema: type: string responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /country: get: tags: - Verification summary: List Countries operationId: verification_listCountries responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /bank: get: tags: - Verification summary: Fetch Banks operationId: verification_fetchBanks parameters: - in: query name: country schema: type: string - in: query name: pay_with_bank_transfer schema: type: boolean - in: query name: use_cursor schema: type: boolean - in: query name: perPage schema: type: integer - in: query name: next schema: type: string - in: query name: previous schema: type: string - in: query name: gateway schema: type: string responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error /address_verification/states: get: tags: - Verification summary: List States (AVS) operationId: verification_avs parameters: - in: query name: type schema: type: string - in: query name: country schema: type: string - in: query name: currency schema: type: string responses: '200': $ref: '#/paths/~1plan/get/responses/200' '401': $ref: '#/paths/~1plan/get/responses/401' '404': $ref: '#/paths/~1plan/get/responses/401' default: description: Server error components: securitySchemes: bearerAuth: type: http scheme: bearer schemas: Customer: allOf: - type: object required: - email properties: email: description: Customer's email address type: string - type: object properties: first_name: description: Customer's first name type: string last_name: description: Customer's last name type: string phone: description: Customer's phone number type: string metadata: description: Stringified JSON object of custom data type: string - type: object required: - authorization_code properties: authorization_code: description: Customer's authorization code to be deactivated type: string - type: object required: - customer properties: customer: description: 'Customer''s code, or email address' type: string risk_action: description: | One of the possible risk actions [ default, allow, deny ]. allow to whitelist. deny to blacklist. Customers start with a default risk action. type: string enum: - default - allow - deny - type: object required: - type - country - bvn - bank_code - account_number properties: type: description: Predefined types of identification. type: string enum: - bvn - bank_account country: description: Two-letter country code of identification issuer type: string bvn: description: Customer's Bank Verification Number type: string bank_code: description: 'You can get the list of bank codes by calling the List Banks endpoint (https://api.paystack.co/bank).' type: string account_number: description: Customer's bank account number. type: string value: description: Customer's identification number. Required if type is bvn type: string Error: type: object properties: status: type: boolean message: type: string Response: type: object properties: status: type: boolean message: type: string data: type: object responses: Ok: description: Successful operation content: application/json: schema: type: object properties: status: type: boolean message: type: string data: type: object Created: description: Resource created content: application/json: schema: $ref: '#/components/schemas/Response' NotFound: description: Entity not found content: application/json: schema: $ref: '#/components/schemas/Error' example: status: false message: Entity not found Unauthorized: description: Unauthorized operation content: application/json: schema: $ref: '#/components/schemas/Error' example: status: false message: Invalid key GeneralError: description: General Error content: application/json: schema: $ref: '#/components/schemas/Error' security: - bearerAuth: []