---
title: "Send USDC from app.smartWalletAddress, signed by the api-key EOA. Requires X-Api-Key with scope including 'apps-transfer'."
method: POST
path: "/api/v1/apps/transfer"
tags: ["apps", "apps-transfer"]
---

# Send USDC from app.smartWalletAddress, signed by the api-key EOA. Requires X-Api-Key with scope including 'apps-transfer'.

`POST /api/v1/apps/transfer`

## Headers

- `Idempotency-Key` string, nullable
- `x-api-key` string, required

## Request body

- TransferTargetContext — What is being sent, and to whom. Exactly one of ``contactId`` / ``quoteId`` / ``invoiceId`` must be set (mirrors the /mcp/transfer body). ``amount`` is required when ``contactId`` is the dispatch path; otherwise it is derived from the referenced invoice or quote.
  - `contactId` string, uuid, nullable
  - `quoteId` string, nullable
  - `invoiceId` string, uuid, nullable
  - `amount` number, nullable
  - `memo` string, nullable

## Response `200`

Successful Response

- TransferRequestResponse — One outcome shape for both ways a transfer attempt can end. Spent straight away: ``txHash`` only. Needs approval: the request that was filed, with the deep link to approve it. ``transactionId`` appears once an approved transfer has been reported back. A decline reason is not a field — it is a message in ``chatId``, the request's thread.
  - `id` string, uuid, nullable
  - `status` 'requested' | 'approved' | 'declined' | 'failed' — Client-facing status of a ``transfer_request`` proposal. The record is a proposal (seven statuses); this is the short vocabulary the API keeps for the agent and the web app, mapped from `ProposalStatus` by :meth:`from_proposal`.
  - `txHash` string, nullable
  - `transactionId` string, nullable
  - `accountId` string, uuid, nullable
  - `appId` string, uuid, nullable
  - `requestedByUserId` string, uuid, nullable
  - `contactId` string, uuid, nullable
  - `quoteId` string, nullable
  - `invoiceId` string, uuid, nullable
  - `amount` number, nullable
  - `memo` string, nullable
  - `requestedTime` string, date-time, nullable
  - `chatId` string, uuid, nullable
  - `approvalUrl` string, nullable

## Other responses

- `422` — Validation Error

## Changes

- **2026-08-27** `7ed1b58c5607` — 3 breaking, 15 info
  - the `header` request parameter `x-api-key` became required
  - the response property `txHash` became optional for the status `200`
  - response property `txHash` list-of-types was widened by adding types `null` to media type `application/json` of response `200`
  - the endpoint scheme security `ApiKeyAuth` was removed from the API
  - …14 more
- **2026-06-02** `11ba46a28f0a` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/hevn-inc/apis/hevn-api/changes/api/v1/apps/transfer/post.md)

---

[API](https://skmtc.dev/hevn-inc/apis/hevn-api.md) · [All operations](https://skmtc.dev/hevn-inc/apis/hevn-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/hevn-inc/hevn-api/revisions/7ed1b58c5607/schema)
