Skip to main content
POST
/
accounts
/
{accountId}
/
wallets
/
{walletId}
/
permits
Submit signed permit
curl --request POST \
  --url https://api.venlyfinance.com/v1/accounts/{accountId}/wallets/{walletId}/permits \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "supportedAssetId": "aabbccdd-1122-4334-9556-7788990011ab",
  "signature": {
    "v": "28",
    "r": "0x1111111111111111111111111111111111111111111111111111111111111111",
    "s": "0x2222222222222222222222222222222222222222222222222222222222222222"
  }
}
'
{
  "success": true,
  "result": {
    "id": "11aa22bb-33cc-4dd4-9ee5-66ff77aa88bb",
    "supportedAssetId": "aabbccdd-1122-4334-9556-7788990011ab",
    "asset": "USDC",
    "contractAddress": "0x036CbD53842c5426634e7929541eC2318f3dCF7e",
    "status": "SUBMITTED",
    "permitTxId": "0a9f8e7d-6c5b-4a39-8271-6a5b4c3d2e1f",
    "skipped": false
  }
}
Submits the v/r/s signature for a permit. It moves PENDING → SUBMITTED → CONFIRMED (poll GET .../permits); once all of a wallet’s permits are CONFIRMED the wallet becomes ACTIVE. Re-submitting an already-confirmed permit returns 409.
The signature must recover to the wallet owner, or the permit settles as FAILED. The call returns HTTP 200 with result.status — poll SUBMITTED → CONFIRMED. See Approving transfers without gas.

Authorizations

Path Parameters

accountId
string<uuid>
required

Unique account identifier

walletId
string<uuid>
required

Unique wallet identifier

Body

application/json
supportedAssetId
string<uuid>
required

ID of the supported asset to grant spending permission for

signature
object
required

Response

Permit submitted successfully

success
boolean

Indicates whether the request was successful

result
object