> ## 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.

# SMS Processing Result

> Webhook payload sent after SMS processing completes for each recipient.

Phonovation sends this webhook after it processes each recipient in a V2 campaign request.

Use it for queue or rejection status. Use delivery receipts for handset delivery status.

```mermaid title="Processing result timing" theme={"dark"}
sequenceDiagram
  participant App as Your app
  participant API as Phonovation API
  participant Gateway as Phonovation gateway
  participant Endpoint as Your webhook endpoint

  App->>API: Send campaign
  API->>Gateway: Process recipients
  Gateway->>Endpoint: Processing result per recipient
```

## Quick facts

| Item                 | Detail                           |
| -------------------- | -------------------------------- |
| **Format**           | JSON                             |
| **Timing**           | Immediately after API processing |
| **Frequency**        | Once per recipient               |
| **Success response** | `200 OK`                         |

## Status values

| Status            | Meaning                                     |
| ----------------- | ------------------------------------------- |
| `MESSAGE_SUCCESS` | Message accepted and queued.                |
| `MESSAGE_ERROR`   | Recipient could not be processed.           |
| `CAMPAIGN_ERROR`  | Campaign validation failed before queueing. |

## Correlation

Set `recipientInfo[].notifyId` when sending a campaign. Phonovation returns it as `NotifyId` for `MESSAGE_SUCCESS` and `MESSAGE_ERROR`.


## OpenAPI

````yaml openapi/oauth.yaml POST /
openapi: 3.1.2
info:
  title: Phonovation SMS API Suite
  description: >
    This API suite consists of two separate APIs:


    1. **Phonovation Auth API**: Used for authentication via
    `https://auth.interactsms.com`. This API issues JWT tokens for use in
    authenticated API requests.


    2. **Phonovation SMS API**: Provides bulk SMS functionality via
    `https://api.interactsms.com`. Requires authentication via the Auth API.
  version: 2.0.0
  contact:
    name: Phonovation Support
    email: support@phonovation.com
servers:
  - url: https://api.interactsms.com
    description: Phonovation SMS API Server
security: []
tags:
  - name: Authentication
    description: Endpoints related to user authentication and token management.
  - name: API
    description: Phonovation SMS API endpoints.
  - name: Webhooks
    description: Webhook payloads sent by Phonovation to customer-configured endpoints.
paths:
  /:
    post:
      tags:
        - Webhooks
      summary: Receive SMS processing result webhook
      description: >
        Phonovation sends this webhook after processing each recipient in a V2
        campaign request.


        Use it to confirm whether a recipient was accepted, queued, or rejected
        during processing.


        This endpoint is not hosted by Phonovation. Set `callbackHost` to your
        callback hostname before sending a test request. Do not include
        `https://`.
      operationId: TestSmsProcessingResultWebhook
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WebhookPayload'
            examples:
              messageSuccess:
                summary: Message accepted and queued
                value:
                  Status: MESSAGE_SUCCESS
                  FinishedAt: '2026-04-09T14:39:40.69257Z'
                  Message: Your message has been queued.
                  NotifyId: order-001
              messageError:
                summary: Recipient message processing error
                value:
                  Status: MESSAGE_ERROR
                  FinishedAt: '2025-06-06T17:50:57.675187Z'
                  Message: Error trying to add a new message. No credits available
                  NotifyId: order-001
              campaignError:
                summary: Campaign-level validation error
                value:
                  Status: CAMPAIGN_ERROR
                  FinishedAt: '2025-06-06T17:55:48.6689654Z'
                  Message: Sender is not valid
      responses:
        '200':
          description: Your webhook endpoint accepted the SMS processing result payload.
      security: []
      servers:
        - url: https://{callbackHost}
          description: Customer-provided callback server
          variables:
            callbackHost:
              default: callback.yourcompany.com
              description: >-
                Callback hostname only. Do not include `https://` or a trailing
                path.
