# Get addresses derived from public key Returns a list of all addresses derived from this public key. These are HD addresses generated using the public key's derivation path and various indexes. The addresses are sorted by index by default. Endpoint: GET /public_keys/{public_key_id}/addresses Version: 1.0.0 Security: ApiKeyAuth ## Path parameters: - `public_key_id` (string, required) Unique identifier (UUID) of the public key. Example: "550e8400-e29b-41d4-a716-446655440000" ## Query parameters: - `limit` (integer) Maximum number of items to return Example: 20 - `page` (integer) Page number for pagination Example: 1 - `sort_by` (string) Field to sort results by. Use "-" prefix for descending order Enum: "label", "-label", "address", "-address", "created_at", "-created_at", "updated_at", "-updated_at" - `formats` (array) Comma-separated list of address formats to include. Enum: "evm", "solana", "tron", "p2pkh", "p2sh", "p2wpkh", "p2wsh", "p2pkh-testnet", "p2sh-testnet", "p2wpkh-testnet", "p2wsh-testnet" - `search` (string) Performs a partial, case-insensitive match on address or label fields. Example: "bc1q" - `is_archived` (boolean) When true, returns only archived addresses. When false, returns only active ones. ## Response 200 fields (application/json): - `items` (array, required) List of HD addresses derived from the public key - `items.value` (string, required) A blockchain address in its native format. This is a generic schema for any blockchain address, including addresses, smart contract addresses, and token contract addresses. The actual format depends on the blockchain network: - EVM chains (Ethereum, BSC, Polygon, etc.): 0x followed by 40 hexadecimal characters - Example: 0x8521E8b15eCEF4D4269Fded3E6694225E096959E - Bitcoin: Various formats depending on address type - P2PKH (Legacy): Starts with 1, Example: 1GxHzNEymq1MLhxpdWAMJLN1UusYJ2Sy45 - P2SH (Wrapped SegWit): Starts with 3, Example: 3Do92Dmff87UuY9Yiu2iFG2Kj9bpRaeJSF - P2WPKH (Native SegWit): Starts with bc1, Example: bc1q8faxe8g4u2v67qfwf9d8xhyl5tkkkphvet6r08 - Solana: Base58 encoded, 32-44 characters - Example: 5EYCAe5ijiHbZBU14TyKHADUrkaAfc4ZyTXKRVKp49F8 - Tron: Base58 encoded addresses starting with T - Example: TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t - Cosmos ecosystem: Bech32 format with chain-specific prefix - Example: cosmos1vx8knpllrj7n963p9ttd80w47kpacrhuts497x This schema is intentionally generic to support addresses from any blockchain. The specific validation rules depend on the blockchain network and address type. Example: "0x8521E8b15eCEF4D4269Fded3E6694225E096959E" - `items.format` (string, required) Blockchain address format that determines how the address should be interpreted and validated: EVM-compatible blockchains: - evm: Ethereum Virtual Machine compatible address (Ethereum, BSC, Polygon, Arbitrum, etc.) - Format: 0x followed by 40 hexadecimal characters - Example: 0x742d35Cc6634C0532925a3b844Bc454e4438f44e Solana: - solana: Solana address - Format: Base58 encoded, 32-44 characters - Example: 5EYCAe5ijiHbZBU14TyKHADUrkaAfc4ZyTXKRVKp49F8 Tron: - tron: Tron address - Format: Base58 encoded, starts with T - Example: TLyqzVGLV1srkB7dToTAEqgDSfPtXRJZYH Bitcoin mainnet formats: - p2pkh: Pay-to-Public-Key-Hash (Legacy) - Format: Starts with 1 - Example: 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa - p2sh: Pay-to-Script-Hash - Format: Starts with 3 - Example: 3Do92Dmff87UuY9Yiu2iFG2Kj9bpRaeJSF - p2wpkh: Pay-to-Witness-Public-Key-Hash (Native SegWit) - Format: Starts with bc1q - Example: bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh - p2wsh: Pay-to-Witness-Script-Hash (Native SegWit) - Format: Starts with bc1q - Example: bc1qrp33g0q4c70atj6hy6wuahcwxryadxw3kvjahxxxgf7rflwdlcjqqtf3a0 Bitcoin testnet formats: - p2pkh-testnet: Pay-to-Public-Key-Hash (Legacy testnet) - Format: Starts with m or n - Example: mipcBbFg9gMiCh81Kj8tqqdgoZub1ZJRfn - p2sh-testnet: Pay-to-Script-Hash (testnet) - Format: Starts with 2 - Example: 2MzQwSSnBHWHqSAqtTVQ6v47XtaisrJa1Vc - p2wpkh-testnet: Pay-to-Witness-Public-Key-Hash (Native SegWit testnet) - Format: Starts with tb1q - Example: tb1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh - p2wsh-testnet: Pay-to-Witness-Script-Hash (Native SegWit testnet) - Format: Starts with tb1q - Example: tb1qrp33g0q4c70atj6hy6wuahcwxryadxw3kvjahxxxgf7rflwdlcjqqtf3a0 Enum: "evm", "solana", "tron", "p2pkh", "p2sh", "p2wpkh", "p2wsh", "p2pkh-testnet", "p2sh-testnet", "p2wpkh-testnet", "p2wsh-testnet" - `items.label` (string,null) User-friendly label for the address Example: "user_45_deposit" - `items.kind` (string, required) Kind of address in the system: - hd: HD (Hierarchical Deterministic) address derived from an extended public key - external: External address imported directly without derivation Enum: "hd", "external" - `items.meta` (object) Optional metadata as key-value pairs for storing additional information about the address. Total size of all keys and values combined must not exceed 1000 characters. Common use cases: - Tracking user associations (user_id, account_id) - Recording source information (exchange, wallet, service) - Business logic flags (archived, locked, category) - Custom application data Example: {"user_id":"12345","source":"exchange","category":"trading"} - `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" - `items.public_key_id` (string, required) Unique identifier in UUID format Example: "550e8400-e29b-41d4-a716-446655440000" - `items.derivation_index` (integer, required) Address index in the HD wallet derivation sequence Example: 45 - `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 404 fields (application/problem+json): - `type` (string, required) A URI reference that identifies the problem type Example: "https://docs.vilna.io/apis/problems/not-found" - `title` (string, required) A short, human-readable summary of the problem type Example: "Not Found" - `status` (integer, required) The HTTP status code Example: 404 - `detail` (string) A human-readable explanation specific to this occurrence of the problem Example: "The requested resource was not found" - `instance` (string) A URI reference that identifies the specific occurrence of the problem Example: "/errors?id=XXXXXX-xxxxx" ## 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"