> ## Documentation Index
> Fetch the complete documentation index at: https://docs.nikiwa.com/llms.txt
> Use this file to discover all available pages before exploring further.

# resolve_name

> Resolve a blockchain name, ENS (.eth) or SNS (.sol), to its wallet address.

Use this first when you have a name like vitalik.eth or bonfida.sol; pass the resolved address to the wallet tools. service and network tell you which chain the address is on.

**Cost:** 1 credit per call. Calls that return an error are refunded. See [Credits & Pricing](/api-reference/credits).

<Note>
  This example shows the response format. Check `resolved` and the returned address before continuing; name ownership can change.
</Note>

## Reading the result

* `service` is `ens` for `.eth` names and `sns` for `.sol` names. `network` is the chain the address belongs to: `ethereum` or `solana`.

* `address` is the resolved wallet address. Use it only when `resolved` is `true`.

* A name with an unsupported suffix, or a resolver failure, returns `{"status": "no_data"}`. A supported name that has no record returns data with `resolved: false`.


## OpenAPI

````yaml POST /api/tools/resolve_name
openapi: 3.0.3
info:
  title: Nikiwa Tools API
  version: 1.0.0
  description: >-
    Curated blockchain, token, and DeFi market-data tools over authenticated
    HTTP/JSON. Authenticate with a developer key (`nkw_live_...`) carrying the
    `api:call` scope as `Authorization: Bearer <key>`. Each tool is a `POST
    /api/tools/<name>` whose JSON body is the tool's arguments. Each call costs
    credits from the key owner's plan; see the Credits & Pricing page. GET
    /api/tools returns each tool's price in its credits field.
servers:
  - url: https://pro-api.nikiwa.com
security:
  - bearerAuth: []
paths:
  /api/tools/resolve_name:
    post:
      tags:
        - Tools API
      summary: resolve_name
      description: >-
        Resolve a blockchain name, ENS (.eth) or SNS (.sol), to its wallet
        address.


        Use this first when you have a name like vitalik.eth or bonfida.sol;
        pass the resolved address to the wallet tools. service and network tell
        you which chain the address is on.
      operationId: invoke_resolve_name
      parameters:
        - $ref: '#/components/parameters/IdempotencyKey'
        - $ref: '#/components/parameters/CreditCatalogVersion'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: Name to resolve, for example vitalik.eth or bonfida.sol.
              required:
                - name
      responses:
        '200':
          description: >-
            Name resolution result: name is the normalized query; service (ens
            or sns) and network (ethereum or solana) identify the resolver;
            address is the resolved address and resolved reports whether
            resolution succeeded. Check resolved before using address. An
            unsupported or unresolvable name returns status no_data.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
              examples:
                resolvedName:
                  summary: Example ENS response. Check current ownership before use.
                  value:
                    name: vitalik.eth
                    service: ens
                    network: ethereum
                    address: '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045'
                    resolved: true
        '400':
          $ref: '#/components/responses/BodyReadError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/UnknownTool'
        '409':
          $ref: '#/components/responses/CreditConflict'
        '422':
          description: >-
            Invalid tool arguments or request-body validation failure. detail is
            a string for argument binding errors or an array for request
            validation errors.
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/HttpError'
                  - $ref: '#/components/schemas/RequestValidationError'
              examples:
                arguments:
                  summary: Invalid tool arguments
                  value:
                    detail: Invalid arguments for 'resolve_name'.
                invalidJson:
                  summary: Malformed JSON
                  value:
                    detail:
                      - type: json_invalid
                        loc:
                          - body
                          - 1
                        msg: JSON decode error
                        input: {}
                        ctx:
                          error: Expecting property name enclosed in double quotes
        '429':
          $ref: '#/components/responses/ToolUsageLimit'
        '503':
          $ref: '#/components/responses/CreditsUnavailable'
      security:
        - bearerAuth: []
