> The full uetr.ai documentation index is at https://uetr.ai/llms.txt, and every page under https://uetr.ai/docs/api is also Markdown at its address plus `.md`.

# List requests waiting for the owner

List the team invitations, payment record shares and webhook endpoints that API keys and connected apps asked for on this account, newest first, with whether the account owner confirmed, declined or has not answered yet. A confirmed record share carries the record link while it still works. Only the account owner's API keys and connected apps can list them. Reading changes nothing.

`GET https://uetr.ai/api/v1/pending-access`

- MCP tool: `list_pending_access`
- Access: any key or connection
- Only the account owner's keys and connections

## Response

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `requests` | array of object | Yes |  |
| `requests[].id` | string (uuid) | Yes |  |
| `requests[].kind` | `team_invite`, `record_share`, `webhook_endpoint` | Yes | team_invite: an invitation to the team. record_share: a payment record link. webhook_endpoint: a webhook endpoint that receives status changes. |
| `requests[].status` | `pending`, `confirmed`, `declined`, `expired` | Yes | pending: waiting for the account owner. confirmed: the owner approved it and it took effect. declined: the owner refused it. expired: nobody answered within seven days, or a later request for the same transfer with different settings replaced it. |
| `requests[].created_at` | string | Yes |  |
| `requests[].expires_at` | string | Yes |  |
| `requests[].decided_at` | string or null | Yes |  |
| `requests[].invite_email` | string or null | Yes | For a team invite: the address to invite. |
| `requests[].uetr` | string or null | Yes | For a record share: the transfer's UETR. |
| `requests[].record_url` | string or null | Yes | For a confirmed record share: the payment record link, while the record still has that link. Null otherwise. |
| `requests[].endpoint_url` | string or null | Yes | For a webhook endpoint: its host and a masked path. Null otherwise. |

## Example

```sh
curl -X GET "https://uetr.ai/api/v1/pending-access" \
  -H "Authorization: Bearer $UETR_API_KEY"
```

The answer:

```json
{
  "requests": [
    {
      "id": "4c7e1a3b-8d2f-4b6e-a9c5-3f6b9e2d5a8c",
      "kind": "webhook_endpoint",
      "status": "pending",
      "created_at": "2026-10-14T09:35:00.000Z",
      "expires_at": "2026-10-21T09:35:00.000Z",
      "decided_at": null,
      "invite_email": null,
      "uetr": null,
      "record_url": null,
      "endpoint_url": "hooks.slack.com/services/••••"
    },
    {
      "id": "2e5a8d1b-6c9f-4d2a-b4e7-0f3c6d9a2b5e",
      "kind": "team_invite",
      "status": "pending",
      "created_at": "2026-10-14T09:30:00.000Z",
      "expires_at": "2026-10-21T09:30:00.000Z",
      "decided_at": null,
      "invite_email": "teammate@example.com",
      "uetr": null,
      "record_url": null,
      "endpoint_url": null
    },
    {
      "id": "1d4f7a2c-5b8e-4c1f-a3d6-9e2b5c8f1a4d",
      "kind": "record_share",
      "status": "confirmed",
      "created_at": "2026-10-14T09:25:00.000Z",
      "expires_at": "2026-10-21T09:25:00.000Z",
      "decided_at": "2026-10-14T09:41:00.000Z",
      "invite_email": null,
      "uetr": "eb6305c9-1f7f-49de-aed0-16487c27b42d",
      "record_url": "https://uetr.ai/p/0f1e2d3c4b5a69788796a5b4c3d2e1f0",
      "endpoint_url": null
    }
  ]
}
```

## Refusals

Besides the [access refusals](/docs/api/errors#access-refusals) every call can meet, this call can answer:

- [`not_permitted`](/docs/api/errors#not_permitted) (403): Not permitted.