The Mobile First Company Power Dialer API

The Power Dialer API from The Mobile First Company — 2 operation(s) for power dialer.

OpenAPI Specification

the-mobile-first-company-power-dialer-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Allo Analytics Power Dialer API
  description: 'Allo API provides programmatic access to your Allo account, allowing you to manage webhooks, retrieve calls and contacts, and send SMS messages.


    All requests to `/v1/api/**` endpoints automatically go through quota checking and scope validation.'
  version: 1.0.0
  contact:
    name: Allo Support
servers:
- url: https://api.withallo.com
  description: Production server
tags:
- name: Power Dialer
paths:
  /v2/api/dialing-queues/current:
    get:
      summary: List current queue numbers
      description: Returns the numbers in the Power Dialer queue currently assigned to the authenticated user, paginated and ordered by `position` ascending. `data` is the list of numbers (use `page`/`size` and read `pagination` to page through them); the `queue` key carries the queue's metadata (id, name, settings) without its numbers. To target a teammate's queue, pass either `user_id` or `email` as a query parameter (`user_id` wins when both are sent); the target must belong to the same team as the API key owner. When the user has no queue, the response is `200` with an empty `data` array, a zeroed `pagination`, and no `queue` (not a `404`).
      operationId: getCurrentDialingQueue
      tags:
      - Power Dialer
      security:
      - ApiKeyAuth: []
      parameters:
      - name: user_id
        in: query
        required: false
        description: ID of a teammate to read the queue for. Resolve teammate ids via [GET /v2/api/users](/en/v2/api-reference/users/list-users). Wins over `email` when both are provided.
        schema:
          type: string
          example: usr-15BB68317A7F06F0C07A3BBD8F244102A6872220
      - name: email
        in: query
        required: false
        description: Email of a teammate to read the queue for. Ignored when `user_id` is also supplied.
        schema:
          type: string
          format: email
          example: teammate@acme.com
      - name: page
        in: query
        required: false
        description: 1-indexed page number for the queue's `numbers`.
        schema:
          type: integer
          default: 1
          minimum: 1
          example: 1
      - name: size
        in: query
        required: false
        description: Number of `numbers` per page (max 100).
        schema:
          type: integer
          default: 20
          maximum: 100
          example: 20
      responses:
        '200':
          description: A page of the current queue's numbers, ordered by position. Empty `data` array with zeroed `pagination` when the user has no queue.
          content:
            application/json:
              schema:
                allOf:
                - type: object
                  properties:
                    data:
                      type: array
                      items:
                        $ref: '#/components/schemas/QueueNumber'
                    queue:
                      $ref: '#/components/schemas/DialingQueueMeta'
                - $ref: '#/components/schemas/PaginatedResponse'
              example:
                data:
                - number_to: '+12125550010'
                  position: 0
                  created_at: '2026-04-30T10:00:00'
                  updated_at: '2026-04-30T10:00:00'
                  call_start_date: null
                  call_id: null
                  routing_result: null
                  sync_status: NOT_SYNCED
                pagination:
                  page: 1
                  size: 20
                  total_count: 137
                  total_pages: 7
                  has_more: true
                queue:
                  id: pdl_2xGh7kLmNpQr
                  name: My Queue
                  creator_id: usr_abc123
                  assignee_id: usr_abc123
                  voicemail_handling: NO_SKIP
                  do_not_disturb: DISABLED
                  created_at: '2026-04-30T10:00:00'
                  updated_at: '2026-04-30T10:00:00'
        '401':
          $ref: '#/components/responses/ApiUnauthorized'
        '404':
          description: Assignee not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorResponse'
              examples:
                assignee_not_found:
                  summary: user_id or email does not match a teammate
                  value:
                    error:
                      type: not_found_error
                      code: ASSIGNEE_NOT_FOUND
                      message: No team member found for the provided 'user_id' or 'email'.
                      retryable: false
                      suggestion: List your teammates with GET /v2/api/users and use one of their ids as 'user_id', or pass a team-member email.
        '429':
          $ref: '#/components/responses/ApiRateLimited'
    post:
      summary: Reset current queue
      description: Creates a fresh, empty queue assigned to the authenticated user. Any older queue with the same assignee stops being returned by `GET /current` (the newest queue wins). Send `user_id` or `email` to create the queue for a teammate instead — the API key owner is recorded as `creator_id`, the teammate as `assignee_id`. `user_id` wins when both are provided.
      operationId: resetCurrentDialingQueue
      tags:
      - Power Dialer
      security:
      - ApiKeyAuth: []
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ResetDialingQueueRequest'
            examples:
              self:
                summary: Reset your own queue
                value:
                  name: Monday cold calls
              teammate_by_pid:
                summary: Reset a teammate's queue by user_id
                value:
                  name: Monday cold calls
                  user_id: usr-15BB68317A7F06F0C07A3BBD8F244102A6872220
              teammate_by_email:
                summary: Reset a teammate's queue by email
                value:
                  name: Monday cold calls
                  email: teammate@acme.com
      responses:
        '200':
          description: The newly created (empty) queue
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/DialingQueue'
              example:
                data:
                  id: pdl_2xGh7kLmNpQr
                  name: Monday cold calls
                  creator_id: usr_abc123
                  assignee_id: usr_abc123
                  voicemail_handling: NO_SKIP
                  do_not_disturb: DISABLED
                  numbers: []
                  created_at: '2026-05-06T10:00:00'
                  updated_at: '2026-05-06T10:00:00'
        '400':
          $ref: '#/components/responses/ApiValidationError'
        '401':
          $ref: '#/components/responses/ApiUnauthorized'
        '404':
          description: Authenticated user or assignee not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorResponse'
              examples:
                user_not_found:
                  summary: Authenticated user not found
                  value:
                    error:
                      type: not_found_error
                      code: USER_NOT_FOUND
                      message: User not found.
                      retryable: false
                assignee_not_found:
                  summary: user_id or email does not match a teammate
                  value:
                    error:
                      type: not_found_error
                      code: ASSIGNEE_NOT_FOUND
                      message: No team member found for the provided 'user_id' or 'email'.
                      retryable: false
                      suggestion: List your teammates with GET /v2/api/users and use one of their ids as 'user_id', or pass a team-member email.
        '429':
          $ref: '#/components/responses/ApiRateLimited'
    patch:
      summary: Upsert current queue
      description: Creates or updates the config of the queue assigned to the authenticated user. Send `user_id` or `email` to act on a teammate's queue instead — `user_id` wins when both are provided.
      operationId: upsertCurrentDialingQueue
      tags:
      - Power Dialer
      security:
      - ApiKeyAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpsertDialingQueueRequest'
            examples:
              self:
                summary: Update your own queue
                value:
                  name: Cold Calls
              teammate_by_pid:
                summary: Update a teammate's queue by user_id
                value:
                  name: Cold Calls
                  user_id: usr-15BB68317A7F06F0C07A3BBD8F244102A6872220
      responses:
        '200':
          description: Updated queue
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/DialingQueue'
        '400':
          $ref: '#/components/responses/ApiValidationError'
        '401':
          $ref: '#/components/responses/ApiUnauthorized'
        '404':
          description: Assignee not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorResponse'
              example:
                error:
                  type: not_found_error
                  code: ASSIGNEE_NOT_FOUND
                  message: No team member found for the provided 'user_id' or 'email'.
                  retryable: false
                  suggestion: List your teammates with GET /v2/api/users and use one of their ids as 'user_id', or pass a team-member email.
        '429':
          $ref: '#/components/responses/ApiRateLimited'
  /v2/api/dialing-queues/current/numbers:
    post:
      summary: Append numbers to queue
      description: Appends phone numbers to the Power Dialer queue assigned to the authenticated user. Creates the queue implicitly if none exists. Send `user_id` or `email` to append to a teammate's queue — if that teammate has no current queue, one is created with the API key owner as `creator_id` and the teammate as `assignee_id`. `user_id` wins when both are provided.
      operationId: appendDialingQueueNumbers
      tags:
      - Power Dialer
      security:
      - ApiKeyAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AppendQueueNumbersRequest'
            examples:
              self:
                summary: Append to your own queue
                value:
                  numbers:
                  - number: +1 (212) 555-0010
                    name: John
                    last_name: Doe
                    company: Acme Inc
                    job_title: Sales Manager
                    emails:
                    - john.doe@acme.com
                    website: https://acme.com
                  - number: +33 6 12 34 56 78
                    name: Marie
                    last_name: Dupont
                    company: Acme Inc
                  - number: +44 20 7946 0958
              teammate_by_pid:
                summary: Append to a teammate's queue by user_id
                value:
                  user_id: usr-15BB68317A7F06F0C07A3BBD8F244102A6872220
                  numbers:
                  - number: '+12125550010'
                    name: John
                    last_name: Doe
              teammate_by_email:
                summary: Append to a teammate's queue by email
                value:
                  email: teammate@acme.com
                  numbers:
                  - number: '+12125550010'
                    name: John
                    last_name: Doe
      responses:
        '200':
          description: Numbers appended
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/AppendQueueNumbersResponse'
              example:
                data:
                  added:
                  - number_to: '+12125550010'
                    position: 0
                    created_at: '2026-04-30T10:00:00'
                    updated_at: '2026-04-30T10:00:00'
                  - number_to: '+33612345678'
                    position: 1
                    created_at: '2026-04-30T10:00:00'
                    updated_at: '2026-04-30T10:00:00'
                  skipped: []
        '400':
          description: Queue limit reached or validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorResponse'
              example:
                error:
                  type: validation_error
                  code: DIALING_QUEUE_LIMIT_REACHED
                  message: The dialing queue cannot exceed 1,000 numbers.
                  retryable: false
        '401':
          $ref: '#/components/responses/ApiUnauthorized'
        '404':
          description: Assignee not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorResponse'
              example:
                error:
                  type: not_found_error
                  code: ASSIGNEE_NOT_FOUND
                  message: No team member found for the provided 'user_id' or 'email'.
                  retryable: false
                  suggestion: List your teammates with GET /v2/api/users and use one of their ids as 'user_id', or pass a team-member email.
        '409':
          description: Concurrent append conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorResponse'
              example:
                error:
                  type: conflict_error
                  code: DIALING_QUEUE_APPEND_CONFLICT
                  message: A concurrent append to this queue caused a position conflict.
                  retryable: false
                  suggestion: Retry the request — the conflict resolves on the next attempt.
        '429':
          $ref: '#/components/responses/ApiRateLimited'
    delete:
      summary: Clear queue numbers
      description: 'Removes numbers from the queue assigned to the authenticated user. Exactly one filter must be supplied via query string: `number` (E.164), `position` (0-based index), `number` + `position` together (delete a specific occurrence of a duplicate), or `unassigned=true` (remove every entry that has not been called yet). Combining `unassigned` with `number` or `position` is rejected. Pass `user_id` or `email` to clear a teammate''s queue instead — `user_id` wins when both are provided.'
      operationId: clearDialingQueueNumbers
      tags:
      - Power Dialer
      security:
      - ApiKeyAuth: []
      parameters:
      - name: number
        in: query
        required: false
        description: Phone number to remove (any format — normalized to E.164). Removes every entry matching this number unless `position` is also supplied.
        schema:
          type: string
          example: '+12125550010'
      - name: position
        in: query
        required: false
        description: 0-based position to remove. Combine with `number` to disambiguate when the same number appears more than once.
        schema:
          type: integer
          minimum: 0
          example: 3
      - name: unassigned
        in: query
        required: false
        description: When `true`, removes every queue entry that has not been called yet. Cannot be combined with `number` or `position`.
        schema:
          type: boolean
          example: true
      - name: user_id
        in: query
        required: false
        description: ID of a teammate whose queue to clear. Resolve teammate ids via [GET /v2/api/users](/en/v2/api-reference/users/list-users). Wins over `email` when both are provided.
        schema:
          type: string
          example: usr-15BB68317A7F06F0C07A3BBD8F244102A6872220
      - name: email
        in: query
        required: false
        description: Email of a teammate whose queue to clear. Ignored when `user_id` is also supplied.
        schema:
          type: string
          format: email
          example: teammate@acme.com
      responses:
        '200':
          description: Numbers removed
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/ClearQueueNumbersResponse'
              example:
                data:
                  removed: 4
        '400':
          description: Filter missing or conflicting
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorResponse'
              examples:
                filter_required:
                  summary: No filter supplied
                  value:
                    error:
                      type: validation_error
                      code: DIALING_QUEUE_DELETE_FILTER_REQUIRED
                      message: Provide at least one of 'number', 'position', or 'unassigned=true' to clear queue numbers.
                      retryable: false
                      suggestion: Add 'number', 'position', or 'unassigned=true' as a query parameter.
                filter_conflict:
                  summary: unassigned combined with number/position
                  value:
                    error:
                      type: validation_error
                      code: DIALING_QUEUE_DELETE_FILTER_CONFLICT
                      message: '''unassigned=true'' cannot be combined with ''number'' or ''position''.'
                      retryable: false
                      suggestion: Use 'unassigned=true' alone, or remove it and rely on 'number'/'position'.
                invalid_phone_number:
                  summary: number is not a valid E.164 number
                  value:
                    error:
                      type: validation_error
                      code: INVALID_PHONE_NUMBER
                      message: The phone number '+1212' is not a valid E.164 number.
                      retryable: false
                      param: number
                      suggestion: Provide a valid E.164 phone number (e.g., +33612345678).
        '401':
          $ref: '#/components/responses/ApiUnauthorized'
        '404':
          description: Queue or position not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorResponse'
              examples:
                queue_not_found:
                  summary: User has no Power Dialer queue
                  value:
                    error:
                      type: not_found_error
                      code: DIALING_QUEUE_NOT_FOUND
                      message: No dialing queue found for the authenticated user.
                      retryable: false
                      suggestion: Create a queue by appending numbers with POST /v2/api/dialing-queues/current/numbers.
                position_not_found:
                  summary: No entry at the requested position
                  value:
                    error:
                      type: not_found_error
                      code: QUEUE_NUMBER_POSITION_NOT_FOUND
                      message: No queue number found at position 7.
                      retryable: false
                      param: position
                      suggestion: Fetch the current queue with GET /v2/api/dialing-queues/current to see existing positions.
                assignee_not_found:
                  summary: user_id or email does not match a teammate
                  value:
                    error:
                      type: not_found_error
                      code: ASSIGNEE_NOT_FOUND
                      message: No team member found for the provided 'user_id' or 'email'.
                      retryable: false
                      suggestion: List your teammates with GET /v2/api/users and use one of their ids as 'user_id', or pass a team-member email.
        '429':
          $ref: '#/components/responses/ApiRateLimited'
components:
  responses:
    ApiRateLimited:
      description: Rate limit exceeded
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError'
    ApiUnauthorized:
      description: Invalid or missing API key
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError'
    ApiValidationError:
      description: Invalid request parameters
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError'
  schemas:
    ClearQueueNumbersResponse:
      type: object
      description: Result of clearing numbers from a Power Dialer queue.
      properties:
        removed:
          type: integer
          description: Number of queue entries that were removed.
          example: 4
    UpsertDialingQueueRequest:
      type: object
      description: Creates or updates the queue config. All fields are optional — only the fields you supply are touched. Pass `user_id` or `email` to act on a teammate's queue instead.
      properties:
        name:
          type: string
          nullable: true
          description: New queue name (1–255 characters)
          minLength: 1
          maxLength: 255
        voicemail_handling:
          type: string
          nullable: true
          enum:
          - SKIP
          - NO_SKIP
          description: How the Power Dialer reacts when the call hits voicemail.
        do_not_disturb:
          type: string
          nullable: true
          enum:
          - ENABLED
          - DISABLED
          description: Silence inbound calls while running the queue.
        user_id:
          type: string
          nullable: true
          description: Optional. ID of a teammate whose queue config should be updated. The teammate must belong to the same team as the API key owner. Wins over `email` when both are provided.
          example: usr-15BB68317A7F06F0C07A3BBD8F244102A6872220
        email:
          type: string
          format: email
          nullable: true
          description: Optional. Email of a teammate whose queue config should be updated. Ignored when `user_id` is also supplied.
          example: teammate@acme.com
    AppendQueueNumbersResponse:
      type: object
      properties:
        added:
          type: array
          description: Numbers that were successfully appended
          items:
            $ref: '#/components/schemas/QueueNumber'
        skipped:
          type: array
          description: Numbers that were skipped (e.g. invalid format)
          items:
            type: object
            properties:
              number:
                type: string
                description: The raw input number that was skipped
              reason:
                type: string
                enum:
                - INVALID_PHONE_NUMBER
                description: Why the number was skipped
    QueueNumber:
      type: object
      description: A phone number entry in a Power Dialer queue
      properties:
        number_to:
          type: string
          description: E.164 destination phone number
        position:
          type: integer
          description: Order within the queue (0-based)
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
        call_start_date:
          type: string
          format: date-time
          nullable: true
          description: When the user started calling this entry. `null` if the entry is still unassigned.
        call_id:
          type: string
          nullable: true
          description: ID of the call placed for this entry (`cll-*`). `null` until a call is placed.
        routing_result:
          type: string
          nullable: true
          enum:
          - FAILED
          - RECEIVED
          - BLOCKED
          - ANSWERED
          - TRANSFERRED_BLAND
          - TRANSFERRED_ELEVEN_LABS
          - TRANSFERRED_EXTERNAL
          - FAILED_EXTERNAL
          - VOICEMAIL
          - CLOSED
          description: Final routing outcome of the call placed for this entry.
        sync_status:
          type: string
          enum:
          - NOT_SYNCED
          - PROCESSING
          - SYNCED
          description: State of contact creation/sync for this entry.
        detected_outbound_voicemail:
          type: boolean
          nullable: true
          description: Whether the call was detected as having reached a voicemail box.
        not_reached_destination_reason:
          type: string
          nullable: true
          enum:
          - BUSY
          - CALLEE_TEMPORARILY_UNAVAILABLE
          - RING_TIMEOUT
          - NOT_IN_SERVICE
          - DECLINED
          - NETWORK_ERROR
          description: Why the call did not reach the contact (only set when applicable).
        voicemail_left:
          type: boolean
          nullable: true
          description: Whether the user left a voicemail on this entry.
    PaginatedResponse:
      type: object
      properties:
        pagination:
          $ref: '#/components/schemas/Pagination'
    AppendQueueNumbersRequest:
      type: object
      required:
      - numbers
      properties:
        numbers:
          type: array
          description: Numbers to append to the queue. Each entry requires a phone number; contact metadata is optional.
          minItems: 1
          items:
            type: object
            required:
            - number
            properties:
              number:
                type: string
                description: Phone number in any format — will be normalized to E.164
              name:
                type: string
                nullable: true
                description: First name (optional — used to create or match a contact)
              last_name:
                type: string
                nullable: true
                description: Last name
              company:
                type: string
                nullable: true
                description: Company name — matched by name within the team (case-insensitive). If no matching company exists, one is created automatically.
              website:
                type: string
                nullable: true
                description: Website URL
              job_title:
                type: string
                nullable: true
                description: Job title
              emails:
                type: array
                nullable: true
                items:
                  type: string
                description: Email addresses
              addresses:
                type: array
                nullable: true
                items:
                  type: string
                description: Physical addresses
        user_id:
          type: string
          nullable: true
          description: Optional. ID of a teammate whose queue should receive the numbers. The teammate must belong to the same team as the API key owner. Wins over `email` when both are provided. Resolve teammate ids via [GET /v2/api/users](/en/v2/api-reference/users/list-users).
          example: usr-15BB68317A7F06F0C07A3BBD8F244102A6872220
        email:
          type: string
          format: email
          nullable: true
          description: Optional. Email of a teammate whose queue should receive the numbers. Ignored when `user_id` is also supplied.
          example: teammate@acme.com
    Pagination:
      type: object
      properties:
        page:
          type: integer
        size:
          type: integer
        total_count:
          type: integer
        total_pages:
          type: integer
        has_more:
          type: boolean
    ApiError:
      type: object
      properties:
        error:
          type: object
          properties:
            type:
              type: string
            code:
              type: string
            message:
              type: string
            retryable:
              type: boolean
            request_id:
              type: string
            retry_after_seconds:
              type: integer
              nullable: true
    ResetDialingQueueRequest:
      type: object
      description: Optional payload for resetting a queue. Send an empty body to reset your own queue without renaming.
      properties:
        name:
          type: string
          nullable: true
          description: Display name for the new queue (max 255 characters). Leave unset to create the queue without a name.
          maxLength: 255
        user_id:
          type: string
          nullable: true
          description: Optional. ID of a teammate the new queue should be assigned to. The API key owner is recorded as `creator_id`. The teammate must belong to the same team as the API key owner. Wins over `email` when both are provided.
          example: usr-15BB68317A7F06F0C07A3BBD8F244102A6872220
        email:
          type: string
          format: email
          nullable: true
          description: Optional. Email of a teammate the new queue should be assigned to. Ignored when `user_id` is also supplied.
          example: teammate@acme.com
    DialingQueue:
      type: object
      description: A user's Power Dialer queue with its configuration and numbers.
      properties:
        id:
          type: string
          description: Unique queue identifier (KSUID with `pdl` prefix)
        name:
          type: string
          nullable: true
          description: Display name of the queue
        creator_id:
          type: string
          description: User ID of the queue creator — the user (or API key owner) that created the queue.
        assignee_id:
          type: string
          nullable: true
          description: User ID of the user expected to run the queue. `GET /current` returns the queue where this matches the authenticated user (or the user resolved from `user_id` / `email`). Defaults to the creator when none was specified at creation time.
        voicemail_handling:
          type: string
          enum:
          - SKIP
          - NO_SKIP
          description: How the Power Dialer reacts when the call lands in voicemail. `SKIP` advances to the next number; `NO_SKIP` keeps the user on the call.
        do_not_disturb:
          type: string
          enum:
          - ENABLED
          - DISABLED
          description: When `ENABLED`, incoming calls are silenced while the queue is being run.
        numbers:
          type: array
          items:
            $ref: '#/components/schemas/QueueNumber'
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
    DialingQueueMeta:
      type: object
      description: Power Dialer queue metadata, without its numbers. Returned under the `queue` key of `GET /current`; the numbers themselves are the paginated `data`.
      properties:
        id:
          type: string
          description: Unique queue identifier (KSUID with `pdl` prefix)
        name:
          type: string
          nullable: true
          description: Display name of the queue
        creator_id:
          type: string
          description: User ID of the queue creator.
        assignee_id:
          type: string
          nullable: true
          description: User ID of the user expected to run the queue.
        voicemail_handling:
          type: string
          enum:
          - SKIP
          - NO_SKIP
          description: How the Power Dialer reacts when the call lands in voicemail.
        do_not_disturb:
          type: string
          enum:
          - ENABLED
          - DISABLED
          description: When `ENABLED`, incoming ca

# --- truncated at 32 KB (32 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/the-mobile-first-company/refs/heads/main/openapi/the-mobile-first-company-power-dialer-api-openapi.yml