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

# Estimate a campaign's send cost

> Estimate what a campaign will cost before sending, using the same pricing resolver the send path bills against so the preview matches the actual wallet deduction within rounding. Pass the channel, estimated recipient count, and optionally a destination country and message sub-type; the response returns the per-unit price, the projected total, and which pricing source (tenant override, rate card, or fallback) produced it. Read-only — it never charges the wallet.



## OpenAPI

````yaml /openapi.yaml post /api/v1/campaigns/preview-cost
openapi: 3.1.0
info:
  title: Devotel CPaaS API
  description: Orbit by Devotel — Communications Platform as a Service API
  version: 1.0.0
  contact:
    name: Devotel
    url: https://devotel.io
    email: support@devotel.io
  license:
    name: Proprietary
servers:
  - url: https://api.orbit.devotel.io
    description: Production
security:
  - Bearer: []
  - ApiKey: []
tags:
  - name: Messages
    description: >-
      Send and manage messages across all channels (SMS, WhatsApp, RCS, Email,
      Viber, etc.)
  - name: Fax
    description: >-
      List and track fax (MMS/T.38) transmissions on Telnyx-backed fax numbers
      (sending flows through the Messaging API)
  - name: Agents
    description: AI agent creation, configuration, and execution
  - name: Voice
    description: Voice calls, IVR, conferencing, and SIP trunking
  - name: OnCall
    description: On-call rotations and escalation policy planning for incident alerting
  - name: Webhooks
    description: Webhook endpoint management and delivery logs
  - name: Numbers
    description: Phone number search, provisioning, and configuration
  - name: Brand Identity
    description: >-
      Unified cross-channel brand trust posture (10DLC, toll-free, WhatsApp,
      RCS, branded calling, number KYC)
  - name: Contacts
    description: Contact management, segmentation, and lifecycle tracking
  - name: Campaigns
    description: Marketing campaign orchestration and analytics
  - name: Flows
    description: Automation flow builder and execution engine
  - name: Templates
    description: Message template management and approval workflows
  - name: Settings
    description: Organization, channel, and user preference settings
  - name: Verify
    description: OTP generation and verification across channels
  - name: Push
    description: Push notification delivery via FCM and APNs
  - name: Integrations
    description: Third-party service connections and OAuth management
  - name: CDP
    description: >-
      Customer Data Platform — activation surface (CRM object sync, streaming
      destinations, ad-audience activation)
  - name: Files
    description: >-
      Server-to-server media upload, listing, retrieval, and deletion
      (signed-URL backed)
  - name: Commerce
    description: >-
      Omnichannel conversational-commerce — persistent cart + checkout state
      machine, channel-agnostic hosted pay-by-link, native WhatsApp checkout,
      and AP2-style agent payment mandates.
  - name: Sync
    description: >-
      Real-time shared-state primitive (Twilio Sync parity) — Documents, Maps,
      Lists, and ephemeral Streams, with change events relayed over the
      /api/v1/ws/sync WebSocket gateway
  - name: Risk
    description: >-
      Unified cross-channel Trust & Fraud risk scoring — fuses SMS-pumping,
      URL-reputation, Verify Fraud Guard, and Voice Biometrics signals into one
      composite verdict queryable before a send or a call.
  - name: Orby
    description: >-
      In-dashboard Orby operator assistant: streamed assistant turns,
      conversation threads, product knowledge-base search, and the tool-action
      approval gate. Available to signed-in operators only (dashboard session
      auth — API-key requests are rejected).
paths:
  /api/v1/campaigns/preview-cost:
    post:
      tags:
        - Campaigns
      summary: Estimate a campaign's send cost
      description: >-
        Estimate what a campaign will cost before sending, using the same
        pricing resolver the send path bills against so the preview matches the
        actual wallet deduction within rounding. Pass the channel, estimated
        recipient count, and optionally a destination country and message
        sub-type; the response returns the per-unit price, the projected total,
        and which pricing source (tenant override, rate card, or fallback)
        produced it. Read-only — it never charges the wallet.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - channel
                - estimated_recipients
              properties:
                channel:
                  type: string
                  enum:
                    - sms
                    - mms
                    - whatsapp
                    - email
                    - rcs
                    - viber
                    - voice
                    - push
                    - instagram
                    - messenger
                    - line
                    - telegram
                    - fax
                    - kakao
                    - zalo
                    - wechat
                  description: Channel the campaign will send on.
                estimated_recipients:
                  type: integer
                  minimum: 0
                  maximum: 10000000
                  description: Number of recipients to price the send for.
                country_code:
                  type: string
                  description: >-
                    Destination country (ISO alpha-2, or `*` for the default
                    rate). Affects per-country wholesale pricing.
                sub_type:
                  type: string
                  maxLength: 64
                  description: >-
                    Message sub-type lane (e.g. WhatsApp `marketing` vs
                    `utility`).
            example:
              channel: sms
              estimated_recipients: 5000
              country_code: US
      responses:
        '200':
          description: Estimated per-unit and total cost for the send
          content:
            application/json:
              schema:
                type: object
                description: Estimated per-unit and total cost for the send
                properties:
                  data:
                    type: object
                    properties:
                      channel:
                        type: string
                      estimated_recipients:
                        type: integer
                      unit_price_cents:
                        type: number
                        description: Customer-charge price per message, in cents.
                      total_cents:
                        type: number
                        description: Projected total charge, in cents.
                      source:
                        type: string
                        description: >-
                          Which pricing source resolved the rate (e.g.
                          `override`, `rate_card`, `fallback`).
                      fell_back:
                        type: boolean
                        description: >-
                          True when no specific rate matched and the fallback
                          rate was used.
                      pricing_rate_id:
                        type:
                          - 'null'
                          - string
                      override_id:
                        type:
                          - 'null'
                          - string
                  meta:
                    type: object
                    properties:
                      request_id:
                        type: string
                        description: >-
                          Unique request identifier (also returned in
                          X-Request-Id header)
                      timestamp:
                        type: string
                        format: date-time
                        description: ISO 8601 UTC timestamp of the response
              example:
                data:
                  channel: sms
                  estimated_recipients: 5000
                  unit_price_cents: 0.75
                  total_cents: 3750
                  source: rate_card
                  fell_back: false
                  pricing_rate_id: rate_us_sms_mt
                  override_id: null
                meta:
                  request_id: req_7c1e9a2b3f
                  timestamp: '2026-08-02T14:23:11.000Z'
components:
  securitySchemes:
    Bearer:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: Dashboard JWT token from Clerk
    ApiKey:
      type: apiKey
      name: X-API-Key
      in: header
      description: Server-to-server API key (dv_live_sk_*)

````