{
  "info": {
    "name": "Jusa API",
    "description": "Generated from https://jusa.localhost.co.zw/dev/v1/openapi.json. Set apiKey to a test key (jusa_sk_test_\u2026) to try it without moving money.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
    "version": "2026-10-01"
  },
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{apiKey}}",
        "type": "string"
      }
    ]
  },
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://jusa.localhost.co.zw/dev/v1"
    },
    {
      "key": "apiKey",
      "value": "jusa_sk_test_\u2026"
    }
  ],
  "item": [
    {
      "name": "Account",
      "description": "Your organisation, members and the dashboard home.",
      "item": [
        {
          "name": "Retrieve the account",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/account",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account"
              ]
            },
            "description": ""
          }
        },
        {
          "name": "Update the account",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/account",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account"
              ]
            },
            "description": "Owners and admins only (a key counts as its maker). Scope: `account:manage`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"statement_descriptor\": \"ACME SURVEYS\",\n  \"support_phone\": \"0772123456\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "List pending invitations",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/invites",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "invites"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Rows per page."
                },
                {
                  "key": "starting_after",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page after it (next_cursor)."
                },
                {
                  "key": "ending_before",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page before it."
                },
                {
                  "key": "created[gte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[gt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                }
              ]
            },
            "description": "Scope: `account:manage`."
          }
        },
        {
          "name": "Retrieve an invitation",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/invites/:invite_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "invites",
                ":invite_id"
              ],
              "variable": [
                {
                  "key": "invite_id",
                  "value": "",
                  "description": "inv_\u2026"
                }
              ]
            },
            "description": "Scope: `account:manage`."
          }
        },
        {
          "name": "Revoke an invitation",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/invites/:invite_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "invites",
                ":invite_id"
              ],
              "variable": [
                {
                  "key": "invite_id",
                  "value": "",
                  "description": "inv_\u2026"
                }
              ]
            },
            "description": "Owners and admins only. Scope: `account:manage`."
          }
        },
        {
          "name": "List members",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/members",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "members"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Rows per page."
                },
                {
                  "key": "starting_after",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page after it (next_cursor)."
                },
                {
                  "key": "ending_before",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page before it."
                },
                {
                  "key": "created[gte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[gt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "role",
                  "value": "",
                  "disabled": true,
                  "description": "Only members with this role."
                }
              ]
            },
            "description": "Scope: `account:manage`."
          }
        },
        {
          "name": "Invite a member",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": true,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/members",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "members"
              ]
            },
            "description": "An invitation, pending until the person signs in and accepts it from their dashboard (it lapses after 14 days). Until then they are not a member and see nothing of the account. Scope: `account:manage`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"email\": \"dev@example.com\",\n  \"role\": \"developer\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Retrieve a member",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/members/:member_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "members",
                ":member_id"
              ],
              "variable": [
                {
                  "key": "member_id",
                  "value": "",
                  "description": "mem_\u2026"
                }
              ]
            },
            "description": "Scope: `account:manage`."
          }
        },
        {
          "name": "Change a member's role",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/members/:member_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "members",
                ":member_id"
              ],
              "variable": [
                {
                  "key": "member_id",
                  "value": "",
                  "description": "mem_\u2026"
                }
              ]
            },
            "description": "Scope: `account:manage`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"role\": \"owner\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Remove a member",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/members/:member_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "members",
                ":member_id"
              ],
              "variable": [
                {
                  "key": "member_id",
                  "value": "",
                  "description": "mem_\u2026"
                }
              ]
            },
            "description": "Scope: `account:manage`."
          }
        },
        {
          "name": "The dashboard home",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/overview",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "overview"
              ]
            },
            "description": "Jusa Credit with runway, sends today, success by network, webhook health and what needs attention. Sections the caller cannot read are null."
          }
        }
      ]
    },
    {
      "name": "Keys",
      "description": "API keys: sk secret, rk restricted, pk publishable, ak agent.",
      "item": [
        {
          "name": "List API keys",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/keys",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "keys"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Rows per page."
                },
                {
                  "key": "starting_after",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page after it (next_cursor)."
                },
                {
                  "key": "ending_before",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page before it."
                },
                {
                  "key": "created[gte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[gt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "status",
                  "value": "",
                  "disabled": true,
                  "description": "Only objects in this status."
                }
              ]
            },
            "description": "Scope: `account:manage`."
          }
        },
        {
          "name": "Create an API key",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/keys",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "keys"
              ]
            },
            "description": "The key is in `secret`, once. The first live key needs `accept_terms: true` (the API Terms, the Acceptable Use policy and the DPA). No Idempotency-Key: a replay would have to show the secret again. Scope: `account:manage`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"kind\": \"rk\",\n  \"label\": \"survey relay\",\n  \"scopes\": [\n    \"rewards:write\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Retrieve an API key",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/keys/:key_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "keys",
                ":key_id"
              ],
              "variable": [
                {
                  "key": "key_id",
                  "value": "",
                  "description": "key_\u2026"
                }
              ]
            },
            "description": "With `usage`: what it has spent against its caps. Scope: `account:manage`."
          }
        },
        {
          "name": "Update an API key",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/keys/:key_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "keys",
                ":key_id"
              ],
              "variable": [
                {
                  "key": "key_id",
                  "value": "",
                  "description": "key_\u2026"
                }
              ]
            },
            "description": "Scope: `account:manage`.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Revoke an API key",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/keys/:key_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "keys",
                ":key_id"
              ],
              "variable": [
                {
                  "key": "key_id",
                  "value": "",
                  "description": "key_\u2026"
                }
              ]
            },
            "description": "Takes effect at once. Scope: `account:manage`."
          }
        },
        {
          "name": "Roll an API key",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/keys/:key_id/roll",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "keys",
                ":key_id",
                "roll"
              ],
              "variable": [
                {
                  "key": "key_id",
                  "value": "",
                  "description": "key_\u2026"
                }
              ]
            },
            "description": "A new key in `secret`; the old one (in `rolled`) works for the grace period. Scope: `account:manage`.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        }
      ]
    },
    {
      "name": "Logs",
      "description": "The request log and the audit log.",
      "item": [
        {
          "name": "Recent account activity",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/activity",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "activity"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Rows per page."
                },
                {
                  "key": "starting_after",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page after it (next_cursor)."
                },
                {
                  "key": "created[gte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[gt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                }
              ]
            },
            "description": "What happened lately (events: sends, rewards, top-ups, batches \u2026), newest first, and, with account:manage, who changed what (the audit log). Pages back with starting_after. Scope: `reports:read`."
          }
        },
        {
          "name": "List audit events",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/audit-log",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "audit-log"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Rows per page."
                },
                {
                  "key": "starting_after",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page after it (next_cursor)."
                },
                {
                  "key": "ending_before",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page before it."
                },
                {
                  "key": "created[gte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[gt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "action",
                  "value": "",
                  "disabled": true,
                  "description": "Only this action (send or reward; for the audit log, e.g. api_key.created)."
                },
                {
                  "key": "object",
                  "value": "",
                  "disabled": true,
                  "description": "Events about this object, e.g. snd_\u2026"
                }
              ]
            },
            "description": "Who (a key, a member, or Jusa staff viewing as you) changed what. Scope: `account:manage`."
          }
        },
        {
          "name": "List API requests",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/requests",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "requests"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Rows per page."
                },
                {
                  "key": "starting_after",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page after it (next_cursor)."
                },
                {
                  "key": "ending_before",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page before it."
                },
                {
                  "key": "created[gte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[gt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "api_key",
                  "value": "",
                  "disabled": true,
                  "description": "key_\u2026"
                },
                {
                  "key": "status",
                  "value": "",
                  "disabled": true,
                  "description": "Only objects in this status."
                },
                {
                  "key": "path",
                  "value": "",
                  "disabled": true,
                  "description": "Paths starting with this."
                },
                {
                  "key": "method",
                  "value": "",
                  "disabled": true,
                  "description": "GET, POST, \u2026"
                },
                {
                  "key": "idempotency_key",
                  "value": "",
                  "disabled": true,
                  "description": "Requests sent with this key."
                }
              ]
            },
            "description": "Kept 30 days. `status` is a code (402) or a class (4xx). Scope: `account:manage`."
          }
        },
        {
          "name": "Retrieve an API request",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/requests/:request_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "requests",
                ":request_id"
              ],
              "variable": [
                {
                  "key": "request_id",
                  "value": "",
                  "description": "req_\u2026"
                }
              ]
            },
            "description": "With the masked request and response bodies. Scope: `account:manage`."
          }
        }
      ]
    },
    {
      "name": "Catalog",
      "description": "Products and networks. Face value, always.",
      "item": [
        {
          "name": "List networks",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/networks",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "networks"
              ]
            },
            "description": "Scope: `catalog:read`. Publishable keys may call it (from a browser)."
          }
        },
        {
          "name": "List products",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/products",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "products"
              ],
              "query": [
                {
                  "key": "type",
                  "value": "",
                  "disabled": true,
                  "description": "Only this type."
                },
                {
                  "key": "network",
                  "value": "",
                  "disabled": true,
                  "description": "Only this network."
                },
                {
                  "key": "currency",
                  "value": "",
                  "disabled": true,
                  "description": "Only this currency."
                }
              ]
            },
            "description": "Face value, always: there is no pricing endpoint. Scope: `catalog:read`. Publishable keys may call it (from a browser)."
          }
        },
        {
          "name": "Retrieve a product",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/products/:product_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "products",
                ":product_id"
              ],
              "variable": [
                {
                  "key": "product_id",
                  "value": "",
                  "description": "A product slug."
                }
              ]
            },
            "description": "Scope: `catalog:read`. Publishable keys may call it (from a browser)."
          }
        },
        {
          "name": "List a data product's bundles",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/products/:product_id/bundles",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "products",
                ":product_id",
                "bundles"
              ],
              "variable": [
                {
                  "key": "product_id",
                  "value": "",
                  "description": "A product slug."
                }
              ]
            },
            "description": "Test mode has a simulated list; live data bundles ship in P2. Scope: `catalog:read`. Publishable keys may call it (from a browser)."
          }
        }
      ]
    },
    {
      "name": "Lookups",
      "description": "Phone lookups, ZESA meter confirmation and quotes.",
      "item": [
        {
          "name": "Look up a phone number",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/lookups/phone",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "lookups",
                "phone"
              ],
              "query": [
                {
                  "key": "phone",
                  "value": "",
                  "disabled": true,
                  "description": "A phone number, any Zimbabwean format."
                },
                {
                  "key": "currency",
                  "value": "",
                  "disabled": true,
                  "description": "Only this currency."
                }
              ]
            },
            "description": "Its network and E.164 form. No provider is asked. Scope: `lookups:read`."
          }
        },
        {
          "name": "Confirm a ZESA meter",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/meters/:number",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "meters",
                ":number"
              ],
              "variable": [
                {
                  "key": "number",
                  "value": "",
                  "description": "An 11-digit meter number."
                }
              ],
              "query": [
                {
                  "key": "currency",
                  "value": "",
                  "disabled": true,
                  "description": "Only this currency."
                }
              ]
            },
            "description": "The name is masked and the address is the suburb. Rationed: 30 a minute per key and a daily quota per account. `503 zesa_unavailable` when ZESA is down. Scope: `lookups:read`."
          }
        },
        {
          "name": "Quote a send",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": true,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/quotes",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "quotes"
              ]
            },
            "description": "you_pay is always the face value. For ZESA: the units and band now and after the reset, and a strictly confirmed meter that a send carries by passing the quote. Scope: `lookups:read`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"product\": \"zesa-usd\",\n  \"amount\": \"10.00\",\n  \"target\": \"37261502217\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Retrieve a quote",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/quotes/:quote_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "quotes",
                ":quote_id"
              ],
              "variable": [
                {
                  "key": "quote_id",
                  "value": "",
                  "description": "quo_\u2026"
                }
              ]
            },
            "description": "Scope: `lookups:read`."
          }
        }
      ]
    },
    {
      "name": "Status",
      "description": "ZESA and network availability.",
      "item": [
        {
          "name": "ZESA and network status",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/status",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "status"
              ]
            },
            "description": "Publishable keys may call it (from a browser)."
          }
        },
        {
          "name": "ZESA uptime history",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/status/history",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "status",
                "history"
              ],
              "query": [
                {
                  "key": "from",
                  "value": "",
                  "disabled": true,
                  "description": "The start (inclusive)."
                },
                {
                  "key": "to",
                  "value": "",
                  "disabled": true,
                  "description": "The end (inclusive)."
                }
              ]
            },
            "description": "The last 7 days by default. Publishable keys may call it (from a browser)."
          }
        },
        {
          "name": "The purchases behind Rate Watch",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/zesa/observations",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "zesa",
                "observations"
              ],
              "query": [
                {
                  "key": "currency",
                  "value": "",
                  "disabled": true,
                  "description": "Only this currency."
                },
                {
                  "key": "days",
                  "value": "",
                  "disabled": true,
                  "description": "How many days back (90 by default)."
                },
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Rows per page."
                }
              ]
            },
            "description": "Anonymised and coarsened: no meter, no order. Scope: `lookups:read`."
          }
        },
        {
          "name": "What an amount buys on ZESA",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/zesa/quote",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "zesa",
                "quote"
              ],
              "query": [
                {
                  "key": "currency",
                  "value": "",
                  "disabled": true,
                  "description": "Only this currency."
                },
                {
                  "key": "amount",
                  "value": "",
                  "disabled": true,
                  "description": "A decimal amount, e.g. 10.00."
                },
                {
                  "key": "meter",
                  "value": "",
                  "disabled": true,
                  "description": "A meter number."
                }
              ]
            },
            "description": "Units now versus after the reset on the 1st; with `meter`, from where that meter stands this month (a meter is rationed like a lookup). POST /v1/quotes also confirms the meter. Scope: `lookups:read`."
          }
        },
        {
          "name": "ZESA Rate Watch",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/zesa/rate",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "zesa",
                "rate"
              ],
              "query": [
                {
                  "key": "currency",
                  "value": "",
                  "disabled": true,
                  "description": "Only this currency."
                }
              ]
            },
            "description": "ZETDC's published bands, what real purchases show a kWh costs, and the cheapest-units rule (the bands reset on the 1st). Public data, the same in test and live mode. Scope: `catalog:read`."
          }
        },
        {
          "name": "ZESA rate series",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/zesa/series",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "zesa",
                "series"
              ],
              "query": [
                {
                  "key": "currency",
                  "value": "",
                  "disabled": true,
                  "description": "Only this currency."
                }
              ]
            },
            "description": "The sparkline of the observed rate and where it changed. Scope: `catalog:read`."
          }
        }
      ]
    },
    {
      "name": "Sends",
      "description": "Airtime, data and ZESA tokens, one at a time. Async: 202, then webhooks.",
      "item": [
        {
          "name": "List sends",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/sends",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "sends"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Rows per page."
                },
                {
                  "key": "starting_after",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page after it (next_cursor)."
                },
                {
                  "key": "ending_before",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page before it."
                },
                {
                  "key": "created[gte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[gt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "status",
                  "value": "",
                  "disabled": true,
                  "description": "Only objects in this status."
                },
                {
                  "key": "type",
                  "value": "",
                  "disabled": true,
                  "description": "Only this type."
                },
                {
                  "key": "target",
                  "value": "",
                  "disabled": true,
                  "description": "A phone (any format) or meter."
                },
                {
                  "key": "client_reference",
                  "value": "",
                  "disabled": true,
                  "description": "Your own reference."
                },
                {
                  "key": "currency",
                  "value": "",
                  "disabled": true,
                  "description": "Only this currency."
                },
                {
                  "key": "needs_attention",
                  "value": "",
                  "disabled": true,
                  "description": "unknown over 1h, requires_review, or queued past half its max_hold."
                },
                {
                  "key": "recipient",
                  "value": "",
                  "disabled": true,
                  "description": "rcp_\u2026 or ext:<external_id>."
                },
                {
                  "key": "program",
                  "value": "",
                  "disabled": true,
                  "description": "prg_\u2026"
                },
                {
                  "key": "batch",
                  "value": "",
                  "disabled": true,
                  "description": "bch_\u2026"
                },
                {
                  "key": "cost_center",
                  "value": "",
                  "disabled": true,
                  "description": "cc_\u2026 (Workforce: a department's id, or none for sends booked to none)."
                },
                {
                  "key": "api_key",
                  "value": "",
                  "disabled": true,
                  "description": "key_\u2026"
                },
                {
                  "key": "metadata[key]",
                  "value": "",
                  "disabled": true,
                  "description": "metadata[<key>]=<value>: an exact match on one key."
                },
                {
                  "key": "expand[]",
                  "value": "",
                  "disabled": true,
                  "description": "Inline a related object in place of its id (repeat for more): recipient, program or batch on a send; recipient, program or send on a reward."
                }
              ]
            },
            "description": "Scope: `sends:read`."
          }
        },
        {
          "name": "Create a send",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": false,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/sends",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "sends"
              ]
            },
            "description": "Always async: the send is written and charged, then dispatched; webhooks and GET tell the rest. `validate_only: true` runs every check and writes nothing (200, no Idempotency-Key needed). A client_reference already used returns that send (200). An agent key over its threshold or to a new target gets 202 with an agent_approval instead. Scope: `sends:write`. Moves money: an `Idempotency-Key` is required.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"product\": \"airtime-usd\",\n  \"target\": \"0772123456\",\n  \"amount\": \"1.00\",\n  \"client_reference\": \"order-8812\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Retrieve a send",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/sends/:send_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "sends",
                ":send_id"
              ],
              "variable": [
                {
                  "key": "send_id",
                  "value": "",
                  "description": "snd_\u2026 (or the bare hex of a legacy order)."
                }
              ],
              "query": [
                {
                  "key": "expand[]",
                  "value": "",
                  "disabled": true,
                  "description": "Inline a related object in place of its id (repeat for more): recipient, program or batch on a send; recipient, program or send on a reward."
                }
              ]
            },
            "description": "Scope: `sends:read`."
          }
        },
        {
          "name": "A send's attempts",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/sends/:send_id/attempts",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "sends",
                ":send_id",
                "attempts"
              ],
              "variable": [
                {
                  "key": "send_id",
                  "value": "",
                  "description": "snd_\u2026 (or the bare hex of a legacy order)."
                }
              ]
            },
            "description": "When it went to the provider, and each time Hot Recharge was asked what it recorded (outcomes only). Scope: `sends:read`."
          }
        },
        {
          "name": "Cancel a send not yet sent",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": true,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/sends/:send_id/cancel",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "sends",
                ":send_id",
                "cancel"
              ],
              "variable": [
                {
                  "key": "send_id",
                  "value": "",
                  "description": "snd_\u2026 (or the bare hex of a legacy order)."
                }
              ]
            },
            "description": "A scheduled send, or one still waiting to go: the credit comes back (cancelled_credited). `409 already_sent` once it has gone. Scope: `sends:write`."
          }
        },
        {
          "name": "Change a ZESA send's meter",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": true,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/sends/:send_id/meter",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "sends",
                ":send_id",
                "meter"
              ],
              "variable": [
                {
                  "key": "send_id",
                  "value": "",
                  "description": "snd_\u2026 (or the bare hex of a legacy order)."
                }
              ]
            },
            "description": "Only while it has not gone out (queued while ZESA is down, or scheduled). The new meter is confirmed now when ZESA answers, else before the send goes out. Audited, and send.meter_changed goes to every endpoint. Scope: `sends:write`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"meter\": \"37261502217\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "A delivered send's receipt",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/sends/:send_id/receipt",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "sends",
                ":send_id",
                "receipt"
              ],
              "variable": [
                {
                  "key": "send_id",
                  "value": "",
                  "description": "snd_\u2026 (or the bare hex of a legacy order)."
                }
              ],
              "query": [
                {
                  "key": "format",
                  "value": "",
                  "disabled": true,
                  "description": "json (default); csv for reports and the Workforce files (the ledger also takes csv-json, the file inside JSON); pdf for a receipt."
                }
              ]
            },
            "description": "JSON, or `?format=pdf` for the same receipt as a PDF. The token is masked without tokens:read. Scope: `sends:read`."
          }
        },
        {
          "name": "Text a ZESA token again",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/sends/:send_id/resend-token",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "sends",
                ":send_id",
                "resend-token"
              ],
              "variable": [
                {
                  "key": "send_id",
                  "value": "",
                  "description": "snd_\u2026 (or the bare hex of a legacy order)."
                }
              ]
            },
            "description": "Only to the phone and email it went to first. Rate-limited. Scope: `sends:write`."
          }
        },
        {
          "name": "Retry a failed send",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": false,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/sends/:send_id/retry",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "sends",
                ":send_id",
                "retry"
              ],
              "variable": [
                {
                  "key": "send_id",
                  "value": "",
                  "description": "snd_\u2026 (or the bare hex of a legacy order)."
                }
              ]
            },
            "description": "A terminal failed send (failed_credited or failed) only, sent again as a new send charged now, with `retry_of`. Hot Recharge is asked about the first send before anything is resent: delivered after all is `409 send_delivered_late`, no answer is `503 provider_unavailable`. `409 send_not_retryable` from any other state, for a card checkout's send, and for a send already retried. Scope: `sends:write`. Moves money: an `Idempotency-Key` is required."
          }
        }
      ]
    },
    {
      "name": "Disputes",
      "description": "A send your user says did not arrive.",
      "item": [
        {
          "name": "List disputes",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/disputes",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "disputes"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Rows per page."
                },
                {
                  "key": "starting_after",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page after it (next_cursor)."
                },
                {
                  "key": "ending_before",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page before it."
                },
                {
                  "key": "created[gte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[gt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "status",
                  "value": "",
                  "disabled": true,
                  "description": "Only objects in this status."
                },
                {
                  "key": "send",
                  "value": "",
                  "disabled": true,
                  "description": "snd_\u2026"
                },
                {
                  "key": "metadata[key]",
                  "value": "",
                  "disabled": true,
                  "description": "metadata[<key>]=<value>: an exact match on one key."
                }
              ]
            },
            "description": "Scope: `sends:read`."
          }
        },
        {
          "name": "Open a dispute",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": true,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/disputes",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "disputes"
              ]
            },
            "description": "Opens a staff case. A delivered send is never reversed. Scope: `sends:write`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"send\": \"snd_\\u2026\",\n  \"reason\": \"token_not_received\",\n  \"evidence\": \"Customer says no SMS came.\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Retrieve a dispute",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/disputes/:dispute_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "disputes",
                ":dispute_id"
              ],
              "variable": [
                {
                  "key": "dispute_id",
                  "value": "",
                  "description": "dsp_\u2026"
                }
              ]
            },
            "description": "Scope: `sends:read`."
          }
        }
      ]
    },
    {
      "name": "Batches",
      "description": "Up to 10,000 sends at once.",
      "item": [
        {
          "name": "List batches",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/batches",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "batches"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Rows per page."
                },
                {
                  "key": "starting_after",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page after it (next_cursor)."
                },
                {
                  "key": "ending_before",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page before it."
                },
                {
                  "key": "created[gte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[gt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "status",
                  "value": "",
                  "disabled": true,
                  "description": "Only objects in this status."
                },
                {
                  "key": "metadata[key]",
                  "value": "",
                  "disabled": true,
                  "description": "metadata[<key>]=<value>: an exact match on one key."
                }
              ]
            },
            "description": "Scope: `sends:read`."
          }
        },
        {
          "name": "Create a batch",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": false,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/batches",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "batches"
              ]
            },
            "description": "Up to 10,000 items (JSON or CSV). Credit is reserved at once by default; above the account's approval threshold it waits for a second person. Scope: `batches:write`. Moves money: an `Idempotency-Key` is required.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"title\": \"October allowance\",\n  \"items\": [\n    {\n      \"target\": \"0772123456\",\n      \"amount\": \"5.00\"\n    },\n    {\n      \"target\": \"0712345678\",\n      \"amount\": \"5.00\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Retrieve a batch",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/batches/:batch_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "batches",
                ":batch_id"
              ],
              "variable": [
                {
                  "key": "batch_id",
                  "value": "",
                  "description": "bch_\u2026"
                }
              ]
            },
            "description": "Scope: `sends:read`."
          }
        },
        {
          "name": "Approve a batch",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": false,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/batches/:batch_id/approve",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "batches",
                ":batch_id",
                "approve"
              ],
              "variable": [
                {
                  "key": "batch_id",
                  "value": "",
                  "description": "bch_\u2026"
                }
              ]
            },
            "description": "By an owner or admin other than the batch's maker. Scope: `batches:write`. Moves money: an `Idempotency-Key` is required."
          }
        },
        {
          "name": "Cancel a batch",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": true,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/batches/:batch_id/cancel",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "batches",
                ":batch_id",
                "cancel"
              ],
              "variable": [
                {
                  "key": "batch_id",
                  "value": "",
                  "description": "bch_\u2026"
                }
              ]
            },
            "description": "Items not yet sent are cancelled; unspent reserved credit is released. Scope: `batches:write`."
          }
        },
        {
          "name": "List a batch's items",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/batches/:batch_id/items",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "batches",
                ":batch_id",
                "items"
              ],
              "variable": [
                {
                  "key": "batch_id",
                  "value": "",
                  "description": "bch_\u2026"
                }
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Rows per page."
                },
                {
                  "key": "starting_after",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page after it (next_cursor)."
                },
                {
                  "key": "ending_before",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page before it."
                },
                {
                  "key": "created[gte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[gt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "status",
                  "value": "",
                  "disabled": true,
                  "description": "Only objects in this status."
                },
                {
                  "key": "metadata[key]",
                  "value": "",
                  "disabled": true,
                  "description": "metadata[<key>]=<value>: an exact match on one key."
                }
              ]
            },
            "description": "Scope: `sends:read`."
          }
        },
        {
          "name": "Download a batch's results",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/batches/:batch_id/results.csv",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "batches",
                ":batch_id",
                "results.csv"
              ],
              "variable": [
                {
                  "key": "batch_id",
                  "value": "",
                  "description": "bch_\u2026"
                }
              ]
            },
            "description": "Scope: `sends:read`."
          }
        },
        {
          "name": "Retry a batch's failed items",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": false,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/batches/:batch_id/retry-failed",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "batches",
                ":batch_id",
                "retry-failed"
              ],
              "variable": [
                {
                  "key": "batch_id",
                  "value": "",
                  "description": "bch_\u2026"
                }
              ]
            },
            "description": "A new batch, charged again. Each failed item is retried once. Scope: `batches:write`. Moves money: an `Idempotency-Key` is required.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Preview a batch",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/batches/preview",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "batches",
                "preview"
              ]
            },
            "description": "Per-line validity, totals, whether the credit and the provider float suffice. Scope: `batches:write`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"title\": \"October allowance\",\n  \"items\": [\n    {\n      \"target\": \"0772123456\",\n      \"amount\": \"5.00\"\n    },\n    {\n      \"target\": \"0712345678\",\n      \"amount\": \"5.00\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        }
      ]
    },
    {
      "name": "Schedules",
      "description": "Recurring sends.",
      "item": [
        {
          "name": "List schedules",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/schedules",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "schedules"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Rows per page."
                },
                {
                  "key": "starting_after",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page after it (next_cursor)."
                },
                {
                  "key": "ending_before",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page before it."
                },
                {
                  "key": "created[gte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[gt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "active",
                  "value": "",
                  "disabled": true,
                  "description": "Active or not."
                },
                {
                  "key": "metadata[key]",
                  "value": "",
                  "disabled": true,
                  "description": "metadata[<key>]=<value>: an exact match on one key."
                }
              ]
            },
            "description": "Scope: `sends:read`."
          }
        },
        {
          "name": "Create a schedule",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": true,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/schedules",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "schedules"
              ]
            },
            "description": "Scope: `schedules:write`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Monthly allowance\",\n  \"cadence\": \"monthly\",\n  \"day_of_month\": 1,\n  \"hour\": 8,\n  \"minute\": 0,\n  \"group\": \"grp_\\u2026\",\n  \"product\": \"airtime-usd\",\n  \"amount\": \"5.00\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Retrieve a schedule",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/schedules/:schedule_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "schedules",
                ":schedule_id"
              ],
              "variable": [
                {
                  "key": "schedule_id",
                  "value": "",
                  "description": "sch_\u2026"
                }
              ]
            },
            "description": "Scope: `sends:read`."
          }
        },
        {
          "name": "Update a schedule",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/schedules/:schedule_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "schedules",
                ":schedule_id"
              ],
              "variable": [
                {
                  "key": "schedule_id",
                  "value": "",
                  "description": "sch_\u2026"
                }
              ]
            },
            "description": "Scope: `schedules:write`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Monthly allowance\",\n  \"cadence\": \"monthly\",\n  \"day_of_month\": 1,\n  \"hour\": 8,\n  \"minute\": 0,\n  \"group\": \"grp_\\u2026\",\n  \"product\": \"airtime-usd\",\n  \"amount\": \"5.00\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Delete a schedule",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/schedules/:schedule_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "schedules",
                ":schedule_id"
              ],
              "variable": [
                {
                  "key": "schedule_id",
                  "value": "",
                  "description": "sch_\u2026"
                }
              ]
            },
            "description": "Scope: `schedules:write`."
          }
        },
        {
          "name": "List upcoming runs",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/schedules/:schedule_id/occurrences",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "schedules",
                ":schedule_id",
                "occurrences"
              ],
              "variable": [
                {
                  "key": "schedule_id",
                  "value": "",
                  "description": "sch_\u2026"
                }
              ],
              "query": [
                {
                  "key": "from",
                  "value": "",
                  "disabled": true,
                  "description": "The start (inclusive)."
                },
                {
                  "key": "to",
                  "value": "",
                  "disabled": true,
                  "description": "The end (inclusive)."
                }
              ]
            },
            "description": "From today to 60 days on by default (YYYY-MM-DD). Scope: `sends:read`."
          }
        },
        {
          "name": "Retrieve one run",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/schedules/:schedule_id/occurrences/:day",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "schedules",
                ":schedule_id",
                "occurrences",
                ":day"
              ],
              "variable": [
                {
                  "key": "schedule_id",
                  "value": "",
                  "description": "sch_\u2026"
                },
                {
                  "key": "day",
                  "value": "",
                  "description": "The run's date, YYYY-MM-DD."
                }
              ]
            },
            "description": "`ran` with its `batch` once it has gone out. Scope: `sends:read`."
          }
        },
        {
          "name": "Change one run's amount",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/schedules/:schedule_id/occurrences/:day",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "schedules",
                ":schedule_id",
                "occurrences",
                ":day"
              ],
              "variable": [
                {
                  "key": "schedule_id",
                  "value": "",
                  "description": "sch_\u2026"
                },
                {
                  "key": "day",
                  "value": "",
                  "description": "The run's date, YYYY-MM-DD."
                }
              ]
            },
            "description": "Scope: `schedules:write`.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Combine one run into another",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/schedules/:schedule_id/occurrences/:day/combine",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "schedules",
                ":schedule_id",
                "occurrences",
                ":day",
                "combine"
              ],
              "variable": [
                {
                  "key": "schedule_id",
                  "value": "",
                  "description": "sch_\u2026"
                },
                {
                  "key": "day",
                  "value": "",
                  "description": "The run's date, YYYY-MM-DD."
                }
              ]
            },
            "description": "The other run (this schedule's on `into`, or `schedule`'s) sends both amounts in one recharge per person, and this one is `combined`. Same people, currency and cost centre only. Reset undoes it. Scope: `schedules:write`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"into\": \"2026-11-02\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Move one run",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/schedules/:schedule_id/occurrences/:day/move",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "schedules",
                ":schedule_id",
                "occurrences",
                ":day",
                "move"
              ],
              "variable": [
                {
                  "key": "schedule_id",
                  "value": "",
                  "description": "sch_\u2026"
                },
                {
                  "key": "day",
                  "value": "",
                  "description": "The run's date, YYYY-MM-DD."
                }
              ]
            },
            "description": "Scope: `schedules:write`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"to\": \"string\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Undo a skip, move or amount change",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/schedules/:schedule_id/occurrences/:day/reset",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "schedules",
                ":schedule_id",
                "occurrences",
                ":day",
                "reset"
              ],
              "variable": [
                {
                  "key": "schedule_id",
                  "value": "",
                  "description": "sch_\u2026"
                },
                {
                  "key": "day",
                  "value": "",
                  "description": "The run's date, YYYY-MM-DD."
                }
              ]
            },
            "description": "Scope: `schedules:write`."
          }
        },
        {
          "name": "Skip one run",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/schedules/:schedule_id/occurrences/:day/skip",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "schedules",
                ":schedule_id",
                "occurrences",
                ":day",
                "skip"
              ],
              "variable": [
                {
                  "key": "schedule_id",
                  "value": "",
                  "description": "sch_\u2026"
                },
                {
                  "key": "day",
                  "value": "",
                  "description": "The run's date, YYYY-MM-DD."
                }
              ]
            },
            "description": "Scope: `schedules:write`."
          }
        },
        {
          "name": "Run a schedule now",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": false,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/schedules/:schedule_id/run-now",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "schedules",
                ":schedule_id",
                "run-now"
              ],
              "variable": [
                {
                  "key": "schedule_id",
                  "value": "",
                  "description": "sch_\u2026"
                }
              ]
            },
            "description": "A run is a batch: it reserves its total and may wait for approval. Scope: `schedules:write`. Moves money: an `Idempotency-Key` is required.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Preview running now",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/schedules/:schedule_id/run-now/preview",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "schedules",
                ":schedule_id",
                "run-now",
                "preview"
              ],
              "variable": [
                {
                  "key": "schedule_id",
                  "value": "",
                  "description": "sch_\u2026"
                }
              ]
            },
            "description": "Scope: `schedules:write`."
          }
        }
      ]
    },
    {
      "name": "Recipients",
      "description": "The people you send to, their groups and cost centres.",
      "item": [
        {
          "name": "List cost centres",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/cost-centers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "cost-centers"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Rows per page."
                },
                {
                  "key": "starting_after",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page after it (next_cursor)."
                },
                {
                  "key": "ending_before",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page before it."
                },
                {
                  "key": "created[gte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[gt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "is_active",
                  "value": "",
                  "disabled": true,
                  "description": "Active or not."
                }
              ]
            },
            "description": "Scope: `recipients:read`."
          }
        },
        {
          "name": "Create a cost centre",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": true,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/cost-centers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "cost-centers"
              ]
            },
            "description": "Scope: `recipients:write`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Marketing\",\n  \"gl_code\": \"6100\",\n  \"monthly_budget\": \"250.00\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Retrieve a cost centre",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/cost-centers/:cost_center_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "cost-centers",
                ":cost_center_id"
              ],
              "variable": [
                {
                  "key": "cost_center_id",
                  "value": "",
                  "description": "cc_\u2026"
                }
              ]
            },
            "description": "Scope: `recipients:read`."
          }
        },
        {
          "name": "Update a cost centre",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/cost-centers/:cost_center_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "cost-centers",
                ":cost_center_id"
              ],
              "variable": [
                {
                  "key": "cost_center_id",
                  "value": "",
                  "description": "cc_\u2026"
                }
              ]
            },
            "description": "Scope: `recipients:write`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Marketing\",\n  \"gl_code\": \"6100\",\n  \"monthly_budget\": \"250.00\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "A cost centre's spend",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/cost-centers/:cost_center_id/spend",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "cost-centers",
                ":cost_center_id",
                "spend"
              ],
              "variable": [
                {
                  "key": "cost_center_id",
                  "value": "",
                  "description": "cc_\u2026"
                }
              ],
              "query": [
                {
                  "key": "from",
                  "value": "",
                  "disabled": true,
                  "description": "The start (inclusive)."
                },
                {
                  "key": "to",
                  "value": "",
                  "disabled": true,
                  "description": "The end (inclusive)."
                }
              ]
            },
            "description": "Scope: `recipients:read`."
          }
        },
        {
          "name": "List groups",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/groups",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "groups"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Rows per page."
                },
                {
                  "key": "starting_after",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page after it (next_cursor)."
                },
                {
                  "key": "ending_before",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page before it."
                },
                {
                  "key": "created[gte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[gt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                }
              ]
            },
            "description": "Scope: `recipients:read`."
          }
        },
        {
          "name": "Create a group",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": true,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/groups",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "groups"
              ]
            },
            "description": "Scope: `recipients:write`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Field team\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Retrieve a group",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/groups/:group_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "groups",
                ":group_id"
              ],
              "variable": [
                {
                  "key": "group_id",
                  "value": "",
                  "description": "grp_\u2026"
                }
              ]
            },
            "description": "Scope: `recipients:read`."
          }
        },
        {
          "name": "Update a group",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/groups/:group_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "groups",
                ":group_id"
              ],
              "variable": [
                {
                  "key": "group_id",
                  "value": "",
                  "description": "grp_\u2026"
                }
              ]
            },
            "description": "Scope: `recipients:write`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Field team\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Delete a group",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/groups/:group_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "groups",
                ":group_id"
              ],
              "variable": [
                {
                  "key": "group_id",
                  "value": "",
                  "description": "grp_\u2026"
                }
              ]
            },
            "description": "Scope: `recipients:write`."
          }
        },
        {
          "name": "Add recipients to a group",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/groups/:group_id/members",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "groups",
                ":group_id",
                "members"
              ],
              "variable": [
                {
                  "key": "group_id",
                  "value": "",
                  "description": "grp_\u2026"
                }
              ]
            },
            "description": "Scope: `recipients:write`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"recipients\": []\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Take recipients out of a group",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/groups/:group_id/members",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "groups",
                ":group_id",
                "members"
              ],
              "variable": [
                {
                  "key": "group_id",
                  "value": "",
                  "description": "grp_\u2026"
                }
              ]
            },
            "description": "Scope: `recipients:write`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"recipients\": []\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "List recipients",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/recipients",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "recipients"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Rows per page."
                },
                {
                  "key": "starting_after",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page after it (next_cursor)."
                },
                {
                  "key": "ending_before",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page before it."
                },
                {
                  "key": "created[gte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[gt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "external_id",
                  "value": "",
                  "disabled": true,
                  "description": "Your id for the person."
                },
                {
                  "key": "phone",
                  "value": "",
                  "disabled": true,
                  "description": "A phone number, any Zimbabwean format."
                },
                {
                  "key": "meter",
                  "value": "",
                  "disabled": true,
                  "description": "A meter number."
                },
                {
                  "key": "group",
                  "value": "",
                  "disabled": true,
                  "description": "grp_\u2026"
                },
                {
                  "key": "cost_center",
                  "value": "",
                  "disabled": true,
                  "description": "cc_\u2026 (Workforce: a department's id, or none for sends booked to none)."
                },
                {
                  "key": "blocked",
                  "value": "",
                  "disabled": true,
                  "description": "Blocked or not."
                },
                {
                  "key": "is_active",
                  "value": "",
                  "disabled": true,
                  "description": "Active or not."
                },
                {
                  "key": "erased",
                  "value": "",
                  "disabled": true,
                  "description": "Erased or not."
                },
                {
                  "key": "metadata[key]",
                  "value": "",
                  "disabled": true,
                  "description": "metadata[<key>]=<value>: an exact match on one key."
                }
              ]
            },
            "description": "Scope: `recipients:read`."
          }
        },
        {
          "name": "Create or update a recipient",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": true,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/recipients",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "recipients"
              ]
            },
            "description": "Upserts on external_id, then phone: 201 when made, 200 when updated. Scope: `recipients:write`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"external_id\": \"user_123\",\n  \"name\": \"Tendai Moyo\",\n  \"phone\": \"0772123456\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Retrieve a recipient",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/recipients/:recipient_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "recipients",
                ":recipient_id"
              ],
              "variable": [
                {
                  "key": "recipient_id",
                  "value": "",
                  "description": "rcp_\u2026 or ext:<external_id>."
                }
              ]
            },
            "description": "Scope: `recipients:read`."
          }
        },
        {
          "name": "Update a recipient",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/recipients/:recipient_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "recipients",
                ":recipient_id"
              ],
              "variable": [
                {
                  "key": "recipient_id",
                  "value": "",
                  "description": "rcp_\u2026 or ext:<external_id>."
                }
              ]
            },
            "description": "Scope: `recipients:write`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"external_id\": \"user_123\",\n  \"name\": \"Tendai Moyo\",\n  \"phone\": \"0772123456\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Deactivate or erase a recipient",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/recipients/:recipient_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "recipients",
                ":recipient_id"
              ],
              "variable": [
                {
                  "key": "recipient_id",
                  "value": "",
                  "description": "rcp_\u2026 or ext:<external_id>."
                }
              ],
              "query": [
                {
                  "key": "erase",
                  "value": "",
                  "disabled": true,
                  "description": "true: erase the person's data (deferred while anything is in flight)."
                }
              ]
            },
            "description": "Deactivates. With erase=true, erases their data and keeps the history masked; refused (409 erasure_deferred) while a send is in flight or a schedule is active. Scope: `recipients:write`."
          }
        },
        {
          "name": "A recipient's earnings pots",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/recipients/:recipient_id/balance",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "recipients",
                ":recipient_id",
                "balance"
              ],
              "variable": [
                {
                  "key": "recipient_id",
                  "value": "",
                  "description": "rcp_\u2026 or ext:<external_id>."
                }
              ]
            },
            "description": "Scope: `recipients:read`."
          }
        },
        {
          "name": "List a recipient's sends",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/recipients/:recipient_id/sends",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "recipients",
                ":recipient_id",
                "sends"
              ],
              "variable": [
                {
                  "key": "recipient_id",
                  "value": "",
                  "description": "rcp_\u2026 or ext:<external_id>."
                }
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Rows per page."
                },
                {
                  "key": "starting_after",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page after it (next_cursor)."
                },
                {
                  "key": "ending_before",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page before it."
                },
                {
                  "key": "created[gte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[gt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "metadata[key]",
                  "value": "",
                  "disabled": true,
                  "description": "metadata[<key>]=<value>: an exact match on one key."
                }
              ]
            },
            "description": "Scope: `sends:read`."
          }
        },
        {
          "name": "A recipient's spend against their caps",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/recipients/:recipient_id/spend",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "recipients",
                ":recipient_id",
                "spend"
              ],
              "variable": [
                {
                  "key": "recipient_id",
                  "value": "",
                  "description": "rcp_\u2026 or ext:<external_id>."
                }
              ]
            },
            "description": "Scope: `recipients:read`."
          }
        },
        {
          "name": "A person's statement",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/recipients/:recipient_id/statement",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "recipients",
                ":recipient_id",
                "statement"
              ],
              "variable": [
                {
                  "key": "recipient_id",
                  "value": "",
                  "description": "rcp_\u2026 or ext:<external_id>."
                }
              ],
              "query": [
                {
                  "key": "from",
                  "value": "",
                  "disabled": true,
                  "description": "The start (inclusive)."
                },
                {
                  "key": "to",
                  "value": "",
                  "disabled": true,
                  "description": "The end (inclusive)."
                }
              ]
            },
            "description": "Everything sent to them in a period (this month by default; YYYY-MM-DD, inclusive), totalled by currency and outcome, with each send (up to 500). Scope: `recipients:read`."
          }
        },
        {
          "name": "Import recipients",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": true,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/recipients/bulk",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "recipients",
                "bulk"
              ]
            },
            "description": "Up to 5,000, as JSON rows or CSV. Scope: `recipients:write`.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        }
      ]
    },
    {
      "name": "Programs",
      "description": "Reward programs: budget, caps, fraud rules.",
      "item": [
        {
          "name": "List programs",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/programs",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "programs"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Rows per page."
                },
                {
                  "key": "starting_after",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page after it (next_cursor)."
                },
                {
                  "key": "ending_before",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page before it."
                },
                {
                  "key": "created[gte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[gt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "status",
                  "value": "",
                  "disabled": true,
                  "description": "Only objects in this status."
                },
                {
                  "key": "metadata[key]",
                  "value": "",
                  "disabled": true,
                  "description": "metadata[<key>]=<value>: an exact match on one key."
                }
              ]
            },
            "description": "Scope: `rewards:read`."
          }
        },
        {
          "name": "Create a program",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": true,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/programs",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "programs"
              ]
            },
            "description": "The completions HMAC `secret` is shown once, here. A `reserve` program sets its whole budget aside (402 when the credit is short). Scope: `programs:manage`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Household survey Q4\",\n  \"currency\": \"USD\",\n  \"default_amount\": \"0.50\",\n  \"budget\": \"500.00\",\n  \"funding\": \"reserve\",\n  \"per_recipient\": {\n    \"lifetime\": 1\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Retrieve a program",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/programs/:program_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "programs",
                ":program_id"
              ],
              "variable": [
                {
                  "key": "program_id",
                  "value": "",
                  "description": "prg_\u2026"
                }
              ]
            },
            "description": "Scope: `rewards:read`."
          }
        },
        {
          "name": "Update a program",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/programs/:program_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "programs",
                ":program_id"
              ],
              "variable": [
                {
                  "key": "program_id",
                  "value": "",
                  "description": "prg_\u2026"
                }
              ]
            },
            "description": "Scope: `programs:manage`.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Close a program",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/programs/:program_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "programs",
                ":program_id"
              ],
              "variable": [
                {
                  "key": "program_id",
                  "value": "",
                  "description": "prg_\u2026"
                }
              ]
            },
            "description": "The same as POST \u2026/close. Scope: `programs:manage`."
          }
        },
        {
          "name": "Activate a draft program",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/programs/:program_id/activate",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "programs",
                ":program_id",
                "activate"
              ],
              "variable": [
                {
                  "key": "program_id",
                  "value": "",
                  "description": "prg_\u2026"
                }
              ]
            },
            "description": "Scope: `programs:manage`."
          }
        },
        {
          "name": "Close a program",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/programs/:program_id/close",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "programs",
                ":program_id",
                "close"
              ],
              "variable": [
                {
                  "key": "program_id",
                  "value": "",
                  "description": "prg_\u2026"
                }
              ]
            },
            "description": "Scope: `programs:manage`."
          }
        },
        {
          "name": "Report a completion (signed)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/programs/:program_id/completions",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "programs",
                ":program_id",
                "completions"
              ],
              "variable": [
                {
                  "key": "program_id",
                  "value": "",
                  "description": "prg_\u2026"
                }
              ]
            },
            "description": "For survey tools that can sign a webhook but hold no key: `Jusa-Signature: t=<unix>,v1=<hex HMAC-SHA256(program secret, \"{t}.{raw body}\")>`, within 5 minutes. completion_id (or ref) is required; a repeat returns the first reward (200).",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Take budget back",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": false,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/programs/:program_id/defund",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "programs",
                ":program_id",
                "defund"
              ],
              "variable": [
                {
                  "key": "program_id",
                  "value": "",
                  "description": "prg_\u2026"
                }
              ]
            },
            "description": "Without an amount: everything no escrow or unclaimed link has earmarked. Scope: `programs:manage`. Moves money: an `Idempotency-Key` is required.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Add budget (and reserved credit)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": false,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/programs/:program_id/fund",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "programs",
                ":program_id",
                "fund"
              ],
              "variable": [
                {
                  "key": "program_id",
                  "value": "",
                  "description": "prg_\u2026"
                }
              ]
            },
            "description": "Scope: `programs:manage`. Moves money: an `Idempotency-Key` is required.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"amount\": \"5.00\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Pause a program",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/programs/:program_id/pause",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "programs",
                ":program_id",
                "pause"
              ],
              "variable": [
                {
                  "key": "program_id",
                  "value": "",
                  "description": "prg_\u2026"
                }
              ]
            },
            "description": "Scope: `programs:manage`."
          }
        },
        {
          "name": "Resume a paused program",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/programs/:program_id/resume",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "programs",
                ":program_id",
                "resume"
              ],
              "variable": [
                {
                  "key": "program_id",
                  "value": "",
                  "description": "prg_\u2026"
                }
              ]
            },
            "description": "Scope: `programs:manage`."
          }
        },
        {
          "name": "Roll the completions secret",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/programs/:program_id/roll-secret",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "programs",
                ":program_id",
                "roll-secret"
              ],
              "variable": [
                {
                  "key": "program_id",
                  "value": "",
                  "description": "prg_\u2026"
                }
              ]
            },
            "description": "The old secret keeps working for 24 hours. Scope: `programs:manage`."
          }
        }
      ]
    },
    {
      "name": "Rewards",
      "description": "The seed primitive: reward a person for something they did.",
      "item": [
        {
          "name": "List rewards",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/rewards",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "rewards"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Rows per page."
                },
                {
                  "key": "starting_after",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page after it (next_cursor)."
                },
                {
                  "key": "ending_before",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page before it."
                },
                {
                  "key": "created[gte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[gt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "status",
                  "value": "",
                  "disabled": true,
                  "description": "Only objects in this status."
                },
                {
                  "key": "program",
                  "value": "",
                  "disabled": true,
                  "description": "prg_\u2026"
                },
                {
                  "key": "recipient",
                  "value": "",
                  "disabled": true,
                  "description": "rcp_\u2026 or ext:<external_id>."
                },
                {
                  "key": "completion_id",
                  "value": "",
                  "disabled": true,
                  "description": "The completion it answers."
                },
                {
                  "key": "external_id",
                  "value": "",
                  "disabled": true,
                  "description": "Your id for the person."
                },
                {
                  "key": "expand[]",
                  "value": "",
                  "disabled": true,
                  "description": "Inline a related object in place of its id (repeat for more): recipient, program or batch on a send; recipient, program or send on a reward."
                },
                {
                  "key": "metadata[key]",
                  "value": "",
                  "disabled": true,
                  "description": "metadata[<key>]=<value>: an exact match on one key."
                }
              ]
            },
            "description": "Scope: `rewards:read`."
          }
        },
        {
          "name": "Reward someone",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": false,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/rewards",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "rewards"
              ]
            },
            "description": "The seed primitive: caps, fraud rules and budget under one lock, then a send or a link. The same completion_id again returns the first reward (200). A refusal writes nothing, so it can be retried. Scope: `rewards:write`. Moves money: an `Idempotency-Key` is required.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"program\": \"prg_\\u2026\",\n  \"recipient\": {\n    \"external_id\": \"resp-8812\",\n    \"phone\": \"0771230000\"\n  },\n  \"completion_id\": \"8812\",\n  \"metadata\": {\n    \"survey\": \"form-hh-q4\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Retrieve a reward",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/rewards/:reward_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "rewards",
                ":reward_id"
              ],
              "variable": [
                {
                  "key": "reward_id",
                  "value": "",
                  "description": "rwd_\u2026"
                }
              ],
              "query": [
                {
                  "key": "expand[]",
                  "value": "",
                  "disabled": true,
                  "description": "Inline a related object in place of its id (repeat for more): recipient, program or batch on a send; recipient, program or send on a reward."
                }
              ]
            },
            "description": "Scope: `rewards:read`."
          }
        },
        {
          "name": "Release an escrowed reward",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": false,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/rewards/:reward_id/release",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "rewards",
                ":reward_id",
                "release"
              ],
              "variable": [
                {
                  "key": "reward_id",
                  "value": "",
                  "description": "rwd_\u2026"
                }
              ]
            },
            "description": "Optionally for less. Scope: `rewards:write`. Moves money: an `Idempotency-Key` is required.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Void a reward",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": true,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/rewards/:reward_id/void",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "rewards",
                ":reward_id",
                "void"
              ],
              "variable": [
                {
                  "key": "reward_id",
                  "value": "",
                  "description": "rwd_\u2026"
                }
              ]
            },
            "description": "Its budget goes back to the program. Scope: `rewards:write`."
          }
        }
      ]
    },
    {
      "name": "Reward links",
      "description": "Links and QR codes a person claims.",
      "item": [
        {
          "name": "List reward links",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/reward-links",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "reward-links"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Rows per page."
                },
                {
                  "key": "starting_after",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page after it (next_cursor)."
                },
                {
                  "key": "ending_before",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page before it."
                },
                {
                  "key": "created[gte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[gt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "status",
                  "value": "",
                  "disabled": true,
                  "description": "Only objects in this status."
                },
                {
                  "key": "label",
                  "value": "",
                  "disabled": true,
                  "description": "Only links with this label."
                },
                {
                  "key": "program",
                  "value": "",
                  "disabled": true,
                  "description": "prg_\u2026"
                },
                {
                  "key": "metadata[key]",
                  "value": "",
                  "disabled": true,
                  "description": "metadata[<key>]=<value>: an exact match on one key."
                }
              ]
            },
            "description": "Scope: `rewards:read`."
          }
        },
        {
          "name": "Create reward links",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": true,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/reward-links",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "reward-links"
              ]
            },
            "description": "One link, or a list when count is over 1 (up to 500). Each has a url, a token and a QR code. Scope: `rewards:write`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"program\": \"prg_\\u2026\",\n  \"count\": 10,\n  \"bind\": \"otp\",\n  \"label\": \"enumerator-7\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Retrieve a reward link",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/reward-links/:link_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "reward-links",
                ":link_id"
              ],
              "variable": [
                {
                  "key": "link_id",
                  "value": "",
                  "description": "lnk_\u2026"
                }
              ]
            },
            "description": "Scope: `rewards:read`."
          }
        },
        {
          "name": "Revoke a reward link",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/reward-links/:link_id/revoke",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "reward-links",
                ":link_id",
                "revoke"
              ],
              "variable": [
                {
                  "key": "link_id",
                  "value": "",
                  "description": "lnk_\u2026"
                }
              ]
            },
            "description": "Scope: `rewards:write`."
          }
        }
      ]
    },
    {
      "name": "Reviews",
      "description": "Rewards held by a fraud rule, and your blocklist.",
      "item": [
        {
          "name": "List blocked numbers and meters",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/blocklist",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "blocklist"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Rows per page."
                },
                {
                  "key": "starting_after",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page after it (next_cursor)."
                },
                {
                  "key": "ending_before",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page before it."
                },
                {
                  "key": "created[gte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[gt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "target",
                  "value": "",
                  "disabled": true,
                  "description": "A phone (any format) or meter."
                }
              ]
            },
            "description": "Scope: `rewards:read`."
          }
        },
        {
          "name": "Block a number or meter",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/blocklist",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "blocklist"
              ]
            },
            "description": "Live mode only. Scope: `account:manage`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"target\": \"string\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Retrieve a block",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/blocklist/:entry_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "blocklist",
                ":entry_id"
              ],
              "variable": [
                {
                  "key": "entry_id",
                  "value": "",
                  "description": "blk_\u2026"
                }
              ]
            },
            "description": "Scope: `rewards:read`."
          }
        },
        {
          "name": "Unblock",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/blocklist/:entry_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "blocklist",
                ":entry_id"
              ],
              "variable": [
                {
                  "key": "entry_id",
                  "value": "",
                  "description": "blk_\u2026"
                }
              ]
            },
            "description": "Scope: `account:manage`."
          }
        },
        {
          "name": "List fraud reviews",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/reviews",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "reviews"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Rows per page."
                },
                {
                  "key": "starting_after",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page after it (next_cursor)."
                },
                {
                  "key": "ending_before",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page before it."
                },
                {
                  "key": "created[gte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[gt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "status",
                  "value": "",
                  "disabled": true,
                  "description": "Only objects in this status."
                },
                {
                  "key": "program",
                  "value": "",
                  "disabled": true,
                  "description": "prg_\u2026"
                }
              ]
            },
            "description": "Scope: `rewards:read`."
          }
        },
        {
          "name": "Retrieve a review",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/reviews/:review_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "reviews",
                ":review_id"
              ],
              "variable": [
                {
                  "key": "review_id",
                  "value": "",
                  "description": "rev_\u2026"
                }
              ]
            },
            "description": "Scope: `rewards:read`."
          }
        },
        {
          "name": "Approve a held reward",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": false,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/reviews/:review_id/approve",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "reviews",
                ":review_id",
                "approve"
              ],
              "variable": [
                {
                  "key": "review_id",
                  "value": "",
                  "description": "rev_\u2026"
                }
              ]
            },
            "description": "Re-checks the caps and budget under lock, then sends. Scope: `programs:manage`. Moves money: an `Idempotency-Key` is required.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Reject a held reward",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": true,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/reviews/:review_id/reject",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "reviews",
                ":review_id",
                "reject"
              ],
              "variable": [
                {
                  "key": "review_id",
                  "value": "",
                  "description": "rev_\u2026"
                }
              ]
            },
            "description": "Scope: `programs:manage`.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        }
      ]
    },
    {
      "name": "Rules",
      "description": "Earnings pots, streaks, referrals and geofenced check-ins.",
      "item": [
        {
          "name": "List activities",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/activities",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "activities"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Rows per page."
                },
                {
                  "key": "starting_after",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page after it (next_cursor)."
                },
                {
                  "key": "ending_before",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page before it."
                },
                {
                  "key": "created[gte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[gt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "name",
                  "value": "",
                  "disabled": true,
                  "description": "Only activities with this name."
                },
                {
                  "key": "recipient",
                  "value": "",
                  "disabled": true,
                  "description": "rcp_\u2026 or ext:<external_id>."
                },
                {
                  "key": "metadata[key]",
                  "value": "",
                  "disabled": true,
                  "description": "metadata[<key>]=<value>: an exact match on one key."
                }
              ]
            },
            "description": "Scope: `rewards:read`."
          }
        },
        {
          "name": "Record an activity",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": true,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/activities",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "activities"
              ]
            },
            "description": "Feeds the program rules; `matches` says what it triggered. activity_id dedupes for good (200). Scope: `rewards:write`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"recipient\": \"ext:user_123\",\n  \"name\": \"lesson.completed\",\n  \"activity_id\": \"log-9981\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Retrieve an activity",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/activities/:activity_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "activities",
                ":activity_id"
              ],
              "variable": [
                {
                  "key": "activity_id",
                  "value": "",
                  "description": "act_\u2026"
                }
              ]
            },
            "description": "Scope: `rewards:read`."
          }
        },
        {
          "name": "List check-ins",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/checkins",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "checkins"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Rows per page."
                },
                {
                  "key": "starting_after",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page after it (next_cursor)."
                },
                {
                  "key": "ending_before",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page before it."
                },
                {
                  "key": "created[gte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[gt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "status",
                  "value": "",
                  "disabled": true,
                  "description": "Only objects in this status."
                }
              ]
            },
            "description": "Scope: `rewards:read`. Publishable keys may call it (from a browser)."
          }
        },
        {
          "name": "Check in to claim a geofenced link",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": true,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/checkins",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "checkins"
              ]
            },
            "description": "Publishable keys may call it from the browser. Publishable keys may call it (from a browser).",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"link\": \"string\",\n  \"lat\": 1,\n  \"lng\": 1,\n  \"phone\": \"0772123456\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "List a program's rules",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/programs/:program_id/rules",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "programs",
                ":program_id",
                "rules"
              ],
              "variable": [
                {
                  "key": "program_id",
                  "value": "",
                  "description": "prg_\u2026"
                }
              ],
              "query": [
                {
                  "key": "active",
                  "value": "",
                  "disabled": true,
                  "description": "Active or not."
                }
              ]
            },
            "description": "Scope: `rewards:read`."
          }
        },
        {
          "name": "Set a program's rules",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/programs/:program_id/rules",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "programs",
                ":program_id",
                "rules"
              ],
              "variable": [
                {
                  "key": "program_id",
                  "value": "",
                  "description": "prg_\u2026"
                }
              ]
            },
            "description": "The whole set: rules left out are switched off. lottery and prize_draw are refused. Scope: `programs:manage`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"rules\": []\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "List referrals",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/referrals",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "referrals"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Rows per page."
                },
                {
                  "key": "starting_after",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page after it (next_cursor)."
                },
                {
                  "key": "ending_before",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page before it."
                },
                {
                  "key": "created[gte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[gt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "status",
                  "value": "",
                  "disabled": true,
                  "description": "Only objects in this status."
                },
                {
                  "key": "program",
                  "value": "",
                  "disabled": true,
                  "description": "prg_\u2026"
                },
                {
                  "key": "metadata[key]",
                  "value": "",
                  "disabled": true,
                  "description": "metadata[<key>]=<value>: an exact match on one key."
                }
              ]
            },
            "description": "Scope: `rewards:read`."
          }
        },
        {
          "name": "Record a referral",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": true,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/referrals",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "referrals"
              ]
            },
            "description": "Scope: `rewards:write`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"program\": \"string\",\n  \"referrer\": \"string\",\n  \"referee\": \"string\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Retrieve a referral",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/referrals/:referral_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "referrals",
                ":referral_id"
              ],
              "variable": [
                {
                  "key": "referral_id",
                  "value": "",
                  "description": "ref_\u2026"
                }
              ]
            },
            "description": "Scope: `rewards:read`."
          }
        },
        {
          "name": "Qualify a referral",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": false,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/referrals/:referral_id/qualify",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "referrals",
                ":referral_id",
                "qualify"
              ],
              "variable": [
                {
                  "key": "referral_id",
                  "value": "",
                  "description": "ref_\u2026"
                }
              ]
            },
            "description": "Pays the direct referrer (depth 1), in escrow by default. Scope: `rewards:write`. Moves money: an `Idempotency-Key` is required."
          }
        }
      ]
    },
    {
      "name": "Claims",
      "description": "What a publishable key may do with a reward link.",
      "item": [
        {
          "name": "Read a reward link by its token",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/claims/:token",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "claims",
                ":token"
              ],
              "variable": [
                {
                  "key": "token",
                  "value": "",
                  "description": "The link's token."
                }
              ]
            },
            "description": "For publishable keys (the widget). Publishable keys may call it (from a browser)."
          }
        },
        {
          "name": "Claim a reward link",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": true,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/claims/:token",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "claims",
                ":token"
              ],
              "variable": [
                {
                  "key": "token",
                  "value": "",
                  "description": "The link's token."
                }
              ]
            },
            "description": "Publishable keys may call it (from a browser).",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"phone\": \"0772123456\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Text the claim code (OTP-bound links)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/claims/:token/code",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "claims",
                ":token",
                "code"
              ],
              "variable": [
                {
                  "key": "token",
                  "value": "",
                  "description": "The link's token."
                }
              ]
            },
            "description": "Publishable keys may call it (from a browser).",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"phone\": \"0772123456\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        }
      ]
    },
    {
      "name": "Agent approvals",
      "description": "An agent key's request waiting for a person.",
      "item": [
        {
          "name": "List agent approvals",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/approvals",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "approvals"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Rows per page."
                },
                {
                  "key": "starting_after",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page after it (next_cursor)."
                },
                {
                  "key": "ending_before",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page before it."
                },
                {
                  "key": "created[gte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[gt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "status",
                  "value": "",
                  "disabled": true,
                  "description": "Only objects in this status."
                },
                {
                  "key": "action",
                  "value": "",
                  "disabled": true,
                  "description": "Only this action (send or reward; for the audit log, e.g. api_key.created)."
                }
              ]
            },
            "description": ""
          }
        },
        {
          "name": "Retrieve an agent approval",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/approvals/:approval_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "approvals",
                ":approval_id"
              ],
              "variable": [
                {
                  "key": "approval_id",
                  "value": "",
                  "description": "apr_\u2026"
                }
              ]
            },
            "description": ""
          }
        },
        {
          "name": "Approve an agent's request",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/approvals/:approval_id/approve",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "approvals",
                ":approval_id",
                "approve"
              ],
              "variable": [
                {
                  "key": "approval_id",
                  "value": "",
                  "description": "apr_\u2026"
                }
              ]
            },
            "description": "Dashboard only: an owner or admin, with their payment PIN.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Reject an agent's request",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/approvals/:approval_id/reject",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "approvals",
                ":approval_id",
                "reject"
              ],
              "variable": [
                {
                  "key": "approval_id",
                  "value": "",
                  "description": "apr_\u2026"
                }
              ]
            },
            "description": "Dashboard only."
          }
        }
      ]
    },
    {
      "name": "MCP",
      "description": "The Model Context Protocol server for AI agents.",
      "item": [
        {
          "name": "The MCP server (JSON-RPC 2.0)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/mcp",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "mcp"
              ]
            },
            "description": "Agent keys only. Tools: send_airtime, buy_zesa, confirm_meter, create_reward, get_balance, get_send, list_products. 202 with no body answers a notification; a message that is not JSON-RPC is a JSON-RPC error with status 400.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        }
      ]
    },
    {
      "name": "Jusa Credit",
      "description": "Your prepaid balance: transactions, top-ups, statements.",
      "item": [
        {
          "name": "Jusa Credit balances",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/credit",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "credit"
              ]
            },
            "description": "Scope: `credit:read`."
          }
        },
        {
          "name": "Low-balance and shortfall alerts",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/credit/alerts",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "credit",
                "alerts"
              ]
            },
            "description": "Scope: `credit:read`."
          }
        },
        {
          "name": "Set the alerts",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/credit/alerts",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "credit",
                "alerts"
              ]
            },
            "description": "Scope: `account:manage`.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "List credit set aside",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/credit/reservations",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "credit",
                "reservations"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Rows per page."
                },
                {
                  "key": "starting_after",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page after it (next_cursor)."
                },
                {
                  "key": "ending_before",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page before it."
                },
                {
                  "key": "created[gte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[gt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "status",
                  "value": "",
                  "disabled": true,
                  "description": "Only objects in this status."
                },
                {
                  "key": "currency",
                  "value": "",
                  "disabled": true,
                  "description": "Only this currency."
                }
              ]
            },
            "description": "Scope: `credit:read`."
          }
        },
        {
          "name": "List top-ups",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/credit/topups",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "credit",
                "topups"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Rows per page."
                },
                {
                  "key": "starting_after",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page after it (next_cursor)."
                },
                {
                  "key": "ending_before",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page before it."
                },
                {
                  "key": "created[gte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[gt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "method",
                  "value": "",
                  "disabled": true,
                  "description": "GET, POST, \u2026"
                },
                {
                  "key": "status",
                  "value": "",
                  "disabled": true,
                  "description": "Only objects in this status."
                }
              ]
            },
            "description": "Scope: `credit:read`."
          }
        },
        {
          "name": "Top up Jusa Credit",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": false,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/credit/topups",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "credit",
                "topups"
              ]
            },
            "description": "pesepay: send a person to redirect_url; the card fee is paid by the payer. bank_transfer: our bank details and a reference to quote. Any amount; spendable once paid. Scope: `credit:topup`. Moves money: an `Idempotency-Key` is required.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"method\": \"pesepay\",\n  \"amount\": \"100.00\",\n  \"currency\": \"USD\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Retrieve a top-up",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/credit/topups/:topup_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "credit",
                "topups",
                ":topup_id"
              ],
              "variable": [
                {
                  "key": "topup_id",
                  "value": "",
                  "description": "top_\u2026"
                }
              ]
            },
            "description": "Scope: `credit:read`."
          }
        },
        {
          "name": "List Jusa Credit transactions",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/credit/transactions",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "credit",
                "transactions"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Rows per page."
                },
                {
                  "key": "starting_after",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page after it (next_cursor)."
                },
                {
                  "key": "ending_before",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page before it."
                },
                {
                  "key": "created[gte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[gt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "currency",
                  "value": "",
                  "disabled": true,
                  "description": "Only this currency."
                },
                {
                  "key": "type",
                  "value": "",
                  "disabled": true,
                  "description": "Only this type."
                },
                {
                  "key": "source",
                  "value": "",
                  "disabled": true,
                  "description": "What it came from: snd_, top_, rwd_, bch_ or rsv_."
                }
              ]
            },
            "description": "Scope: `credit:read`."
          }
        },
        {
          "name": "Retrieve a transaction",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/credit/transactions/:transaction_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "credit",
                "transactions",
                ":transaction_id"
              ],
              "variable": [
                {
                  "key": "transaction_id",
                  "value": "",
                  "description": "txn_\u2026"
                }
              ]
            },
            "description": "Scope: `credit:read`."
          }
        },
        {
          "name": "A monthly statement",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/statements",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "statements"
              ],
              "query": [
                {
                  "key": "period",
                  "value": "",
                  "disabled": true,
                  "description": "YYYY-MM; this month by default."
                },
                {
                  "key": "currency",
                  "value": "",
                  "disabled": true,
                  "description": "Only this currency."
                }
              ]
            },
            "description": "Scope: `credit:read`."
          }
        },
        {
          "name": "A monthly statement as CSV",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/statements.csv",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "statements.csv"
              ],
              "query": [
                {
                  "key": "period",
                  "value": "",
                  "disabled": true,
                  "description": "YYYY-MM; this month by default."
                },
                {
                  "key": "currency",
                  "value": "",
                  "disabled": true,
                  "description": "Only this currency."
                }
              ]
            },
            "description": "Scope: `credit:read`."
          }
        },
        {
          "name": "A monthly statement as PDF",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/statements.pdf",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "statements.pdf"
              ],
              "query": [
                {
                  "key": "period",
                  "value": "",
                  "disabled": true,
                  "description": "YYYY-MM; this month by default."
                },
                {
                  "key": "currency",
                  "value": "",
                  "disabled": true,
                  "description": "Only this currency."
                }
              ]
            },
            "description": "Scope: `credit:read`."
          }
        }
      ]
    },
    {
      "name": "Checkout",
      "description": "Your user pays by card; you get the attribution.",
      "item": [
        {
          "name": "List checkout sessions",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/checkout-sessions",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "checkout-sessions"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Rows per page."
                },
                {
                  "key": "starting_after",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page after it (next_cursor)."
                },
                {
                  "key": "ending_before",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page before it."
                },
                {
                  "key": "created[gte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[gt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "status",
                  "value": "",
                  "disabled": true,
                  "description": "Only objects in this status."
                },
                {
                  "key": "client_reference",
                  "value": "",
                  "disabled": true,
                  "description": "Your own reference."
                },
                {
                  "key": "metadata[key]",
                  "value": "",
                  "disabled": true,
                  "description": "metadata[<key>]=<value>: an exact match on one key."
                }
              ]
            },
            "description": "Scope: `sends:read`."
          }
        },
        {
          "name": "Create a checkout session",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": false,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/checkout-sessions",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "checkout-sessions"
              ]
            },
            "description": "Your user pays by card on Pesepay (Jusa is the merchant of record and the card fee is the payer's); the send is booked to you. A repeated client_reference returns the first session (200). Scope: `sends:write`. Moves money: an `Idempotency-Key` is required.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"type\": \"zesa\",\n  \"target\": \"37261502217\",\n  \"amount\": \"20.00\",\n  \"currency\": \"USD\",\n  \"token_phone\": \"0772123456\",\n  \"success_url\": \"https://example.com/thanks\",\n  \"cancel_url\": \"https://example.com/basket\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Retrieve a checkout session",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/checkout-sessions/:session_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "checkout-sessions",
                ":session_id"
              ],
              "variable": [
                {
                  "key": "session_id",
                  "value": "",
                  "description": "cs_\u2026"
                }
              ]
            },
            "description": "Scope: `sends:read`."
          }
        },
        {
          "name": "Fix the meter while it waits",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": true,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/checkout-sessions/:session_id/meter",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "checkout-sessions",
                ":session_id",
                "meter"
              ],
              "variable": [
                {
                  "key": "session_id",
                  "value": "",
                  "description": "cs_\u2026"
                }
              ]
            },
            "description": "Scope: `sends:write`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"meter\": \"37261502217\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        }
      ]
    },
    {
      "name": "Workforce",
      "description": "Employer allocation and GL, as the Jusa app has it.",
      "item": [
        {
          "name": "What this key may do in Workforce",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/workforce/access",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "workforce",
                "access"
              ]
            },
            "description": "Scope: `workforce:admin`."
          }
        },
        {
          "name": "Allocate airtime or ZESA",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": true,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/workforce/allocate",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "workforce",
                "allocate"
              ]
            },
            "description": "Scope: `workforce:admin`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"kind\": \"airtime\",\n  \"product_ref\": \"airtime-usd\",\n  \"cost_center_id\": 3,\n  \"idempotency_key\": \"stipend-2026-10\",\n  \"lines\": [\n    {\n      \"recipient_id\": 12,\n      \"amount\": \"2.00\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Preview an allocation",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/workforce/allocate/preview",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "workforce",
                "allocate",
                "preview"
              ]
            },
            "description": "Scope: `workforce:admin`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"kind\": \"airtime\",\n  \"product_ref\": \"airtime-usd\",\n  \"cost_center_id\": 3,\n  \"idempotency_key\": \"stipend-2026-10\",\n  \"lines\": [\n    {\n      \"recipient_id\": 12,\n      \"amount\": \"2.00\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Past allocations",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/workforce/batches",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "workforce",
                "batches"
              ],
              "query": [
                {
                  "key": "from",
                  "value": "",
                  "disabled": true,
                  "description": "The start (inclusive)."
                },
                {
                  "key": "to",
                  "value": "",
                  "disabled": true,
                  "description": "The end (inclusive)."
                },
                {
                  "key": "status",
                  "value": "",
                  "disabled": true,
                  "description": "Only objects in this status."
                },
                {
                  "key": "cost_center",
                  "value": "",
                  "disabled": true,
                  "description": "cc_\u2026 (Workforce: a department's id, or none for sends booked to none)."
                },
                {
                  "key": "page",
                  "value": "",
                  "disabled": true,
                  "description": "Workforce pages from 1."
                },
                {
                  "key": "page_size",
                  "value": "",
                  "disabled": true,
                  "description": "Workforce rows per page (batches up to 50, the ledger up to 100)."
                }
              ]
            },
            "description": "Scope: `workforce:admin`."
          }
        },
        {
          "name": "One allocation",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/workforce/batches/:reference",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "workforce",
                "batches",
                ":reference"
              ],
              "variable": [
                {
                  "key": "reference",
                  "value": "",
                  "description": "A Workforce batch reference."
                }
              ]
            },
            "description": "Scope: `workforce:admin`."
          }
        },
        {
          "name": "Resend the failed lines",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": true,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/workforce/batches/:reference/resend",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "workforce",
                "batches",
                ":reference",
                "resend"
              ],
              "variable": [
                {
                  "key": "reference",
                  "value": "",
                  "description": "A Workforce batch reference."
                }
              ]
            },
            "description": "Scope: `workforce:admin`.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Preview resending the failed lines",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/workforce/batches/:reference/resend/preview",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "workforce",
                "batches",
                ":reference",
                "resend",
                "preview"
              ],
              "variable": [
                {
                  "key": "reference",
                  "value": "",
                  "description": "A Workforce batch reference."
                }
              ]
            },
            "description": "Scope: `workforce:admin`.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Departments",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/workforce/cost-centers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "workforce",
                "cost-centers"
              ]
            },
            "description": "Scope: `workforce:admin`."
          }
        },
        {
          "name": "Add a department",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/workforce/cost-centers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "workforce",
                "cost-centers"
              ]
            },
            "description": "Scope: `workforce:admin`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Field sales\",\n  \"code\": \"6100\",\n  \"monthly_budget\": \"250.00\",\n  \"currency\": \"USD\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Change a department",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/workforce/cost-centers/:cost_center_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "workforce",
                "cost-centers",
                ":cost_center_id"
              ],
              "variable": [
                {
                  "key": "cost_center_id",
                  "value": "",
                  "description": "cc_\u2026"
                }
              ]
            },
            "description": "Scope: `workforce:admin`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Field sales\",\n  \"code\": \"6100\",\n  \"monthly_budget\": \"250.00\",\n  \"currency\": \"USD\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "A department's people",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/workforce/cost-centers/:cost_center_id/people",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "workforce",
                "cost-centers",
                ":cost_center_id",
                "people"
              ],
              "variable": [
                {
                  "key": "cost_center_id",
                  "value": "",
                  "description": "cc_\u2026"
                }
              ]
            },
            "description": "Scope: `workforce:admin`."
          }
        },
        {
          "name": "Move people into a department",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/workforce/cost-centers/:cost_center_id/people",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "workforce",
                "cost-centers",
                ":cost_center_id",
                "people"
              ],
              "variable": [
                {
                  "key": "cost_center_id",
                  "value": "",
                  "description": "cc_\u2026"
                }
              ]
            },
            "description": "Scope: `workforce:admin`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"add\": [\n    12\n  ],\n  \"new\": [\n    {\n      \"name\": \"Rudo Moyo\",\n      \"phone\": \"0772123456\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "A department's spend",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/workforce/cost-centers/:cost_center_id/spend",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "workforce",
                "cost-centers",
                ":cost_center_id",
                "spend"
              ],
              "variable": [
                {
                  "key": "cost_center_id",
                  "value": "",
                  "description": "cc_\u2026"
                }
              ],
              "query": [
                {
                  "key": "from",
                  "value": "",
                  "disabled": true,
                  "description": "The start (inclusive)."
                },
                {
                  "key": "to",
                  "value": "",
                  "disabled": true,
                  "description": "The end (inclusive)."
                }
              ]
            },
            "description": "Scope: `workforce:admin`."
          }
        },
        {
          "name": "The GL journal",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/workforce/journal",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "workforce",
                "journal"
              ],
              "query": [
                {
                  "key": "from",
                  "value": "",
                  "disabled": true,
                  "description": "The start (inclusive)."
                },
                {
                  "key": "to",
                  "value": "",
                  "disabled": true,
                  "description": "The end (inclusive)."
                },
                {
                  "key": "cost_center",
                  "value": "",
                  "disabled": true,
                  "description": "cc_\u2026 (Workforce: a department's id, or none for sends booked to none)."
                },
                {
                  "key": "format",
                  "value": "",
                  "disabled": true,
                  "description": "json (default); csv for reports and the Workforce files (the ledger also takes csv-json, the file inside JSON); pdf for a receipt."
                }
              ]
            },
            "description": "Scope: `workforce:admin`."
          }
        },
        {
          "name": "The ledger",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/workforce/ledger",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "workforce",
                "ledger"
              ],
              "query": [
                {
                  "key": "from",
                  "value": "",
                  "disabled": true,
                  "description": "The start (inclusive)."
                },
                {
                  "key": "to",
                  "value": "",
                  "disabled": true,
                  "description": "The end (inclusive)."
                },
                {
                  "key": "currency",
                  "value": "",
                  "disabled": true,
                  "description": "Only this currency."
                },
                {
                  "key": "kind",
                  "value": "",
                  "disabled": true,
                  "description": "Only this kind of entry (topup, debit, refund, adjustment)."
                },
                {
                  "key": "q",
                  "value": "",
                  "disabled": true,
                  "description": "Entries whose reference contains this."
                },
                {
                  "key": "format",
                  "value": "",
                  "disabled": true,
                  "description": "json (default); csv for reports and the Workforce files (the ledger also takes csv-json, the file inside JSON); pdf for a receipt."
                },
                {
                  "key": "page",
                  "value": "",
                  "disabled": true,
                  "description": "Workforce pages from 1."
                },
                {
                  "key": "page_size",
                  "value": "",
                  "disabled": true,
                  "description": "Workforce rows per page (batches up to 50, the ledger up to 100)."
                }
              ]
            },
            "description": "Scope: `workforce:admin`."
          }
        },
        {
          "name": "Meters on file",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/workforce/meters",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "workforce",
                "meters"
              ]
            },
            "description": "Scope: `workforce:admin`."
          }
        },
        {
          "name": "What Workforce can send",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/workforce/products",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "workforce",
                "products"
              ]
            },
            "description": "Scope: `workforce:admin`."
          }
        },
        {
          "name": "Add a person",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/workforce/recipients",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "workforce",
                "recipients"
              ]
            },
            "description": "Scope: `workforce:admin`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Rudo Moyo\",\n  \"phone\": \"0772123456\",\n  \"cost_center_id\": 3\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Change a person",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/workforce/recipients/:recipient_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "workforce",
                "recipients",
                ":recipient_id"
              ],
              "variable": [
                {
                  "key": "recipient_id",
                  "value": "",
                  "description": "rcp_\u2026 or ext:<external_id>."
                }
              ]
            },
            "description": "Scope: `workforce:admin`.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "A person's statement",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/workforce/recipients/:recipient_id/statement",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "workforce",
                "recipients",
                ":recipient_id",
                "statement"
              ],
              "variable": [
                {
                  "key": "recipient_id",
                  "value": "",
                  "description": "rcp_\u2026 or ext:<external_id>."
                }
              ],
              "query": [
                {
                  "key": "from",
                  "value": "",
                  "disabled": true,
                  "description": "The start (inclusive)."
                },
                {
                  "key": "to",
                  "value": "",
                  "disabled": true,
                  "description": "The end (inclusive)."
                }
              ]
            },
            "description": "Scope: `workforce:admin`."
          }
        },
        {
          "name": "Add a plan",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/workforce/schedules",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "workforce",
                "schedules"
              ]
            },
            "description": "Scope: `workforce:admin`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Month-end airtime\",\n  \"frequency\": \"monthly\",\n  \"day_of_month\": 25,\n  \"hour\": 9,\n  \"amount_per_recipient\": \"5.00\",\n  \"cost_center_id\": 3\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Change a plan",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/workforce/schedules/:schedule_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "workforce",
                "schedules",
                ":schedule_id"
              ],
              "variable": [
                {
                  "key": "schedule_id",
                  "value": "",
                  "description": "sch_\u2026"
                }
              ]
            },
            "description": "Scope: `workforce:admin`.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Remove a plan",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/workforce/schedules/:schedule_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "workforce",
                "schedules",
                ":schedule_id"
              ],
              "variable": [
                {
                  "key": "schedule_id",
                  "value": "",
                  "description": "sch_\u2026"
                }
              ]
            },
            "description": "Scope: `workforce:admin`."
          }
        },
        {
          "name": "Run a plan now",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": true,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/workforce/schedules/:schedule_id/run-now",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "workforce",
                "schedules",
                ":schedule_id",
                "run-now"
              ],
              "variable": [
                {
                  "key": "schedule_id",
                  "value": "",
                  "description": "sch_\u2026"
                }
              ]
            },
            "description": "Scope: `workforce:admin`.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Preview running a plan",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/workforce/schedules/:schedule_id/run-now/preview",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "workforce",
                "schedules",
                ":schedule_id",
                "run-now",
                "preview"
              ],
              "variable": [
                {
                  "key": "schedule_id",
                  "value": "",
                  "description": "sch_\u2026"
                }
              ]
            },
            "description": "Scope: `workforce:admin`.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "The period summary",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/workforce/summary",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "workforce",
                "summary"
              ],
              "query": [
                {
                  "key": "from",
                  "value": "",
                  "disabled": true,
                  "description": "The start (inclusive)."
                },
                {
                  "key": "to",
                  "value": "",
                  "disabled": true,
                  "description": "The end (inclusive)."
                }
              ]
            },
            "description": "Scope: `workforce:admin`."
          }
        }
      ]
    },
    {
      "name": "Reports",
      "description": "Spend, success rate, the GL journal and CSV exports.",
      "item": [
        {
          "name": "List exports",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/exports",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "exports"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Rows per page."
                },
                {
                  "key": "starting_after",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page after it (next_cursor)."
                },
                {
                  "key": "ending_before",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page before it."
                },
                {
                  "key": "created[gte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[gt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "status",
                  "value": "",
                  "disabled": true,
                  "description": "Only objects in this status."
                }
              ]
            },
            "description": "Scope: `reports:read`."
          }
        },
        {
          "name": "Export to CSV",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": true,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/exports",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "exports"
              ]
            },
            "description": "Built in the background; GET it for a signed url (an hour). Tokens are always masked. Scope: `reports:read`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"type\": \"sends\",\n  \"from\": \"2026-09-01T00:00:00Z\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Retrieve an export",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/exports/:export_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "exports",
                ":export_id"
              ],
              "variable": [
                {
                  "key": "export_id",
                  "value": "",
                  "description": "exp_\u2026"
                }
              ]
            },
            "description": "Scope: `reports:read`."
          }
        },
        {
          "name": "Download an export",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/exports/:export_id/download",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "exports",
                ":export_id",
                "download"
              ],
              "variable": [
                {
                  "key": "export_id",
                  "value": "",
                  "description": "exp_\u2026"
                }
              ],
              "query": [
                {
                  "key": "token",
                  "value": "",
                  "disabled": true,
                  "description": "The signed download token from the export's url."
                }
              ]
            },
            "description": "No key: the signed url is the credential.",
            "auth": {
              "type": "noauth"
            }
          }
        },
        {
          "name": "GL journal",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/reports/journal",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "reports",
                "journal"
              ],
              "query": [
                {
                  "key": "from",
                  "value": "",
                  "disabled": true,
                  "description": "The start (inclusive)."
                },
                {
                  "key": "to",
                  "value": "",
                  "disabled": true,
                  "description": "The end (inclusive)."
                },
                {
                  "key": "cost_center",
                  "value": "",
                  "disabled": true,
                  "description": "cc_\u2026 (Workforce: a department's id, or none for sends booked to none)."
                },
                {
                  "key": "format",
                  "value": "",
                  "disabled": true,
                  "description": "json (default); csv for reports and the Workforce files (the ledger also takes csv-json, the file inside JSON); pdf for a receipt."
                }
              ]
            },
            "description": "Scope: `reports:read`."
          }
        },
        {
          "name": "Spend report",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/reports/spend",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "reports",
                "spend"
              ],
              "query": [
                {
                  "key": "from",
                  "value": "",
                  "disabled": true,
                  "description": "The start (inclusive)."
                },
                {
                  "key": "to",
                  "value": "",
                  "disabled": true,
                  "description": "The end (inclusive)."
                },
                {
                  "key": "currency",
                  "value": "",
                  "disabled": true,
                  "description": "Only this currency."
                },
                {
                  "key": "group_by",
                  "value": "",
                  "disabled": true,
                  "description": "How rows are grouped."
                }
              ]
            },
            "description": "Delivered sends paid from Jusa Credit at face value; group_by day, network, product, program, cost_center or recipient. Scope: `reports:read`."
          }
        },
        {
          "name": "Success-rate report",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/reports/success-rate",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "reports",
                "success-rate"
              ],
              "query": [
                {
                  "key": "from",
                  "value": "",
                  "disabled": true,
                  "description": "The start (inclusive)."
                },
                {
                  "key": "to",
                  "value": "",
                  "disabled": true,
                  "description": "The end (inclusive)."
                },
                {
                  "key": "currency",
                  "value": "",
                  "disabled": true,
                  "description": "Only this currency."
                },
                {
                  "key": "group_by",
                  "value": "",
                  "disabled": true,
                  "description": "How rows are grouped."
                }
              ]
            },
            "description": "delivered \u00f7 (delivered + failed); group_by network or product. Scope: `reports:read`."
          }
        }
      ]
    },
    {
      "name": "Webhooks",
      "description": "Endpoints, events and deliveries.",
      "item": [
        {
          "name": "List events",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/events",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "events"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Rows per page."
                },
                {
                  "key": "starting_after",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page after it (next_cursor)."
                },
                {
                  "key": "ending_before",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page before it."
                },
                {
                  "key": "created[gte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[gt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "type",
                  "value": "",
                  "disabled": true,
                  "description": "Only this type."
                },
                {
                  "key": "object",
                  "value": "",
                  "disabled": true,
                  "description": "Events about this object, e.g. snd_\u2026"
                }
              ]
            },
            "description": "The catch-up feed, 30 days. type takes a family: send.* Scope: `webhooks:manage`."
          }
        },
        {
          "name": "Retrieve an event",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/events/:event_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "events",
                ":event_id"
              ],
              "variable": [
                {
                  "key": "event_id",
                  "value": "",
                  "description": "evt_\u2026"
                }
              ]
            },
            "description": "Scope: `webhooks:manage`."
          }
        },
        {
          "name": "Read a ZESA token from its link",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/send-tokens/:token",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "send-tokens",
                ":token"
              ],
              "variable": [
                {
                  "key": "token",
                  "value": "",
                  "description": "The link's token."
                }
              ]
            },
            "description": "The token_url in a send.delivered event: no key (the url is the credential), once, within 15 minutes.",
            "auth": {
              "type": "noauth"
            }
          }
        },
        {
          "name": "List webhook deliveries",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/webhook-deliveries",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "webhook-deliveries"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Rows per page."
                },
                {
                  "key": "starting_after",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page after it (next_cursor)."
                },
                {
                  "key": "ending_before",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page before it."
                },
                {
                  "key": "created[gte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[gt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "endpoint",
                  "value": "",
                  "disabled": true,
                  "description": "we_\u2026"
                },
                {
                  "key": "event",
                  "value": "",
                  "disabled": true,
                  "description": "evt_\u2026"
                },
                {
                  "key": "type",
                  "value": "",
                  "disabled": true,
                  "description": "Only this type."
                },
                {
                  "key": "status",
                  "value": "",
                  "disabled": true,
                  "description": "Only objects in this status."
                }
              ]
            },
            "description": "Scope: `webhooks:manage`."
          }
        },
        {
          "name": "Retrieve a delivery",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/webhook-deliveries/:delivery_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "webhook-deliveries",
                ":delivery_id"
              ],
              "variable": [
                {
                  "key": "delivery_id",
                  "value": "",
                  "description": "whd_\u2026"
                }
              ]
            },
            "description": "Scope: `webhooks:manage`."
          }
        },
        {
          "name": "Redeliver",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": true,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/webhook-deliveries/:delivery_id/redeliver",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "webhook-deliveries",
                ":delivery_id",
                "redeliver"
              ],
              "variable": [
                {
                  "key": "delivery_id",
                  "value": "",
                  "description": "whd_\u2026"
                }
              ]
            },
            "description": "Scope: `webhooks:manage`."
          }
        },
        {
          "name": "List webhook endpoints",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/webhook-endpoints",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "webhook-endpoints"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "disabled": true,
                  "description": "Rows per page."
                },
                {
                  "key": "starting_after",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page after it (next_cursor)."
                },
                {
                  "key": "ending_before",
                  "value": "",
                  "disabled": true,
                  "description": "An object id: the page before it."
                },
                {
                  "key": "created[gte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lte]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[gt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "created[lt]",
                  "value": "",
                  "disabled": true,
                  "description": "Unix seconds or ISO 8601."
                },
                {
                  "key": "status",
                  "value": "",
                  "disabled": true,
                  "description": "Only objects in this status."
                },
                {
                  "key": "metadata[key]",
                  "value": "",
                  "disabled": true,
                  "description": "metadata[<key>]=<value>: an exact match on one key."
                }
              ]
            },
            "description": "Scope: `webhooks:manage`."
          }
        },
        {
          "name": "Add a webhook endpoint",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": true,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/webhook-endpoints",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "webhook-endpoints"
              ]
            },
            "description": "https only, public addresses only. The signing `secret` is shown here. Up to 16 per mode. Scope: `webhooks:manage`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"https://example.com/jusa/webhooks\",\n  \"enabled_events\": [\n    \"send.*\",\n    \"reward.*\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Retrieve a webhook endpoint",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/webhook-endpoints/:endpoint_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "webhook-endpoints",
                ":endpoint_id"
              ],
              "variable": [
                {
                  "key": "endpoint_id",
                  "value": "",
                  "description": "we_\u2026"
                }
              ]
            },
            "description": "Scope: `webhooks:manage`."
          }
        },
        {
          "name": "Update a webhook endpoint",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/webhook-endpoints/:endpoint_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "webhook-endpoints",
                ":endpoint_id"
              ],
              "variable": [
                {
                  "key": "endpoint_id",
                  "value": "",
                  "description": "we_\u2026"
                }
              ]
            },
            "description": "Scope: `webhooks:manage`.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Delete a webhook endpoint",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/webhook-endpoints/:endpoint_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "webhook-endpoints",
                ":endpoint_id"
              ],
              "variable": [
                {
                  "key": "endpoint_id",
                  "value": "",
                  "description": "we_\u2026"
                }
              ]
            },
            "description": "Scope: `webhooks:manage`."
          }
        },
        {
          "name": "Replay events",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": true,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/webhook-endpoints/:endpoint_id/replay",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "webhook-endpoints",
                ":endpoint_id",
                "replay"
              ],
              "variable": [
                {
                  "key": "endpoint_id",
                  "value": "",
                  "description": "we_\u2026"
                }
              ]
            },
            "description": "Every stored event in a time range, again. Scope: `webhooks:manage`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"from\": 1\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Roll the signing secret",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": true,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/webhook-endpoints/:endpoint_id/roll-secret",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "webhook-endpoints",
                ":endpoint_id",
                "roll-secret"
              ],
              "variable": [
                {
                  "key": "endpoint_id",
                  "value": "",
                  "description": "we_\u2026"
                }
              ]
            },
            "description": "The old secret signs alongside for the grace (two v1= values). Scope: `webhooks:manage`.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Send a test event",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": true,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/webhook-endpoints/:endpoint_id/test",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "webhook-endpoints",
                ":endpoint_id",
                "test"
              ],
              "variable": [
                {
                  "key": "endpoint_id",
                  "value": "",
                  "description": "we_\u2026"
                }
              ]
            },
            "description": "Scope: `webhooks:manage`.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        }
      ]
    },
    {
      "name": "Test mode",
      "description": "Helpers for test keys only.",
      "item": [
        {
          "name": "Approve (test mode)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": false,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/test/approvals/:approval_id/approve",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "test",
                "approvals",
                ":approval_id",
                "approve"
              ],
              "variable": [
                {
                  "key": "approval_id",
                  "value": "",
                  "description": "apr_\u2026"
                }
              ]
            },
            "description": "Moves money: an `Idempotency-Key` is required. Test keys only: a live key gets `403 test_mode_only`."
          }
        },
        {
          "name": "Reject (test mode)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": true,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/test/approvals/:approval_id/reject",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "test",
                "approvals",
                ":approval_id",
                "reject"
              ],
              "variable": [
                {
                  "key": "approval_id",
                  "value": "",
                  "description": "apr_\u2026"
                }
              ]
            },
            "description": "Test keys only: a live key gets `403 test_mode_only`."
          }
        },
        {
          "name": "Pay a test checkout",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/test/checkout-sessions/:session_id/pay",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "test",
                "checkout-sessions",
                ":session_id",
                "pay"
              ],
              "variable": [
                {
                  "key": "session_id",
                  "value": "",
                  "description": "cs_\u2026"
                }
              ]
            },
            "description": "Scope: `sends:write`. Test keys only: a live key gets `403 test_mode_only`.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Play staff on a held test checkout",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/test/checkout-sessions/:session_id/review",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "test",
                "checkout-sessions",
                ":session_id",
                "review"
              ],
              "variable": [
                {
                  "key": "session_id",
                  "value": "",
                  "description": "cs_\u2026"
                }
              ]
            },
            "description": "Scope: `sends:write`. Test keys only: a live key gets `403 test_mode_only`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"action\": \"send\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Add test Jusa Credit",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": true,
                "description": "Up to 255 characters. A replay returns the first answer; a different body is 422 idempotency_mismatch; one still running is 409 idempotency_in_progress."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/test/credit",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "test",
                "credit"
              ]
            },
            "description": "Scope: `credit:topup`. Test keys only: a live key gets `403 test_mode_only`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"currency\": \"USD\",\n  \"amount\": \"500.00\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Fire a sample event",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/test/events/trigger",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "test",
                "events",
                "trigger"
              ]
            },
            "description": "Scope: `webhooks:manage`. Test keys only: a live key gets `403 test_mode_only`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"type\": \"string\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Wipe test mode",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/test/reset",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "test",
                "reset"
              ]
            },
            "description": "Sends, rewards, batches, ledger and events go; keys, endpoints and recipients stay; credit is reset. Scope: `account:manage`. Test keys only: a live key gets `403 test_mode_only`."
          }
        },
        {
          "name": "Claim a link, skipping the code",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/test/reward-links/:link_id/claim",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "test",
                "reward-links",
                ":link_id",
                "claim"
              ],
              "variable": [
                {
                  "key": "link_id",
                  "value": "",
                  "description": "lnk_\u2026"
                }
              ]
            },
            "description": "Scope: `rewards:write`. Test keys only: a live key gets `403 test_mode_only`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"phone\": \"0772123456\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Move a test send on",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/test/sends/:send_id/advance",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "test",
                "sends",
                ":send_id",
                "advance"
              ],
              "variable": [
                {
                  "key": "send_id",
                  "value": "",
                  "description": "snd_\u2026 (or the bare hex of a legacy order)."
                }
              ]
            },
            "description": "Without `to`: the next scripted step now. A move a live send could not make is 409. Scope: `sends:write`. Test keys only: a live key gets `403 test_mode_only`.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Take ZESA down or up (test mode)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/test/zesa/availability",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "test",
                "zesa",
                "availability"
              ]
            },
            "description": "Scope: `sends:write`. Test keys only: a live key gets `403 test_mode_only`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"state\": \"up\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        }
      ]
    },
    {
      "name": "Utility",
      "description": "Health.",
      "item": [
        {
          "name": "Check the API is up",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/health",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "health"
              ]
            },
            "description": "No key needed.",
            "auth": {
              "type": "noauth"
            }
          }
        }
      ]
    }
  ]
}