---
title: "Record that you signed and sent a payment your agent prepared"
method: POST
path: "/api/wallet/requests/{id}/complete"
tags: ["wallet", "browser-session"]
---

# Record that you signed and sent a payment your agent prepared

`POST /api/wallet/requests/{id}/complete`

## Request

- Base URL: `https://www.immersivecommons.com`
- URL: `https://www.immersivecommons.com/api/wallet/requests/{id}/complete`
- Auth: API key in cookie `__session`

Called by the approval page (/floor10/wallet/approve/{id}) after the member's own embedded wallet signed the payment in their browser. Clerk-session only, same-site, application/json, and refused outright for an agt_ bearer: an agent can prepare a payment (`ic_wallet_prepare_payment`) but can never complete one. Only the request's owner may call it; anyone else's id answers the same 404 as an unknown or expired one. The hash is format-checked for the request's chain and stored as REPORTED (status `submitted`); IC does not verify it on-chain. A second report is a 409. 404 unless wallets are enabled.

## Path parameters

- `id` string, required

## Request body

- WalletPaymentCompleteRequest
  - `tx_hash` string, required: Base: 0x + 64 hex. Solana: the base58 transaction signature.
  - `user_op_hash` string: Base only: the ERC-4337 user operation hash, 0x + 64 hex.

## Response `200`

The request, now submitted.

- WalletPaymentCompleteResponse
  - `ok` boolean, required
  - `request` WalletPaymentRequestView, required
    - `request_id` string, required: wpr_...
    - `status` 'awaiting_member_signature' | 'submitted', required
    - `network` 'base' | 'solana', required
    - `network_mode` 'testnet' | 'mainnet'
    - `to_address` string, required
    - `to_handle` string, nullable
    - `amount_usdc` string, required: Exact decimal string.
    - `memo` string, nullable: The agent's words, shown to the member as such.
    - `approve_url` string, required
    - `created_at` string, date-time
    - `expires_at` string, date-time, required
    - `tx_hash` string, nullable: As reported by the member's browser; not verified on-chain by IC.
    - `explorer_url` string, nullable
    - `submitted_at` string, nullable
    - `note` string

## Other responses

- `400`: tx_hash (or user_op_hash) is not a valid hash for the request's chain.
- `401`: Not signed in.
- `403`: Cross-site request, or an agent bearer token.
- `404`: No such request for you (unknown, someone else's, expired), or wallets not enabled.
- `409`: This payment was already recorded.
- `415`: Content-Type is not application/json.

---

[API](https://skmtc.dev/immersivecommons/apis/immersive-commons-agent-rest-api.md) · [All operations](https://skmtc.dev/immersivecommons/apis/immersive-commons-agent-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/immersivecommons/apis/immersive-commons-agent-rest-api/revisions/be67c1f67c27?raw)
