---
title: "MCP tools"
description: "Every Fluveo MCP tool, and what an agent key may do on each API operation."
url: https://docs.fluveo.com/agents/mcp/tools/
---

> Index of every page: https://docs.fluveo.com/llms.txt. Integrating Fluveo? Read https://docs.fluveo.com/agents/integrate.md first.

> Too long? This page with code in one language only: https://docs.fluveo.com/agents/mcp/tools.curl.md (cURL), https://docs.fluveo.com/agents/mcp/tools.node.md (Node.js), https://docs.fluveo.com/agents/mcp/tools.python.md (Python), https://docs.fluveo.com/agents/mcp/tools.php.md (PHP).

# MCP tools

Every Fluveo MCP tool, and what an agent key may do on each API operation.

Fluveo MCP lists the tools below, and an agent reaches the API operations further down through them. A tool call sends the tool's `name` and an `arguments` object that matches its input. [Fluveo MCP](https://docs.fluveo.com/agents/mcp.md) shows how to add the server to a client, and [Authentication](https://docs.fluveo.com/agents/mcp/authentication.md) covers agent keys.

## Tools

The server lists its tools by name, in this order. A key sees only the tools its permissions allow, so a key without **Read** on **Account** gets no `get_account_info` in its list.

| Tool | Group | What it does | Key needs |
| --- | --- | --- | --- |
| [`cancel_payment`](https://docs.fluveo.com/agents/mcp/tools.md#cancel-payment) | Store data | Cancels a payment that is not paid or captured yet, such as one in `requires_capture`, and releases the amount held on the buyer's card. It writes. Its operation needs approval for an agent key: a person approves each cancellation in the Dashboard, within 15 minutes. | [`rak_payment_intent_write`](https://docs.fluveo.com/permissions.md#payment_intent) |
| [`capture_payment`](https://docs.fluveo.com/agents/mcp/tools.md#capture-payment) | Store data | Takes the amount a payment holds on the buyer's card, so the store is paid: all of it, or `amount_to_capture`, and the rest of the hold is released. It works on a PaymentIntent in `requires_capture`, one made with `capture_method` `manual`. It writes. Its operation needs approval for an agent key: a person approves each capture in the Dashboard, within 15 minutes. | [`rak_payment_intent_write`](https://docs.fluveo.com/permissions.md#payment_intent) |
| [`create_checkout_session`](https://docs.fluveo.com/agents/mcp/tools.md#create-checkout-session) | Checkout | Creates a Fluveo payment page for one purchase. The buyer opens the session's `url` and pays there with a method the store accepts, and types any card data on that page, never in the call. It writes. Its operation is allowed for an agent key, so it runs at once, with no approval. | [`rak_checkout_session_write`](https://docs.fluveo.com/permissions.md#checkout_session) |
| [`create_customer`](https://docs.fluveo.com/agents/mcp/tools.md#create-customer) | Customers | Creates a customer of the store, to keep a buyer's contact details and link their payments, checkout sessions and refunds. It writes. Its operation is allowed for an agent key, so it runs at once, with no approval. | [`rak_customer_write`](https://docs.fluveo.com/permissions.md#customer) |
| [`create_payment_link`](https://docs.fluveo.com/agents/mcp/tools.md#create-payment-link) | Checkout | Creates a link anyone can open to pay for the same items on a Fluveo payment page, as many times as the link stays active. It writes. Its operation is allowed for an agent key, so it runs at once, with no approval. | [`rak_payment_links_write`](https://docs.fluveo.com/permissions.md#payment_links) |
| [`create_refund`](https://docs.fluveo.com/agents/mcp/tools.md#create-refund) | Store data | Gives the buyer back all or part of a payment that succeeded, by its PaymentIntent or its charge. It writes and moves money, so a person approves each refund in the Dashboard before it runs, within 15 minutes. Before it asks for that approval, it reads the payment's charges with the agent's key. When that read answers, it refuses at once, with no refund sent and no approval made, if the payment has nothing captured, if the amount is above what is left to refund, or if no amount is given and nothing is left. A read that fails, or that the key may not make, refuses nothing. That read only helps the agent: the API decides every refund. A Boleto payment cannot be refunded, and the API answers an error. | [`rak_charge_write`](https://docs.fluveo.com/permissions.md#charge) |
| [`fetch_fluveo_doc`](https://docs.fluveo.com/agents/mcp/tools.md#fetch-fluveo-doc) | Docs | Returns one page of these docs as Markdown, by its path or by its address on the docs site. | Nothing |
| [`fluveo_api_details`](https://docs.fluveo.com/agents/mcp/tools.md#fluveo-api-details) | API | Describes one API operation by the id that `fluveo_api_search` returned. It reads the server's own copy of the API contract and calls no API. | Nothing |
| [`fluveo_api_read`](https://docs.fluveo.com/agents/mcp/tools.md#fluveo-api-read) | API | Runs one `GET` operation of the API with the agent's own key and returns the store's data. It runs only a `GET` operation whose `available` is true. | Nothing |
| [`fluveo_api_search`](https://docs.fluveo.com/agents/mcp/tools.md#fluveo-api-search) | API | Finds API operations from what the agent wants to do and the resource it acts on. It reads the server's own copy of the API contract and calls no API. | Nothing |
| [`fluveo_api_write`](https://docs.fluveo.com/agents/mcp/tools.md#fluveo-api-write) | API | Runs one `POST` or `DELETE` operation of the API with the agent's own key, such as creating a customer or a refund. It runs only an operation whose `available` is true. An operation that needs approval runs only after a person approves it in the Dashboard. | Nothing |
| [`get_account_info`](https://docs.fluveo.com/agents/mcp/tools.md#get-account-info) | Account | Returns the store behind the key and what the key may do on each resource. Call it first, to know which store the agent acts on. | [`rak_account_read`](https://docs.fluveo.com/permissions.md#account) |
| [`get_balance`](https://docs.fluveo.com/agents/mcp/tools.md#get-balance) | Store data | Returns the store's balance in test mode: what is available to pay out and what is still pending, per currency. It only reads. | [`rak_balance_read`](https://docs.fluveo.com/permissions.md#balance) |
| [`list_customers`](https://docs.fluveo.com/agents/mcp/tools.md#list-customers) | Customers | Lists the store's customers, newest first, at most 25 per call. It only reads. | [`rak_customer_read`](https://docs.fluveo.com/permissions.md#customer) |
| [`list_disputes`](https://docs.fluveo.com/agents/mcp/tools.md#list-disputes) | Store data | Lists the store's disputes, newest first, at most 25 per call. A dispute is a buyer contesting a payment with their bank. It only reads. | [`rak_dispute_read`](https://docs.fluveo.com/permissions.md#dispute) |
| [`list_events`](https://docs.fluveo.com/agents/mcp/tools.md#list-events) | Store data | Lists what happened on the store in the last 30 days, newest first, at most 25 per call. Each event names its type, such as `charge.succeeded`, and carries the object as it was then. It only reads. | [`rak_event_read`](https://docs.fluveo.com/permissions.md#event) |
| [`list_payments`](https://docs.fluveo.com/agents/mcp/tools.md#list-payments) | Store data | Lists the store's payments, newest first, at most 25 per call. Each is a PaymentIntent, one per payment a buyer makes or tries, with its amount, currency, status and payment method. It only reads. | [`rak_payment_intent_read`](https://docs.fluveo.com/permissions.md#payment_intent) |
| [`list_refunds`](https://docs.fluveo.com/agents/mcp/tools.md#list-refunds) | Store data | Lists the store's refunds, newest first, at most 25 per call, each with its amount, currency, status and the payment it belongs to. It only reads. | [`rak_charge_read`](https://docs.fluveo.com/permissions.md#charge) |
| [`list_webhook_endpoints`](https://docs.fluveo.com/agents/mcp/tools.md#list-webhook-endpoints) | Store data | Lists the URLs the store sends its events to, with the event types each receives and whether it is enabled, at most 25 per call. It only reads. | [`rak_webhook_read`](https://docs.fluveo.com/permissions.md#webhook) |
| [`retrieve_customer`](https://docs.fluveo.com/agents/mcp/tools.md#retrieve-customer) | Customers | Returns one customer by its id, with its name, email, phone, address and metadata. It only reads. | [`rak_customer_read`](https://docs.fluveo.com/permissions.md#customer) |
| [`retrieve_dispute`](https://docs.fluveo.com/agents/mcp/tools.md#retrieve-dispute) | Store data | Returns one dispute by its id: its amount, reason and status, the charge it contests, the deadline for evidence and the evidence sent so far. It only reads. | [`rak_dispute_read`](https://docs.fluveo.com/permissions.md#dispute) |
| [`retrieve_event`](https://docs.fluveo.com/agents/mcp/tools.md#retrieve-event) | Store data | Returns one event by its id: its type, when it happened, and the object as it was then, with the fields that changed in `previous_attributes`. It only reads. | [`rak_event_read`](https://docs.fluveo.com/permissions.md#event) |
| [`retrieve_payment`](https://docs.fluveo.com/agents/mcp/tools.md#retrieve-payment) | Store data | Returns one payment by its PaymentIntent id: its amount, the amount still held and the amount received, its currency, status, customer, payment method, latest charge and metadata. It only reads. | [`rak_payment_intent_read`](https://docs.fluveo.com/permissions.md#payment_intent) |
| [`retrieve_refund`](https://docs.fluveo.com/agents/mcp/tools.md#retrieve-refund) | Store data | Returns one refund by its id: its amount, currency, status, reason and the payment it belongs to. It only reads. | [`rak_charge_read`](https://docs.fluveo.com/permissions.md#charge) |
| [`retrieve_webhook_endpoint`](https://docs.fluveo.com/agents/mcp/tools.md#retrieve-webhook-endpoint) | Store data | Returns one webhook endpoint by its id: its URL, the event types it receives and whether it is enabled. It only reads. | [`rak_webhook_read`](https://docs.fluveo.com/permissions.md#webhook) |
| [`search_fluveo_docs`](https://docs.fluveo.com/agents/mcp/tools.md#search-fluveo-docs) | Docs | Finds the pages of these docs, guides and API reference both, that best answer a question. | Nothing |
| [`search_payments`](https://docs.fluveo.com/agents/mcp/tools.md#search-payments) | Store data | Finds the store's payments that match a query, newest first, at most 25 per call. A query joins clauses of `field:'value'` with `AND`, or with `OR`, never both. The fields are `status`, `amount`, `currency`, `customer`, `created` and `metadata['key']`, and `amount` and `created` also take `>`, `>=`, `<` and `<=`. It only reads. | [`rak_payment_intent_read`](https://docs.fluveo.com/permissions.md#payment_intent) |
| [`update_customer`](https://docs.fluveo.com/agents/mcp/tools.md#update-customer) | Customers | Changes the fields given of one customer and keeps the rest. It writes. Its operation is allowed for an agent key, so it runs at once, with no approval. | [`rak_customer_write`](https://docs.fluveo.com/permissions.md#customer) |

### cancel_payment

Cancels a payment that is not paid or captured yet, such as one in `requires_capture`, and releases the amount held on the buyer's card. It writes. Its operation needs approval for an agent key: a person approves each cancellation in the Dashboard, within 15 minutes.

**Input**

- `payment_intent` (string, required): The PaymentIntent's id, `pi_...`, from `list_payments` or `search_payments`.
- `cancellation_reason` (string, optional): Why it is cancelled, kept on the PaymentIntent: `duplicate`, `fraudulent`, `requested_by_customer` or `abandoned`.
- `human_confirmation` (object, optional): Leave it out on the first call. When an answer gives `human_confirmation`, send it back unchanged on the next call, with the same arguments. It holds one field, `approval_token`.

*Call*

```json
{
  "name": "cancel_payment",
  "arguments": {
    "payment_intent": "pi_...",
    "cancellation_reason": "requested_by_customer"
  }
}
```

It answers like `fluveo_api_write`. The first call cancels nothing: the answer gives `approval` with `status` `required`, the `approval_request` id, the `approval_url` of the Dashboard and `expires_at`, then `human_confirmation` and an `instruction`. Once a person approves, call `cancel_payment` again with the same arguments and that `human_confirmation`: it answers the `operation_id` `post-v1-payment-intents-intent-cancel`, the API's HTTP `status` and `request_id`, and the PaymentIntent, now `canceled`, inside `untrusted_data`. When the person denies it, nothing is cancelled.

### capture_payment

Takes the amount a payment holds on the buyer's card, so the store is paid: all of it, or `amount_to_capture`, and the rest of the hold is released. It works on a PaymentIntent in `requires_capture`, one made with `capture_method` `manual`. It writes. Its operation needs approval for an agent key: a person approves each capture in the Dashboard, within 15 minutes.

**Input**

- `payment_intent` (string, required): The PaymentIntent's id, `pi_...`, in status `requires_capture`, from `list_payments` or `search_payments`.
- `amount_to_capture` (integer, optional): How much to capture, a whole number in the currency's smallest unit, so 2000 is 20.00, at most the amount the payment holds. Left out, all of it.
- `human_confirmation` (object, optional): Leave it out on the first call. When an answer gives `human_confirmation`, send it back unchanged on the next call, with the same arguments. It holds one field, `approval_token`.

*Call*

```json
{
  "name": "capture_payment",
  "arguments": {
    "payment_intent": "pi_...",
    "amount_to_capture": 2000
  }
}
```

It answers like `fluveo_api_write`. The first call captures nothing: the answer gives `approval` with `status` `required`, the `approval_request` id, the `approval_url` of the Dashboard and `expires_at`, then `human_confirmation` and an `instruction`. Once a person approves, call `capture_payment` again with the same arguments and that `human_confirmation`: it answers the `operation_id` `post-v1-payment-intents-intent-capture`, the API's HTTP `status` and `request_id`, and the PaymentIntent, now `succeeded`, inside `untrusted_data`. A further retry answers the same capture, never a second one. When the person denies it, nothing is captured and the payment stays in `requires_capture`.

### create_checkout_session

Creates a Fluveo payment page for one purchase. The buyer opens the session's `url` and pays there with a method the store accepts, and types any card data on that page, never in the call. It writes. Its operation is allowed for an agent key, so it runs at once, with no approval.

**Input**

- `mode` (string, optional): `payment` takes a payment now, and `setup` saves a payment method for later without charging. Left out, it is `payment`.
- `line_items` (array, optional): What the buyer pays for, in mode `payment`: a list of `{quantity, price}`, with a price id, or `{quantity, price_data: {currency, unit_amount, product_data: {name}}}`. `unit_amount` is a whole number in the currency's smallest unit, so 2500 is 25.00.
- `success_url` (string, optional): Where the page sends the buyer after paying. `{CHECKOUT_SESSION_ID}` in it is replaced by the session's id.
- `cancel_url` (string, optional): Where the page sends a buyer who goes back without paying.
- `customer` (string, optional): A customer id of the store, `cus_...`. Its email fills the page.
- `customer_email` (string, optional): The buyer's email, filled on the page, when no `customer` is given.
- `customer_creation` (string, optional): `always` makes a customer from what the buyer enters, and `if_required` makes one only when needed.
- `human_confirmation` (object, optional): Leave it out on the first call. When an answer gives `human_confirmation`, send it back unchanged on the next call, with the same arguments. It holds one field, `approval_token`.

*Call*

```json
{
  "name": "create_checkout_session",
  "arguments": {
    "line_items": [
      {
        "quantity": 1,
        "price_data": {
          "currency": "usd",
          "unit_amount": 2500,
          "product_data": {
            "name": "T-shirt"
          }
        }
      }
    ],
    "success_url": "https://shop.example.com/thanks?session={CHECKOUT_SESSION_ID}"
  }
}
```

It answers like `fluveo_api_write`: the `operation_id` `post-v1-checkout-sessions`, the API's HTTP `status` and `request_id`, and the session, `cs_test_...`, inside `untrusted_data`, with its `url`, the page to send the buyer to. The server sends the request with an `Idempotency-Key` it draws for the call. When the API gives no usable answer, the tool error `api_unavailable` gives a `human_confirmation`: call `create_checkout_session` again with the same arguments and that `human_confirmation`, and the same request is sent again, never a second one.

### create_customer

Creates a customer of the store, to keep a buyer's contact details and link their payments, checkout sessions and refunds. It writes. Its operation is allowed for an agent key, so it runs at once, with no approval.

**Input**

- `name` (string, optional): The customer's full name or business name.
- `email` (string, optional): The customer's email address.
- `phone` (string, optional): The customer's phone number, with the country code.
- `description` (string, optional): A note about the customer, shown in the Dashboard.
- `address` (object, optional): The customer's address: any of `line1`, `line2`, `city`, `state`, `postal_code` and `country`, a two-letter code.
- `metadata` (object, optional): Key-value pairs of the store's own, such as `{"order": "1234"}`. Never card data.
- `human_confirmation` (object, optional): Leave it out on the first call. When an answer gives `human_confirmation`, send it back unchanged on the next call, with the same arguments. It holds one field, `approval_token`.

*Call*

```json
{
  "name": "create_customer",
  "arguments": {
    "name": "Jenny Rosen",
    "email": "jenny@example.com",
    "metadata": {
      "order": "1234"
    }
  }
}
```

It answers like `fluveo_api_write`: the `operation_id` `post-v1-customers`, the API's HTTP `status` and `request_id`, and the new customer, `cus_...`, inside `untrusted_data`, with secrets withheld. The server sends the request with an `Idempotency-Key` it draws for the call. When the API gives no usable answer, the tool error `api_unavailable` gives a `human_confirmation`: call `create_customer` again with the same arguments and that `human_confirmation`, and the same request is sent again, never a second one.

### create_payment_link

Creates a link anyone can open to pay for the same items on a Fluveo payment page, as many times as the link stays active. It writes. Its operation is allowed for an agent key, so it runs at once, with no approval.

**Input**

- `line_items` (array, required): What a buyer pays for: a list of `{quantity, price}`, with a price id, or `{quantity, price_data: {currency, unit_amount, product_data: {name}}}`. `unit_amount` is a whole number in the currency's smallest unit, so 2500 is 25.00.
- `human_confirmation` (object, optional): Leave it out on the first call. When an answer gives `human_confirmation`, send it back unchanged on the next call, with the same arguments. It holds one field, `approval_token`.

*Call*

```json
{
  "name": "create_payment_link",
  "arguments": {
    "line_items": [
      {
        "quantity": 1,
        "price_data": {
          "currency": "usd",
          "unit_amount": 2500,
          "product_data": {
            "name": "T-shirt"
          }
        }
      }
    ]
  }
}
```

It answers like `fluveo_api_write`: the `operation_id` `post-v1-payment-links`, the API's HTTP `status` and `request_id`, and the link, `plink_...`, inside `untrusted_data`, with its `url` to share. The server sends the request with an `Idempotency-Key` it draws for the call. When the API gives no usable answer, the tool error `api_unavailable` gives a `human_confirmation`: call `create_payment_link` again with the same arguments and that `human_confirmation`, and the same request is sent again, never a second one.

### create_refund

Gives the buyer back all or part of a payment that succeeded, by its PaymentIntent or its charge. It writes and moves money, so a person approves each refund in the Dashboard before it runs, within 15 minutes. Before it asks for that approval, it reads the payment's charges with the agent's key. When that read answers, it refuses at once, with no refund sent and no approval made, if the payment has nothing captured, if the amount is above what is left to refund, or if no amount is given and nothing is left. A read that fails, or that the key may not make, refuses nothing. That read only helps the agent: the API decides every refund. A Boleto payment cannot be refunded, and the API answers an error.

**Input**

- `payment_intent` (string, optional): The PaymentIntent of the payment, `pi_...`. Send either `payment_intent` or `charge`, never both.
- `charge` (string, optional): The charge of the payment: `ch_...` for a card, `py_...` for a Pix or a Boleto.
- `amount` (integer, optional): How much to give back, a whole number in the currency's smallest unit, so 400 is 4.00. It is at most what was captured less what was already refunded. Left out, all that is left goes back.
- `reason` (string, optional): Why the payment is refunded: `duplicate`, `fraudulent` or `requested_by_customer`.
- `metadata` (object, optional): Key-value pairs of the store's own, such as `{"order": "1234"}`. Never card data.
- `human_confirmation` (object, optional): Leave it out on the first call. When an answer gives `human_confirmation`, send it back unchanged on the next call, with the same arguments. It holds one field, `approval_token`.

*Call*

```json
{
  "name": "create_refund",
  "arguments": {
    "payment_intent": "pi_...",
    "amount": 400,
    "reason": "requested_by_customer"
  }
}
```

The first call runs nothing: it answers `approval` with `status` `required`, the `approval_request` id, the `approval_url` of the Dashboard and `expires_at`, then `human_confirmation` and an `instruction`. Show the URL to the person, and once they approve it, call `create_refund` again with the same arguments and that `human_confirmation`. That call answers like `fluveo_api_write`: the `operation_id` `post-v1-refunds`, the API's HTTP `status` and `request_id`, and the refund, `re_...`, inside `untrusted_data`. The same call again answers the same refund, never a second one. When the refund cannot fit, the tool error `refund_exceeds_refundable` says in its `message` that nothing was captured, or what is left to refund, names in `param` the `amount` or the payment's argument when one of them is at fault, and has no `status`, since no refund request reached the API.

### fetch_fluveo_doc

Returns one page of these docs as Markdown, by its path or by its address on the docs site.

**Input**

- `path` (string, required): A docs path such as `/payments/pix`, or a page address that `search_fluveo_docs` returned.

*Call*

```json
{
  "name": "fetch_fluveo_doc",
  "arguments": {
    "path": "/payments/pix"
  }
}
```

It answers the page's `url` and `title`, its Markdown in `content`, and `truncated`, which is true when the page passed 60 KB and was cut there.

### fluveo_api_details

Describes one API operation by the id that `fluveo_api_search` returned. It reads the server's own copy of the API contract and calls no API.

**Input**

- `operation_id` (string, required): An operation id from `fluveo_api_search`, such as `get-v1-customers`.

*Call*

```json
{
  "name": "fluveo_api_details",
  "arguments": {
    "operation_id": "get-v1-customers"
  }
}
```

It answers the operation's `method`, `path`, `summary`, `description`, its path, query and body `parameters`, the `response_object`, `access`, `permission`, `policy`, `window`, `llm_context`, `available` and the `errors_url` of the errors page.

### fluveo_api_read

Runs one `GET` operation of the API with the agent's own key and returns the store's data. It runs only a `GET` operation whose `available` is true.

**Input**

- `operation_id` (string, required): The id of a `GET` operation from `fluveo_api_search`, such as `get-v1-customers-customer`.
- `parameters` (object, optional): The operation's parameters by name, as `fluveo_api_details` lists them: each path parameter, such as `customer`, and any query parameter, such as `limit` or `starting_after`. A `limit` above 25 is sent as 25. Never card data.

*Call*

```json
{
  "name": "fluveo_api_read",
  "arguments": {
    "operation_id": "get-v1-customers-customer",
    "parameters": {
      "customer": "cus_..."
    }
  }
}
```

It answers the `operation_id`, the API's HTTP `status` and `request_id`, `limit_capped`, and the API's answer inside `untrusted_data`, with secrets withheld and, in a list, customer names, emails, phones, addresses and tax ids masked. When the key lacks the operation's permission, the tool error carries the API's 403, whose message names the permission.

### fluveo_api_search

Finds API operations from what the agent wants to do and the resource it acts on. It reads the server's own copy of the API contract and calls no API.

**Input**

- `intent` (string, required): What to do, such as `create`, `list` or `retrieve`. At most 200 characters.
- `resource` (string, required): What it acts on, such as `refund`, `customer` or `payment intent`. At most 200 characters.
- `limit` (integer, optional): How many operations to return, from 1 to 20. The default is 5.

*Call*

```json
{
  "name": "fluveo_api_search",
  "arguments": {
    "intent": "list",
    "resource": "refund",
    "limit": 5
  }
}
```

It answers the `api_version` and, in `data`, the best operations, each with its `id`, `method`, `path`, `summary`, `path_params`, `access`, `permission`, `policy`, `llm_context` and `available`.

### fluveo_api_write

Runs one `POST` or `DELETE` operation of the API with the agent's own key, such as creating a customer or a refund. It runs only an operation whose `available` is true. An operation that needs approval runs only after a person approves it in the Dashboard.

**Input**

- `operation_id` (string, required): The id of a `POST` or `DELETE` operation from `fluveo_api_search`, such as `post-v1-customers` or `post-v1-refunds`.
- `parameters` (object, optional): The operation's path and body parameters together, by name, as `fluveo_api_details` lists them: the object's id for a path parameter, such as `id` for `/v1/products/{id}`, and each body parameter. A nested field is JSON, such as an object for `metadata` or a list for `line_items`. Amounts are integers in the currency's smallest unit. An empty object or list is refused, and an empty string clears a field. Never card data.
- `human_confirmation` (object, optional): Leave it out on the first call. When an answer gives `human_confirmation`, send it back unchanged on the next call, with the same `operation_id` and `parameters`. It holds one field, `approval_token`.

*Call*

```json
{
  "name": "fluveo_api_write",
  "arguments": {
    "operation_id": "post-v1-refunds",
    "parameters": {
      "payment_intent": "pi_...",
      "amount": 500
    }
  }
}
```

It answers the `operation_id`, the API's HTTP `status` and `request_id`, and the API's answer inside `untrusted_data`, with secrets withheld. When the operation needs a person, nothing runs: the answer gives `approval` with `status` `required`, the `approval_request` id, the `approval_url` of the Dashboard and `expires_at`, then `human_confirmation` and an `instruction`. [Agent approvals](https://docs.fluveo.com/agents/mcp/approvals.md) shows the retry. When the API gives no usable answer, the tool error `api_unavailable` gives a `human_confirmation` that sends the same request again, never a second one. When the key lacks the operation's permission, the tool error carries the API's 403.

### get_account_info

Returns the store behind the key and what the key may do on each resource. Call it first, to know which store the agent acts on.

It takes no arguments. Send an empty `arguments` object.

*Call*

```json
{
  "name": "get_account_info",
  "arguments": {}
}
```

It answers the store's `account_id`, `livemode` (always false), `country`, `default_currency`, `charges_enabled`, `payouts_enabled`, the key's `permissions`, the `dashboard_api_keys_link` and a `request_id`, with the store's display name inside `untrusted_data`.

### get_balance

Returns the store's balance in test mode: what is available to pay out and what is still pending, per currency. It only reads.

It takes no arguments. Send an empty `arguments` object.

*Call*

```json
{
  "name": "get_balance",
  "arguments": {}
}
```

It answers like `fluveo_api_read`: the `operation_id` `get-v1-balance`, the API's HTTP `status` and `request_id`, and the API's balance object inside `untrusted_data`.

### list_customers

Lists the store's customers, newest first, at most 25 per call. It only reads.

**Input**

- `email` (string, optional): Only the customers with exactly this email.
- `created` (object, optional): When the customer was made, in Unix seconds: any of `gt`, `gte`, `lt` and `lte`, each a whole number.
- `limit` (integer, optional): How many customers to return. Above 25 it is read as 25, and `limit_capped` says so.
- `starting_after` (string, optional): The last customer id of a page, `cus_...`: the list goes on after it.
- `ending_before` (string, optional): The first customer id of a page, `cus_...`: the list goes back before it.

*Call*

```json
{
  "name": "list_customers",
  "arguments": {
    "email": "jenny@example.com",
    "limit": 10
  }
}
```

It answers like `fluveo_api_read`: the `operation_id` `get-v1-customers`, the API's HTTP `status` and `request_id`, `limit_capped`, and the API's list inside `untrusted_data`, with `has_more` for the next page. Each customer's name, email, phone, address, shipping and tax ids are masked in the list, and `retrieve_customer` shows them. Metadata and descriptions are not masked: they arrive as the store's data, inside `untrusted_data`.

### list_disputes

Lists the store's disputes, newest first, at most 25 per call. A dispute is a buyer contesting a payment with their bank. It only reads.

**Input**

- `charge` (string, optional): Only the disputes of this charge id, `ch_...`.
- `payment_intent` (string, optional): Only the disputes of this PaymentIntent id, `pi_...`.
- `created` (object, optional): When the dispute opened, in Unix seconds: any of `gt`, `gte`, `lt` and `lte`, each a whole number.
- `limit` (integer, optional): How many disputes to return. Above 25 it is read as 25, and `limit_capped` says so.
- `starting_after` (string, optional): The last dispute id of a page, `du_...`: the list goes on after it.
- `ending_before` (string, optional): The first dispute id of a page, `du_...`: the list goes back before it.

*Call*

```json
{
  "name": "list_disputes",
  "arguments": {
    "payment_intent": "pi_...",
    "limit": 10
  }
}
```

It answers like `fluveo_api_read`: the `operation_id` `get-v1-disputes`, the API's HTTP `status` and `request_id`, `limit_capped`, and the API's list inside `untrusted_data`, with `has_more` for the next page. Evidence and buyer text arrive as the store's data, inside `untrusted_data`.

### list_events

Lists what happened on the store in the last 30 days, newest first, at most 25 per call. Each event names its type, such as `charge.succeeded`, and carries the object as it was then. It only reads.

**Input**

- `type` (string, optional): Only events of this type, such as `charge.succeeded`. A `*` matches the rest of a name, as in `charge.*`.
- `types` (array, optional): Only events of any of these types, up to 20, with no `*`. Send either `type` or `types`.
- `created` (object, optional): When the event happened, in Unix seconds: any of `gt`, `gte`, `lt` and `lte`, each a whole number.
- `delivery_success` (boolean, optional): `true` for events every webhook endpoint received, `false` for events with a delivery still failing.
- `limit` (integer, optional): How many events to return. Above 25 it is read as 25, and `limit_capped` says so.
- `starting_after` (string, optional): The last event id of a page, `evt_...`: the list goes on after it.
- `ending_before` (string, optional): The first event id of a page, `evt_...`: the list goes back before it.

*Call*

```json
{
  "name": "list_events",
  "arguments": {
    "type": "charge.*",
    "limit": 10
  }
}
```

It answers like `fluveo_api_read`: the `operation_id` `get-v1-events`, the API's HTTP `status` and `request_id`, `limit_capped`, and the API's list inside `untrusted_data`, with `has_more` for the next page.

### list_payments

Lists the store's payments, newest first, at most 25 per call. Each is a PaymentIntent, one per payment a buyer makes or tries, with its amount, currency, status and payment method. It only reads.

**Input**

- `customer` (string, optional): Only the payments of this customer id, `cus_...`.
- `created` (object, optional): When the payment was made, in Unix seconds: any of `gt`, `gte`, `lt` and `lte`, each a whole number.
- `limit` (integer, optional): How many payments to return. Above 25 it is read as 25, and `limit_capped` says so.
- `starting_after` (string, optional): The last PaymentIntent id of a page, `pi_...`: the list goes on after it.
- `ending_before` (string, optional): The first PaymentIntent id of a page, `pi_...`: the list goes back before it.

*Call*

```json
{
  "name": "list_payments",
  "arguments": {
    "customer": "cus_...",
    "limit": 10
  }
}
```

It answers like `fluveo_api_read`: the `operation_id` `get-v1-payment-intents`, the API's HTTP `status` and `request_id`, `limit_capped`, and the API's list inside `untrusted_data`, with `has_more` for the next page.

### list_refunds

Lists the store's refunds, newest first, at most 25 per call, each with its amount, currency, status and the payment it belongs to. It only reads.

**Input**

- `payment_intent` (string, optional): Only the refunds of this PaymentIntent id, `pi_...`.
- `charge` (string, optional): Only the refunds of this charge id, `ch_...` or `py_...`.
- `created` (object, optional): When the refund was made, in Unix seconds: any of `gt`, `gte`, `lt` and `lte`, each a whole number.
- `limit` (integer, optional): How many refunds to return. Above 25 it is read as 25, and `limit_capped` says so.
- `starting_after` (string, optional): The last refund id of a page, `re_...`: the list goes on after it.
- `ending_before` (string, optional): The first refund id of a page, `re_...`: the list goes back before it.

*Call*

```json
{
  "name": "list_refunds",
  "arguments": {
    "payment_intent": "pi_...",
    "limit": 10
  }
}
```

It answers like `fluveo_api_read`: the `operation_id` `get-v1-refunds`, the API's HTTP `status` and `request_id`, `limit_capped`, and the API's list inside `untrusted_data`, with `has_more` for the next page.

### list_webhook_endpoints

Lists the URLs the store sends its events to, with the event types each receives and whether it is enabled, at most 25 per call. It only reads.

**Input**

- `limit` (integer, optional): How many endpoints to return. Above 25 it is read as 25, and `limit_capped` says so.
- `starting_after` (string, optional): The last endpoint id of a page, `we_...`: the list goes on after it.
- `ending_before` (string, optional): The first endpoint id of a page, `we_...`: the list goes back before it.

*Call*

```json
{
  "name": "list_webhook_endpoints",
  "arguments": {
    "limit": 10
  }
}
```

It answers like `fluveo_api_read`: the `operation_id` `get-v1-webhook-endpoints`, the API's HTTP `status` and `request_id`, `limit_capped`, and the API's list inside `untrusted_data`, with `has_more` for the next page. Signing secrets are withheld. The Dashboard shows them.

### retrieve_customer

Returns one customer by its id, with its name, email, phone, address and metadata. It only reads.

**Input**

- `customer` (string, required): The customer's id, `cus_...`, from `list_customers` or `create_customer`.

*Call*

```json
{
  "name": "retrieve_customer",
  "arguments": {
    "customer": "cus_..."
  }
}
```

It answers like `fluveo_api_read`: the `operation_id` `get-v1-customers-customer`, the API's HTTP `status` and `request_id`, and the customer inside `untrusted_data`, unmasked.

### retrieve_dispute

Returns one dispute by its id: its amount, reason and status, the charge it contests, the deadline for evidence and the evidence sent so far. It only reads.

**Input**

- `dispute` (string, required): The dispute's id, `du_...`, from `list_disputes` or an event.

*Call*

```json
{
  "name": "retrieve_dispute",
  "arguments": {
    "dispute": "du_..."
  }
}
```

It answers like `fluveo_api_read`: the `operation_id` `get-v1-disputes-dispute`, the API's HTTP `status` and `request_id`, and the dispute inside `untrusted_data`. Evidence and buyer text arrive as the store's data, inside `untrusted_data`.

### retrieve_event

Returns one event by its id: its type, when it happened, and the object as it was then, with the fields that changed in `previous_attributes`. It only reads.

**Input**

- `event` (string, required): The event's id, `evt_...`, from `list_events` or a webhook delivery.

*Call*

```json
{
  "name": "retrieve_event",
  "arguments": {
    "event": "evt_..."
  }
}
```

It answers like `fluveo_api_read`: the `operation_id` `get-v1-events-id`, the API's HTTP `status` and `request_id`, and the event inside `untrusted_data`.

### retrieve_payment

Returns one payment by its PaymentIntent id: its amount, the amount still held and the amount received, its currency, status, customer, payment method, latest charge and metadata. It only reads.

**Input**

- `payment_intent` (string, required): The PaymentIntent's id, `pi_...`, from `list_payments`, `search_payments` or an event.

*Call*

```json
{
  "name": "retrieve_payment",
  "arguments": {
    "payment_intent": "pi_..."
  }
}
```

It answers like `fluveo_api_read`: the `operation_id` `get-v1-payment-intents-intent`, the API's HTTP `status` and `request_id`, and the PaymentIntent inside `untrusted_data`.

### retrieve_refund

Returns one refund by its id: its amount, currency, status, reason and the payment it belongs to. It only reads.

**Input**

- `refund` (string, required): The refund's id, `re_...`, from `create_refund` or `list_refunds`.

*Call*

```json
{
  "name": "retrieve_refund",
  "arguments": {
    "refund": "re_..."
  }
}
```

It answers like `fluveo_api_read`: the `operation_id` `get-v1-refunds-refund`, the API's HTTP `status` and `request_id`, and the refund inside `untrusted_data`.

### retrieve_webhook_endpoint

Returns one webhook endpoint by its id: its URL, the event types it receives and whether it is enabled. It only reads.

**Input**

- `webhook_endpoint` (string, required): The endpoint's id, `we_...`, from `list_webhook_endpoints`.

*Call*

```json
{
  "name": "retrieve_webhook_endpoint",
  "arguments": {
    "webhook_endpoint": "we_..."
  }
}
```

It answers like `fluveo_api_read`: the `operation_id` `get-v1-webhook-endpoints-webhook-endpoint`, the API's HTTP `status` and `request_id`, and the endpoint inside `untrusted_data`. Its signing secret is withheld. The Dashboard shows it.

### search_fluveo_docs

Finds the pages of these docs, guides and API reference both, that best answer a question.

**Input**

- `question` (string, required): What to find in the docs, such as `refund a Pix payment`. At most 1,000 characters.
- `limit` (integer, optional): How many pages to return, from 1 to 10. The default is 5.

*Call*

```json
{
  "name": "search_fluveo_docs",
  "arguments": {
    "question": "refund a Pix payment"
  }
}
```

It answers the best pages in `results`, each with its `title`, `url`, `section`, `description` and the passage that matches best in `content`.

### search_payments

Finds the store's payments that match a query, newest first, at most 25 per call. A query joins clauses of `field:'value'` with `AND`, or with `OR`, never both. The fields are `status`, `amount`, `currency`, `customer`, `created` and `metadata['key']`, and `amount` and `created` also take `>`, `>=`, `<` and `<=`. It only reads.

**Input**

- `query` (string, required): The search query, such as `status:'succeeded' AND amount>5000` or `metadata['order']:'1234'`.
- `limit` (integer, optional): How many payments to return. Above 25 it is read as 25, and `limit_capped` says so.
- `page` (string, optional): The `next_page` of the previous answer: the search goes on from there.

*Call*

```json
{
  "name": "search_payments",
  "arguments": {
    "query": "status:'requires_capture' AND currency:'brl'",
    "limit": 10
  }
}
```

It answers like `fluveo_api_read`: the `operation_id` `get-v1-payment-intents-search`, the API's HTTP `status` and `request_id`, `limit_capped`, and the matching payments inside `untrusted_data`, with `has_more` and `next_page` for the next page.

### update_customer

Changes the fields given of one customer and keeps the rest. It writes. Its operation is allowed for an agent key, so it runs at once, with no approval.

**Input**

- `customer` (string, required): The customer's id, `cus_...`.
- `name` (string, optional): The customer's new full name or business name. An empty string clears it.
- `email` (string, optional): The customer's new email address. An empty string clears it.
- `phone` (string, optional): The customer's new phone number, with the country code. An empty string clears it.
- `description` (string, optional): A new note about the customer. An empty string clears it.
- `address` (object, optional): The fields of the address to change: any of `line1`, `line2`, `city`, `state`, `postal_code` and `country`, a two-letter code.
- `metadata` (object, optional): Key-value pairs to set. A key with an empty string removes it. Never card data.
- `human_confirmation` (object, optional): Leave it out on the first call. When an answer gives `human_confirmation`, send it back unchanged on the next call, with the same arguments. It holds one field, `approval_token`.

*Call*

```json
{
  "name": "update_customer",
  "arguments": {
    "customer": "cus_...",
    "phone": "+15555550123"
  }
}
```

It answers like `fluveo_api_write`: the `operation_id` `post-v1-customers-customer`, the API's HTTP `status` and `request_id`, and the customer as it is now inside `untrusted_data`, with secrets withheld. When the API gives no usable answer, the tool error `api_unavailable` gives a `human_confirmation`: call `update_customer` again with the same arguments and that `human_confirmation`, and the same request is sent again.

## Operations

Every operation of the API, with the permission a restricted key needs to call it and the policy for an agent key. The API applies that policy to each call an agent key makes. An allowed operation runs at once. An operation that needs approval runs only after a person approves that one request in the Dashboard, and the approval expires after the time the table gives. A denied operation always answers 403. Through this server, `fluveo_api_read` runs the allowed `GET` operations. `fluveo_api_write` runs the allowed `POST` and `DELETE` operations, and those that need approval once a person approves the request. It refuses a denied operation before the request reaches the API. `fluveo_api_search` and `fluveo_api_details` list every operation, each with `available` set to false when this server does not run it. [Approvals](https://docs.fluveo.com/agents/mcp/approvals.md) covers what a person sees and approves.

| Operation | Endpoint | Permission | Agent policy |
| --- | --- | --- | --- |
| [Retrieves the calling store's own Account.](https://docs.fluveo.com/api/account.md#get-v1-account) | `GET /v1/account` | [`rak_account_read`](https://docs.fluveo.com/permissions.md#account) | Allowed |
| [Retrieves the calling store's own Account by its own id. Any other id is refused with 403 account_invalid: an api_error for an id shaped as an account id (acct_ or mch_), else an invalid_request_error.](https://docs.fluveo.com/api/account.md#get-v1-accounts-account) | `GET /v1/accounts/{account}` | No restricted key may call it. | Denied |
| [Lists the calling store's own bank accounts by its own id. Numbers are masked to the last four digits; the id is the destination POST /v1/payouts takes. Any other id is refused as on GET /v1/accounts/{account}.](https://docs.fluveo.com/api/account.md#get-v1-accounts-account-external-accounts) | `GET /v1/accounts/{account}/external_accounts` | No restricted key may call it. | Denied |
| [Retrieves a balance.](https://docs.fluveo.com/api/balance.md#get-v1-balance) | `GET /v1/balance` | [`rak_balance_read`](https://docs.fluveo.com/permissions.md#balance) | Allowed |
| [Reads how much the store may pay out right now, or zero with the reason.](https://docs.fluveo.com/api/balance.md#get-v1-balance-fluveo-payable-now) | `GET /v1/balance/fluveo_payable_now` | [`rak_balance_read`](https://docs.fluveo.com/permissions.md#balance) | Allowed |
| [Reads the hold that stops a payout now, or null when nothing holds it.](https://docs.fluveo.com/api/balance.md#get-v1-balance-fluveo-payout-hold) | `GET /v1/balance/fluveo_payout_hold` | [`rak_balance_read`](https://docs.fluveo.com/permissions.md#balance) | Allowed |
| [Retrieves the store's balance settings: its payout schedule and the settlement delay.](https://docs.fluveo.com/api/balance.md#get-v1-balance-settings) | `GET /v1/balance_settings` | No restricted key may call it. | Denied |
| [Updates the store's payout schedule: manual (a payout on request), or daily, weekly or monthly automatic payouts.](https://docs.fluveo.com/api/balance.md#post-v1-balance-settings) | `POST /v1/balance_settings` | No restricted key may call it. | Denied |
| [Lists balance transaction objects, newest first.](https://docs.fluveo.com/api/balance_transactions.md#get-v1-balance-transactions) | `GET /v1/balance_transactions` | [`rak_balance_read`](https://docs.fluveo.com/permissions.md#balance) | Allowed |
| [Retrieves a balance transaction.](https://docs.fluveo.com/api/balance_transactions.md#get-v1-balance-transactions-id) | `GET /v1/balance_transactions/{id}` | [`rak_balance_read`](https://docs.fluveo.com/permissions.md#balance) | Allowed |
| [Lists charge objects, newest first.](https://docs.fluveo.com/api/charges.md#get-v1-charges) | `GET /v1/charges` | [`rak_charge_read`](https://docs.fluveo.com/permissions.md#charge) | Allowed |
| [Searches charge objects with a query, newest first.](https://docs.fluveo.com/api/charges.md#get-v1-charges-search) | `GET /v1/charges/search` | [`rak_charge_read`](https://docs.fluveo.com/permissions.md#charge) | Allowed |
| [Retrieves a charge.](https://docs.fluveo.com/api/charges.md#get-v1-charges-charge) | `GET /v1/charges/{charge}` | [`rak_charge_read`](https://docs.fluveo.com/permissions.md#charge) | Allowed |
| [Updates a charge.](https://docs.fluveo.com/api/charges.md#post-v1-charges-charge) | `POST /v1/charges/{charge}` | [`rak_charge_write`](https://docs.fluveo.com/permissions.md#charge) | Allowed |
| [Lists refund objects of the parent object.](https://docs.fluveo.com/api/refunds.md#get-v1-charges-charge-refunds) | `GET /v1/charges/{charge}/refunds` | [`rak_charge_read`](https://docs.fluveo.com/permissions.md#charge) | Allowed |
| [Retrieves a refund.](https://docs.fluveo.com/api/refunds.md#get-v1-charges-charge-refunds-refund) | `GET /v1/charges/{charge}/refunds/{refund}` | [`rak_charge_read`](https://docs.fluveo.com/permissions.md#charge) | Allowed |
| [Lists the store's Checkout Sessions.](https://docs.fluveo.com/api/checkout_sessions.md#get-v1-checkout-sessions) | `GET /v1/checkout/sessions` | [`rak_checkout_session_read`](https://docs.fluveo.com/permissions.md#checkout_session) | Allowed |
| [Creates a Checkout Session. Its PaymentIntent is made when the buyer pays; a setup session makes its SetupIntent at once.](https://docs.fluveo.com/api/checkout_sessions.md#post-v1-checkout-sessions) | `POST /v1/checkout/sessions` | [`rak_checkout_session_write`](https://docs.fluveo.com/permissions.md#checkout_session) | Allowed |
| [Retrieves a Checkout Session.](https://docs.fluveo.com/api/checkout_sessions.md#get-v1-checkout-sessions-session) | `GET /v1/checkout/sessions/{session}` | [`rak_checkout_session_read`](https://docs.fluveo.com/permissions.md#checkout_session) | Allowed |
| [Updates a Checkout Session's metadata, in any state; no other field can change.](https://docs.fluveo.com/api/checkout_sessions.md#post-v1-checkout-sessions-session) | `POST /v1/checkout/sessions/{session}` | [`rak_checkout_session_write`](https://docs.fluveo.com/permissions.md#checkout_session) | Allowed |
| [Expires an open Checkout Session, so the buyer can no longer pay through it.](https://docs.fluveo.com/api/checkout_sessions.md#post-v1-checkout-sessions-session-expire) | `POST /v1/checkout/sessions/{session}/expire` | [`rak_checkout_session_write`](https://docs.fluveo.com/permissions.md#checkout_session) | Needs approval (configuration, expires in 24 hours) |
| [Lists a Checkout Session's line items.](https://docs.fluveo.com/api/checkout_sessions.md#get-v1-checkout-sessions-session-line-items) | `GET /v1/checkout/sessions/{session}/line_items` | [`rak_checkout_session_read`](https://docs.fluveo.com/permissions.md#checkout_session) | Allowed |
| [Lists customer objects, newest first.](https://docs.fluveo.com/api/customers.md#get-v1-customers) | `GET /v1/customers` | [`rak_customer_read`](https://docs.fluveo.com/permissions.md#customer) | Allowed |
| [Creates a customer.](https://docs.fluveo.com/api/customers.md#post-v1-customers) | `POST /v1/customers` | [`rak_customer_write`](https://docs.fluveo.com/permissions.md#customer) | Allowed |
| [Searches customer objects with a query, newest first.](https://docs.fluveo.com/api/customers.md#get-v1-customers-search) | `GET /v1/customers/search` | [`rak_customer_read`](https://docs.fluveo.com/permissions.md#customer) | Allowed |
| [Deletes a deleted customer.](https://docs.fluveo.com/api/customers.md#delete-v1-customers-customer) | `DELETE /v1/customers/{customer}` | [`rak_customer_write`](https://docs.fluveo.com/permissions.md#customer) | Needs approval (configuration, expires in 24 hours) |
| [Retrieves a customer.](https://docs.fluveo.com/api/customers.md#get-v1-customers-customer) | `GET /v1/customers/{customer}` | [`rak_customer_read`](https://docs.fluveo.com/permissions.md#customer) | Allowed |
| [Updates a customer.](https://docs.fluveo.com/api/customers.md#post-v1-customers-customer) | `POST /v1/customers/{customer}` | [`rak_customer_write`](https://docs.fluveo.com/permissions.md#customer) | Allowed |
| [Lists PaymentMethod objects of the parent object.](https://docs.fluveo.com/api/payment_methods.md#get-v1-customers-customer-payment-methods) | `GET /v1/customers/{customer}/payment_methods` | [`rak_payment_method_read`](https://docs.fluveo.com/permissions.md#payment_method) | Allowed |
| [Retrieves a PaymentMethod.](https://docs.fluveo.com/api/payment_methods.md#get-v1-customers-customer-payment-methods-payment-method) | `GET /v1/customers/{customer}/payment_methods/{payment_method}` | [`rak_payment_method_read`](https://docs.fluveo.com/permissions.md#payment_method) | Allowed |
| [Lists tax ID objects of the parent object.](https://docs.fluveo.com/api/customers.md#get-v1-customers-customer-tax-ids) | `GET /v1/customers/{customer}/tax_ids` | [`rak_customer_read`](https://docs.fluveo.com/permissions.md#customer) | Allowed |
| [Creates a tax ID.](https://docs.fluveo.com/api/customers.md#post-v1-customers-customer-tax-ids) | `POST /v1/customers/{customer}/tax_ids` | [`rak_customer_write`](https://docs.fluveo.com/permissions.md#customer) | Allowed |
| [Deletes a deleted tax id.](https://docs.fluveo.com/api/customers.md#delete-v1-customers-customer-tax-ids-id) | `DELETE /v1/customers/{customer}/tax_ids/{id}` | [`rak_customer_write`](https://docs.fluveo.com/permissions.md#customer) | Needs approval (configuration, expires in 24 hours) |
| [Retrieves a tax ID.](https://docs.fluveo.com/api/customers.md#get-v1-customers-customer-tax-ids-id) | `GET /v1/customers/{customer}/tax_ids/{id}` | [`rak_customer_read`](https://docs.fluveo.com/permissions.md#customer) | Allowed |
| [Lists dispute objects, newest first.](https://docs.fluveo.com/api/disputes.md#get-v1-disputes) | `GET /v1/disputes` | [`rak_dispute_read`](https://docs.fluveo.com/permissions.md#dispute) | Allowed |
| [Retrieves a dispute.](https://docs.fluveo.com/api/disputes.md#get-v1-disputes-dispute) | `GET /v1/disputes/{dispute}` | [`rak_dispute_read`](https://docs.fluveo.com/permissions.md#dispute) | Allowed |
| [Updates a dispute.](https://docs.fluveo.com/api/disputes.md#post-v1-disputes-dispute) | `POST /v1/disputes/{dispute}` | [`rak_dispute_write`](https://docs.fluveo.com/permissions.md#dispute) | Needs approval (money movement, expires in 15 minutes) |
| [Closes a dispute.](https://docs.fluveo.com/api/disputes.md#post-v1-disputes-dispute-close) | `POST /v1/disputes/{dispute}/close` | [`rak_dispute_write`](https://docs.fluveo.com/permissions.md#dispute) | Needs approval (money movement, expires in 15 minutes) |
| [Lists event objects, newest first.](https://docs.fluveo.com/api/events.md#get-v1-events) | `GET /v1/events` | [`rak_event_read`](https://docs.fluveo.com/permissions.md#event) | Allowed |
| [Retrieves a event.](https://docs.fluveo.com/api/events.md#get-v1-events-id) | `GET /v1/events/{id}` | [`rak_event_read`](https://docs.fluveo.com/permissions.md#event) | Allowed |
| [Lists the store's file links.](https://docs.fluveo.com/api/files.md#get-v1-file-links) | `GET /v1/file_links` | [`rak_file_read`](https://docs.fluveo.com/permissions.md#file) | Allowed |
| [Creates a link to a file's contents.](https://docs.fluveo.com/api/files.md#post-v1-file-links) | `POST /v1/file_links` | [`rak_file_write`](https://docs.fluveo.com/permissions.md#file) | Allowed |
| [Retrieves a file link.](https://docs.fluveo.com/api/files.md#get-v1-file-links-link) | `GET /v1/file_links/{link}` | [`rak_file_read`](https://docs.fluveo.com/permissions.md#file) | Allowed |
| [Updates a file link's expiry or metadata.](https://docs.fluveo.com/api/files.md#post-v1-file-links-link) | `POST /v1/file_links/{link}` | [`rak_file_write`](https://docs.fluveo.com/permissions.md#file) | Allowed |
| [Lists the store's files.](https://docs.fluveo.com/api/files.md#get-v1-files) | `GET /v1/files` | [`rak_file_read`](https://docs.fluveo.com/permissions.md#file) | Allowed |
| [Retrieves a file's details.](https://docs.fluveo.com/api/files.md#get-v1-files-file) | `GET /v1/files/{file}` | [`rak_file_read`](https://docs.fluveo.com/permissions.md#file) | Allowed |
| [Downloads a file's contents with the API key: the file's url, for a purpose that allows downloading. It is served on the host the url names; when the url names a files host, the API host answers 404 not_found.](https://docs.fluveo.com/api/files.md#get-v1-files-file-contents) | `GET /v1/files/{file}/contents` | [`rak_file_read`](https://docs.fluveo.com/permissions.md#file) | Denied |
| [Lists PaymentIntent objects, newest first.](https://docs.fluveo.com/api/payment_intents.md#get-v1-payment-intents) | `GET /v1/payment_intents` | [`rak_payment_intent_read`](https://docs.fluveo.com/permissions.md#payment_intent) | Allowed |
| [Creates a PaymentIntent.](https://docs.fluveo.com/api/payment_intents.md#post-v1-payment-intents) | `POST /v1/payment_intents` | [`rak_payment_intent_write`](https://docs.fluveo.com/permissions.md#payment_intent) | Denied |
| [Searches PaymentIntent objects with a query, newest first.](https://docs.fluveo.com/api/payment_intents.md#get-v1-payment-intents-search) | `GET /v1/payment_intents/search` | [`rak_payment_intent_read`](https://docs.fluveo.com/permissions.md#payment_intent) | Allowed |
| [Retrieves a PaymentIntent.](https://docs.fluveo.com/api/payment_intents.md#get-v1-payment-intents-intent) | `GET /v1/payment_intents/{intent}` | [`rak_payment_intent_read`](https://docs.fluveo.com/permissions.md#payment_intent) | Allowed |
| [Updates a PaymentIntent.](https://docs.fluveo.com/api/payment_intents.md#post-v1-payment-intents-intent) | `POST /v1/payment_intents/{intent}` | [`rak_payment_intent_write`](https://docs.fluveo.com/permissions.md#payment_intent) | Allowed |
| [Cancels a PaymentIntent.](https://docs.fluveo.com/api/payment_intents.md#post-v1-payment-intents-intent-cancel) | `POST /v1/payment_intents/{intent}/cancel` | [`rak_payment_intent_write`](https://docs.fluveo.com/permissions.md#payment_intent) | Needs approval (money movement, expires in 15 minutes) |
| [Captures a PaymentIntent.](https://docs.fluveo.com/api/payment_intents.md#post-v1-payment-intents-intent-capture) | `POST /v1/payment_intents/{intent}/capture` | [`rak_payment_intent_write`](https://docs.fluveo.com/permissions.md#payment_intent) | Needs approval (money movement, expires in 15 minutes) |
| [Confirms a PaymentIntent.](https://docs.fluveo.com/api/payment_intents.md#post-v1-payment-intents-intent-confirm) | `POST /v1/payment_intents/{intent}/confirm` | [`rak_payment_intent_write`](https://docs.fluveo.com/permissions.md#payment_intent) | Denied |
| [Lists payment link objects, newest first.](https://docs.fluveo.com/api/payment_links.md#get-v1-payment-links) | `GET /v1/payment_links` | [`rak_payment_links_read`](https://docs.fluveo.com/permissions.md#payment_links) | Allowed |
| [Creates a payment link.](https://docs.fluveo.com/api/payment_links.md#post-v1-payment-links) | `POST /v1/payment_links` | [`rak_payment_links_write`](https://docs.fluveo.com/permissions.md#payment_links) | Allowed |
| [Retrieves a payment link.](https://docs.fluveo.com/api/payment_links.md#get-v1-payment-links-payment-link) | `GET /v1/payment_links/{payment_link}` | [`rak_payment_links_read`](https://docs.fluveo.com/permissions.md#payment_links) | Allowed |
| [Updates a payment link.](https://docs.fluveo.com/api/payment_links.md#post-v1-payment-links-payment-link) | `POST /v1/payment_links/{payment_link}` | [`rak_payment_links_write`](https://docs.fluveo.com/permissions.md#payment_links) | Allowed |
| [Lists line item objects of the parent object.](https://docs.fluveo.com/api/payment_links.md#get-v1-payment-links-payment-link-line-items) | `GET /v1/payment_links/{payment_link}/line_items` | [`rak_payment_links_read`](https://docs.fluveo.com/permissions.md#payment_links) | Allowed |
| [Lists the store's payment method configuration: the one its checkout uses.](https://docs.fluveo.com/api/wallets.md#get-v1-payment-method-configurations) | `GET /v1/payment_method_configurations` | [`rak_payment_method_configurations_read`](https://docs.fluveo.com/permissions.md#payment_method_configurations) | Allowed |
| [Retrieves a payment method configuration.](https://docs.fluveo.com/api/wallets.md#get-v1-payment-method-configurations-configuration) | `GET /v1/payment_method_configurations/{configuration}` | [`rak_payment_method_configurations_read`](https://docs.fluveo.com/permissions.md#payment_method_configurations) | Allowed |
| [Updates a payment method configuration.](https://docs.fluveo.com/api/wallets.md#post-v1-payment-method-configurations-configuration) | `POST /v1/payment_method_configurations/{configuration}` | [`rak_payment_method_configurations_write`](https://docs.fluveo.com/permissions.md#payment_method_configurations) | Needs approval (configuration, expires in 24 hours) |
| [Lists payment method domain objects, newest first.](https://docs.fluveo.com/api/wallets.md#get-v1-payment-method-domains) | `GET /v1/payment_method_domains` | [`rak_payment_method_domain_read`](https://docs.fluveo.com/permissions.md#payment_method_domain) | Allowed |
| [Creates a payment method domain.](https://docs.fluveo.com/api/wallets.md#post-v1-payment-method-domains) | `POST /v1/payment_method_domains` | [`rak_payment_method_domain_write`](https://docs.fluveo.com/permissions.md#payment_method_domain) | Needs approval (configuration, expires in 24 hours) |
| [Retrieves a payment method domain.](https://docs.fluveo.com/api/wallets.md#get-v1-payment-method-domains-payment-method-domain) | `GET /v1/payment_method_domains/{payment_method_domain}` | [`rak_payment_method_domain_read`](https://docs.fluveo.com/permissions.md#payment_method_domain) | Allowed |
| [Turns a domain on or off for Apple Pay and Google Pay, and returns the domain.](https://docs.fluveo.com/api/wallets.md#post-v1-payment-method-domains-payment-method-domain) | `POST /v1/payment_method_domains/{payment_method_domain}` | [`rak_payment_method_domain_write`](https://docs.fluveo.com/permissions.md#payment_method_domain) | Needs approval (configuration, expires in 24 hours) |
| [Asks again whether Apple Pay and Google Pay may show on this domain, and returns the domain with each wallet's status.](https://docs.fluveo.com/api/wallets.md#post-v1-payment-method-domains-payment-method-domain-validate) | `POST /v1/payment_method_domains/{payment_method_domain}/validate` | [`rak_payment_method_domain_write`](https://docs.fluveo.com/permissions.md#payment_method_domain) | Needs approval (configuration, expires in 24 hours) |
| [Lists PaymentMethod objects, newest first.](https://docs.fluveo.com/api/payment_methods.md#get-v1-payment-methods) | `GET /v1/payment_methods` | [`rak_payment_method_read`](https://docs.fluveo.com/permissions.md#payment_method) | Allowed |
| [Retrieves a PaymentMethod.](https://docs.fluveo.com/api/payment_methods.md#get-v1-payment-methods-payment-method) | `GET /v1/payment_methods/{payment_method}` | [`rak_payment_method_read`](https://docs.fluveo.com/permissions.md#payment_method) | Allowed |
| [Updates a PaymentMethod.](https://docs.fluveo.com/api/payment_methods.md#post-v1-payment-methods-payment-method) | `POST /v1/payment_methods/{payment_method}` | [`rak_payment_method_write`](https://docs.fluveo.com/permissions.md#payment_method) | Allowed |
| [Attaches a PaymentMethod.](https://docs.fluveo.com/api/payment_methods.md#post-v1-payment-methods-payment-method-attach) | `POST /v1/payment_methods/{payment_method}/attach` | [`rak_payment_method_write`](https://docs.fluveo.com/permissions.md#payment_method) | Allowed |
| [Detaches a PaymentMethod.](https://docs.fluveo.com/api/payment_methods.md#post-v1-payment-methods-payment-method-detach) | `POST /v1/payment_methods/{payment_method}/detach` | [`rak_payment_method_write`](https://docs.fluveo.com/permissions.md#payment_method) | Needs approval (configuration, expires in 24 hours) |
| [Lists payout objects, newest first.](https://docs.fluveo.com/api/payouts.md#get-v1-payouts) | `GET /v1/payouts` | [`rak_payout_read`](https://docs.fluveo.com/permissions.md#payout) | Allowed |
| [Creates a payout.](https://docs.fluveo.com/api/payouts.md#post-v1-payouts) | `POST /v1/payouts` | [`rak_payout_write`](https://docs.fluveo.com/permissions.md#payout) | Denied |
| [Retrieves a payout.](https://docs.fluveo.com/api/payouts.md#get-v1-payouts-payout) | `GET /v1/payouts/{payout}` | [`rak_payout_read`](https://docs.fluveo.com/permissions.md#payout) | Allowed |
| [Updates a payout.](https://docs.fluveo.com/api/payouts.md#post-v1-payouts-payout) | `POST /v1/payouts/{payout}` | [`rak_payout_write`](https://docs.fluveo.com/permissions.md#payout) | Needs approval (money movement, expires in 15 minutes) |
| [Cancels a payout.](https://docs.fluveo.com/api/payouts.md#post-v1-payouts-payout-cancel) | `POST /v1/payouts/{payout}/cancel` | [`rak_payout_write`](https://docs.fluveo.com/permissions.md#payout) | Needs approval (money movement, expires in 15 minutes) |
| [Lists price objects, newest first.](https://docs.fluveo.com/api/prices.md#get-v1-prices) | `GET /v1/prices` | [`rak_plan_read`](https://docs.fluveo.com/permissions.md#plan) | Allowed |
| [Creates a price.](https://docs.fluveo.com/api/prices.md#post-v1-prices) | `POST /v1/prices` | [`rak_plan_write`](https://docs.fluveo.com/permissions.md#plan) | Allowed |
| [Searches price objects with a query, newest first.](https://docs.fluveo.com/api/prices.md#get-v1-prices-search) | `GET /v1/prices/search` | [`rak_plan_read`](https://docs.fluveo.com/permissions.md#plan) | Allowed |
| [Retrieves a price.](https://docs.fluveo.com/api/prices.md#get-v1-prices-price) | `GET /v1/prices/{price}` | [`rak_plan_read`](https://docs.fluveo.com/permissions.md#plan) | Allowed |
| [Updates a price.](https://docs.fluveo.com/api/prices.md#post-v1-prices-price) | `POST /v1/prices/{price}` | [`rak_plan_write`](https://docs.fluveo.com/permissions.md#plan) | Allowed |
| [Lists product objects, newest first.](https://docs.fluveo.com/api/products.md#get-v1-products) | `GET /v1/products` | [`rak_product_read`](https://docs.fluveo.com/permissions.md#product) | Allowed |
| [Creates a product.](https://docs.fluveo.com/api/products.md#post-v1-products) | `POST /v1/products` | [`rak_product_write`](https://docs.fluveo.com/permissions.md#product) | Allowed |
| [Searches product objects with a query, newest first.](https://docs.fluveo.com/api/products.md#get-v1-products-search) | `GET /v1/products/search` | [`rak_product_read`](https://docs.fluveo.com/permissions.md#product) | Allowed |
| [Deletes a product that has no prices.](https://docs.fluveo.com/api/products.md#delete-v1-products-id) | `DELETE /v1/products/{id}` | [`rak_product_write`](https://docs.fluveo.com/permissions.md#product) | Needs approval (configuration, expires in 24 hours) |
| [Retrieves a product.](https://docs.fluveo.com/api/products.md#get-v1-products-id) | `GET /v1/products/{id}` | [`rak_product_read`](https://docs.fluveo.com/permissions.md#product) | Allowed |
| [Updates a product.](https://docs.fluveo.com/api/products.md#post-v1-products-id) | `POST /v1/products/{id}` | [`rak_product_write`](https://docs.fluveo.com/permissions.md#product) | Allowed |
| [Lists the store's early fraud warnings, newest first.](https://docs.fluveo.com/api/early_fraud_warnings.md#get-v1-radar-early-fraud-warnings) | `GET /v1/radar/early_fraud_warnings` | No restricted key may call it. | Denied |
| [Retrieves one early fraud warning.](https://docs.fluveo.com/api/early_fraud_warnings.md#get-v1-radar-early-fraud-warnings-early-fraud-warning) | `GET /v1/radar/early_fraud_warnings/{early_fraud_warning}` | No restricted key may call it. | Denied |
| [Lists refund objects, newest first.](https://docs.fluveo.com/api/refunds.md#get-v1-refunds) | `GET /v1/refunds` | [`rak_charge_read`](https://docs.fluveo.com/permissions.md#charge) | Allowed |
| [Creates a refund.](https://docs.fluveo.com/api/refunds.md#post-v1-refunds) | `POST /v1/refunds` | [`rak_charge_write`](https://docs.fluveo.com/permissions.md#charge) | Needs approval (money movement, expires in 15 minutes) |
| [Retrieves a refund.](https://docs.fluveo.com/api/refunds.md#get-v1-refunds-refund) | `GET /v1/refunds/{refund}` | [`rak_charge_read`](https://docs.fluveo.com/permissions.md#charge) | Allowed |
| [Updates a refund.](https://docs.fluveo.com/api/refunds.md#post-v1-refunds-refund) | `POST /v1/refunds/{refund}` | [`rak_charge_write`](https://docs.fluveo.com/permissions.md#charge) | Allowed |
| [Lists the amounts held back under the store's reserve plans, newest first. Filters: reserve_plan, is_releasable, currency, source_charge, reserve_release.](https://docs.fluveo.com/api/reserves.md#get-v1-reserve-holds) | `GET /v1/reserve/holds` | [`rak_reserve_read`](https://docs.fluveo.com/permissions.md#reserve) | Allowed |
| [Retrieves one reserve hold. Expand: reserve_plan, source_charge.](https://docs.fluveo.com/api/reserves.md#get-v1-reserve-holds-id) | `GET /v1/reserve/holds/{id}` | [`rak_reserve_read`](https://docs.fluveo.com/permissions.md#reserve) | Allowed |
| [Lists the reserve plans on the store's account. Filter: status.](https://docs.fluveo.com/api/reserves.md#get-v1-reserve-plans) | `GET /v1/reserve/plans` | [`rak_reserve_read`](https://docs.fluveo.com/permissions.md#reserve) | Allowed |
| [Retrieves one reserve plan of the store's account.](https://docs.fluveo.com/api/reserves.md#get-v1-reserve-plans-id) | `GET /v1/reserve/plans/{id}` | [`rak_reserve_read`](https://docs.fluveo.com/permissions.md#reserve) | Allowed |
| [Lists the releases of the store's reserve holds, newest first. Filters: reserve_hold, reserve_plan, currency.](https://docs.fluveo.com/api/reserves.md#get-v1-reserve-releases) | `GET /v1/reserve/releases` | [`rak_reserve_read`](https://docs.fluveo.com/permissions.md#reserve) | Allowed |
| [Retrieves one reserve release. Expand: reserve_plan, reserve_hold.](https://docs.fluveo.com/api/reserves.md#get-v1-reserve-releases-id) | `GET /v1/reserve/releases/{id}` | [`rak_reserve_read`](https://docs.fluveo.com/permissions.md#reserve) | Allowed |
| [Lists a SetupIntent's confirm attempts, newest first.](https://docs.fluveo.com/api/setup_intents.md#get-v1-setup-attempts) | `GET /v1/setup_attempts` | No restricted key may call it. | Denied |
| [Lists the store's SetupIntents, newest first.](https://docs.fluveo.com/api/setup_intents.md#get-v1-setup-intents) | `GET /v1/setup_intents` | [`rak_setup_intent_read`](https://docs.fluveo.com/permissions.md#setup_intent) | Allowed |
| [Creates a SetupIntent, and confirms it at once with confirm=true.](https://docs.fluveo.com/api/setup_intents.md#post-v1-setup-intents) | `POST /v1/setup_intents` | [`rak_setup_intent_write`](https://docs.fluveo.com/permissions.md#setup_intent) | Allowed |
| [Retrieves a SetupIntent. One that waits on the buyer's 3D Secure is read again from the card network first.](https://docs.fluveo.com/api/setup_intents.md#get-v1-setup-intents-intent) | `GET /v1/setup_intents/{intent}` | [`rak_setup_intent_read`](https://docs.fluveo.com/permissions.md#setup_intent) | Allowed |
| [Updates a SetupIntent's customer, payment method, description, metadata or 3D Secure request.](https://docs.fluveo.com/api/setup_intents.md#post-v1-setup-intents-intent) | `POST /v1/setup_intents/{intent}` | [`rak_setup_intent_write`](https://docs.fluveo.com/permissions.md#setup_intent) | Allowed |
| [Cancels a SetupIntent that has not succeeded.](https://docs.fluveo.com/api/setup_intents.md#post-v1-setup-intents-intent-cancel) | `POST /v1/setup_intents/{intent}/cancel` | [`rak_setup_intent_write`](https://docs.fluveo.com/permissions.md#setup_intent) | Needs approval (configuration, expires in 24 hours) |
| [Confirms a SetupIntent: the card is set up, or the buyer is sent to 3D Secure through next_action.](https://docs.fluveo.com/api/setup_intents.md#post-v1-setup-intents-intent-confirm) | `POST /v1/setup_intents/{intent}/confirm` | [`rak_setup_intent_write`](https://docs.fluveo.com/permissions.md#setup_intent) | Allowed |
| [Creates a token.](https://docs.fluveo.com/api/wallets.md#post-v1-tokens) | `POST /v1/tokens` | No restricted key may call it. | Denied |
| [Retrieves a token.](https://docs.fluveo.com/api/wallets.md#get-v1-tokens-token) | `GET /v1/tokens/{token}` | No restricted key may call it. | Denied |
| [Lists the store's webhook endpoints.](https://docs.fluveo.com/api/webhook_endpoints.md#get-v1-webhook-endpoints) | `GET /v1/webhook_endpoints` | [`rak_webhook_read`](https://docs.fluveo.com/permissions.md#webhook) | Allowed |
| [Creates a webhook endpoint. The answer is the only one that carries the full signing secret.](https://docs.fluveo.com/api/webhook_endpoints.md#post-v1-webhook-endpoints) | `POST /v1/webhook_endpoints` | [`rak_webhook_write`](https://docs.fluveo.com/permissions.md#webhook) | Needs approval (configuration, expires in 24 hours) |
| [Deletes a webhook endpoint; no more events go to it.](https://docs.fluveo.com/api/webhook_endpoints.md#delete-v1-webhook-endpoints-webhook-endpoint) | `DELETE /v1/webhook_endpoints/{webhook_endpoint}` | [`rak_webhook_write`](https://docs.fluveo.com/permissions.md#webhook) | Needs approval (configuration, expires in 24 hours) |
| [Retrieves a webhook endpoint.](https://docs.fluveo.com/api/webhook_endpoints.md#get-v1-webhook-endpoints-webhook-endpoint) | `GET /v1/webhook_endpoints/{webhook_endpoint}` | [`rak_webhook_read`](https://docs.fluveo.com/permissions.md#webhook) | Allowed |
| [Updates a webhook endpoint's url, event types, description, metadata or disabled flag.](https://docs.fluveo.com/api/webhook_endpoints.md#post-v1-webhook-endpoints-webhook-endpoint) | `POST /v1/webhook_endpoints/{webhook_endpoint}` | [`rak_webhook_write`](https://docs.fluveo.com/permissions.md#webhook) | Needs approval (configuration, expires in 24 hours) |
