> ## Documentation Index
> Fetch the complete documentation index at: https://docs.rotascale.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Grants API

> Issue, preview, approve, delegate, and template.

## Issue

```http theme={"system"}
POST /v1/grants
```

```json theme={"system"}
{
  "agent_id": "agt_01KZXYBQZX",
  "principal_type": "human",
  "principal_id": "sarah.bennett@acme.example",
  "scope": { "tool": ["payments.settle"] },
  "budget_amount_minor": 2500000,
  "budget_currency": "EUR",
  "budget_count": 40,
  "ttl_hours": 168,
  "conditions": { "clean_context": true },
  "policy": "amount_minor <= 100000 or approver is not null",
  "delegation_policy": "attenuating",
  "audience": "payments-rail"
}
```

Returns `201` with the grant. `principal_type` is one of `human`, `team` or
`service`; `ttl_hours` defaults to 24 and `delegation_policy` defaults to
`none`.

## Preview

```http theme={"system"}
POST /v1/grants/preview
```

Same body, plus a sample action. Returns what such a grant **would** decide
without creating one. Use it to check a policy expression before it exists as an
authority.

## Approve

```http theme={"system"}
GET  /v1/grants/pending
POST /v1/grants/{grant_id}/approve
```

The approving identity is recorded and is where the accountability chain
terminates.

## Delegate

```http theme={"system"}
POST /v1/grants/{grant_id}/delegate
```

The parent must have `delegation_policy: "attenuating"`. Every field must be
narrower than or equal to the parent, on scope, window, budget, conditions and
enforcement mode. A request that widens any of them fails; the child is not
created. See [Delegation](/concepts/delegation).

## Families

```http theme={"system"}
POST /v1/grant-families
GET  /v1/grant-families
POST /v1/grant-families/{family_id}/instantiate
```

A family is a template that gets reviewed once and instantiated many times, so
fifty agents share one reviewed shape rather than fifty grants that have quietly
drifted apart.
