{
  "info": {
    "name": "OlympusPay — Full API",
    "description": "Complete OlympusPay API reference covering all Supabase edge functions, PostgREST database endpoints, and RPCs.\n\n## Quick Start\n1. Import `OlympusPay.postman_environment.json` alongside this collection.\n2. Run **Auth → Login** — it auto-saves `USER_ACCESS_TOKEN` and `USER_ID`.\n3. All other requests inherit `Bearer {{USER_ACCESS_TOKEN}}` from the collection-level auth.\n\n## Base URL\n`{{FUNCTIONS_BASE_URL}}` = `{{SUPABASE_URL}}/functions/v1`\n\n## Required Headers (auto-applied at collection level)\n- `Authorization: Bearer {{USER_ACCESS_TOKEN}}`\n- `apikey: {{SUPABASE_ANON_KEY}}`\n\n## Demo credentials\nEmail: demo@olympuspay.co  |  Password: OlympusDemo2026!",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "bearer",
    "bearer": [{ "key": "token", "value": "{{USER_ACCESS_TOKEN}}", "type": "string" }]
  },
  "variable": [],
  "item": [

    {
      "name": "01 · Auth",
      "description": "Supabase Auth endpoints — login, signup, password reset, session management.",
      "item": [
        {
          "name": "Login",
          "event": [{
            "listen": "test",
            "script": {
              "type": "text/javascript",
              "exec": [
                "const json = pm.response.json();",
                "if (json.access_token) {",
                "  pm.environment.set('USER_ACCESS_TOKEN', json.access_token);",
                "  pm.environment.set('USER_ID', json.user?.id ?? '');",
                "  pm.environment.set('USER_EMAIL', json.user?.email ?? '');",
                "  console.log('✓ Token saved for', json.user?.email);",
                "} else {",
                "  console.warn('Login failed:', JSON.stringify(json));",
                "}"
              ]
            }
          }],
          "request": {
            "auth": { "type": "noauth" },
            "method": "POST",
            "header": [
              { "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" },
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"email\": \"demo@olympuspay.co\",\n  \"password\": \"OlympusDemo2026!\"\n}"
            },
            "url": {
              "raw": "{{SUPABASE_URL}}/auth/v1/token?grant_type=password",
              "host": ["{{SUPABASE_URL}}"],
              "path": ["auth", "v1", "token"],
              "query": [{ "key": "grant_type", "value": "password" }]
            }
          }
        },
        {
          "name": "Sign Up",
          "request": {
            "auth": { "type": "noauth" },
            "method": "POST",
            "header": [
              { "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" },
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"email\": \"newuser@example.com\",\n  \"password\": \"SecurePass2026!\"\n}"
            },
            "url": "{{SUPABASE_URL}}/auth/v1/signup"
          }
        },
        {
          "name": "Request Password Reset",
          "request": {
            "auth": { "type": "noauth" },
            "method": "POST",
            "header": [
              { "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" },
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"email\": \"user@example.com\"\n}"
            },
            "url": "{{SUPABASE_URL}}/auth/v1/recover"
          }
        },
        {
          "name": "Get Current User",
          "request": {
            "method": "GET",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }],
            "url": "{{SUPABASE_URL}}/auth/v1/user"
          }
        },
        {
          "name": "Refresh Token",
          "request": {
            "auth": { "type": "noauth" },
            "method": "POST",
            "header": [
              { "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" },
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"refresh_token\": \"{{REFRESH_TOKEN}}\"\n}"
            },
            "url": {
              "raw": "{{SUPABASE_URL}}/auth/v1/token?grant_type=refresh_token",
              "host": ["{{SUPABASE_URL}}"],
              "path": ["auth", "v1", "token"],
              "query": [{ "key": "grant_type", "value": "refresh_token" }]
            }
          }
        },
        {
          "name": "Sign Out",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }],
            "url": "{{SUPABASE_URL}}/auth/v1/logout"
          }
        }
      ]
    },

    {
      "name": "02 · Database — PostgREST",
      "description": "Direct PostgREST table access. All requests are RLS-enforced — you only see rows belonging to the authenticated user.\n\nBase: `{{SUPABASE_URL}}/rest/v1/`",
      "item": [
        {
          "name": "Profiles",
          "item": [
            {
              "name": "Get My Profile",
              "request": {
                "method": "GET",
                "header": [
                  { "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" },
                  { "key": "Prefer", "value": "return=representation" }
                ],
                "url": {
                  "raw": "{{SUPABASE_URL}}/rest/v1/profiles?id=eq.{{USER_ID}}&select=*",
                  "host": ["{{SUPABASE_URL}}"],
                  "path": ["rest", "v1", "profiles"],
                  "query": [
                    { "key": "id", "value": "eq.{{USER_ID}}" },
                    { "key": "select", "value": "*" }
                  ]
                }
              }
            },
            {
              "name": "Update Profile",
              "request": {
                "method": "PATCH",
                "header": [
                  { "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" },
                  { "key": "Content-Type", "value": "application/json" },
                  { "key": "Prefer", "value": "return=representation" }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"full_name\": \"Jane Doe\",\n  \"phone\": \"+26771000000\",\n  \"locale\": \"en-BW\"\n}"
                },
                "url": {
                  "raw": "{{SUPABASE_URL}}/rest/v1/profiles?id=eq.{{USER_ID}}",
                  "host": ["{{SUPABASE_URL}}"],
                  "path": ["rest", "v1", "profiles"],
                  "query": [{ "key": "id", "value": "eq.{{USER_ID}}" }]
                }
              }
            }
          ]
        },
        {
          "name": "Business Profiles",
          "item": [
            {
              "name": "Get Business Profile",
              "request": {
                "method": "GET",
                "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }],
                "url": {
                  "raw": "{{SUPABASE_URL}}/rest/v1/business_profiles?user_id=eq.{{USER_ID}}&select=*",
                  "host": ["{{SUPABASE_URL}}"],
                  "path": ["rest", "v1", "business_profiles"],
                  "query": [
                    { "key": "user_id", "value": "eq.{{USER_ID}}" },
                    { "key": "select", "value": "*" }
                  ]
                }
              }
            },
            {
              "name": "Upsert Business Profile",
              "request": {
                "method": "POST",
                "header": [
                  { "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" },
                  { "key": "Content-Type", "value": "application/json" },
                  { "key": "Prefer", "value": "resolution=merge-duplicates,return=representation" }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"user_id\": \"{{USER_ID}}\",\n  \"legal_name\": \"Acme (Pty) Ltd\",\n  \"trading_name\": \"Acme\",\n  \"entity_type\": \"llc\",\n  \"industry\": \"retail\",\n  \"reg_number\": \"BW-12345\",\n  \"tax_id\": \"P1234567890\",\n  \"business_phone\": \"+26771000000\",\n  \"country\": \"BW\",\n  \"currency\": \"BWP\"\n}"
                },
                "url": "{{SUPABASE_URL}}/rest/v1/business_profiles"
              }
            }
          ]
        },
        {
          "name": "Accounts",
          "item": [
            {
              "name": "Get My Account",
              "request": {
                "method": "GET",
                "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }],
                "url": {
                  "raw": "{{SUPABASE_URL}}/rest/v1/accounts?user_id=eq.{{USER_ID}}&select=*",
                  "host": ["{{SUPABASE_URL}}"],
                  "path": ["rest", "v1", "accounts"],
                  "query": [
                    { "key": "user_id", "value": "eq.{{USER_ID}}" },
                    { "key": "select", "value": "*" }
                  ]
                }
              }
            }
          ]
        },
        {
          "name": "Transactions",
          "item": [
            {
              "name": "List Transactions (latest 20)",
              "request": {
                "method": "GET",
                "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }],
                "url": {
                  "raw": "{{SUPABASE_URL}}/rest/v1/transactions?user_id=eq.{{USER_ID}}&select=*&order=created_at.desc&limit=20",
                  "host": ["{{SUPABASE_URL}}"],
                  "path": ["rest", "v1", "transactions"],
                  "query": [
                    { "key": "user_id", "value": "eq.{{USER_ID}}" },
                    { "key": "select", "value": "*" },
                    { "key": "order", "value": "created_at.desc" },
                    { "key": "limit", "value": "20" }
                  ]
                }
              }
            },
            {
              "name": "List Transactions (by status)",
              "request": {
                "method": "GET",
                "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }],
                "url": {
                  "raw": "{{SUPABASE_URL}}/rest/v1/transactions?user_id=eq.{{USER_ID}}&status=eq.completed&order=created_at.desc&limit=50",
                  "host": ["{{SUPABASE_URL}}"],
                  "path": ["rest", "v1", "transactions"],
                  "query": [
                    { "key": "user_id", "value": "eq.{{USER_ID}}" },
                    { "key": "status", "value": "eq.completed" },
                    { "key": "order", "value": "created_at.desc" },
                    { "key": "limit", "value": "50" }
                  ]
                }
              }
            },
            {
              "name": "Get Single Transaction",
              "request": {
                "method": "GET",
                "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }],
                "url": {
                  "raw": "{{SUPABASE_URL}}/rest/v1/transactions?id=eq.{{TEST_TXN_ID}}&select=*",
                  "host": ["{{SUPABASE_URL}}"],
                  "path": ["rest", "v1", "transactions"],
                  "query": [
                    { "key": "id", "value": "eq.{{TEST_TXN_ID}}" },
                    { "key": "select", "value": "*" }
                  ]
                }
              }
            }
          ]
        },
        {
          "name": "Cards",
          "item": [
            {
              "name": "List My Cards",
              "request": {
                "method": "GET",
                "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }],
                "url": {
                  "raw": "{{SUPABASE_URL}}/rest/v1/cards?user_id=eq.{{USER_ID}}&select=id,card_type,display_name,last_four,masked_pan,status,monthly_limit,pin_set,created_at",
                  "host": ["{{SUPABASE_URL}}"],
                  "path": ["rest", "v1", "cards"],
                  "query": [
                    { "key": "user_id", "value": "eq.{{USER_ID}}" },
                    { "key": "select", "value": "id,card_type,display_name,last_four,masked_pan,status,monthly_limit,pin_set,created_at" }
                  ]
                }
              }
            }
          ]
        },
        {
          "name": "Beneficiaries",
          "item": [
            {
              "name": "List Beneficiaries",
              "request": {
                "method": "GET",
                "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }],
                "url": {
                  "raw": "{{SUPABASE_URL}}/rest/v1/beneficiaries?user_id=eq.{{USER_ID}}&select=*&order=beneficiary_name.asc",
                  "host": ["{{SUPABASE_URL}}"],
                  "path": ["rest", "v1", "beneficiaries"],
                  "query": [
                    { "key": "user_id", "value": "eq.{{USER_ID}}" },
                    { "key": "select", "value": "*" },
                    { "key": "order", "value": "beneficiary_name.asc" }
                  ]
                }
              }
            },
            {
              "name": "Add Beneficiary",
              "request": {
                "method": "POST",
                "header": [
                  { "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" },
                  { "key": "Content-Type", "value": "application/json" },
                  { "key": "Prefer", "value": "return=representation" }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"beneficiary_name\": \"Jane Smith\",\n  \"account_number\": \"12345678\",\n  \"bank_code\": \"20-00-00\",\n  \"bank_name\": \"Standard Chartered BW\",\n  \"country\": \"BW\",\n  \"payment_rail\": \"LOCAL\"\n}"
                },
                "url": "{{SUPABASE_URL}}/rest/v1/beneficiaries"
              }
            },
            {
              "name": "Delete Beneficiary",
              "request": {
                "method": "DELETE",
                "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }],
                "url": {
                  "raw": "{{SUPABASE_URL}}/rest/v1/beneficiaries?id=eq.BENEFICIARY_ID",
                  "host": ["{{SUPABASE_URL}}"],
                  "path": ["rest", "v1", "beneficiaries"],
                  "query": [{ "key": "id", "value": "eq.BENEFICIARY_ID" }]
                }
              }
            }
          ]
        },
        {
          "name": "Invoices",
          "item": [
            {
              "name": "List Invoices",
              "request": {
                "method": "GET",
                "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }],
                "url": {
                  "raw": "{{SUPABASE_URL}}/rest/v1/invoices?user_id=eq.{{USER_ID}}&select=*,invoice_items(*)&order=created_at.desc",
                  "host": ["{{SUPABASE_URL}}"],
                  "path": ["rest", "v1", "invoices"],
                  "query": [
                    { "key": "user_id", "value": "eq.{{USER_ID}}" },
                    { "key": "select", "value": "*,invoice_items(*)" },
                    { "key": "order", "value": "created_at.desc" }
                  ]
                }
              }
            },
            {
              "name": "Get Invoice",
              "request": {
                "method": "GET",
                "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }],
                "url": {
                  "raw": "{{SUPABASE_URL}}/rest/v1/invoices?id=eq.{{INVOICE_ID}}&select=*,invoice_items(*)",
                  "host": ["{{SUPABASE_URL}}"],
                  "path": ["rest", "v1", "invoices"],
                  "query": [
                    { "key": "id", "value": "eq.{{INVOICE_ID}}" },
                    { "key": "select", "value": "*,invoice_items(*)" }
                  ]
                }
              }
            },
            {
              "name": "Update Invoice Status",
              "request": {
                "method": "PATCH",
                "header": [
                  { "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" },
                  { "key": "Content-Type", "value": "application/json" }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"status\": \"sent\"\n}"
                },
                "url": {
                  "raw": "{{SUPABASE_URL}}/rest/v1/invoices?id=eq.{{INVOICE_ID}}",
                  "host": ["{{SUPABASE_URL}}"],
                  "path": ["rest", "v1", "invoices"],
                  "query": [{ "key": "id", "value": "eq.{{INVOICE_ID}}" }]
                }
              }
            }
          ]
        },
        {
          "name": "Notifications",
          "item": [
            {
              "name": "List Notifications",
              "request": {
                "method": "GET",
                "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }],
                "url": {
                  "raw": "{{SUPABASE_URL}}/rest/v1/notifications?user_id=eq.{{USER_ID}}&select=*&order=created_at.desc&limit=30",
                  "host": ["{{SUPABASE_URL}}"],
                  "path": ["rest", "v1", "notifications"],
                  "query": [
                    { "key": "user_id", "value": "eq.{{USER_ID}}" },
                    { "key": "select", "value": "*" },
                    { "key": "order", "value": "created_at.desc" },
                    { "key": "limit", "value": "30" }
                  ]
                }
              }
            },
            {
              "name": "Mark All as Read",
              "request": {
                "method": "PATCH",
                "header": [
                  { "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" },
                  { "key": "Content-Type", "value": "application/json" }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"is_read\": true\n}"
                },
                "url": {
                  "raw": "{{SUPABASE_URL}}/rest/v1/notifications?user_id=eq.{{USER_ID}}&is_read=eq.false",
                  "host": ["{{SUPABASE_URL}}"],
                  "path": ["rest", "v1", "notifications"],
                  "query": [
                    { "key": "user_id", "value": "eq.{{USER_ID}}" },
                    { "key": "is_read", "value": "eq.false" }
                  ]
                }
              }
            }
          ]
        },
        {
          "name": "Scheduled Payments",
          "item": [
            {
              "name": "List Scheduled Payments",
              "request": {
                "method": "GET",
                "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }],
                "url": {
                  "raw": "{{SUPABASE_URL}}/rest/v1/scheduled_payments?user_id=eq.{{USER_ID}}&select=*&order=next_run_date.asc",
                  "host": ["{{SUPABASE_URL}}"],
                  "path": ["rest", "v1", "scheduled_payments"],
                  "query": [
                    { "key": "user_id", "value": "eq.{{USER_ID}}" },
                    { "key": "select", "value": "*" },
                    { "key": "order", "value": "next_run_date.asc" }
                  ]
                }
              }
            }
          ]
        },
        {
          "name": "Payment Requests",
          "item": [
            {
              "name": "List Payment Requests",
              "request": {
                "method": "GET",
                "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }],
                "url": {
                  "raw": "{{SUPABASE_URL}}/rest/v1/payment_requests?from_user_id=eq.{{USER_ID}}&select=*&order=created_at.desc",
                  "host": ["{{SUPABASE_URL}}"],
                  "path": ["rest", "v1", "payment_requests"],
                  "query": [
                    { "key": "from_user_id", "value": "eq.{{USER_ID}}" },
                    { "key": "select", "value": "*" },
                    { "key": "order", "value": "created_at.desc" }
                  ]
                }
              }
            }
          ]
        },
        {
          "name": "Webhook Subscriptions",
          "item": [
            {
              "name": "List Webhooks",
              "request": {
                "method": "GET",
                "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }],
                "url": {
                  "raw": "{{SUPABASE_URL}}/rest/v1/webhook_subscriptions?user_id=eq.{{USER_ID}}&select=id,event_type,url,is_active,created_at",
                  "host": ["{{SUPABASE_URL}}"],
                  "path": ["rest", "v1", "webhook_subscriptions"],
                  "query": [
                    { "key": "user_id", "value": "eq.{{USER_ID}}" },
                    { "key": "select", "value": "id,event_type,url,is_active,created_at" }
                  ]
                }
              }
            },
            {
              "name": "Register Webhook",
              "request": {
                "method": "POST",
                "header": [
                  { "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" },
                  { "key": "Content-Type", "value": "application/json" },
                  { "key": "Prefer", "value": "return=representation" }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"event_type\": \"payment\",\n  \"url\": \"https://your-server.com/webhooks/olympus\",\n  \"secret\": \"your-hmac-secret\"\n}"
                },
                "url": "{{SUPABASE_URL}}/rest/v1/webhook_subscriptions"
              }
            },
            {
              "name": "Delete Webhook",
              "request": {
                "method": "DELETE",
                "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }],
                "url": {
                  "raw": "{{SUPABASE_URL}}/rest/v1/webhook_subscriptions?id=eq.{{WEBHOOK_ID}}",
                  "host": ["{{SUPABASE_URL}}"],
                  "path": ["rest", "v1", "webhook_subscriptions"],
                  "query": [{ "key": "id", "value": "eq.{{WEBHOOK_ID}}" }]
                }
              }
            }
          ]
        },
        {
          "name": "Travel",
          "item": [
            {
              "name": "List Travel Bookings",
              "request": {
                "method": "GET",
                "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }],
                "url": {
                  "raw": "{{SUPABASE_URL}}/rest/v1/travel_bookings?user_id=eq.{{USER_ID}}&select=*&order=created_at.desc",
                  "host": ["{{SUPABASE_URL}}"],
                  "path": ["rest", "v1", "travel_bookings"],
                  "query": [
                    { "key": "user_id", "value": "eq.{{USER_ID}}" },
                    { "key": "select", "value": "*" },
                    { "key": "order", "value": "created_at.desc" }
                  ]
                }
              }
            },
            {
              "name": "List Travel Passengers",
              "request": {
                "method": "GET",
                "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }],
                "url": {
                  "raw": "{{SUPABASE_URL}}/rest/v1/travel_passengers?user_id=eq.{{USER_ID}}&select=*",
                  "host": ["{{SUPABASE_URL}}"],
                  "path": ["rest", "v1", "travel_passengers"],
                  "query": [
                    { "key": "user_id", "value": "eq.{{USER_ID}}" },
                    { "key": "select", "value": "*" }
                  ]
                }
              }
            },
            {
              "name": "Save Passenger Profile",
              "request": {
                "method": "POST",
                "header": [
                  { "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" },
                  { "key": "Content-Type", "value": "application/json" },
                  { "key": "Prefer", "value": "return=representation" }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"is_default\": true,\n  \"title\": \"Ms\",\n  \"given_name\": \"Jane\",\n  \"family_name\": \"Doe\",\n  \"gender\": \"f\",\n  \"born_on\": \"1990-01-15\",\n  \"email\": \"jane@example.com\",\n  \"phone_number\": \"+26771000000\",\n  \"passport_number\": \"A12345678\",\n  \"passport_expiry_date\": \"2030-01-01\",\n  \"passport_issuance_country\": \"BW\",\n  \"nationality\": \"BW\"\n}"
                },
                "url": "{{SUPABASE_URL}}/rest/v1/travel_passengers"
              }
            }
          ]
        },
        {
          "name": "Statements",
          "item": [
            {
              "name": "List Statements",
              "request": {
                "method": "GET",
                "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }],
                "url": {
                  "raw": "{{SUPABASE_URL}}/rest/v1/statements?user_id=eq.{{USER_ID}}&select=*&order=period_start.desc",
                  "host": ["{{SUPABASE_URL}}"],
                  "path": ["rest", "v1", "statements"],
                  "query": [
                    { "key": "user_id", "value": "eq.{{USER_ID}}" },
                    { "key": "select", "value": "*" },
                    { "key": "order", "value": "period_start.desc" }
                  ]
                }
              }
            }
          ]
        },
        {
          "name": "Team Members",
          "item": [
            {
              "name": "List Team Members",
              "request": {
                "method": "GET",
                "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }],
                "url": {
                  "raw": "{{SUPABASE_URL}}/rest/v1/team_members?user_id=eq.{{USER_ID}}&select=*",
                  "host": ["{{SUPABASE_URL}}"],
                  "path": ["rest", "v1", "team_members"],
                  "query": [
                    { "key": "user_id", "value": "eq.{{USER_ID}}" },
                    { "key": "select", "value": "*" }
                  ]
                }
              }
            }
          ]
        },
        {
          "name": "Compliance",
          "item": [
            {
              "name": "Get KYC Verifications",
              "request": {
                "method": "GET",
                "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }],
                "url": {
                  "raw": "{{SUPABASE_URL}}/rest/v1/kyc_verifications?user_id=eq.{{USER_ID}}&select=*",
                  "host": ["{{SUPABASE_URL}}"],
                  "path": ["rest", "v1", "kyc_verifications"],
                  "query": [
                    { "key": "user_id", "value": "eq.{{USER_ID}}" },
                    { "key": "select", "value": "*" }
                  ]
                }
              }
            },
            {
              "name": "Get UBO Declarations",
              "request": {
                "method": "GET",
                "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }],
                "url": {
                  "raw": "{{SUPABASE_URL}}/rest/v1/ubo_declarations?user_id=eq.{{USER_ID}}&select=*",
                  "host": ["{{SUPABASE_URL}}"],
                  "path": ["rest", "v1", "ubo_declarations"],
                  "query": [
                    { "key": "user_id", "value": "eq.{{USER_ID}}" },
                    { "key": "select", "value": "*" }
                  ]
                }
              }
            },
            {
              "name": "Get Compliance Alerts (admin)",
              "request": {
                "method": "GET",
                "header": [
                  { "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" },
                  { "key": "Authorization", "value": "Bearer {{SUPABASE_SERVICE_ROLE_KEY}}" }
                ],
                "url": {
                  "raw": "{{SUPABASE_URL}}/rest/v1/compliance_alerts?select=*&order=created_at.desc&limit=50",
                  "host": ["{{SUPABASE_URL}}"],
                  "path": ["rest", "v1", "compliance_alerts"],
                  "query": [
                    { "key": "select", "value": "*" },
                    { "key": "order", "value": "created_at.desc" },
                    { "key": "limit", "value": "50" }
                  ]
                }
              }
            }
          ]
        }
      ]
    },

    {
      "name": "03 · Database RPCs",
      "description": "Supabase PostgREST RPC calls — server-side functions that enforce KYC and business logic.\n\nBase: `{{SUPABASE_URL}}/rest/v1/rpc/`",
      "item": [
        {
          "name": "get_my_balance",
          "request": {
            "method": "POST",
            "header": [
              { "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" },
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": { "mode": "raw", "raw": "{}" },
            "url": "{{SUPABASE_URL}}/rest/v1/rpc/get_my_balance"
          }
        },
        {
          "name": "get_kyc_status",
          "request": {
            "method": "POST",
            "header": [
              { "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" },
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": { "mode": "raw", "raw": "{}" },
            "url": "{{SUPABASE_URL}}/rest/v1/rpc/get_kyc_status"
          }
        },
        {
          "name": "submit_kyc",
          "request": {
            "method": "POST",
            "header": [
              { "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" },
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"p_entity_type\": \"individual\",\n  \"p_id_type\": \"passport\",\n  \"p_id_number\": \"A12345678\",\n  \"p_date_of_birth\": \"1990-01-15\"\n}"
            },
            "url": "{{SUPABASE_URL}}/rest/v1/rpc/submit_kyc"
          }
        },
        {
          "name": "initiate_transfer",
          "request": {
            "method": "POST",
            "header": [
              { "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" },
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"p_recipient\": \"Jane Smith\",\n  \"p_sort_code\": \"20-00-00\",\n  \"p_account_num\": \"12345678\",\n  \"p_amount\": 500.00,\n  \"p_method\": \"eft\",\n  \"p_reference\": \"INV-001\",\n  \"p_category\": \"supplier\"\n}"
            },
            "url": "{{SUPABASE_URL}}/rest/v1/rpc/initiate_transfer"
          }
        },
        {
          "name": "create_card",
          "request": {
            "method": "POST",
            "header": [
              { "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" },
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"p_card_type\": \"virtual\",\n  \"p_display_name\": \"Travel Card\",\n  \"p_monthly_limit\": 5000\n}"
            },
            "url": "{{SUPABASE_URL}}/rest/v1/rpc/create_card"
          }
        },
        {
          "name": "get_card_number",
          "request": {
            "method": "POST",
            "header": [
              { "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" },
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"p_card_id\": \"{{TEST_CARD_DB_ID}}\"\n}"
            },
            "url": "{{SUPABASE_URL}}/rest/v1/rpc/get_card_number"
          }
        },
        {
          "name": "set_account_tier",
          "request": {
            "method": "POST",
            "header": [
              { "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" },
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"p_tier\": \"business\"\n}"
            },
            "url": "{{SUPABASE_URL}}/rest/v1/rpc/set_account_tier"
          }
        },
        {
          "name": "get_tier_limits",
          "request": {
            "method": "POST",
            "header": [
              { "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" },
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": { "mode": "raw", "raw": "{}" },
            "url": "{{SUPABASE_URL}}/rest/v1/rpc/get_tier_limits"
          }
        },
        {
          "name": "create_payment_request",
          "request": {
            "method": "POST",
            "header": [
              { "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" },
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"p_to_email\": \"buyer@example.com\",\n  \"p_to_name\": \"John Buyer\",\n  \"p_amount\": 1500,\n  \"p_currency\": \"BWP\",\n  \"p_message\": \"Invoice #INV-001\"\n}"
            },
            "url": "{{SUPABASE_URL}}/rest/v1/rpc/create_payment_request"
          }
        },
        {
          "name": "create_invoice",
          "request": {
            "method": "POST",
            "header": [
              { "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" },
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"p_client_name\": \"Acme Corp\",\n  \"p_client_email\": \"accounts@acme.com\",\n  \"p_due_date\": \"2026-07-15\",\n  \"p_currency\": \"BWP\",\n  \"p_items\": [\n    { \"description\": \"Web development\", \"quantity\": 10, \"unit_price\": 500 },\n    { \"description\": \"Hosting (annual)\", \"quantity\": 1, \"unit_price\": 1200 }\n  ],\n  \"p_notes\": \"Payment due within 30 days.\"\n}"
            },
            "url": "{{SUPABASE_URL}}/rest/v1/rpc/create_invoice"
          }
        },
        {
          "name": "create_scheduled_payment",
          "request": {
            "method": "POST",
            "header": [
              { "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" },
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"p_recipient_name\": \"Office Landlord\",\n  \"p_amount\": 8000,\n  \"p_currency\": \"BWP\",\n  \"p_frequency\": \"monthly\",\n  \"p_next_run_date\": \"2026-07-01\",\n  \"p_payment_method\": \"eft\",\n  \"p_recipient_acct\": \"87654321\",\n  \"p_sort_code\": \"20-00-00\",\n  \"p_memo\": \"Office rent\"\n}"
            },
            "url": "{{SUPABASE_URL}}/rest/v1/rpc/create_scheduled_payment"
          }
        },
        {
          "name": "provision_uk_account",
          "request": {
            "method": "POST",
            "header": [
              { "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" },
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": { "mode": "raw", "raw": "{}" },
            "url": "{{SUPABASE_URL}}/rest/v1/rpc/provision_uk_account"
          }
        },
        {
          "name": "link_external_account",
          "request": {
            "method": "POST",
            "header": [
              { "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" },
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"p_bank_name\": \"FNB Botswana\",\n  \"p_sort_code\": \"28-00-00\",\n  \"p_account_number\": \"62123456789\",\n  \"p_account_type\": \"current\"\n}"
            },
            "url": "{{SUPABASE_URL}}/rest/v1/rpc/link_external_account"
          }
        },
        {
          "name": "approve_pending_payment",
          "request": {
            "method": "POST",
            "header": [
              { "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" },
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"p_payment_id\": \"{{TEST_TXN_ID}}\"\n}"
            },
            "url": "{{SUPABASE_URL}}/rest/v1/rpc/approve_pending_payment"
          }
        },
        {
          "name": "reject_pending_payment",
          "request": {
            "method": "POST",
            "header": [
              { "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" },
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"p_payment_id\": \"{{TEST_TXN_ID}}\"\n}"
            },
            "url": "{{SUPABASE_URL}}/rest/v1/rpc/reject_pending_payment"
          }
        },
        {
          "name": "enroll_treasury",
          "request": {
            "method": "POST",
            "header": [
              { "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" },
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"p_sweep_threshold\": 50000,\n  \"p_buffer_amount\": 10000\n}"
            },
            "url": "{{SUPABASE_URL}}/rest/v1/rpc/enroll_treasury"
          }
        }
      ]
    },

    {
      "name": "04 · KYC & Identity (DIDIT)",
      "description": "DIDIT identity verification — KYC session creation, status polling, and webhook callback.",
      "item": [
        {
          "name": "Create KYC Session",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"entity_type\": \"individual\",\n  \"country\": \"BW\",\n  \"callback_url\": \"olympuspay://didit-callback\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/didit-session"
          }
        },
        {
          "name": "Create KYC Session (Business)",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"entity_type\": \"business\",\n  \"country\": \"BW\",\n  \"company_name\": \"Acme (Pty) Ltd\",\n  \"biz_type\": \"llc\",\n  \"industry\": \"retail\",\n  \"callback_url\": \"olympuspay://didit-callback\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/didit-session"
          }
        },
        {
          "name": "Poll KYC Decision",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"session_id\": \"did_sess_REPLACE_ME\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/didit-decision"
          }
        },
        {
          "name": "DIDIT Webhook (simulate)",
          "request": {
            "auth": { "type": "noauth" },
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "x-didit-signature", "value": "HMAC_SHA256_HEX_GOES_HERE" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"session_id\": \"did_sess_REPLACE_ME\",\n  \"status\": \"success\",\n  \"liveness_score\": 0.9821,\n  \"aml_hits\": 0\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/didit-webhook"
          }
        }
      ]
    },

    {
      "name": "05 · Documents & e-Signature (Documenso)",
      "description": "e-Signature for Terms of Service and agreements via Documenso.",
      "item": [
        {
          "name": "Send Document for Signature",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"email\": \"user@example.com\",\n  \"full_name\": \"Jane Doe\",\n  \"document_type\": \"terms\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/documenso-send"
          }
        },
        {
          "name": "Get Signature Status",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"document_id\": \"doc_REPLACE_ME\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/documenso-status"
          }
        },
        {
          "name": "Documenso Webhook (simulate)",
          "request": {
            "auth": { "type": "noauth" },
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "x-documenso-signature", "value": "HMAC_SHA256_HEX_GOES_HERE" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"event\": \"document.signed\",\n  \"document_id\": \"doc_REPLACE_ME\",\n  \"signed_at\": \"2026-06-15T10:00:00Z\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/documenso-webhook"
          }
        }
      ]
    },

    {
      "name": "06 · Core Platform",
      "description": "Business auto-fill, AI insights, receipt scanning, support chat, deposits, and payment requests.",
      "item": [
        {
          "name": "Auto-fill Business Details",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"country\": \"GB\",\n  \"registration_number\": \"12345678\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/auto-fill-business"
          }
        },
        {
          "name": "AI Spending Insights",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"month\": \"2026-06\",\n  \"period\": \"month\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/ai-insights"
          }
        },
        {
          "name": "Scan Receipt (OCR)",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }],
            "body": {
              "mode": "formdata",
              "formdata": [
                { "key": "file", "type": "file", "src": "" }
              ]
            },
            "url": "{{FUNCTIONS_BASE_URL}}/scan-receipt"
          }
        },
        {
          "name": "Support Chat (AI)",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"message\": \"How do I increase my transfer limit?\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/support-chat"
          }
        },
        {
          "name": "Initiate Deposit",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"amount\": 500,\n  \"currency\": \"BWP\",\n  \"payment_method\": \"card\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/initiate-deposit"
          }
        },
        {
          "name": "Send Payment Request",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"to_name\": \"John Buyer\",\n  \"to_email\": \"buyer@example.com\",\n  \"amount\": 1500,\n  \"currency\": \"BWP\",\n  \"description\": \"Invoice #INV-001\",\n  \"from_biz_name\": \"Acme Trading\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/send-payment-request"
          }
        },
        {
          "name": "Get Payment Request Checkout",
          "request": {
            "method": "GET",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }],
            "url": {
              "raw": "{{FUNCTIONS_BASE_URL}}/payment-request-checkout?id=PAYMENT_REQUEST_ID",
              "host": ["{{FUNCTIONS_BASE_URL}}"],
              "path": ["payment-request-checkout"],
              "query": [{ "key": "id", "value": "PAYMENT_REQUEST_ID" }]
            }
          }
        },
        {
          "name": "Nvidia AI (receipt OCR fallback)",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }],
            "body": {
              "mode": "formdata",
              "formdata": [
                { "key": "file", "type": "file", "src": "" }
              ]
            },
            "url": "{{FUNCTIONS_BASE_URL}}/nvidia-ai"
          }
        },
        {
          "name": "API Status",
          "request": {
            "method": "GET",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }],
            "url": "{{FUNCTIONS_BASE_URL}}/api"
          }
        }
      ]
    },

    {
      "name": "07 · Zenus Banking",
      "description": "Zenus/TUUM core banking — persons, accounts, payments (LOCAL/ACH/SWIFT/BOOK), bulk payments, cards, compliance, statements.",
      "item": [
        {
          "name": "Create Person",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"first_name\": \"Jane\",\n  \"last_name\": \"Doe\",\n  \"email\": \"jane@example.com\",\n  \"phone\": \"+26771000000\",\n  \"date_of_birth\": \"1990-01-15\",\n  \"nationality\": \"BW\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/zenus-create-person"
          }
        },
        {
          "name": "Open USD Account",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"account_currency\": \"USD\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/zenus-open-account"
          }
        },
        {
          "name": "Payment — Local EFT",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"payment_rail\": \"LOCAL\",\n  \"amount\": 500.00,\n  \"currency\": \"BWP\",\n  \"recipient_name\": \"Jane Smith\",\n  \"account_number\": \"12345678\",\n  \"routing_code\": \"20-00-00\",\n  \"bank_name\": \"Standard Chartered BW\",\n  \"bank_country\": \"BW\",\n  \"reference\": \"Rent June\",\n  \"save_beneficiary\": true\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/zenus-payment"
          }
        },
        {
          "name": "Payment — ACH (US)",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"payment_rail\": \"ACH\",\n  \"amount\": 1000.00,\n  \"currency\": \"USD\",\n  \"recipient_name\": \"Bob Jones\",\n  \"account_number\": \"987654321\",\n  \"routing_code\": \"021000021\",\n  \"bank_name\": \"Chase Bank\",\n  \"bank_country\": \"US\",\n  \"reference\": \"Consulting fee\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/zenus-payment"
          }
        },
        {
          "name": "Payment — SWIFT (International)",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"payment_rail\": \"SWIFT\",\n  \"amount\": 5000.00,\n  \"currency\": \"GBP\",\n  \"recipient_name\": \"Acme UK Ltd\",\n  \"account_number\": \"GB29NWBK60161331926819\",\n  \"routing_code\": \"NWBKGB2L\",\n  \"bank_name\": \"NatWest\",\n  \"bank_country\": \"GB\",\n  \"reference\": \"Invoice #0045\",\n  \"purpose\": \"Trade payment\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/zenus-payment"
          }
        },
        {
          "name": "Payment — Book Transfer (internal)",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"payment_rail\": \"BOOK_TRANSFER\",\n  \"amount\": 200.00,\n  \"currency\": \"BWP\",\n  \"recipient_name\": \"Jane Smith\",\n  \"account_number\": \"ZENUS_ACCOUNT_ID\",\n  \"reference\": \"Internal transfer\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/zenus-payment"
          }
        },
        {
          "name": "Cancel Payment",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"payment_id\": \"{{ZENUS_PAYMENT_ID}}\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/zenus-cancel-payment"
          }
        },
        {
          "name": "Bulk Payment (Payroll)",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"batch_name\": \"June Payroll\",\n  \"payment_rail\": \"LOCAL\",\n  \"currency\": \"BWP\",\n  \"recipients\": [\n    { \"name\": \"Alice Smith\", \"account_number\": \"11223344\", \"routing_code\": \"20-00-00\", \"amount\": 8000 },\n    { \"name\": \"Bob Jones\",  \"account_number\": \"55667788\", \"routing_code\": \"20-00-00\", \"amount\": 12000 },\n    { \"name\": \"Carol White\",\"account_number\": \"99001122\", \"routing_code\": \"20-00-00\", \"amount\": 9500 }\n  ]\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/zenus-bulk-payment"
          }
        },
        {
          "name": "Issue Virtual Card",
          "event": [{
            "listen": "test",
            "script": {
              "type": "text/javascript",
              "exec": [
                "const json = pm.response.json();",
                "if (json.card_id) pm.environment.set('ZENUS_CARD_ID', json.card_id);"
              ]
            }
          }],
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"card_type\": \"virtual\",\n  \"display_name\": \"Online Shopping\",\n  \"monthly_limit\": 5000\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/zenus-card-issue"
          }
        },
        {
          "name": "Issue Physical Card",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"card_type\": \"physical\",\n  \"display_name\": \"Main Card\",\n  \"monthly_limit\": 20000\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/zenus-card-issue"
          }
        },
        {
          "name": "Freeze Card",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"card_id\": \"{{ZENUS_CARD_ID}}\",\n  \"action\": \"freeze\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/zenus-card-manage"
          }
        },
        {
          "name": "Unfreeze Card",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"card_id\": \"{{ZENUS_CARD_ID}}\",\n  \"action\": \"unfreeze\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/zenus-card-manage"
          }
        },
        {
          "name": "Cancel Card",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"card_id\": \"{{ZENUS_CARD_ID}}\",\n  \"action\": \"cancel\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/zenus-card-manage"
          }
        },
        {
          "name": "Update Card Limit",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"card_id\": \"{{ZENUS_CARD_ID}}\",\n  \"action\": \"update_limit\",\n  \"monthly_limit\": 10000\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/zenus-card-manage"
          }
        },
        {
          "name": "Request Replacement Card",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"card_id\": \"{{ZENUS_CARD_ID}}\",\n  \"action\": \"request_replacement\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/zenus-card-manage"
          }
        },
        {
          "name": "Set Card PIN",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"card_id\": \"{{ZENUS_CARD_ID}}\",\n  \"pin\": \"1234\",\n  \"action\": \"set\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/zenus-card-pin"
          }
        },
        {
          "name": "Change Card PIN",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"card_id\": \"{{ZENUS_CARD_ID}}\",\n  \"pin\": \"5678\",\n  \"action\": \"change\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/zenus-card-pin"
          }
        },
        {
          "name": "Sync Balance",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{}" },
            "url": "{{FUNCTIONS_BASE_URL}}/zenus-sync-balance"
          }
        },
        {
          "name": "Get Statement",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"start_date\": \"2026-06-01\",\n  \"end_date\": \"2026-06-30\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/zenus-statement"
          }
        },
        {
          "name": "Compliance Check (OFAC/PEP)",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"check_type\": \"OFAC_PEP\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/zenus-compliance-check"
          }
        },
        {
          "name": "Declare UBOs",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"beneficial_owners\": [\n    {\n      \"first_name\": \"Alice\",\n      \"last_name\": \"Smith\",\n      \"date_of_birth\": \"1975-03-20\",\n      \"nationality\": \"BW\",\n      \"ownership_percentage\": 75.00,\n      \"is_director\": true\n    },\n    {\n      \"first_name\": \"Bob\",\n      \"last_name\": \"Jones\",\n      \"date_of_birth\": \"1980-07-10\",\n      \"nationality\": \"BW\",\n      \"ownership_percentage\": 25.00,\n      \"is_director\": false\n    }\n  ]\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/zenus-ubo-declare"
          }
        },
        {
          "name": "Zenus Webhook (simulate PAYMENT_COMPLETED)",
          "request": {
            "auth": { "type": "noauth" },
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "x-zenus-signature", "value": "HMAC_SHA256_HEX_GOES_HERE" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"event\": \"PAYMENT_COMPLETED\",\n  \"payment_id\": \"pay_xyz\",\n  \"transaction_id\": \"txn_xyz\",\n  \"amount\": 500.00,\n  \"currency\": \"BWP\",\n  \"status\": \"PROCESSED\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/zenus-webhook"
          }
        }
      ]
    },

    {
      "name": "08 · Flutterwave",
      "description": "Mobile money transfers, airtime, bill payments, and payment links via Flutterwave.",
      "item": [
        {
          "name": "Get Operator List",
          "request": {
            "method": "GET",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }],
            "url": "{{FUNCTIONS_BASE_URL}}/fw-transfer"
          }
        },
        {
          "name": "Mobile Money Transfer",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"mode\": \"momo\",\n  \"recipientPhone\": \"+26771000000\",\n  \"recipientName\": \"John Doe\",\n  \"amount\": 200,\n  \"operator\": \"ORANGE\",\n  \"currency\": \"BWP\",\n  \"narration\": \"School fees\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/fw-transfer"
          }
        },
        {
          "name": "Bank Transfer (via Flutterwave)",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"mode\": \"bank\",\n  \"recipientName\": \"Jane Smith\",\n  \"amount\": 1000,\n  \"accountNumber\": \"0690000031\",\n  \"bankCode\": \"044\",\n  \"country\": \"NG\",\n  \"currency\": \"NGN\",\n  \"narration\": \"Supplier payment\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/fw-transfer"
          }
        },
        {
          "name": "Send Airtime",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"phone\": \"+26771000000\",\n  \"amount\": 50,\n  \"operator\": \"ORANGE\",\n  \"country\": \"BW\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/fw-airtime"
          }
        },
        {
          "name": "Pay Bill",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"biller_code\": \"BOTSWANA_POWER\",\n  \"bill_type\": \"electricity\",\n  \"amount\": 500,\n  \"phone\": \"+26771000000\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/fw-bills"
          }
        },
        {
          "name": "Create Payment Link",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"amount\": 1000,\n  \"currency\": \"BWP\",\n  \"description\": \"Product purchase — Order #123\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/fw-payment-link"
          }
        }
      ]
    },

    {
      "name": "09 · Africa's Talking",
      "description": "SMS, USSD, WhatsApp messaging and airtime disbursement via Africa's Talking.",
      "item": [
        {
          "name": "Send SMS",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"phone\": \"+26771000000\",\n  \"message\": \"Your Olympus Pay transfer of BWP 500 was successful. Ref: OPY-123456.\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/at-sms"
          }
        },
        {
          "name": "Send WhatsApp Message",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"phone\": \"+26771000000\",\n  \"message\": \"Your payment of BWP 500 has been confirmed.\",\n  \"template\": \"payment_confirmed\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/at-whatsapp"
          }
        },
        {
          "name": "Send Airtime (AT)",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"phone\": \"+26771000000\",\n  \"amount\": 30,\n  \"currency\": \"BWP\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/at-airtime"
          }
        },
        {
          "name": "USSD Callback (simulate AT POST)",
          "request": {
            "auth": { "type": "noauth" },
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/x-www-form-urlencoded" }],
            "body": {
              "mode": "urlencoded",
              "urlencoded": [
                { "key": "sessionId", "value": "ATUid_session_abc" },
                { "key": "serviceCode", "value": "*123#" },
                { "key": "phoneNumber", "value": "+26771000000" },
                { "key": "text", "value": "" }
              ]
            },
            "url": {
              "raw": "{{FUNCTIONS_BASE_URL}}/at-ussd?secret={{AT_USSD_SECRET}}",
              "host": ["{{FUNCTIONS_BASE_URL}}"],
              "path": ["at-ussd"],
              "query": [{ "key": "secret", "value": "{{AT_USSD_SECRET}}" }]
            }
          }
        }
      ]
    },

    {
      "name": "10 · Travel — Flights (Duffel)",
      "description": "Flight search, offer selection, booking, cancellation, and order management via Duffel.",
      "item": [
        {
          "name": "Airport Search (autocomplete)",
          "request": {
            "method": "GET",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }],
            "url": {
              "raw": "{{FUNCTIONS_BASE_URL}}/duffel-airports?q=gaborone",
              "host": ["{{FUNCTIONS_BASE_URL}}"],
              "path": ["duffel-airports"],
              "query": [{ "key": "q", "value": "gaborone" }]
            }
          }
        },
        {
          "name": "Search Flights (one-way)",
          "event": [{
            "listen": "test",
            "script": {
              "type": "text/javascript",
              "exec": [
                "const json = pm.response.json();",
                "if (json.offer_request_id) pm.environment.set('DUFFEL_OFFER_REQUEST_ID', json.offer_request_id);",
                "if (json.offers?.[0]?.id) pm.environment.set('DUFFEL_OFFER_ID', json.offers[0].id);"
              ]
            }
          }],
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"origin\": \"GBE\",\n  \"destination\": \"JNB\",\n  \"departure_date\": \"2026-09-01\",\n  \"passengers\": 1,\n  \"cabin_class\": \"economy\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/duffel-search"
          }
        },
        {
          "name": "Search Flights (return)",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"origin\": \"{{TEST_ORIGIN}}\",\n  \"destination\": \"{{TEST_DESTINATION}}\",\n  \"departure_date\": \"{{TEST_DEPART_DATE}}\",\n  \"return_date\": \"2026-12-10\",\n  \"passengers\": 2,\n  \"cabin_class\": \"economy\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/duffel-search"
          }
        },
        {
          "name": "Get Offer Details",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"offer_id\": \"{{DUFFEL_OFFER_ID}}\",\n  \"offer_request_id\": \"{{DUFFEL_OFFER_REQUEST_ID}}\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/duffel-offer"
          }
        },
        {
          "name": "Book Flight",
          "event": [{
            "listen": "test",
            "script": {
              "type": "text/javascript",
              "exec": [
                "const json = pm.response.json();",
                "if (json.order_id) pm.environment.set('DUFFEL_ORDER_ID', json.order_id);"
              ]
            }
          }],
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"offer_id\": \"{{DUFFEL_OFFER_ID}}\",\n  \"passengers\": [\n    {\n      \"given_name\": \"Jane\",\n      \"family_name\": \"Doe\",\n      \"gender\": \"f\",\n      \"born_on\": \"1990-01-15\",\n      \"email\": \"jane@example.com\",\n      \"phone_number\": \"+26771000000\",\n      \"identity_documents\": [\n        {\n          \"type\": \"passport\",\n          \"unique_identifier\": \"A12345678\",\n          \"expires_on\": \"2030-01-01\"\n        }\n      ]\n    }\n  ]\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/duffel-book"
          }
        },
        {
          "name": "Get My Orders",
          "request": {
            "method": "GET",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }],
            "url": "{{FUNCTIONS_BASE_URL}}/duffel-orders"
          }
        },
        {
          "name": "Cancel Flight",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"order_id\": \"{{DUFFEL_ORDER_ID}}\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/duffel-cancel"
          }
        },
        {
          "name": "Search Hotel Stays (Duffel Stays)",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"check_in_date\": \"2026-09-01\",\n  \"check_out_date\": \"2026-09-07\",\n  \"rooms\": 1,\n  \"guests_per_room\": 2,\n  \"location\": \"gaborone\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/duffel-stays-search"
          }
        },
        {
          "name": "Book Hotel Stay (Duffel Stays)",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"accommodation_id\": \"STAYS_ACC_ID\",\n  \"rate_id\": \"STAYS_RATE_ID\",\n  \"guests\": [\n    {\n      \"given_name\": \"Jane\",\n      \"family_name\": \"Doe\",\n      \"email\": \"jane@example.com\"\n    }\n  ]\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/duffel-stays-book"
          }
        },
        {
          "name": "Duffel Webhook (simulate)",
          "request": {
            "auth": { "type": "noauth" },
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "x-duffel-signature", "value": "HMAC_SHA256_HEX_GOES_HERE" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"event\": \"order.updated\",\n  \"data\": {\n    \"id\": \"ord_xyz\",\n    \"booking_reference\": \"ABC123\",\n    \"status\": \"confirmed\"\n  }\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/duffel-webhook"
          }
        }
      ]
    },

    {
      "name": "11 · Travel — Hotels & Activities (HotelBeds)",
      "description": "Hotel search, activities, and transfers via HotelBeds.",
      "item": [
        {
          "name": "Search Hotels",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"check_in_date\": \"2026-09-01\",\n  \"check_out_date\": \"2026-09-07\",\n  \"location\": \"London\",\n  \"num_rooms\": 1\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/hotelbeds-hotels"
          }
        },
        {
          "name": "Search Activities",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"location\": \"London\",\n  \"category\": \"sightseeing\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/hotelbeds-activities"
          }
        },
        {
          "name": "Search Airport Transfers",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"pick_up_location\": \"LHR\",\n  \"drop_off_location\": \"Marriott London\",\n  \"pick_up_date\": \"2026-09-01\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/hotelbeds-transfers"
          }
        }
      ]
    },

    {
      "name": "12 · File Storage (Cloudflare R2)",
      "description": "Presigned upload/download URLs for avatars, receipts, documents, statements, and invoices.\n\nUpload flow:\n1. POST /cf-upload → { presigned_url, key }\n2. PUT presigned_url (file bytes, no auth header)\n3. Store key in DB",
      "item": [
        {
          "name": "Get Upload URL — Avatar",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"file_type\": \"avatar\",\n  \"content_type\": \"image/jpeg\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/cf-upload"
          }
        },
        {
          "name": "Get Upload URL — Receipt",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"file_type\": \"receipt\",\n  \"content_type\": \"image/jpeg\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/cf-upload"
          }
        },
        {
          "name": "Get Upload URL — Document",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"file_type\": \"doc\",\n  \"content_type\": \"application/pdf\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/cf-upload"
          }
        },
        {
          "name": "PUT File to R2 (after getting presigned URL)",
          "request": {
            "auth": { "type": "noauth" },
            "method": "PUT",
            "header": [
              { "key": "Content-Type", "value": "image/jpeg" }
            ],
            "body": {
              "mode": "file",
              "file": {}
            },
            "url": "PASTE_PRESIGNED_URL_HERE"
          }
        },
        {
          "name": "Get Signed Download URL",
          "request": {
            "method": "GET",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }],
            "url": {
              "raw": "{{FUNCTIONS_BASE_URL}}/cf-file?key=avatars/USER_ID.jpg",
              "host": ["{{FUNCTIONS_BASE_URL}}"],
              "path": ["cf-file"],
              "query": [{ "key": "key", "value": "avatars/USER_ID.jpg" }]
            }
          }
        },
        {
          "name": "Delete File",
          "request": {
            "method": "DELETE",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"key\": \"receipts/USER_ID/TXN_ID.jpg\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/cf-manage"
          }
        },
        {
          "name": "DNS Manage (admin)",
          "request": {
            "method": "POST",
            "header": [{ "key": "apikey", "value": "{{SUPABASE_ANON_KEY}}" }, { "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"domain\": \"olympuspay.co\",\n  \"action\": \"enable\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/cf-dns"
          }
        }
      ]
    },

    {
      "name": "13 · Webhook Callbacks (inbound)",
      "description": "Inbound webhook endpoints from third-party providers. All require HMAC-SHA256 signature verification. Requests without a valid signature return 403.\n\nRegister these URLs in provider dashboards:\n- DIDIT:     {{FUNCTIONS_BASE_URL}}/didit-webhook\n- Zenus:     {{FUNCTIONS_BASE_URL}}/zenus-webhook\n- Documenso: {{FUNCTIONS_BASE_URL}}/documenso-webhook\n- Duffel:    {{FUNCTIONS_BASE_URL}}/duffel-webhook\n- AT USSD:   {{FUNCTIONS_BASE_URL}}/at-ussd?secret=AT_USSD_SECRET",
      "item": [
        {
          "name": "Zenus — CARD_FROZEN",
          "request": {
            "auth": { "type": "noauth" },
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "x-zenus-signature", "value": "HMAC_SHA256_HEX" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"event\": \"CARD_FROZEN\",\n  \"card_id\": \"{{ZENUS_CARD_ID}}\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/zenus-webhook"
          }
        },
        {
          "name": "Zenus — COMPLIANCE_FLAGGED",
          "request": {
            "auth": { "type": "noauth" },
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "x-zenus-signature", "value": "HMAC_SHA256_HEX" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"event\": \"COMPLIANCE_FLAGGED\",\n  \"user_id\": \"{{USER_ID}}\",\n  \"reason\": \"PEP_HIT\",\n  \"severity\": \"HIGH\"\n}"
            },
            "url": "{{FUNCTIONS_BASE_URL}}/zenus-webhook"
          }
        }
      ]
    }
  ]
}
