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

# CheckVoiceCallerNameAPI mirrors erdo_voice_caller_name_check: a live lookup


> of what the organization's numbers show when they call — every number, or the one in the body. About a cent per number; org admins only; a number looked up in the last minute is skipped.




## OpenAPI

````yaml /api/openapi.json post /v1/voice/caller-name/lookup
openapi: 3.0.0
info:
  title: Erdo API
  description: >-
    Erdo's REST API: query and write datasets, run agents, manage threads,
    integrations, pages, evals, workstreams, experiments, and bounded outreach.
    Authenticate with a Bearer API key (erdo_api_...) or scoped token
    (erdo_token_...).
  version: '2026-09-24'
servers:
  - url: https://api.erdo.ai
    description: Production
security:
  - bearerAuth: []
paths:
  /v1/voice/caller-name/lookup:
    post:
      summary: >
        CheckVoiceCallerNameAPI mirrors erdo_voice_caller_name_check: a live
        lookup
      description: >
        of what the organization's numbers show when they call — every number,
        or the one in the body. About a cent per number; org admins only; a
        number looked up in the last minute is skipped.
      operationId: POST:mcp.CheckVoiceCallerNameAPI
      requestBody:
        content:
          application/json:
            schema:
              properties:
                phone_number:
                  type: string
              type: object
      responses:
        '200':
          content:
            application/json:
              schema:
                properties:
                  caller_name:
                    $ref: '#/components/schemas/voice.CallerNameStatusResponse'
                  checked:
                    items:
                      type: string
                    type: array
                  failed:
                    items:
                      type: string
                    type: array
                  skipped:
                    items:
                      $ref: '#/components/schemas/voice.CallerNameCheckSkip'
                    type: array
                type: object
          description: Success response
        default:
          $ref: '#/components/responses/APIError'
components:
  schemas:
    voice.CallerNameStatusResponse:
      description: |
        reads it. It carries no provider SID and no credential.
      properties:
        approved_at:
          format: date-time
          type: string
        caller_name:
          description: |
            empty until somebody declares one.
          title: >
            CallerName is the name declared on the business profile, upper case,
            or
          type: string
        caller_name_out_of_date:
          description: >
            was registered: the carriers still show RegisteredName.
            Re-registering replaces it for every number, and re-opens review.
          title: >
            OutOfDate says the business profile's caller name has changed since
            it
          type: boolean
        last_polled_at:
          format: date-time
          type: string
        missing_profile_fields:
          description: |
            caller name: identity, representative, address and caller\_name.
          items:
            type: string
          title: |
            MissingProfileFields is what the business profile still needs for a
          type: array
        next_step:
          title: |
            NextStep is what a pending registration is waiting on.
          type: string
        not_registerable_reason:
          type: string
        numbers:
          description: |
            registration and the name a carrier lookup last showed for it.
          items:
            $ref: '#/components/schemas/voice.CallerNameNumberView'
          title: |
            Numbers is every number the organization holds, with its part in the
          type: array
        reason:
          description: >
            the registration could not proceed — whichever a person has to act
            on.
          title: >
            Reason is Twilio's verdict on a rejection, the last provider error,
            or why
          type: string
        registerable:
          description: >
            attach — every one is on Erdo's own account, the org's own Twilio
            account, toll-free, or outside the US and Canada.
          title: >
            Registerable is false when this organization has no number the flow
            can
          type: boolean
        registered_name:
          description: |
            registration has submitted one.
          title: |
            RegisteredName is the name the carriers were given, empty until a
          type: string
        requested_at:
          format: date-time
          type: string
        review_status:
          title: |
            ReviewStatus is Twilio's own word for the trust product's review.
          type: string
        status:
          title: |
            Status is unregistered, pending, approved or failed.
          type: string
      title: >
        CallerNameStatusResponse is the organization's caller name as every
        surface
      type: object
    voice.CallerNameCheckSkip:
      properties:
        phone_number:
          type: string
        reason:
          type: string
      title: |
        CallerNameCheckSkip is a number the check did not look up, and why.
      type: object
    voice.CallerNameNumberView:
      properties:
        agent_name:
          type: string
        agent_ref:
          description: |
            value the SMS registration list reports as agent\_ref.
          title: >
            AgentRef is the managed voice agent that answers on this number —
            the same
          type: string
        agent_slug:
          type: string
        attach_error:
          type: string
        attachment:
          description: >
            registered), pending (in review), attached, or attaching (approved,
            this number not attached yet).
          title: |
            Attachment is not_registerable, unregistered (the org's name is not
          type: string
        last_check_failed:
          type: boolean
        last_checked_at:
          description: >
            LastCheckFailed says it failed (Observed then still shows the last
            successful answer). A manual check within a minute of it is refused.
          format: date-time
          title: |
            LastCheckedAt is the latest lookup attempt, successful or not, and
          type: string
        not_registerable_reason:
          type: string
        observed:
          description: |
            looked up yet. ObservedName is the name the lookup returned.
          title: |
            Observed is none, ours, other, or empty when the number has not been
          type: string
        observed_at:
          format: date-time
          type: string
        observed_name:
          type: string
        observed_type:
          type: string
        phone_number:
          type: string
        registerable:
          description: |
            reason in words a person should see.
          title: >
            Registerable is false for a number this flow can never attach, with
            the
          type: boolean
      title: |
        CallerNameNumberView is one number's caller-name state.
      type: object
  responses:
    APIError:
      content:
        application/json:
          schema:
            externalDocs:
              url: https://pkg.go.dev/encore.dev/beta/errs#Error
            properties:
              code:
                description: Error code
                example: not_found
                externalDocs:
                  url: https://pkg.go.dev/encore.dev/beta/errs#ErrCode
                type: string
              details:
                description: Error details
                type: object
              message:
                description: Error message
                type: string
            title: APIError
            type: object
      description: Error response
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: An Erdo API key (erdo_api_...) or scoped token (erdo_token_...).

````