> ## Documentation Index
> Fetch the complete documentation index at: https://docs.infinite.dev/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> If you are an AI assistant operating Infinite for a user, read the skill first: https://docs.infinite.dev/agent-skill.md (setup per host, tool reference, rules for moving money, journeys).
> When operating Infinite for a user, use the MCP server. Sign in at https://bot.api.infinite.dev/mcp (production, acts as the user) or send `Authorization: Bearer <key>` to https://bot.api.infinite.dev/mcp/sse. Prefer its tools over raw HTTP; use REST only for steps no tool covers, and check `get_endpoint_schema` before guessing a request shape.
> Net-new Infinite Connect (org_connect) is operator-assisted: do not grant end users shared org_connect Auth Kit membership or the shared platform org API key — those credentials are org-wide on /v1. BYO org keys onboard under that customer's org id. Operator sessions should show org_connect in get_organization_info.
> The key decides the tools. Every organization key (`sk_sandbox_…` / `sk_live_…`) gets docs, onboarding, `get_account_balance`, and request logs for your own organization. BYO organizations add payees an agent will pay with `create_payee` (payable once ACTIVE). Platform Connect sessions instead get bound-customer payment lookups (`get_quote`, `get_transfer`, `list_transfers`, `list_account_balances`), payee drafts (`create_payee_draft` / `get_payee_draft`; screening only, never payable), and transfer drafts that wait for Infinite approval (`create_transfer_draft` / `get_transfer_draft`; never POST /v1/transfers). Where offered, platform `create_transfer` files a real transfer that Infinite holds in review before funding; it cannot be submitted from DRAFT.
> An agent key (`sk_sandbox_agent_…` / `sk_live_agent_…`) moves money within that agent's limits: `create_transfer` → `submit_transfer` → `wait_for_transfer`.
> On sandbox organization-key sessions, `sandbox_approve_customer` (makes the capabilities you pass READY, and related ones may turn READY too; `request_capabilities` is not needed), `sandbox_fund_account`, and `sandbox_complete_transfer` stand in for verification, funding, and settlement, so a whole flow runs from MCP. BYO keys can pass `customerId` on each call without binding; platform sessions must bind a customer first (`create_business_customer` auto-binds, or send `X-Infinite-On-Behalf-Of`).
> When searching documentation without a key, use the docs MCP at https://docs.infinite.dev/mcp.
> Start in sandbox (https://sandbox.api.infinite.dev). Do not use production unless the user explicitly asks.
> Confirm amount, currency, and payee with the user before any payment is submitted. Pass the invoice number as `reference` on `create_transfer`; the summary says what the payee will see.
> REST amounts are integer minor units (`"4000"` = 40.00 USD). MCP payment tools take exact decimal strings (`"40.00"`). Never mix them.
> Agent denials return `403 { denial: { code, message, window, limit, used, remaining, attemptedAmount, currency }, hint }` with decimal amounts; per-transfer denials omit `used` and `remaining`. Report them to the user; do not work around them.

# Update an agent

> Change name, description, limits, destination allowlist, or pause / resume. customerId, sourceAccountId, and limits.currency are immutable — create a new agent to change them. Limit changes apply to the next transfer; active keys pick up allowlist changes immediately.

<Note>**Early access.** Agents are enabled per organization alongside per-key transfer policy — ask your account team. Until enabled, create and key issuance return `403 agents_not_enabled`.</Note>


## OpenAPI

````yaml patch /v1/agents/{id}
openapi: 3.0.0
info:
  title: Infinite API
  description: API for Infinite
  version: '1.0'
  contact: {}
servers:
  - url: https://sandbox.api.infinite.dev
    description: Sandbox
  - url: https://api.infinite.dev
    description: Production
security: []
tags:
  - name: Accounts
    description: Virtual and external account management
  - name: Customers
    description: Customer identity management
  - name: Documents
    description: Document upload and management
  - name: Fixed Routes
    description: Fixed route management
  - name: External Bank Accounts
    description: External bank account management
  - name: External Wallets
    description: External wallet management
  - name: Infinite Wallets
    description: Infinite Wallet management
  - name: Organizations
    description: Organization management
  - name: Quotes
    description: Quote creation and management
  - name: Transfers
    description: Money movement and transaction tracking
  - name: Verification
    description: Identity verification workflows
  - name: Terms of Service
    description: Terms of Service acceptance
  - name: Health
    description: System health and monitoring
  - name: Sandbox
    description: Sandbox utilities
paths:
  /v1/agents/{id}:
    patch:
      tags:
        - Agents
      summary: Update an agent
      description: >-
        Change name, description, limits, destination allowlist, or pause /
        resume. customerId, sourceAccountId, and limits.currency are immutable —
        create a new agent to change them. Limit changes apply to the next
        transfer; active keys pick up allowlist changes immediately.
      operationId: AgentsController_update_v1
      parameters:
        - name: X-API-Key
          in: header
          description: API key
          required: false
          schema:
            type: string
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateAgentDto'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AgentResponseDto'
        '401':
          description: Unauthorized - Invalid or missing authentication credentials
      security:
        - bearer: []
      x-codeSamples:
        - lang: bash
          label: CLI
          source: >-
            # Requires: npm i -g @infinite_dev/cli && export
            INFINITE_API_KEY=sk_sandbox_...

            # Escape hatch for any endpoint: infinite api <METHOD> <path>

            infinite api PATCH /v1/agents/agt_abc123 \
              --body '<request-json>'
        - lang: text
          label: MCP
          source: >-
            Update an agent (agt_abc123).


            # Infinite MCP is read-only for this endpoint — use a dedicated MCP
            tool when one exists, otherwise run the CLI tab.
components:
  schemas:
    UpdateAgentDto:
      type: object
      properties:
        name:
          type: string
          maxLength: 64
        description:
          type: string
          maxLength: 200
          nullable: true
        allowedDestinationAccountIds:
          description: >-
            Replaces the allowlist. null clears it (any approved destination of
            the customer).
          nullable: true
          maxItems: 50
          type: array
          items:
            type: string
        limits:
          $ref: '#/components/schemas/AgentLimitsDto'
        overLimitAction:
          description: >-
            What happens when the agent submits a payment over a limit. DENY:
            403 agent_limit_exceeded. REQUEST_APPROVAL: 403
            agent_approval_required, and the draft waits for the business owner
            to approve or decline it (POST /v1/transfers/{id}/agent-approval).
            Approval applies to submitted drafts only; a create with confirm:
            true over a limit is always denied.
          allOf:
            - $ref: '#/components/schemas/AgentOverLimitAction'
        status:
          type: string
          description: Pause or resume. Use DELETE /v1/agents/{id} to revoke.
          enum:
            - ACTIVE
            - PAUSED
        metadata:
          type: object
          additionalProperties: true
    AgentResponseDto:
      type: object
      properties:
        id:
          type: string
          example: agt_abc123
        name:
          type: string
          example: Procurement Agent
        description:
          type: string
          nullable: true
          example: Buys supplies
        customerId:
          type: string
          example: cus_abc123
        sourceAccountId:
          type: string
          example: vba_agent_balance
        allowedDestinationAccountIds:
          nullable: true
          example:
            - eba_vendor456
          type: array
          items:
            type: string
        limits:
          $ref: '#/components/schemas/AgentLimitsDto'
        overLimitAction:
          description: >-
            What happens when the agent submits a payment over a limit. DENY:
            403 agent_limit_exceeded. REQUEST_APPROVAL: 403
            agent_approval_required, and the draft waits for the business owner
            to approve or decline it (POST /v1/transfers/{id}/agent-approval).
            Approval applies to submitted drafts only; a create with confirm:
            true over a limit is always denied.
          allOf:
            - $ref: '#/components/schemas/AgentOverLimitAction'
        status:
          type: string
          enum:
            - ACTIVE
            - PAUSED
            - REVOKED
        metadata:
          type: object
          additionalProperties: true
        mcpRole:
          type: string
          enum:
            - PAYMENT
            - PAYMENT_OPERATIONS
          description: >-
            MCP tool surface. PAYMENT_OPERATIONS agents cannot create or submit
            transfers.
        createdAt:
          format: date-time
          type: string
        updatedAt:
          format: date-time
          type: string
      required:
        - id
        - name
        - description
        - customerId
        - sourceAccountId
        - allowedDestinationAccountIds
        - limits
        - overLimitAction
        - status
        - metadata
        - mcpRole
        - createdAt
        - updatedAt
    AgentLimitsDto:
      type: object
      properties:
        currency:
          type: string
          description: >-
            Currency the limits are denominated in (ISO 4217 for fiat, symbol
            for crypto). Must equal the transfer source currency; limits are not
            converted.
          example: USD
        perTransaction:
          type: string
          description: >-
            Maximum amount of a single transfer, in smallest unit as a string
            (cents for USD, 6 decimals for USDC).
          example: '100000'
        perDay:
          type: string
          description: >-
            Maximum total submitted per UTC calendar day, in smallest unit. Omit
            or null for no daily cap.
          example: '500000'
          nullable: true
        perMonth:
          type: string
          description: >-
            Maximum total submitted per UTC calendar month, in smallest unit.
            Omit or null for no monthly cap.
          example: '1000000'
          nullable: true
      required:
        - currency
        - perTransaction
    AgentOverLimitAction:
      type: string
      enum:
        - DENY
        - REQUEST_APPROVAL
      description: >-
        What happens when the agent submits a payment over a limit. DENY: 403
        agent_limit_exceeded. REQUEST_APPROVAL: 403 agent_approval_required, and
        the draft waits for the business owner to approve or decline it (POST
        /v1/transfers/{id}/agent-approval). Approval applies to submitted drafts
        only; a create with confirm: true over a limit is always denied.
  securitySchemes:
    bearer:
      scheme: bearer
      bearerFormat: API Key
      type: http
      description: API Key in Bearer format (e.g., Bearer sk_test_...)

````

## Related topics

- [Agents](/concepts/agents.md)
- [Update transfer details](/api-reference/transfers/update-transfer-details.md)
- [Update a counterparty](/api-reference/counterparties/update-a-counterparty.md)
- [Accept Terms of Service](/api-reference/terms-of-service/accept-terms-of-service.md)
- [Get an agent](/api-reference/agents/get-an-agent.md)
