---
title: "Create raw sign intent"
method: POST
path: "/v1/intents/wallets/{wallet_id}/raw_sign"
tags: ["Intents"]
---

# Create raw sign intent

`POST /v1/intents/wallets/{wallet_id}/raw_sign`

## Request

- Base URL: `https://api.privy.io`
- URL: `https://api.privy.io/v1/intents/wallets/{wallet_id}/raw_sign`
- Auth: HTTP basic

Create an intent to sign a raw hash or bytes with a wallet. The intent must be authorized by either the wallet owner or signers before it can be executed.

## Path parameters

- `wallet_id` string, required: ID of the wallet.

## Headers

- `privy-app-id` string, required: ID of your Privy app.
- `privy-request-expiry` string: Request expiry. Value is a Unix timestamp in milliseconds representing the deadline by which the request must be processed.

## Request body

- RawSignInput: Provide either `hash` (to sign a pre-computed hash) OR `bytes`, `encoding`, and `hash_function` (to hash and then sign). These options are mutually exclusive.
  - `params` union, required: Parameters for the `raw_sign` RPC.
    - object: Parameters for signing a pre-computed hash with the `raw_sign` RPC.
      - `hash` string, required: The hash to sign.
    - object: Parameters for hashing and signing bytes with the `raw_sign` RPC.
      - `bytes` string, required: The bytes to hash and sign.
      - `encoding` 'utf-8' | 'hex' | 'base64', required: Encoding scheme for the bytes.
      - `hash_function` 'keccak256' | 'sha256' | 'blake2b256', required: Hash function to use for the bytes.

## Response `200`

Created raw sign intent.