components:
  parameters:
    IdempotencyKey:
      name: Idempotency-Key
      in: header
      required: false
      description: >-
        Optional. Your id for this logical request, 1 to 64 characters. A
        request is charged at most once per key; reusing a key whose request
        completed or is running returns 409 DUPLICATE_REQUEST without running
        the tool.
      schema:
        type: string
        minLength: 1
        maxLength: 64
    CreditCatalogVersion:
      name: X-Credit-Catalog-Version
      in: header
      required: false
      description: >-
        Optional. The price version you expect to be charged at. If prices have
        changed, the call returns 409 PRICE_CHANGED and is not charged. Omit it
        to be charged at the current price.
      schema:
        type: string
        minLength: 1
        maxLength: 32
  responses:
    BodyReadError:
      description: >-
        The server could not read or parse the request body. Malformed JSON
        normally returns 422 instead.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/HttpError'
          examples:
            bodyRead:
              summary: Body parsing failure
              value:
                detail: There was an error parsing the body
    Unauthorized:
      description: Missing, malformed, invalid, revoked, or insufficiently scoped API key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/HttpError'
          examples:
            missingHeader:
              summary: Missing or malformed Authorization header
              value:
                detail: Missing or malformed Authorization header
            invalidKey:
              summary: Invalid key or missing API scope
              value:
                detail: Invalid API key
    UnknownTool:
      description: >-
        Unknown or non-public tool name. Check GET /api/tools for available
        names.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/HttpError'
          examples:
            unknownTool:
              summary: Unknown tool
              value:
                detail: Unknown tool 'unknown_tool'
    CreditConflict:
      description: >-
        The call was not charged and did not run. DUPLICATE_REQUEST: the
        Idempotency-Key was already used by a completed or running request.
        PRICE_CHANGED: prices changed since the X-Credit-Catalog-Version sent.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/CreditError'
          examples:
            duplicate:
              summary: Idempotency-Key already used
              value:
                detail:
                  error_code: DUPLICATE_REQUEST
                  meter: credits
                  plan_id: null
                  limit: null
                  resets_at: null
                  message: This request was already received.
            priceChanged:
              summary: Prices changed (illustrative, partial catalog)
              value:
                detail:
                  error_code: PRICE_CHANGED
                  meter: credits
                  plan_id: null
                  limit: null
                  resets_at: null
                  catalog_version: 2026-10-v1
                  credit_catalog:
                    version: 2026-10-v1
                    chat:
                      fast: 4
                      thinking: 25
                      investigation: 40
                      nikiwa_pro_fast: 5
                      nikiwa_pro_thinking: 92
                      module_refresh: 4
                    tools:
                      get_wallet_pnl: 25
                      resolve_name: 1
                    default_tool_weight: 8
                  message: Credit prices changed. Check the new prices and send again.
    ToolUsageLimit:
      description: >-
        Per-key request rate exceeded, or not enough credits for this call.
        Inspect detail to distinguish the cause. Neither is charged. Plan,
        balance, and reset values in the example are illustrative.
      content:
        application/json:
          schema:
            oneOf:
              - $ref: '#/components/schemas/HttpError'
              - $ref: '#/components/schemas/CreditError'
          examples:
            rateLimit:
              summary: Per-key rate limit
              value:
                detail: Rate limit exceeded
            credits:
              summary: Not enough credits (illustrative values)
              value:
                detail:
                  error_code: PLAN_LIMIT_REACHED
                  meter: credits
                  plan_id: plus
                  limit: 600
                  resets_at: '2026-10-14T09:30:00+00:00'
                  balance: 3
                  required: 8
                  message: >-
                    Not enough credits for this request (needs 8, 3 left).
                    Upgrade your plan or wait for your credits to refresh.
      headers:
        Retry-After:
          description: >-
            Seconds until credits refresh, for PLAN_LIMIT_REACHED when the
            refresh time is known. Not sent by the per-key rate limiter.
          schema:
            type: string
          example: '3600'
    CreditsUnavailable:
      description: >-
        Credits could not be checked, so the call was not charged and did not
        run. Retry after Retry-After seconds.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/CreditError'
          examples:
            unavailable:
              summary: Credits temporarily unavailable
              value:
                detail:
                  error_code: CREDITS_UNAVAILABLE
                  meter: credits
                  plan_id: null
                  limit: null
                  resets_at: null
                  retryable: true
                  message: Credits are temporarily unavailable. Please try again.
      headers:
        Retry-After:
          description: Seconds to wait before retrying.
          schema:
            type: string
          example: '1'
  schemas:
    HttpError:
      type: object
      required:
        - detail
      properties:
        detail:
          type: string
          description: Explanation of the rejected request.
    RequestValidationError:
      type: object
      required:
        - detail
      properties:
        detail:
          type: array
          description: Request validation failures. Available fields depend on the failure.
          items:
            type: object
            required:
              - loc
              - msg
              - type
            properties:
              loc:
                type: array
                items:
                  oneOf:
                    - type: string
                    - type: integer
                description: Location of the invalid value in the request.
              msg:
                type: string
              type:
                type: string
              input:
                description: Rejected input, when included.
              ctx:
                type: object
                additionalProperties: true
                description: Additional validation context, when included.
    CreditError:
      type: object
      required:
        - detail
      properties:
        detail:
          type: object
          required:
            - error_code
            - meter
            - plan_id
            - limit
            - resets_at
            - message
          properties:
            error_code:
              type: string
              enum:
                - PLAN_LIMIT_REACHED
                - DUPLICATE_REQUEST
                - PRICE_CHANGED
                - CREDITS_UNAVAILABLE
              description: >-
                Why the call was refused. A refused call is not charged and does
                not run.
            meter:
              type: string
              description: The limited resource. Tool calls use credits.
            plan_id:
              type: string
              nullable: true
              description: Plan of the key owner, for PLAN_LIMIT_REACHED; otherwise null.
            limit:
              type: integer
              nullable: true
              description: >-
                Monthly credit allowance, for PLAN_LIMIT_REACHED; otherwise
                null.
            resets_at:
              type: string
              format: date-time
              nullable: true
              description: When credits refresh, or null if not known.
            balance:
              type: integer
              description: Credits left. PLAN_LIMIT_REACHED only.
            required:
              type: integer
              description: Credits this call costs. PLAN_LIMIT_REACHED only.
            retryable:
              type: boolean
              description: true for CREDITS_UNAVAILABLE.
            catalog_version:
              type: string
              description: Current price version. PRICE_CHANGED only.
            credit_catalog:
              type: object
              additionalProperties: true
              description: >-
                Current prices: version, chat, tools, and default_tool_weight.
                PRICE_CHANGED only.
            message:
              type: string
              description: Human-readable explanation.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer

````