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

# Sign Messages by Wallet Type

> Choose the correct REST message signing behavior for EVM, Cosmos, Solana, Stellar, and Sui wallets

Use a wallet ID with Para's REST signing routes. Para reads its stored wallet type to select the signing format. The
available methods and payload formats depend on that type.

## Choose a signing method

| Operation                               | EVM | Cosmos | Solana | Stellar | Sui |
| --------------------------------------- | --- | ------ | ------ | ------- | --- |
| Sign a message                          | Yes | Yes    | Yes    | Yes     | Yes |
| Sign raw hex bytes                      | Yes | Yes    | Yes    | Yes     | Yes |
| Sign a transaction                      | Yes | No     | Yes    | Yes     | Yes |
| Sign EIP-712 typed data                 | Yes | No     | No     | No      | No  |
| Sign EIP-7702 authorization             | Yes | No     | No     | No      | No  |
| Build a transfer or estimate its fee    | Yes | No     | Yes    | No      | No  |
| Broadcast and track transaction history | Yes | No     | Yes    | No      | No  |

`@getpara/rest-sdk` exposes these routes through `ParaRestClient`. It also provides ethers and viem adapters for EVM and
a Solana v2 signer adapter. Cosmos, Stellar, and Sui use the core client or raw HTTP rather than a chain-specific REST SDK
adapter.

## Initialize the REST SDK

The SDK examples below use one client:

```typescript theme={null}
import { ParaRestClient } from "@getpara/rest-sdk";

const para = new ParaRestClient({
  apiKey: process.env.PARA_API_KEY!,
  env: "BETA",
});
```

## Sign messages

All five wallet types accept one method and body:

```typescript theme={null}
const { signature } = await para.signMessage(walletId, {
  message: "Hello from Para",
});
```

```json theme={null}
{ "message": "Hello from Para" }
```

The wallet's stored `type` determines how Para processes that string. You do not pass a wallet type to `signMessage()` or
to `POST /v1/wallets/{walletId}/sign-message`.

| Wallet type | What Para signs                                  | Signature response              |
| ----------- | ------------------------------------------------ | ------------------------------- |
| `EVM`       | EIP-191-prefixed message, hashed with Keccak-256 | Hex without `0x`                |
| `COSMOS`    | Raw UTF-8 message bytes                          | Hex without `0x`                |
| `SOLANA`    | Raw UTF-8 message bytes                          | Hex without `0x`                |
| `STELLAR`   | Raw UTF-8 message bytes                          | Hex without `0x`                |
| `SUI`       | Sui `PersonalMessage` intent digest              | Base64 serialized Sui signature |

### EVM message

Call the message route with an EVM wallet ID. Para applies EIP-191 automatically.

<CodeGroup>
  ```typescript REST SDK theme={null}
  const { signature } = await para.signMessage(evmWalletId, {
    message: "Hello from EVM",
  });
  ```

  ```bash cURL theme={null}
  curl -X POST "https://api.beta.getpara.com/v1/wallets/$EVM_WALLET_ID/sign-message" \
    -H "X-API-Key: $PARA_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{ "message": "Hello from EVM" }'
  ```
</CodeGroup>

### Cosmos message

Call the message route with a Cosmos wallet ID. Para signs the raw UTF-8 bytes; it does not build an ADR-36 sign document
or a Cosmos transaction envelope.

<CodeGroup>
  ```typescript REST SDK theme={null}
  const { signature } = await para.signMessage(cosmosWalletId, {
    message: "Hello from Cosmos",
  });
  ```

  ```bash cURL theme={null}
  curl -X POST "https://api.beta.getpara.com/v1/wallets/$COSMOS_WALLET_ID/sign-message" \
    -H "X-API-Key: $PARA_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{ "message": "Hello from Cosmos" }'
  ```
</CodeGroup>

### Solana message

Call the message route with a Solana wallet ID. Para signs the raw UTF-8 bytes with Ed25519.

<CodeGroup>
  ```typescript REST SDK theme={null}
  const { signature } = await para.signMessage(solanaWalletId, {
    message: "Hello from Solana",
  });
  ```

  ```bash cURL theme={null}
  curl -X POST "https://api.beta.getpara.com/v1/wallets/$SOLANA_WALLET_ID/sign-message" \
    -H "X-API-Key: $PARA_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{ "message": "Hello from Solana" }'
  ```
</CodeGroup>

Use `createParaRestSolanaSigner()` when your integration expects the Solana v2 signer interface instead of the core REST
response shape.

### Stellar message

Call the message route with a Stellar wallet ID. Para signs the raw UTF-8 bytes with Ed25519; the route does not wrap the
message in a SEP-0053 envelope.

<CodeGroup>
  ```typescript REST SDK theme={null}
  const { signature } = await para.signMessage(stellarWalletId, {
    message: "Hello from Stellar",
  });
  ```

  ```bash cURL theme={null}
  curl -X POST "https://api.beta.getpara.com/v1/wallets/$STELLAR_WALLET_ID/sign-message" \
    -H "X-API-Key: $PARA_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{ "message": "Hello from Stellar" }'
  ```
</CodeGroup>

### Sui message

Call the message route with a Sui wallet ID. Para applies the Sui `PersonalMessage` intent and returns the serialized Sui
signature as base64.

<CodeGroup>
  ```typescript REST SDK theme={null}
  const { signature } = await para.signMessage(suiWalletId, {
    message: "Hello from Sui",
  });
  ```

  ```bash cURL theme={null}
  curl -X POST "https://api.beta.getpara.com/v1/wallets/$SUI_WALLET_ID/sign-message" \
    -H "X-API-Key: $PARA_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{ "message": "Hello from Sui" }'
  ```
</CodeGroup>

## Continue with transaction signing

Use [Transaction signing by wallet type](/v2/rest/transaction-signing) for EVM, Cosmos, Solana, Stellar, and Sui
transaction payloads, EIP-712, EIP-7702, and `sign-raw` guidance.

<Warning>
  REST signing is available only while the wallet remains API-key-managed. After the user claims the wallet, sign through
  a user-facing Para SDK and the user's authenticated session instead.
</Warning>

See [Wallet lifecycle by wallet type](/v2/rest/wallet-lifecycle) to create each wallet type, or use the **Endpoints**
section in the REST API navigation for complete request and response schemas.
