Authorize an intent
To authorize an intent, submit an authorization signature to the authorize endpoint:string
required
An authorization signature over the intent’s action.
number
required
Unix timestamp, in milliseconds, when the signature was created. Privy uses it to verify the
signing key was valid at signing time. Must match the
timestamp in the signature
payload.- REST API
- Java SDK
signature is an authorization signature over the intent’s underlying request, generated with the resource owner’s authorization key. Intents use their own payload shape, described in signature payload below.
Signature payload
An intent authorization signature covers the intent’s underlying action, not the authorize request. The payload is the standard signature payload plus two fields specific to intents,timestamp and intent_id. Omitting either one fails verification with Invalid signature.
Sign a JSON object with the following fields:
1
required
Authorization signature version. Currently,
1 is the only version.'POST' | 'PATCH' | 'DELETE'
required
HTTP method of the intent’s underlying action, copied from
request_details.method. This is not
the method of the authorize request.string
required
Full URL of the intent’s underlying action, copied from
request_details.url (e.g.
https://api.privy.io/v1/wallets/{wallet_id}/rpc). This is not the URL of the authorize endpoint.JSON
required
JSON body of the intent’s underlying action, copied from
request_details.body.number
required
Unix timestamp, in milliseconds, when the signature was created. Must match the
timestamp sent
in the authorize request body, and must be within 5 minutes of Privy’s server time.string
required
ID of the intent being authorized. Binds the signature to a single intent so it cannot be replayed
against another.
object
required
JSON object containing only the headers below. Exclude all others, including
privy-idempotency-key, which Privy does not include when verifying intent signatures.privy-authorization-signature header.
Worked example
The example below fetches an intent, builds the payload from itsrequest_details, signs it, and submits the authorization. Because Privy rejects a timestamp more than 5 minutes from its server time, build and sign the payload immediately before submitting it.
Execution
When authorizations meet the resource’s authorization threshold, Privy executes the action automatically. The intent moves from Pending to Processing for asynchronous actions such as transfers, and then to Executed or Failed. Retrieve the outcome by fetching the intent or by listening to theintent.executed webhook. For transaction intents, the action_result field contains the transaction hash. See intent status for details on each status.
Idempotency
Privy records one authorization per signer. Re-submitting the same signer’s authorization is safe: it does not add a duplicate approval or advance the intent past its threshold more than once, and the action executes only once when the threshold is met.Errors
Authorizing an intent returns an error in the following cases:API reference
Authorize intent
View the full API reference for authorizing an intent.
Next steps
Propose intents
Propose an intent to transfer funds, run a transaction, or update a resource.
Intent status
Track an intent from proposal to execution.
Reject intent
Cancel a pending intent before it is authorized and executed.