components:
  schemas:
    WebhookPayload:
      description: >
        Payload sent to your configured webhook URL after V2 OAuth API SMS
        processing completes for a recipient.


        `MESSAGE_SUCCESS` and `MESSAGE_ERROR` payloads include `NotifyId`, which
        echoes the recipient `notifyId` value from the campaign request or an
        empty string if no `notifyId` was set.


        `CAMPAIGN_ERROR` payloads do not include `NotifyId` because the error is
        campaign-level, although one payload is still sent per recipient.
      oneOf:
        - $ref: '#/components/schemas/WebhookMessageSuccessPayload'
        - $ref: '#/components/schemas/WebhookMessageErrorPayload'
        - $ref: '#/components/schemas/WebhookCampaignErrorPayload'
      discriminator:
        propertyName: Status
        mapping:
          MESSAGE_SUCCESS:
            $ref: '#/components/schemas/WebhookMessageSuccessPayload'
          MESSAGE_ERROR:
            $ref: '#/components/schemas/WebhookMessageErrorPayload'
          CAMPAIGN_ERROR:
            $ref: '#/components/schemas/WebhookCampaignErrorPayload'
    WebhookMessageSuccessPayload:
      title: Message accepted
      allOf:
        - $ref: '#/components/schemas/WebhookPayloadBase'
        - type: object
          required:
            - Status
            - NotifyId
          properties:
            Status:
              type: string
              description: Message accepted and queued for delivery.
              enum:
                - MESSAGE_SUCCESS
            NotifyId:
              type: string
              description: >-
                The recipient `notifyId` from the campaign request, or an empty
                string if no `notifyId` was set.
              default: order-001
              examples:
                - order-001
                - ''
          examples:
            - Status: MESSAGE_SUCCESS
              FinishedAt: '2026-04-09T14:39:40.69257Z'
              Message: Your message has been queued.
              NotifyId: order-001
    WebhookMessageErrorPayload:
      title: Message error
      allOf:
        - $ref: '#/components/schemas/WebhookPayloadBase'
        - type: object
          required:
            - Status
            - NotifyId
          properties:
            Status:
              type: string
              description: Message could not be processed for this recipient.
              enum:
                - MESSAGE_ERROR
            NotifyId:
              type: string
              description: >-
                The recipient `notifyId` from the campaign request, or an empty
                string if no `notifyId` was set.
              default: order-001
              examples:
                - order-001
                - ''
          examples:
            - Status: MESSAGE_ERROR
              FinishedAt: '2025-06-06T17:50:57.675187Z'
              Message: Error trying to add a new message. No credits available
              NotifyId: order-001
    WebhookCampaignErrorPayload:
      title: Campaign error
      allOf:
        - $ref: '#/components/schemas/WebhookPayloadBase'
        - type: object
          required:
            - Status
          properties:
            Status:
              type: string
              description: >-
                The send was rejected before any messages were queued. One
                payload is sent per recipient.
              enum:
                - CAMPAIGN_ERROR
          examples:
            - Status: CAMPAIGN_ERROR
              FinishedAt: '2025-06-06T17:55:48.6689654Z'
              Message: Sender is not valid
    WebhookPayloadBase:
      type: object
      required:
        - Status
        - FinishedAt
        - Message
      properties:
        Status:
          type: string
          description: Processing outcome.
          enum:
            - MESSAGE_SUCCESS
            - MESSAGE_ERROR
            - CAMPAIGN_ERROR
        FinishedAt:
          type: string
          format: date-time
          description: ISO 8601 timestamp in UTC for when processing completed.
          default: '2026-04-09T14:39:40.69257Z'
          examples:
            - '2026-04-09T14:39:40.69257Z'
            - '2025-06-06T17:50:57.675187Z'
            - '2025-06-06T17:55:48.6689654Z'
        Message:
          type: string
          description: Human-readable description of the processing outcome.
          enum:
            - Your message has been queued.
            - Sender is not valid
            - Error trying to add a new message. No credits available
            - null/empty MSISDN
            - Error trying to add a new message to SMSBroadcastMessage
          default: Your message has been queued.

````