IBExWalletAPI
Privacy

User's data

Authenticated user scope (JWT): aggregator/proxy endpoint returning address, balances, IBANs, signers, transactions, KYC status and address book.

These routes return additional user-scoped data. All require Authorization: Bearer <access_token>.

DataEndpointDocumentation
Wallet addresses (per signer, all chains, Safe modules)GET /v1.2/users/me/addressAddresses
Monitored tokens (per chain)GET /v1.2/users/me/tokensTokens
Token balancesGET /v1.2/users/me/balancesBalances
IBANs linked to the user's safesGET /v1.2/users/me/ibansIBANs
Available lending poolsGET /v1.2/users/me/lendingLending
DeFi positions (AAVE, Morpho, Hyperliquid)GET /v1.2/users/me/poolsPools
Signers (passkeys / EOA)GET /v1.2/users/me/signersSigners
Transaction historyGET /v1.2/users/me/transactionsTransactions
Unified address bookGET /v1.2/users/me/addressbookAddress Book

GET and POST /v1.2/users/me

GET /v1.2/users/me

Aggregator endpoint. It proxies the authenticated user sub-routes and returns a compact response: section payloads are directly exposed at top-level keys.

Proxied sections (7):

  • GET /v1.2/users/me/address
  • GET /v1.2/users/me/balances
  • GET /v1.2/users/me/ibans
  • GET /v1.2/users/me/signers
  • GET /v1.2/users/me/transactions
  • GET /v1.2/users/kyc/status
  • GET /v1.2/users/me/addressbook

Not included in the aggregator (call separately for performance):

  • GET /v1.2/users/me/lending — DeFi lending positions
  • GET /v1.2/users/me/pools — DeFi positions across AAVE, Morpho, Hyperliquid
  • GET /v1.2/safes/vaults — DeFi vault/pool catalog

When one or more sections fail, an optional errors object is added:

  • errors.<section> = { status, message }
  • Failed sections are omitted from top-level section keys

Example (aggregated 200):

{
  "addresses": { "count": 3, "wallets": [ { "safeAddress": "0xE0d2...", "chainIds": [100, 421614] } ] },
  "balances": { "type": "crypto", "identifier": "0xE0d2...", "balance": { "tokens": [] } },
  "ibans": { "count": 5, "ibans": [ { "iban": "FR7616748000017481348099624", "status": "active" } ] },
  "signers": { "count": 2, "signers": [ { "id": "AVZs0...", "type": "PASSKEY" }, { "id": "e8d3...", "type": "EOA" } ] },
  "transactions": { "type": "crypto", "total": 3, "data": [] },
  "kycStatus": { "externalUserId": "604a81ce-7246-41e2-a5fd-92cd1cc29943", "kycLevel": "5", "verified": true },
  "addressbook": { "success": true, "data": [ { "id": "b98af44d-...", "name": "H2R Treasury", "crypto": [], "ibans": [] } ] }
}

Example (partial failure):

{
  "addresses": { "count": 3, "wallets": [] },
  "balances": { "type": "crypto", "identifier": "0xE0d2..." },
  "errors": {
    "transactions": { "status": 500, "message": "Internal server error" }
  }
}

POST /v1.2/users/me

Stores arbitrary flat key/value data for the authenticated user. Identity is taken from the JWT — any user identifier in the body is ignored.

Key prefixBehaviour
private.*Stored; not returned on GET /v1.2/users/me
Other keysPublic for the user; returned inside userdata on GET
audit.*Reserved — stripped from client payloads; the API manages audit metadata (e.g. IP / user-agent history)

Request body:

{
  "data": {
    "email": "jane.doe@example.com",
    "firstName": "Jane",
    "language": "en",
    "optin.newsletter": true,
    "private.apiKey": "sk_live_xxx"
  }
}

Response: { "success": true }


GET
/v1.2/users/me

Authorization

AuthorizationRequiredBearer <token>

In: header

curl -X GET "https://passkeys-testnet.ibex.fi/v1.2/users/me" \
  -H "Authorization: Bearer <token>"

Default Response

{}

POST
/v1.2/users/me

Authorization

AuthorizationRequiredBearer <token>

In: header

Request Body

application/jsonRequired
dataRequiredobject

Flat key/value map. Keys prefixed with private. are stored but never returned by GET.

curl -X POST "https://passkeys-testnet.ibex.fi/v1.2/users/me" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "data": {}
  }'

Default Response

{
  "success": true
}

On this page