All pages

Developer docs

Share a payment record

View as Markdown

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.

POSThttps://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

NameInTypeRequiredDescription
uetrpathstring (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}$)YesThe transfer's UETR.

Request body

FieldTypeRequiredDescription
show_feesbooleanNoShow bank fees on the record. Leave out to keep the current setting.
show_commentarybooleanNoShow uetr.ai's plain-language explanations on the record. Leave out to keep the current setting.

Response

FieldTypeRequiredDescription
statusstringYesNothing has taken effect yet: the account owner must confirm the request.
requestobjectYes
request.idstring (uuid)Yes
request.kindteam_invite, record_share, webhook_endpointYesteam_invite: an invitation to the team. record_share: a payment record link. webhook_endpoint: a webhook endpoint that receives status changes.
request.statuspending, confirmed, declined, expiredYespending: 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_atstringYes
request.expires_atstringYes
request.decided_atstring or nullYes
request.invite_emailstring or nullYesFor a team invite: the address to invite.
request.uetrstring or nullYesFor a record share: the transfer's UETR.
request.record_urlstring or nullYesFor a confirmed record share: the payment record link, while the record still has that link. Null otherwise.
request.endpoint_urlstring or nullYesFor a webhook endpoint: its host and a masked path. Null otherwise.
detailstringYesPlain 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: