---
title: "What has happened to my budgets"
method: GET
path: "/api/mandate/events"
tags: ["mandates"]
---

# What has happened to my budgets

`GET /api/mandate/events`

## Request

- Base URL: `https://api.anygas.xyz/svc`
- URL: `https://api.anygas.xyz/svc/api/mandate/events`
- Auth: none declared

A principal who granted a budget cannot otherwise learn that it is nearly spent, or that a large payment is waiting on their approval, without polling every mandate individually. Emits `spend`, `nearly-exhausted`, `exhausted`, `approval-required` and `revoked`. Pass the returned `cursor` back as `since` for only what is new. DELIBERATELY A PULL FEED, NOT A WEBHOOK: a mandate is created by an untrusted caller, so letting it name a callback URL would hand anyone a request primitive originating inside a host that holds signing keys. The convenience of a push is not worth that, and the response says so.

## Query parameters

- `principal` string
- `since` string
- `limit` integer

## Response `200`

events plus a cursor

- object

---

[API](https://skmtc.dev/anygas/apis/robyn-anygas-api.md) · [All operations](https://skmtc.dev/anygas/apis/robyn-anygas-api/llms.txt) · [OpenAPI document](https://skmtc.dev/anygas/apis/robyn-anygas-api/revisions/9b7498be8304?raw)
