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

# Notify — multi-channel fan-out or waterfall

> Send a single payload to multiple recipients across heterogeneous channels (SMS, WhatsApp, email, RCS, push, etc.) in one API call. Each recipient is addressed by channel and destination (e.g., phone number or email). Supports two delivery strategies: `fanout` (send every binding immediately, returning per-binding delivery handles) and `waterfall` (send the richest binding first, then auto-escalate down the ordered bindings asynchronously when the active channel reports undelivered within the TTL). Returns HTTP 200 when every binding succeeds (fanout) or at least one binding queues (waterfall); 207 Multi-Status when at least one binding failed AND at least one succeeded (fanout only); 422 when every binding failed (fanout) or every binding rejected synchronously (waterfall).



## OpenAPI

````yaml /openapi.yaml post /api/v1/notify/
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
paths:
  /api/v1/notify/:
    post:
      tags:
        - Messages
      summary: Notify — multi-channel fan-out or waterfall
      description: >-
        Send a single payload to multiple recipients across heterogeneous
        channels (SMS, WhatsApp, email, RCS, push, etc.) in one API call. Each
        recipient is addressed by channel and destination (e.g., phone number or
        email). Supports two delivery strategies: `fanout` (send every binding
        immediately, returning per-binding delivery handles) and `waterfall`
        (send the richest binding first, then auto-escalate down the ordered
        bindings asynchronously when the active channel reports undelivered
        within the TTL). Returns HTTP 200 when every binding succeeds (fanout)
        or at least one binding queues (waterfall); 207 Multi-Status when at
        least one binding failed AND at least one succeeded (fanout only); 422
        when every binding failed (fanout) or every binding rejected
        synchronously (waterfall).
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - bindings
              properties:
                bindings:
                  type: array
                  minItems: 1
                  maxItems: 10000
                  description: >-
                    Array of per-binding payloads. Each specifies a channel and
                    destination. Minimum 2 bindings for waterfall mode.
                  items:
                    type: object
                    required:
                      - channel
                      - address
                    properties:
                      channel:
                        type: string
                        enum:
                          - sms
                          - mms
                          - whatsapp
                          - email
                          - rcs
                          - viber
                          - push
                          - telegram
                          - line
                          - instagram
                          - messenger
                          - voice
                        description: Channel identifier
                      address:
                        type: string
                        minLength: 1
                        maxLength: 512
                        description: >-
                          Channel-appropriate destination identifier (E.164 for
                          SMS/voice, email address for email, device token for
                          push, etc.)
                      body:
                        type: string
                        minLength: 1
                        maxLength: 4000
                        description: >-
                          Per-binding body override — wins over the shared
                          `body`.
                      from:
                        type: string
                        minLength: 1
                        maxLength: 128
                        description: >-
                          Per-binding sender override — wins over the shared
                          `from`.
                      template_name:
                        type: string
                        minLength: 1
                        maxLength: 128
                        description: Per-binding template — wins over the shared template.
                      template_params:
                        type: object
                        additionalProperties:
                          type: string
                        description: Per-binding template parameters.
                      metadata:
                        type: object
                        additionalProperties:
                          type: string
                        description: >-
                          Per-binding metadata — merged onto shared metadata
                          (per-binding wins).
                body:
                  type: string
                  minLength: 1
                  maxLength: 4000
                  description: >-
                    Shared message body — applied to every binding that doesn't
                    carry its own.
                from:
                  type: string
                  minLength: 1
                  maxLength: 128
                  description: >-
                    Shared sender identifier — applied to every binding that
                    doesn't carry its own.
                template_name:
                  type: string
                  minLength: 1
                  maxLength: 128
                  description: >-
                    Shared template name — applied when neither shared nor
                    per-binding `body` is set.
                template_params:
                  type: object
                  additionalProperties:
                    type: string
                  description: >-
                    Shared template parameters — applied to every binding that
                    doesn't carry its own.
                metadata:
                  type: object
                  additionalProperties:
                    type: string
                  description: Shared metadata bag — merged onto every binding's metadata.
                mode:
                  type: string
                  enum:
                    - fanout
                    - waterfall
                  description: >-
                    Delivery strategy. `fanout` (default): send every binding
                    immediately. `waterfall`: send the first binding;
                    auto-escalate remaining bindings on DLR undelivered within
                    the TTL.
                fallback_window_seconds:
                  type: integer
                  minimum: 30
                  maximum: 86400
                  description: >-
                    Waterfall freshness window in seconds. An undelivered DLR
                    landing after this window does NOT escalate. Ignored in
                    `fanout` mode. Default 24h; floor 30s, ceiling 24h.
      responses:
        '200':
          description: >-
            Success — every binding queued (fanout) or at least one binding
            queued (waterfall). Returns per-binding delivery handles and async
            escalation chain.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    additionalProperties: true
                  meta:
                    type: object
        '207':
          description: >-
            Multi-Status — partial failure in fanout mode. At least one binding
            succeeded and at least one failed.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    additionalProperties: true
                  meta:
                    type: object
        '422':
          description: >-
            Unprocessable Entity — all bindings failed (fanout) or all bindings
            rejected synchronously (waterfall).
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    additionalProperties: true
                  meta:
                    type: object
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_*)

````