Developer docs
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
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:
{
"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 every call can meet, this call can answer:
read_only_credential(403): Read-only key or connection.machine_writes_disabled(503): Changes are switched off.request_too_large(413): Request too large.not_found(404): Not found.not_permitted(403): Not permitted.record_not_available(409): No payment record.demo_transfer(409): The demo transfer cannot be changed.