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

# View campaign delivery results

> Retrieve the processing and delivery summary for a campaign.

<Info>
  Reading a summary does not send another message. Provide a campaign UUID that belongs to the authenticated account.
</Info>


## OpenAPI

````yaml openapi/phonovation-api.yaml GET /v1/campaign/{id}
openapi: 3.1.2
info:
  title: Phonovation SMS API
  version: 1.0.0
  summary: >-
    Build SMS into your product, workflow, or platform with a straightforward,
    developer-friendly API.
  description: >
    **Build fast. Send with confidence.**


    Add application-to-person (A2P) SMS to your product, workflow, or platform

    with Phonovation. Use this API to send or schedule campaigns, track each

    recipient in your own system, receive delivery updates, and review campaign

    results.


    From appointment reminders and service alerts to customer campaigns, you get

    a clear integration path and the delivery visibility needed to keep every

    message accountable.


    ## Account access


    [Log in or create your Phonovation account](https://app.phonovation.com/) to

    manage your messaging setup and developer settings.


    A typical integration has three steps:


    1. Authenticate with a bearer token.

    2. Create a campaign with your message, sender ID, and recipients.

    3. Track delivery through campaign summaries and signed webhooks.


    ## Authentication


    Every campaign request needs a bearer token — the credential that tells

    Phonovation which account is making the request. Add it to the

    `Authorization` header:


    `Authorization: Bearer <token>`


    ### Recommended: a UI-generated Personal Access Token


    For most integrations, the simplest and preferred option is a Phonovation

    Personal Access Token (PAT) generated in the Phonovation UI. PATs begin with

    `phv_pat_`; keep the casing exactly as shown when sending one:


    `Authorization: Bearer phv_pat_...`


    [Generate and manage your
    PATs](https://app.phonovation.com/developer?tab=pat-tokens)

    in the Phonovation developer settings.


    Generate the PAT once, store it securely, and reuse it for your API
    requests.

    **You do not need to obtain or refresh an OAuth token every time you send an

    SMS.** Replace the PAT only when it expires, is revoked, or you
    intentionally

    rotate it.


    ### Optional: OAuth access tokens


    OAuth/OIDC JWT access tokens remain available for integrations that
    specifically

    require an OAuth token lifecycle. The `/token` endpoint can exchange user

    credentials for an access token and refresh token, or exchange a refresh
    token

    for a new access token.


    Even when using OAuth, request an access token once and reuse it until it is
    close

    to expiry. Use the refresh token to obtain the next access token — do not
    request

    a new token before every SMS.


    ## Campaign processing


    Campaign requests are accepted and queued for background processing. A
    successful

    request returns `202 Accepted` with the campaign ID.


    A `202` response confirms receipt, not final campaign creation. Allow time
    for

    processing before requesting the campaign summary.


    ## Scheduling timezone


    The `sendAt` value is always interpreted as Irish local time in the

    `Europe/Dublin` timezone. Phonovation does not interpret it as UTC and does

    not use the timezone of the caller, server, account, or recipient.


    Do not include a timezone designator such as `Z` or a numeric UTC offset.

    International integrations must convert the intended send time to Irish

    local time before making the request. Ireland observes daylight saving time,

    so use a timezone-aware library and the `Europe/Dublin` timezone instead of

    a fixed UTC offset.
servers:
  - url: https://api.phonovation.com
    description: Phonovation production API
  - url: https://auth.phonovation.com
    description: Phonovation authentication server
security:
  - BearerAuth: []
tags:
  - name: Authentication
    description: >-
      Use a UI-generated PAT where possible, or obtain OAuth tokens for
      integrations that require them.
  - name: Health
    description: Check whether the Phonovation API is available and responding.
  - name: Campaigns
    description: Send now or schedule ahead, then track delivery from one integration.
paths:
  /v1/campaign/{id}:
    get:
      tags:
        - Campaigns
      summary: View campaign delivery results
      description: >
        See how a campaign is performing with totals for sent, delivered,

        undelivered, and pending messages.


        For security, you can retrieve only campaigns that belong to your

        authenticated account. The API returns `404 Not Found` if the ID is
        unknown,

        belongs to another account, or does not have a summary yet.


        Draft campaigns do not have a summary until they are marked ready.
      operationId: getCampaignSummary
      parameters:
        - $ref: '#/components/parameters/CampaignId'
      responses:
        '200':
          description: The latest campaign delivery totals.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CampaignSummary'
              examples:
                summary:
                  value:
                    totalSent: 100
                    delivered: 92
                    undelivered: 3
                    pending: 5
        '400':
          description: The campaign ID is not a valid UUID.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      servers:
        - url: https://api.phonovation.com
          description: Phonovation production API
components:
  parameters:
    CampaignId:
      name: id
      in: path
      required: true
      description: The public UUID returned when the campaign request was accepted.
      schema:
        type: string
        format: uuid
      example: ffd14db7-e526-4d69-b41e-ec5e38bc04dd
  schemas:
    CampaignSummary:
      type: object
      title: Campaign Delivery Summary
      description: At-a-glance delivery totals for a campaign that has been marked ready.
      required:
        - totalSent
        - delivered
        - undelivered
        - pending
      properties:
        totalSent:
          type: integer
          format: int32
          description: >-
            Number of accepted recipients recorded when the campaign was marked
            ready.
          examples:
            - 100
        delivered:
          type: integer
          format: int32
          description: Receipts with a parsed status beginning with `DELIV`.
          examples:
            - 92
        undelivered:
          type: integer
          format: int32
          description: Processed receipts that are not classified as delivered.
          examples:
            - 3
        pending:
          type: integer
          format: int32
          description: >-
            Accepted recipients with no processed delivered or undelivered
            receipt yet.
          examples:
            - 5
    ProblemDetails:
      type: object
      title: Problem Details
      description: >
        Standard details for validation and application errors. Authentication
        and

        unexpected server errors may not use this exact response shape.
      required:
        - title
        - status
        - detail
      properties:
        type:
          type:
            - string
            - 'null'
          description: Optional identifier for the type of problem.
        title:
          type: string
          description: Short, human-readable summary of what went wrong.
        status:
          type: integer
          minimum: 400
          maximum: 599
          description: HTTP status code for the error.
        detail:
          type: string
          description: >-
            A more specific explanation to help you correct or diagnose the
            request.
        instance:
          type:
            - string
            - 'null'
          description: Optional identifier for this specific occurrence of the problem.
  responses:
    Unauthorized:
      description: >
        Authentication failed. The bearer token may be missing, malformed,
        invalid,

        expired, or revoked. No fixed response body or `WWW-Authenticate` header
        is

        guaranteed.
    Forbidden:
      description: >
        The token is valid, but the identity is not linked to an active,
        recognized

        Phonovation client or client administrator.
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
          examples:
            unrecognizedAdministrator:
              value:
                title: Forbidden
                status: 403
                detail: Authenticated user is not a recognized client administrator
    NotFound:
      description: >
        No campaign summary is available for this account and campaign ID. The

        campaign may be unknown, belong to another account, still be processing,
        or

        be saved as a draft.
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
    InternalServerError:
      description: >
        Phonovation encountered an unexpected application or infrastructure
        error.

        No fixed response body or media type is guaranteed.
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: >
        A UI-generated Phonovation Personal Access Token (PAT) is the
        recommended

        option for most integrations. OAuth/OIDC JWT access tokens are also
        accepted

        when an OAuth lifecycle is required.


        Send either token as:


        `Authorization: Bearer <token>`


        PAT values begin with `phv_pat_`. Generate a PAT once in the Phonovation
        UI,

        store it securely, and reuse it across requests. You do not need to
        generate

        or refresh a token for every SMS. Preserve the exact casing in

        `Bearer phv_pat_...`.

````