> 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`.

# Share a payment record

Ask for the payment record link of a paid transfer, to share its bank reports. The account owner must confirm the request on the website before the link is shared: until then the caller does not receive it. The owner sees the request on the website and is normally notified by email. Once confirmed, list_pending_access returns the link. Asking again for the same transfer with the same settings returns the open request; with different settings, the new request replaces it. Only the account owner's API keys and connected apps can ask.

`POST https://uetr.ai/api/v1/transfers/{uetr}/record-share`

- MCP tool: `share_payment_record`
- Access: a key or connection with read and write access
- Only the account owner's keys and connections

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `uetr` | path | string (matching `^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89aAbB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$`) | Yes | The transfer's UETR. |

## Request body

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `show_fees` | boolean | No | Show bank fees on the record. Leave out to keep the current setting. |
| `show_commentary` | boolean | No | Show uetr.ai's plain-language explanations on the record. Leave out to keep the current setting. |

## Response

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `status` | string | Yes | Nothing has taken effect yet: the account owner must confirm the request. |
| `request` | object | Yes |  |
| `request.id` | string (uuid) | Yes |  |
| `request.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. |
| `request.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. |
| `request.created_at` | string | Yes |  |
| `request.expires_at` | string | Yes |  |
| `request.decided_at` | string or null | Yes |  |
| `request.invite_email` | string or null | Yes | For a team invite: the address to invite. |
| `request.uetr` | string or null | Yes | For a record share: the transfer's UETR. |
| `request.record_url` | string or null | Yes | For a confirmed record share: the payment record link, while the record still has that link. Null otherwise. |
| `request.endpoint_url` | string or null | Yes | For a webhook endpoint: its host and a masked path. Null otherwise. |
| `detail` | string | Yes | Plain English to pass on to the person behind the request. |

## Example

```sh
curl -X POST "https://uetr.ai/api/v1/transfers/eb6305c9-1f7f-49de-aed0-16487c27b42d/record-share" \
  -H "Authorization: Bearer $UETR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
```

The answer:

```json
{
  "status": "pending_owner_confirmation",
  "request": {
    "id": "1d4f7a2c-5b8e-4c1f-a3d6-9e2b5c8f1a4d",
    "kind": "record_share",
    "status": "pending",
    "created_at": "2026-10-14T09:25:00.000Z",
    "expires_at": "2026-10-21T09:25:00.000Z",
    "decided_at": null,
    "invite_email": null,
    "uetr": "eb6305c9-1f7f-49de-aed0-16487c27b42d",
    "record_url": null,
    "endpoint_url": null
  },
  "detail": "The account owner must confirm sharing this payment record on the website before it takes effect. They have been notified by email."
}
```

## Refusals

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

- [`read_only_credential`](/docs/api/errors#read_only_credential) (403): Read-only key or connection.
- [`machine_writes_disabled`](/docs/api/errors#machine_writes_disabled) (503): Changes are switched off.
- [`request_too_large`](/docs/api/errors#request_too_large) (413): Request too large.
- [`not_found`](/docs/api/errors#not_found) (404): Not found.
- [`not_permitted`](/docs/api/errors#not_permitted) (403): Not permitted.
- [`record_not_available`](/docs/api/errors#record_not_available) (409): No payment record.
- [`demo_transfer`](/docs/api/errors#demo_transfer) (409): The demo transfer cannot be changed.