---
title: "Issue a payment grant granting bounded spending authority to an agent"
method: POST
path: "/payments/grants"
tags: ["Setup · Payment grants"]
---

# Issue a payment grant granting bounded spending authority to an agent

`POST /payments/grants`

## Request

- Base URL: `https://api.ziggsai.com`
- URL: `https://api.ziggsai.com/payments/grants`
- Auth: HTTP bearer

## Request body

- IssueGrantDto
  - `holderId` string, required: Who may spend under this grant: usually the agent id you are funding.
  - `caveats` CaveatDto[], required: The limits the grant carries. An empty array is an unrestricted grant on this wallet, so state the ceilings you actually want.
    - `type` 'max_amount' | 'daily_budget' | 'allowed_recipients' | 'expires_at', required: `max_amount` (points, hundredths, per transfer), `daily_budget` (points per rolling day), `allowed_recipients` (ids the holder may pay), or `expires_at` (ISO-8601; the earliest expiry always wins).
    - `value` object, required: Shape follows `type`: a number of points (hundredths) for `max_amount` / `daily_budget`, an array of ids for `allowed_recipients`, an ISO-8601 string for `expires_at`.

## Response `201`

Created

- GrantIssueResponseSchema
  - `grant` GrantViewSchema, required
    - `grantId` string, required
    - `issuerId` string, required: Principal that issued the grant (root owner or delegator).
    - `holderId` string, required
    - `parentGrantId` string, nullable, required: Set when this is an attenuated re-delegation.
    - `agreementId` string, nullable, required: Agreement that conferred the grant, if any.
    - `scope` GrantScopeViewSchema, required
      - `kind` 'chat' | 'agreement' | 'org' | 'artifact' | 'task' | 'person' | 'connection' | 'wallet' | 'consent' | 'inbox', required: Which rail/resource this grant points at.
      - `id` string, required: Id of the scoped resource.
      - `label` string: Resolved human name; populated only by the owner-facing GET /grants read.
    - `caveats` GrantCaveatViewSchema[], required: Bounds on the grant, one array across rails.
      - `type` string, required: Caveat name (allowed_actions, max_amount, temporal, …).
      - `value` object, required: Shape depends on type. max_amount and daily_budget are a number of hundredths of a point.
    - `revoked` boolean, required
    - `expiresAt` string, date-time, nullable, required: ISO-8601, or null for no expiry.
    - `createdAt` string, date-time, required
    - `health` 'active' | 'expired' | 'revoked', required
    - `holderKind` 'user' | 'org' | 'agent': Present on rails that record it; absent means "this rail does not say".
    - `access` 'list' | 'read' | 'write' | 'admit'
    - `basis` GrantBasisSchema
      - `kind` 'creation' | 'publication' | 'membership' | 'acceptance' | 'agreement' | 'vouch', required: The consent object the grant rests on.
      - `id` string, nullable, required: Id of the consent object, if any.

---

[API](https://skmtc.dev/ziggsai/apis/ziggs-developer-api.md) · [All operations](https://skmtc.dev/ziggsai/apis/ziggs-developer-api/llms.txt) · [OpenAPI document](https://skmtc.dev/ziggsai/apis/ziggs-developer-api/revisions/eda79030e072?raw)
