{
  "info": {
    "name": "Veyqo — Public API and browser checkout",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
    "description": "Use sandbox first. Add your own secret/publishable key privately. Persist operation_idempotency_key before each write; do not share populated secrets in exported collections."
  },
  "variable": [
    {
      "key": "base_url",
      "value": "https://api.veyqo.org/api/v1"
    },
    {
      "key": "browser_base_url",
      "value": "https://api.veyqo.org/checkout/v1"
    },
    {
      "key": "secret_key",
      "value": ""
    },
    {
      "key": "publishable_key",
      "value": ""
    },
    {
      "key": "operation_idempotency_key",
      "value": ""
    },
    {
      "key": "payment_id",
      "value": ""
    },
    {
      "key": "refund_id",
      "value": ""
    },
    {
      "key": "event_id",
      "value": ""
    },
    {
      "key": "checkout_session_id",
      "value": ""
    },
    {
      "key": "payment_link_id",
      "value": ""
    }
  ],
  "item": [
    {
      "name": "Payments",
      "item": [
        {
          "name": "Create a payment",
          "request": {
            "method": "POST",
            "description": "Starts a payment with the provider connected in this environment and returns a checkout URL. The amount is an integer in the smallest currency unit.\n\nScope: payments:write. Set operation_idempotency_key once per logical operation; do not regenerate on retry.",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "{{operation_idempotency_key}}"
              }
            ],
            "url": "{{base_url}}/payments",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{secret_key}}",
                  "type": "string"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"amount\": 50000,\n  \"currency\": \"NGN\",\n  \"reference\": \"ORDER-1001\",\n  \"provider\": \"paystack\",\n  \"customer\": {\n    \"email\": \"customer@example.com\",\n    \"name\": \"Ada Lovelace\"\n  },\n  \"metadata\": {\n    \"order_id\": \"1001\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "201 example",
              "originalRequest": {
                "method": "POST",
                "description": "Starts a payment with the provider connected in this environment and returns a checkout URL. The amount is an integer in the smallest currency unit.\n\nScope: payments:write. Set operation_idempotency_key once per logical operation; do not regenerate on retry.",
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Idempotency-Key",
                    "value": "{{operation_idempotency_key}}"
                  }
                ],
                "url": "{{base_url}}/payments",
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{secret_key}}",
                      "type": "string"
                    }
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"amount\": 50000,\n  \"currency\": \"NGN\",\n  \"reference\": \"ORDER-1001\",\n  \"provider\": \"paystack\",\n  \"customer\": {\n    \"email\": \"customer@example.com\",\n    \"name\": \"Ada Lovelace\"\n  },\n  \"metadata\": {\n    \"order_id\": \"1001\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Created",
              "code": 201,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"id\": \"pay_01M6EB66SC61Q3RQYAN0693DGM\",\n    \"object\": \"payment\",\n    \"reference\": \"ORDER-1001\",\n    \"status\": \"pending\",\n    \"amount\": 50000,\n    \"amount_refunded\": 0,\n    \"currency\": \"NGN\",\n    \"customer\": {\n      \"email\": \"customer@example.com\",\n      \"name\": \"Ada Lovelace\",\n      \"phone\": null\n    },\n    \"description\": \"Order 1001\",\n    \"checkout_url\": \"https://checkout.paystack.com/example\",\n    \"provider\": \"paystack\",\n    \"provider_reference\": \"provider_reference_example\",\n    \"metadata\": {\n      \"order_id\": \"1001\"\n    },\n    \"failure_code\": null,\n    \"failure_message\": null,\n    \"authorized_at\": null,\n    \"succeeded_at\": null,\n    \"failed_at\": null,\n    \"created_at\": \"2026-11-02T12:00:00+00:00\"\n  }\n}"
            }
          ]
        },
        {
          "name": "List payments",
          "request": {
            "method": "GET",
            "description": "List payments in this project environment, newest first. Only status, reference, created_after, created_before and pagination filters are implemented.\n\nScope: payments:read. ",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": "{{base_url}}/payments?per_page=5",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{secret_key}}",
                  "type": "string"
                }
              ]
            }
          },
          "response": [
            {
              "name": "200 example",
              "originalRequest": {
                "method": "GET",
                "description": "List payments in this project environment, newest first. Only status, reference, created_after, created_before and pagination filters are implemented.\n\nScope: payments:read. ",
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "url": "{{base_url}}/payments?per_page=5",
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{secret_key}}",
                      "type": "string"
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"success\": true,\n  \"data\": [\n    {\n      \"id\": \"pay_01M6EB66SC61Q3RQYAN0693DGM\",\n      \"object\": \"payment\",\n      \"reference\": \"ORDER-1001\",\n      \"status\": \"pending\",\n      \"amount\": 50000,\n      \"amount_refunded\": 0,\n      \"currency\": \"NGN\",\n      \"customer\": {\n        \"email\": \"customer@example.com\",\n        \"name\": \"Ada Lovelace\",\n        \"phone\": null\n      },\n      \"description\": \"Order 1001\",\n      \"checkout_url\": \"https://checkout.paystack.com/example\",\n      \"provider\": \"paystack\",\n      \"provider_reference\": \"provider_reference_example\",\n      \"metadata\": {\n        \"order_id\": \"1001\"\n      },\n      \"failure_code\": null,\n      \"failure_message\": null,\n      \"authorized_at\": null,\n      \"succeeded_at\": null,\n      \"failed_at\": null,\n      \"created_at\": \"2026-11-02T12:00:00+00:00\"\n    }\n  ],\n  \"meta\": {\n    \"page\": 1,\n    \"per_page\": 25,\n    \"total\": 1,\n    \"has_more\": false\n  }\n}"
            }
          ]
        },
        {
          "name": "Retrieve a payment",
          "request": {
            "method": "GET",
            "description": "Retrieve by Veyqo payment ID or your merchant reference directly in the path. URL-encode references; use the Veyqo ID when a reference contains reserved URL characters.\n\nScope: payments:read. ",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": "{{base_url}}/payments/{{payment_id}}",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{secret_key}}",
                  "type": "string"
                }
              ]
            }
          },
          "response": [
            {
              "name": "200 example",
              "originalRequest": {
                "method": "GET",
                "description": "Retrieve by Veyqo payment ID or your merchant reference directly in the path. URL-encode references; use the Veyqo ID when a reference contains reserved URL characters.\n\nScope: payments:read. ",
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "url": "{{base_url}}/payments/{{payment_id}}",
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{secret_key}}",
                      "type": "string"
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"id\": \"pay_01M6EB66SC61Q3RQYAN0693DGM\",\n    \"object\": \"payment\",\n    \"reference\": \"ORDER-1001\",\n    \"status\": \"pending\",\n    \"amount\": 50000,\n    \"amount_refunded\": 0,\n    \"currency\": \"NGN\",\n    \"customer\": {\n      \"email\": \"customer@example.com\",\n      \"name\": \"Ada Lovelace\",\n      \"phone\": null\n    },\n    \"description\": \"Order 1001\",\n    \"checkout_url\": \"https://checkout.paystack.com/example\",\n    \"provider\": \"paystack\",\n    \"provider_reference\": \"provider_reference_example\",\n    \"metadata\": {\n      \"order_id\": \"1001\"\n    },\n    \"failure_code\": null,\n    \"failure_message\": null,\n    \"authorized_at\": null,\n    \"succeeded_at\": null,\n    \"failed_at\": null,\n    \"created_at\": \"2026-11-02T12:00:00+00:00\"\n  }\n}"
            }
          ]
        },
        {
          "name": "Verify a payment",
          "request": {
            "method": "POST",
            "description": "Asks the provider what actually happened and updates the payment. Use it when a webhook has not arrived — never trust a browser redirect alone.\n\nScope: payments:read. ",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": "{{base_url}}/payments/{{payment_id}}/verify",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{secret_key}}",
                  "type": "string"
                }
              ]
            }
          },
          "response": [
            {
              "name": "200 example",
              "originalRequest": {
                "method": "POST",
                "description": "Asks the provider what actually happened and updates the payment. Use it when a webhook has not arrived — never trust a browser redirect alone.\n\nScope: payments:read. ",
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "url": "{{base_url}}/payments/{{payment_id}}/verify",
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{secret_key}}",
                      "type": "string"
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"id\": \"pay_01M6EB66SC61Q3RQYAN0693DGM\",\n    \"object\": \"payment\",\n    \"reference\": \"ORDER-1001\",\n    \"status\": \"pending\",\n    \"amount\": 50000,\n    \"amount_refunded\": 0,\n    \"currency\": \"NGN\",\n    \"customer\": {\n      \"email\": \"customer@example.com\",\n      \"name\": \"Ada Lovelace\",\n      \"phone\": null\n    },\n    \"description\": \"Order 1001\",\n    \"checkout_url\": \"https://checkout.paystack.com/example\",\n    \"provider\": \"paystack\",\n    \"provider_reference\": \"provider_reference_example\",\n    \"metadata\": {\n      \"order_id\": \"1001\"\n    },\n    \"failure_code\": null,\n    \"failure_message\": null,\n    \"authorized_at\": null,\n    \"succeeded_at\": null,\n    \"failed_at\": null,\n    \"created_at\": \"2026-11-02T12:00:00+00:00\"\n  }\n}"
            }
          ]
        },
        {
          "name": "Refund a payment",
          "request": {
            "method": "POST",
            "description": "Full or partial. Omit `amount` to refund everything still refundable.\n\nScope: refunds:write. Set operation_idempotency_key once per logical operation; do not regenerate on retry.",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "{{operation_idempotency_key}}"
              }
            ],
            "url": "{{base_url}}/payments/{{payment_id}}/refunds",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{secret_key}}",
                  "type": "string"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"amount\": 25000,\n  \"reason\": \"requested_by_customer\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "201 example",
              "originalRequest": {
                "method": "POST",
                "description": "Full or partial. Omit `amount` to refund everything still refundable.\n\nScope: refunds:write. Set operation_idempotency_key once per logical operation; do not regenerate on retry.",
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Idempotency-Key",
                    "value": "{{operation_idempotency_key}}"
                  }
                ],
                "url": "{{base_url}}/payments/{{payment_id}}/refunds",
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{secret_key}}",
                      "type": "string"
                    }
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"amount\": 25000,\n  \"reason\": \"requested_by_customer\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Created",
              "code": 201,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"id\": \"ref_01M6EB66SC61Q3RQYAN0693DGM\",\n    \"object\": \"refund\",\n    \"payment\": \"pay_01M6EB66SC61Q3RQYAN0693DGM\",\n    \"amount\": 25000,\n    \"currency\": \"NGN\",\n    \"status\": \"pending\",\n    \"reason\": \"requested_by_customer\",\n    \"failure_message\": null,\n    \"created_at\": \"2026-11-02T12:00:00+00:00\"\n  }\n}"
            }
          ]
        },
        {
          "name": "Retrieve a refund",
          "request": {
            "method": "GET",
            "description": "The refund and the payment it belongs to.\n\nScope: refunds:read. ",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": "{{base_url}}/refunds/{{refund_id}}",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{secret_key}}",
                  "type": "string"
                }
              ]
            }
          },
          "response": [
            {
              "name": "200 example",
              "originalRequest": {
                "method": "GET",
                "description": "The refund and the payment it belongs to.\n\nScope: refunds:read. ",
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "url": "{{base_url}}/refunds/{{refund_id}}",
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{secret_key}}",
                      "type": "string"
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"id\": \"ref_01M6EB66SC61Q3RQYAN0693DGM\",\n    \"object\": \"refund\",\n    \"payment\": \"pay_01M6EB66SC61Q3RQYAN0693DGM\",\n    \"amount\": 25000,\n    \"currency\": \"NGN\",\n    \"status\": \"pending\",\n    \"reason\": \"requested_by_customer\",\n    \"failure_message\": null,\n    \"created_at\": \"2026-11-02T12:00:00+00:00\"\n  }\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Events",
      "item": [
        {
          "name": "List events",
          "request": {
            "method": "GET",
            "description": "Every event Veyqo produced in this environment, newest first. Filter by `type`.\n\nScope: events:read. ",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": "{{base_url}}/events?per_page=5",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{secret_key}}",
                  "type": "string"
                }
              ]
            }
          },
          "response": [
            {
              "name": "200 example",
              "originalRequest": {
                "method": "GET",
                "description": "Every event Veyqo produced in this environment, newest first. Filter by `type`.\n\nScope: events:read. ",
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "url": "{{base_url}}/events?per_page=5",
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{secret_key}}",
                      "type": "string"
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"success\": true,\n  \"data\": [\n    {\n      \"id\": \"evt_01M6EB66SC61Q3RQYAN0693DGM\",\n      \"type\": \"payment.succeeded\",\n      \"created_at\": \"2026-11-02T12:00:00+00:00\",\n      \"environment\": \"sandbox\",\n      \"data\": {\n        \"payment_id\": \"pay_01M6EB66SC61Q3RQYAN0693DGM\",\n        \"reference\": \"ORDER-1001\",\n        \"amount\": 50000,\n        \"amount_refunded\": 0,\n        \"currency\": \"NGN\",\n        \"status\": \"succeeded\",\n        \"customer\": {\n          \"email\": \"customer@example.com\",\n          \"name\": \"Ada Lovelace\"\n        },\n        \"provider\": {\n          \"name\": \"paystack\",\n          \"reference\": \"provider_reference_example\"\n        },\n        \"metadata\": {\n          \"order_id\": \"1001\"\n        }\n      }\n    }\n  ],\n  \"meta\": {\n    \"page\": 1,\n    \"per_page\": 25,\n    \"total\": 1,\n    \"has_more\": false\n  }\n}"
            }
          ]
        },
        {
          "name": "Retrieve an event",
          "request": {
            "method": "GET",
            "description": "The normalized event, identical in shape whichever provider caused it.\n\nScope: events:read. ",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": "{{base_url}}/events/{{event_id}}",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{secret_key}}",
                  "type": "string"
                }
              ]
            }
          },
          "response": [
            {
              "name": "200 example",
              "originalRequest": {
                "method": "GET",
                "description": "The normalized event, identical in shape whichever provider caused it.\n\nScope: events:read. ",
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "url": "{{base_url}}/events/{{event_id}}",
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{secret_key}}",
                      "type": "string"
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"id\": \"evt_01M6EB66SC61Q3RQYAN0693DGM\",\n    \"type\": \"payment.succeeded\",\n    \"created_at\": \"2026-11-02T12:00:00+00:00\",\n    \"environment\": \"sandbox\",\n    \"data\": {\n      \"payment_id\": \"pay_01M6EB66SC61Q3RQYAN0693DGM\",\n      \"reference\": \"ORDER-1001\",\n      \"amount\": 50000,\n      \"amount_refunded\": 0,\n      \"currency\": \"NGN\",\n      \"status\": \"succeeded\",\n      \"customer\": {\n        \"email\": \"customer@example.com\",\n        \"name\": \"Ada Lovelace\"\n      },\n      \"provider\": {\n        \"name\": \"paystack\",\n        \"reference\": \"provider_reference_example\"\n      },\n      \"metadata\": {\n        \"order_id\": \"1001\"\n      }\n    }\n  }\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Checkout",
      "item": [
        {
          "name": "Create a checkout session",
          "request": {
            "method": "POST",
            "description": "Returns a checkout `url` where the customer pays without leaving Veyqo: by bank transfer, USSD or mobile money on the page itself, or by card in the gateway's own secure form over it. Created here with your secret key, the amount cannot be changed by the customer; open it with the JS SDK or redirect to `url`.\n\nScope: payments:write. Set operation_idempotency_key once per logical operation; do not regenerate on retry.",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "{{operation_idempotency_key}}"
              }
            ],
            "url": "{{base_url}}/checkout/sessions",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{secret_key}}",
                  "type": "string"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"amount\": 50000,\n  \"currency\": \"NGN\",\n  \"reference\": \"ORDER-1001\",\n  \"provider\": \"paystack\",\n  \"customer\": {\n    \"email\": \"customer@example.com\"\n  },\n  \"success_url\": \"https://shop.example.com/thanks\",\n  \"cancel_url\": \"https://shop.example.com/cart\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "201 example",
              "originalRequest": {
                "method": "POST",
                "description": "Returns a checkout `url` where the customer pays without leaving Veyqo: by bank transfer, USSD or mobile money on the page itself, or by card in the gateway's own secure form over it. Created here with your secret key, the amount cannot be changed by the customer; open it with the JS SDK or redirect to `url`.\n\nScope: payments:write. Set operation_idempotency_key once per logical operation; do not regenerate on retry.",
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Idempotency-Key",
                    "value": "{{operation_idempotency_key}}"
                  }
                ],
                "url": "{{base_url}}/checkout/sessions",
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{secret_key}}",
                      "type": "string"
                    }
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"amount\": 50000,\n  \"currency\": \"NGN\",\n  \"reference\": \"ORDER-1001\",\n  \"provider\": \"paystack\",\n  \"customer\": {\n    \"email\": \"customer@example.com\"\n  },\n  \"success_url\": \"https://shop.example.com/thanks\",\n  \"cancel_url\": \"https://shop.example.com/cart\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Created",
              "code": 201,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"id\": \"cs_01M6EB66SC61Q3RQYAN0693DGM\",\n    \"object\": \"checkout_session\",\n    \"url\": \"https://veyqo.org/pay/cs_01M6EB66SC61Q3RQYAN0693DGM\",\n    \"status\": \"open\",\n    \"source\": \"api\",\n    \"provider\": \"paystack\",\n    \"amount\": 50000,\n    \"currency\": \"NGN\",\n    \"reference\": \"ORDER-1001\",\n    \"description\": \"Order 1001\",\n    \"customer_email\": \"customer@example.com\",\n    \"payment\": null,\n    \"success_url\": \"https://shop.example.com/thanks\",\n    \"cancel_url\": \"https://shop.example.com/cart\",\n    \"expires_at\": \"2026-11-02T13:00:00+00:00\",\n    \"completed_at\": null,\n    \"created_at\": \"2026-11-02T12:00:00+00:00\"\n  }\n}"
            }
          ]
        },
        {
          "name": "Retrieve a checkout session",
          "request": {
            "method": "GET",
            "description": "Its status (`open`, `completed`, `expired`) and the payment behind it. A payment still waiting is verified with the provider before this answers.\n\nScope: payments:read. ",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": "{{base_url}}/checkout/sessions/{{checkout_session_id}}",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{secret_key}}",
                  "type": "string"
                }
              ]
            }
          },
          "response": [
            {
              "name": "200 example",
              "originalRequest": {
                "method": "GET",
                "description": "Its status (`open`, `completed`, `expired`) and the payment behind it. A payment still waiting is verified with the provider before this answers.\n\nScope: payments:read. ",
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "url": "{{base_url}}/checkout/sessions/{{checkout_session_id}}",
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{secret_key}}",
                      "type": "string"
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"id\": \"cs_01M6EB66SC61Q3RQYAN0693DGM\",\n    \"object\": \"checkout_session\",\n    \"url\": \"https://veyqo.org/pay/cs_01M6EB66SC61Q3RQYAN0693DGM\",\n    \"status\": \"open\",\n    \"source\": \"api\",\n    \"provider\": \"paystack\",\n    \"amount\": 50000,\n    \"currency\": \"NGN\",\n    \"reference\": \"ORDER-1001\",\n    \"description\": \"Order 1001\",\n    \"customer_email\": \"customer@example.com\",\n    \"payment\": null,\n    \"success_url\": \"https://shop.example.com/thanks\",\n    \"cancel_url\": \"https://shop.example.com/cart\",\n    \"expires_at\": \"2026-11-02T13:00:00+00:00\",\n    \"completed_at\": null,\n    \"created_at\": \"2026-11-02T12:00:00+00:00\"\n  }\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Providers",
      "item": [
        {
          "name": "List connected providers",
          "request": {
            "method": "GET",
            "description": "Lists provider connection rows for this environment, including status, health and explicitly public provider keys. Disabled or historical rows may be present; secret credentials are never returned.\n\nScope: payments:read. ",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": "{{base_url}}/providers",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{secret_key}}",
                  "type": "string"
                }
              ]
            }
          },
          "response": [
            {
              "name": "200 example",
              "originalRequest": {
                "method": "GET",
                "description": "Lists provider connection rows for this environment, including status, health and explicitly public provider keys. Disabled or historical rows may be present; secret credentials are never returned.\n\nScope: payments:read. ",
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "url": "{{base_url}}/providers",
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{secret_key}}",
                      "type": "string"
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"success\": true,\n  \"data\": [\n    {\n      \"provider\": \"paystack\",\n      \"name\": \"Paystack\",\n      \"status\": \"active\",\n      \"health\": \"healthy\",\n      \"currencies\": [\n        \"NGN\",\n        \"GHS\",\n        \"ZAR\",\n        \"KES\",\n        \"USD\"\n      ],\n      \"capabilities\": [\n        \"collections\",\n        \"refunds\",\n        \"transfers\"\n      ],\n      \"public_credentials\": {\n        \"public_key\": \"pk_test_public_example\"\n      },\n      \"connected_at\": \"2026-11-02T12:00:00+00:00\"\n    }\n  ]\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Browser checkout (separate auth surface)",
      "item": [
        {
          "name": "Create a browser checkout session",
          "request": {
            "method": "POST",
            "description": "Starts a browser-defined checkout with a publishable key. The browser can change the amount, so reconcile against your server order. Success/cancel URL hosts must match the request Origin. Prefer server-created checkout for trusted pricing.\n\nScope: publishable. ",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": "{{browser_base_url}}/sessions",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{publishable_key}}",
                  "type": "string"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"amount\": 50000,\n  \"currency\": \"NGN\",\n  \"reference\": \"ORDER-1001\",\n  \"provider\": \"paystack\",\n  \"customer\": {\n    \"email\": \"customer@example.com\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "201 example",
              "originalRequest": {
                "method": "POST",
                "description": "Starts a browser-defined checkout with a publishable key. The browser can change the amount, so reconcile against your server order. Success/cancel URL hosts must match the request Origin. Prefer server-created checkout for trusted pricing.\n\nScope: publishable. ",
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": "{{browser_base_url}}/sessions",
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{publishable_key}}",
                      "type": "string"
                    }
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"amount\": 50000,\n  \"currency\": \"NGN\",\n  \"reference\": \"ORDER-1001\",\n  \"provider\": \"paystack\",\n  \"customer\": {\n    \"email\": \"customer@example.com\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Created",
              "code": 201,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"id\": \"cs_01M6EB66SC61Q3RQYAN0693DGM\",\n    \"object\": \"checkout_session\",\n    \"url\": \"https://veyqo.org/pay/cs_01M6EB66SC61Q3RQYAN0693DGM\",\n    \"status\": \"open\",\n    \"source\": \"browser\",\n    \"provider\": \"paystack\",\n    \"amount\": 50000,\n    \"currency\": \"NGN\",\n    \"reference\": \"ORDER-1001\",\n    \"description\": \"Order 1001\",\n    \"customer_email\": \"customer@example.com\",\n    \"payment\": null,\n    \"success_url\": \"https://shop.example.com/thanks\",\n    \"cancel_url\": \"https://shop.example.com/cart\",\n    \"expires_at\": \"2026-11-02T13:00:00+00:00\",\n    \"completed_at\": null,\n    \"created_at\": \"2026-11-02T12:00:00+00:00\"\n  }\n}"
            }
          ]
        },
        {
          "name": "Read browser checkout state",
          "request": {
            "method": "GET",
            "description": "Possession of the session ID addresses this customer checkout. These endpoints support the hosted page and SDK; prefer those clients over reimplementing provider-specific actions.\n\nScope: session. ",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": "{{browser_base_url}}/sessions/{{checkout_session_id}}",
            "auth": {
              "type": "noauth"
            }
          },
          "response": [
            {
              "name": "200 example",
              "originalRequest": {
                "method": "GET",
                "description": "Possession of the session ID addresses this customer checkout. These endpoints support the hosted page and SDK; prefer those clients over reimplementing provider-specific actions.\n\nScope: session. ",
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "url": "{{browser_base_url}}/sessions/{{checkout_session_id}}",
                "auth": {
                  "type": "noauth"
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"id\": \"cs_01M6EB66SC61Q3RQYAN0693DGM\",\n    \"object\": \"checkout_session\",\n    \"url\": \"https://veyqo.org/pay/cs_01M6EB66SC61Q3RQYAN0693DGM\",\n    \"status\": \"open\",\n    \"source\": \"api\",\n    \"provider\": {\n      \"slug\": \"paystack\",\n      \"name\": \"Paystack\"\n    },\n    \"amount\": 50000,\n    \"currency\": \"NGN\",\n    \"reference\": \"ORDER-1001\",\n    \"description\": \"Order 1001\",\n    \"customer_email\": \"customer@example.com\",\n    \"payment\": null,\n    \"success_url\": \"https://shop.example.com/thanks\",\n    \"cancel_url\": \"https://shop.example.com/cart\",\n    \"expires_at\": \"2026-11-02T13:00:00+00:00\",\n    \"completed_at\": null,\n    \"created_at\": \"2026-11-02T12:00:00+00:00\",\n    \"merchant\": {\n      \"name\": \"Example Store\"\n    },\n    \"sandbox\": true,\n    \"needs_email\": false,\n    \"methods\": [\n      {\n        \"id\": \"card\"\n      },\n      {\n        \"id\": \"bank_transfer\"\n      },\n      {\n        \"id\": \"ussd\",\n        \"banks\": [\n          {\n            \"code\": \"737\",\n            \"name\": \"GTBank\"\n          },\n          {\n            \"code\": \"919\",\n            \"name\": \"UBA\"\n          },\n          {\n            \"code\": \"822\",\n            \"name\": \"Sterling Bank\"\n          },\n          {\n            \"code\": \"966\",\n            \"name\": \"Zenith Bank\"\n          }\n        ]\n      }\n    ],\n    \"next_action\": null\n  }\n}"
            }
          ]
        },
        {
          "name": "Start a checkout method",
          "request": {
            "method": "POST",
            "description": "Possession of the session ID addresses this customer checkout. These endpoints support the hosted page and SDK; prefer those clients over reimplementing provider-specific actions.\n\nScope: session. ",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": "{{browser_base_url}}/sessions/{{checkout_session_id}}/charge",
            "auth": {
              "type": "noauth"
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"method\": \"bank_transfer\",\n  \"email\": \"customer@example.com\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 example",
              "originalRequest": {
                "method": "POST",
                "description": "Possession of the session ID addresses this customer checkout. These endpoints support the hosted page and SDK; prefer those clients over reimplementing provider-specific actions.\n\nScope: session. ",
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": "{{browser_base_url}}/sessions/{{checkout_session_id}}/charge",
                "auth": {
                  "type": "noauth"
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"method\": \"bank_transfer\",\n  \"email\": \"customer@example.com\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"id\": \"cs_01M6EB66SC61Q3RQYAN0693DGM\",\n    \"object\": \"checkout_session\",\n    \"url\": \"https://veyqo.org/pay/cs_01M6EB66SC61Q3RQYAN0693DGM\",\n    \"status\": \"open\",\n    \"source\": \"api\",\n    \"provider\": {\n      \"slug\": \"paystack\",\n      \"name\": \"Paystack\"\n    },\n    \"amount\": 50000,\n    \"currency\": \"NGN\",\n    \"reference\": \"ORDER-1001\",\n    \"description\": \"Order 1001\",\n    \"customer_email\": \"customer@example.com\",\n    \"payment\": null,\n    \"success_url\": \"https://shop.example.com/thanks\",\n    \"cancel_url\": \"https://shop.example.com/cart\",\n    \"expires_at\": \"2026-11-02T13:00:00+00:00\",\n    \"completed_at\": null,\n    \"created_at\": \"2026-11-02T12:00:00+00:00\",\n    \"merchant\": {\n      \"name\": \"Example Store\"\n    },\n    \"sandbox\": true,\n    \"needs_email\": false,\n    \"methods\": [\n      {\n        \"id\": \"card\"\n      },\n      {\n        \"id\": \"bank_transfer\"\n      },\n      {\n        \"id\": \"ussd\",\n        \"banks\": [\n          {\n            \"code\": \"737\",\n            \"name\": \"GTBank\"\n          },\n          {\n            \"code\": \"919\",\n            \"name\": \"UBA\"\n          },\n          {\n            \"code\": \"822\",\n            \"name\": \"Sterling Bank\"\n          },\n          {\n            \"code\": \"966\",\n            \"name\": \"Zenith Bank\"\n          }\n        ]\n      }\n    ],\n    \"next_action\": null\n  }\n}"
            }
          ]
        },
        {
          "name": "Submit a checkout OTP",
          "request": {
            "method": "POST",
            "description": "Possession of the session ID addresses this customer checkout. These endpoints support the hosted page and SDK; prefer those clients over reimplementing provider-specific actions.\n\nScope: session. ",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": "{{browser_base_url}}/sessions/{{checkout_session_id}}/otp",
            "auth": {
              "type": "noauth"
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"otp\": \"123456\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 example",
              "originalRequest": {
                "method": "POST",
                "description": "Possession of the session ID addresses this customer checkout. These endpoints support the hosted page and SDK; prefer those clients over reimplementing provider-specific actions.\n\nScope: session. ",
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": "{{browser_base_url}}/sessions/{{checkout_session_id}}/otp",
                "auth": {
                  "type": "noauth"
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"otp\": \"123456\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"id\": \"cs_01M6EB66SC61Q3RQYAN0693DGM\",\n    \"object\": \"checkout_session\",\n    \"url\": \"https://veyqo.org/pay/cs_01M6EB66SC61Q3RQYAN0693DGM\",\n    \"status\": \"open\",\n    \"source\": \"api\",\n    \"provider\": {\n      \"slug\": \"paystack\",\n      \"name\": \"Paystack\"\n    },\n    \"amount\": 50000,\n    \"currency\": \"NGN\",\n    \"reference\": \"ORDER-1001\",\n    \"description\": \"Order 1001\",\n    \"customer_email\": \"customer@example.com\",\n    \"payment\": null,\n    \"success_url\": \"https://shop.example.com/thanks\",\n    \"cancel_url\": \"https://shop.example.com/cart\",\n    \"expires_at\": \"2026-11-02T13:00:00+00:00\",\n    \"completed_at\": null,\n    \"created_at\": \"2026-11-02T12:00:00+00:00\",\n    \"merchant\": {\n      \"name\": \"Example Store\"\n    },\n    \"sandbox\": true,\n    \"needs_email\": false,\n    \"methods\": [\n      {\n        \"id\": \"card\"\n      },\n      {\n        \"id\": \"bank_transfer\"\n      },\n      {\n        \"id\": \"ussd\",\n        \"banks\": [\n          {\n            \"code\": \"737\",\n            \"name\": \"GTBank\"\n          },\n          {\n            \"code\": \"919\",\n            \"name\": \"UBA\"\n          },\n          {\n            \"code\": \"822\",\n            \"name\": \"Sterling Bank\"\n          },\n          {\n            \"code\": \"966\",\n            \"name\": \"Zenith Bank\"\n          }\n        ]\n      }\n    ],\n    \"next_action\": null\n  }\n}"
            }
          ]
        },
        {
          "name": "Read a payment link",
          "request": {
            "method": "GET",
            "description": "Possession of the payment link ID addresses this checkout. The fixed amount comes from the dashboard link, never the request body.\n\nScope: link. ",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": "{{browser_base_url}}/links/{{payment_link_id}}",
            "auth": {
              "type": "noauth"
            }
          },
          "response": [
            {
              "name": "200 example",
              "originalRequest": {
                "method": "GET",
                "description": "Possession of the payment link ID addresses this checkout. The fixed amount comes from the dashboard link, never the request body.\n\nScope: link. ",
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "url": "{{browser_base_url}}/links/{{payment_link_id}}",
                "auth": {
                  "type": "noauth"
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"id\": \"plink_01M6EB66SC61Q3RQYAN0693DGM\",\n    \"object\": \"payment_link\",\n    \"title\": \"Order 1001\",\n    \"description\": null,\n    \"amount\": 50000,\n    \"currency\": \"NGN\",\n    \"merchant\": {\n      \"name\": \"Example Store\"\n    },\n    \"sandbox\": true\n  }\n}"
            }
          ]
        },
        {
          "name": "Start a payment-link session",
          "request": {
            "method": "POST",
            "description": "Possession of the payment link ID addresses this checkout. The fixed amount comes from the dashboard link, never the request body.\n\nScope: link. ",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": "{{browser_base_url}}/links/{{payment_link_id}}/sessions",
            "auth": {
              "type": "noauth"
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"email\": \"customer@example.com\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "201 example",
              "originalRequest": {
                "method": "POST",
                "description": "Possession of the payment link ID addresses this checkout. The fixed amount comes from the dashboard link, never the request body.\n\nScope: link. ",
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": "{{browser_base_url}}/links/{{payment_link_id}}/sessions",
                "auth": {
                  "type": "noauth"
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"email\": \"customer@example.com\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Created",
              "code": 201,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"id\": \"cs_01M6EB66SC61Q3RQYAN0693DGM\",\n    \"object\": \"checkout_session\",\n    \"url\": \"https://veyqo.org/pay/cs_01M6EB66SC61Q3RQYAN0693DGM\",\n    \"status\": \"open\",\n    \"source\": \"link\",\n    \"provider\": \"paystack\",\n    \"amount\": 50000,\n    \"currency\": \"NGN\",\n    \"reference\": \"ORDER-1001\",\n    \"description\": \"Order 1001\",\n    \"customer_email\": \"customer@example.com\",\n    \"payment\": null,\n    \"success_url\": \"https://shop.example.com/thanks\",\n    \"cancel_url\": \"https://shop.example.com/cart\",\n    \"expires_at\": \"2026-11-02T13:00:00+00:00\",\n    \"completed_at\": null,\n    \"created_at\": \"2026-11-02T12:00:00+00:00\"\n  }\n}"
            }
          ]
        }
      ]
    }
  ]
}
