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

# Aptos

> Transfer APT and fungible assets, call Move functions, and sign Aptos messages with the MPCVault API. Includes Movement transactions.

## Networks

| Network | Wallet `networkType` | Transaction `chainId` | Fee coin |
| - | - | - | - |
| Aptos Mainnet | `NETWORK_TYPE_APTOS` | `"1"` | APT |
| Movement Mainnet | `NETWORK_TYPE_APTOS` | `"126"` | MOVE |

`chainId` selects the network for `aptosSendNative`, `aptosSendCoin` and `aptosSendCustom`.

Examples use [API client signing](https://docs.mpcvault.com/api-reference/overview.md#preparation).

## Signing request types

| Payload | Use |
| - | - |
| [`aptosSendNative`](https://docs.mpcvault.com/api-reference/rest/create-signing-request) | Transfer APT or MOVE. |
| [`aptosSendCoin`](https://docs.mpcvault.com/api-reference/rest/create-signing-request) | Transfer a Fungible Asset or legacy Move coin. |
| [`aptosSendCustom`](https://docs.mpcvault.com/api-reference/rest/create-signing-request) | Call a Move entry function or submit a serialized transaction payload. |
| [`aptosMessage`](https://docs.mpcvault.com/api-reference/rest/create-signing-request) | Sign an Aptos message. |

To sign transactions you build yourself or messages you format yourself, use [raw signing](https://docs.mpcvault.com/api-reference/overview.md#raw-signing).

## Wallet

[Create a wallet](https://docs.mpcvault.com/api-reference/rest/create-wallet.md) with `networkType: "NETWORK_TYPE_APTOS"`. Fund it with more than `1 APT` for the transfer example and transaction fees, plus the coin balance for non-native transfers.

For Movement, fund the wallet with MOVE for native transfers and transaction fees, plus the selected coin balance.

## Send APT

This example sends `1 APT` on Aptos Mainnet (`chainId: "1"`).

[CreateSigningRequest](https://docs.mpcvault.com/api-reference/rest/create-signing-request.md)

```bash theme={null}
curl -X POST https://api.mpcvault.com/v1/createSigningRequest \
  -H "Content-Type: application/json" \
  -H "x-mtoken: <API_TOKEN>" \
  -d '{
    "vaultUuid": "<VAULT_UUID>",
    "callbackClientSignerPublicKey": "<CLIENT_SIGNER_OPENSSH_PUBLIC_KEY>",
    "broadcastTx": true,
    "aptosSendNative": {
      "chainId": "1",
      "from": "<YOUR_APTOS_ADDRESS>",
      "to": "<RECIPIENT_APTOS_ADDRESS>",
      "value": "100000000"
    }
  }'
```

`value` is an integer string in octa: `1 APT = 100,000,000 octa`.

## Send USDC

Replace `aptosSendNative` with this payload in the same request:

```json theme={null}
{
  "aptosSendCoin": {
    "chainId": "1",
    "from": "<YOUR_APTOS_ADDRESS>",
    "to": "<RECIPIENT_APTOS_ADDRESS>",
    "coinTag": "0xbae207659db88bea0cbead6da0ed00aac12edcdda169e591cd41c94180b46f3b",
    "amount": "1000000"
  }
}
```

This example sends `1 USDC` on Aptos Mainnet. `coinTag` is [Circle's Aptos Mainnet USDC FA metadata address](https://developers.circle.com/stablecoins/usdc-contract-addresses#mainnet). `amount: "1000000"` sends `1 USDC` (six decimals). APT pays transaction fees.

`coinTag` accepts a Fungible Asset metadata address or a legacy Move coin type (`ADDRESS::module::Struct`). Movement legacy coin transfers require the recipient to have registered the coin.

## Call a Move entry function

Replace the transaction payload with `aptosSendCustom`. Keep the common fields and `broadcastTx: true`.

```json theme={null}
{
  "aptosSendCustom": {
    "chainId": "1",
    "from": "<YOUR_APTOS_ADDRESS>",
    "payload": "<BASE64_ENTRY_FUNCTION_JSON_OR_BCS_PAYLOAD>"
  }
}
```

`payload` is standard, padded base64 of UTF-8 entry-function JSON containing `function`, `type_arguments` and `arguments`, or a BCS-serialized `TransactionPayload`. MPCVault constructs the transaction with the sender, sequence number, gas settings and expiration before signing. Authentication-key rotation is unsupported.

Save this entry-function payload as `payload.json`, replace the recipient, and [base64-encode the file](https://docs.mpcvault.com/api-reference/data-types.md#encode-bytes). It transfers `0.01 APT`; the amount argument is in octa:

```json theme={null}
{
  "function": "0x1::aptos_account::transfer",
  "type_arguments": [],
  "arguments": ["<RECIPIENT_APTOS_ADDRESS>", "1000000"]
}
```

## Use Movement

Use the same transaction payloads with `chainId: "126"` and addresses, coin types and entry functions from Movement Mainnet. For example:

```json theme={null}
{
  "aptosSendCustom": {
    "chainId": "126",
    "from": "<YOUR_MOVEMENT_ADDRESS>",
    "payload": "<BASE64_MOVEMENT_ENTRY_FUNCTION_JSON_OR_BCS_PAYLOAD>"
  }
}
```

## Sign and track

[Sign the request](https://docs.mpcvault.com/api-reference/overview.md#sign-the-request). Query the returned `txHash` on Aptos Mainnet with [Get transaction by hash](https://aptos.dev/rest-api/operations/get_transaction_by_hash):

```bash theme={null}
curl 'https://api.mainnet.aptoslabs.com/v1/transactions/by_hash/<TRANSACTION_HASH>'
```

A committed `user_transaction` with `success: true` confirms execution. For `success: false`, inspect `vm_status`. Poll at a bounded interval for `type: "pending_transaction"` or a temporary `404`; neither confirms execution.

For Movement, use its Mainnet REST endpoint with the same `/v1/transactions/by_hash/<TRANSACTION_HASH>` path and check the same fields.

## Sign an Aptos message

[Create a message signing request](https://docs.mpcvault.com/api-reference/overview.md#sign-a-message) with `aptosMessage` and omit `broadcastTx`:

```json theme={null}
{
  "aptosMessage": {
    "from": "<YOUR_APTOS_ADDRESS>",
    "type": "TYPE_DEFAULT",
    "content": {
      "address": "<YOUR_APTOS_ADDRESS>",
      "application": "<APPLICATION_DOMAIN>",
      "chainId": "1",
      "message": "<MESSAGE_TEXT>",
      "nonce": "<UNIQUE_NONCE>"
    }
  }
}
```

`content` is a JSON object. `message` and `nonce` are required non-empty text; `address`, `application` and `chainId` are optional signed context.

[Sign the request](https://docs.mpcvault.com/api-reference/overview.md#sign-the-request). For this example, verify the signature against these UTF-8 bytes, joined by `\n` with no trailing newline:

```text theme={null}
APTOS
address: <YOUR_APTOS_ADDRESS>
chain_id: 1
application: <APPLICATION_DOMAIN>
nonce: <UNIQUE_NONCE>
message: <MESSAGE_TEXT>
```

The `address`, `chain_id` and `application` lines are omitted when the corresponding context is empty or zero.

`content.chainId` is part of the signed message; it does not route the request to Movement. There is no Movement-specific message payload.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.