# Get list of public keys Returns a list of all registered public keys Endpoint: GET /public_keys Version: 1.0.0 Security: ApiKeyAuth ## Query parameters: - `limit` (integer) Maximum number of items to return Example: 20 - `page` (integer) Page number for pagination Example: 1 - `search` (string) Search filter for public keys (partial match, case-insensitive) Example: "wallet" - `sort_by` (string) Field to sort results by. Use "-" prefix for descending order Enum: "gid", "-gid", "label", "-label", "derivation_path", "-derivation_path", "created_at", "-created_at", "updated_at", "-updated_at" ## Response 200 fields (application/json): - `items` (array, required) List of public keys - `items.id` (string, required) Unique identifier in UUID format Example: "550e8400-e29b-41d4-a716-446655440000" - `items.value` (string, required) Extended public key encoded in Base58Check format, compliant with BIP32 and SLIP-0132 specifications. An extended public key allows deriving a hierarchy of child public keys and addresses without exposing the corresponding private keys. Supported prefixes and address derivation types: Mainnet - xpub — Legacy P2PKH (BIP44), addresses typically starting with 1 - ypub — SegWit P2SH-P2WPKH (BIP49), addresses typically starting with 3 - zpub — Native SegWit P2WPKH (BIP84), addresses typically starting with bc1 Testnet - tpub — Legacy P2PKH (BIP44) - upub — SegWit P2SH-P2WPKH (BIP49) - vpub — Native SegWit P2WPKH (BIP84) The prefix defines both the address derivation scheme and the target network (mainnet or testnet). The actual address format depends on the selected derivation path and network parameters. Example: "xpub6EFxzN6ZgMCZ1PxeRigmAhm2UBGzXtZNgznCEaWuEt9efBpJwAXFA4ZckBdR1pdMQ1pBgsey7ebjToZ5gYXveftB3zwoQ8NvEkimvyaz34i" - `items.label` (string, required) User-friendly label for the public key Example: "Main Wallet" - `items.derivation_path` (string, required) HD wallet derivation path that identifies the address type, blockchain network, and account. Follows BIP44/49/84 standards with format: m / purpose' / coin_type' / account' / change The purpose field indicates the address type: - 44' for P2PKH addresses (Legacy) - 49' for P2SH-P2WPKH addresses (SegWit) - 84' for P2WPKH addresses (Native SegWit) Common examples: - m/44'/0'/0'/0 — Bitcoin Legacy external addresses - m/44'/0'/0'/1 — Bitcoin Legacy change addresses - m/49'/0'/0'/0 — Bitcoin SegWit external addresses - m/84'/0'/0'/0 — Bitcoin Native SegWit external addresses - m/44'/60'/0'/0 — Ethereum or Binance Smart Chain (BEP20) addresses - m/44'/137'/0'/0 — Polygon addresses - m/44'/714'/0'/0 — Binance Chain (BEP2) addresses The coin_type value follows SLIP-0044 registered coin types (e.g., 0 for Bitcoin, 60 for Ethereum, 137 for Polygon, 714 for Binance Chain). Example: "m/84'/0'/0'/0" - `items.created_at` (string, required) Timestamp when the resource was created Example: "2024-01-15T10:30:00Z" - `items.updated_at` (string, required) Timestamp when the resource was last updated Example: "2024-01-15T10:30:00Z" - `meta` (object, required) - `meta.limit` (integer, required) Number of items per page Example: 20 - `meta.page` (integer, required) Current page number Example: 1 - `meta.total` (integer, required) Total number of items available Example: 42 - `meta.total_pages` (integer, required) Total number of pages available Example: 3 ## Response 400 fields (application/problem+json): - `type` (string, required) A URI reference that identifies the problem type Example: "https://docs.vilna.io/apis/problems/invalid-request" - `title` (string, required) A short, human-readable summary of the problem type Example: "Invalid Request" - `status` (integer, required) The HTTP status code Example: 400 - `detail` (string) A human-readable explanation specific to this occurrence of the problem Example: "Validation error" - `instance` (string) A URI reference that identifies the specific occurrence of the problem Example: "/errors?id=XXXXXX-xxxxx" - `fields` (array) List of invalid fields in the request - `fields.name` (string, required) The name of the invalid field Example: "meta" - `fields.reason` (string, required) Why this field is invalid Example: "Exceeded maximum data size — must not exceed 1000 characters" ## Response default fields (application/problem+json): - `detail` (string) A human-readable explanation specific to this occurrence of the problem Example: "An unexpected error occurred while processing your request" - `instance` (string) A URI reference that identifies the specific occurrence of the problem Example: "/errors/1234567890" - `status` (integer, required) The HTTP status code Example: 500 - `title` (string, required) A short, human-readable summary of the problem type Example: "Internal Server Error" - `type` (string, required) A URI reference that identifies the problem type Example: "https://api.vilna.io/problems/internal-error"