- RawSignIntentResponse: Response for a raw sign intent
  - `intent_id` string, required: Unique ID for the intent
  - `created_by_display_name` string, required: Display name of the user who created the intent
  - `created_by_id` string: ID of the user who created the intent. If undefined, the intent was created using the app secret
  - `created_at` number, required: Unix timestamp when the intent was created
  - `resource_id` string, required: ID of the resource being modified (wallet_id, policy_id, etc)
  - `authorization_details` IntentAuthorization[], required: Detailed authorization information including key quorum members, thresholds, and signature status
    - `members` IntentAuthorizationMember[], required: Members in this authorization quorum
      - union: A member of an intent authorization quorum. Can be a user, key, or nested key quorum.
        - object: A user member of an intent authorization quorum.
          - `type` 'user', required
          - `user_id` string, required: User ID of the key quorum member
          - `signed_at` number, nullable, required: Unix timestamp when this member signed, or null if not yet signed.
        - object: A key member of an intent authorization quorum.
          - `type` 'key', required
          - `public_key` string, required: Public key of the key quorum member
          - `signed_at` number, nullable, required: Unix timestamp when this member signed, or null if not yet signed.
        - object: A nested key quorum member of an intent authorization quorum.
          - `type` 'key_quorum', required
          - `key_quorum_id` string, required: ID of the child key quorum member
          - `display_name` string: Display name for the child key quorum (if any)
          - `threshold_met` boolean, required: Whether this child key quorum has met its signature threshold
          - `threshold` number, required: Number of signatures required from this child quorum
          - `members` IntentAuthorizationKeyQuorumMember[], required: Members of this child quorum
            - union: A leaf member (user or key) of a nested key quorum in an intent authorization.
              - …
    - `threshold` number, required: Number of signatures required to satisfy this quorum
    - `display_name` string: Display name of the key quorum
  - `status` 'pending' | 'processing' | 'executed' | 'failed' | 'expired' | 'rejected' | 'dismissed', required: Current status of an intent.
  - `custom_expiry` boolean, required: Whether this intent has a custom expiry time set by the client. If false, the intent expires after a default duration.
  - `expires_at` number, required: Unix timestamp when the intent expires
  - `rejected_at` number: Unix timestamp when the intent was rejected, present when status is 'rejected'
  - `dismissed_at` number: Unix timestamp when the intent was dismissed, present when status is 'dismissed'
  - `dismissal_reason` string: Human-readable reason for dismissal, present when status is 'dismissed'
  - `intent_type` 'RAW_SIGN', required
  - `request_details` object, required: The original raw sign request that would be sent to the wallet endpoint
    - `method` 'POST', required
    - `url` string, required
    - `body` RawSignInput, required: Provide either `hash` (to sign a pre-computed hash) OR `bytes`, `encoding`, and `hash_function` (to hash and then sign). These options are mutually exclusive.
      - `params` union, required: Parameters for the `raw_sign` RPC.
        - object: Parameters for signing a pre-computed hash with the `raw_sign` RPC.
          - `hash` string, required: The hash to sign.
        - object: Parameters for hashing and signing bytes with the `raw_sign` RPC.
          - `bytes` string, required: The bytes to hash and sign.
          - `encoding` 'utf-8' | 'hex' | 'base64', required: Encoding scheme for the bytes.
          - `hash_function` 'keccak256' | 'sha256' | 'blake2b256', required: Hash function to use for the bytes.
  - `current_resource_data` object: Current state of the wallet before any changes. If undefined, the resource was deleted and no longer exists
    - `id` string, required: Unique ID of the wallet. This will be the primary identifier when using the wallet in the future.
    - `address` string, required: Address of the wallet.
    - `display_name` string: A human-readable label for the wallet.
    - `external_id` string: A customer-provided identifier for mapping to external systems. URL-safe characters only ([a-zA-Z0-9_-]), max 64 chars. Write-once: cannot be changed once set.
    - `public_key` string: The compressed, raw public key for the wallet along the chain cryptographic curve.
    - `created_at` number, required: Unix timestamp of when the wallet was created in milliseconds.
    - `chain_type` 'ethereum' | 'solana' | 'cosmos' | 'stellar' | 'sui' | 'aptos' | 'movement' | 'tron' | 'bitcoin-segwit' | 'bitcoin-taproot' | 'pearl' | 'near' | 'ton' | 'starknet' | 'xrpl' | 'spark', required: The wallet chain types.
    - `policy_ids` string[], required: List of policy IDs for policies that are enforced on the wallet.
    - `owner_id` string, cuid2, nullable, required: The key quorum ID of the owner of the wallet.
    - `parent_wallet_id` string, nullable: ID of the HD root wallet this wallet was derived from, or null if it was not derived from another wallet.
    - `entity` WalletEntity: The entity a wallet is attributed to.
      - `id` string, required: A Privy entity ID.
      - `type` 'user' | 'organization', required: The type of entity a wallet is attributed to.
    - `additional_signers` WalletAdditionalSignerItem[], required: Additional signers for the wallet.
      - `signer_id` string, cuid2, required: A unique identifier for a key quorum.
      - `override_policy_ids` string[]: An optional list of up to one policy ID to enforce on the wallet.
    - `exported_at` number, nullable, required: Unix timestamp of when the wallet was exported in milliseconds, if the wallet was exported.
    - `imported_at` number, nullable, required: Unix timestamp of when the wallet was imported in milliseconds, if the wallet was imported.
    - `authorization_threshold` number: The number of keys that must sign for an action to be valid.
    - `automations` AttachedWalletAutomation[]: Automations attached to the wallet, including disabled ones.
      - `id` string, required: ID of the automation.
      - `enabled` boolean, required: Whether this attachment is currently active — true only if both the attachment and the underlying automation are enabled.
    - `archived_at` number, nullable: Unix timestamp of when the wallet was archived in milliseconds, or null if the wallet is active.
    - `chain` 'base' | 'solana' | 'tempo': The chain of this wallet, only present for custodial wallets.
    - `custody` WalletCustodian: Information about the custodian managing this wallet.
      - `provider` string, required: The custodian responsible for the wallet.
      - `provider_user_id` string, required: The resource ID of the beneficiary of the custodial wallet.
  - `action_result` object: Result of raw sign execution (only present if status is 'executed' or 'failed')
    - `status_code` number, required: HTTP status code from the action execution
    - `executed_at` number, required: Unix timestamp when the action was executed
    - `authorized_by_display_name` string: Display name of the key quorum that authorized execution
    - `authorized_by_id` string: ID of the key quorum that authorized execution
    - `response_body` RawSignResponse, required: Response to the `raw_sign` RPC.
      - `method` 'raw_sign', required
      - `data` RawSignResponseData, required: Data returned by the `raw_sign` RPC.
        - `signature` string, required: A hex-encoded string prefixed with '0x', capped at 300002 characters (150,000 bytes).
        - `encoding` 'hex', required

## Changes

- **2026-10-16** `4facbfa7f9d4`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/privy-io/apis/privy-api/changes/v1/intents/wallets/:wallet_id/raw_sign/post.md)

---

[API](https://skmtc.dev/privy-io/apis/privy-api.md) - [All operations](https://skmtc.dev/privy-io/apis/privy-api/llms.txt) - [OpenAPI document](https://skmtc.dev/privy-io/apis/privy-api/revisions/3a2288470053?raw)
