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

# Top carrier rejection codes for a funnel drop-off step

> Root-cause drill-down for a delivery-funnel step: returns the leading carrier/provider rejection codes behind messages that dropped at the named step, each enriched with a human-readable name, an actionable description and a category from the carrier error dictionary, plus its count and share of drops. Use it to answer 'why did messages fail to deliver at this stage?' from the funnel chart. The `sent` step (sent-but-never-delivered) is populated today; the other steps are reserved and return an empty reasons array. Read-only; degrades to an empty reasons list (still 200) during a transient database blip.



## OpenAPI

````yaml /openapi.yaml get /api/v1/analytics/funnel/{step}/drop-reasons
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/analytics/funnel/{step}/drop-reasons:
    get:
      tags:
        - Analytics
      summary: Top carrier rejection codes for a funnel drop-off step
      description: >-
        Root-cause drill-down for a delivery-funnel step: returns the leading
        carrier/provider rejection codes behind messages that dropped at the
        named step, each enriched with a human-readable name, an actionable
        description and a category from the carrier error dictionary, plus its
        count and share of drops. Use it to answer 'why did messages fail to
        deliver at this stage?' from the funnel chart. The `sent` step
        (sent-but-never-delivered) is populated today; the other steps are
        reserved and return an empty reasons array. Read-only; degrades to an
        empty reasons list (still 200) during a transient database blip.
      parameters:
        - name: step
          in: path
          required: true
          schema:
            type: string
            enum:
              - sent
              - delivered
              - read
              - queued
          description: >-
            Funnel stage to explain. `sent` returns rejection codes for messages
            that were sent but never delivered; other steps are reserved and
            return an empty list.
        - name: start_date
          in: query
          required: false
          schema:
            type: string
            format: date
          description: >-
            Inclusive start of the reporting window (ISO-8601 date or datetime).
            Defaults to the last 30 days when omitted.
        - name: end_date
          in: query
          required: false
          schema:
            type: string
            format: date
          description: Inclusive end of the reporting window (ISO-8601 date or datetime).
        - name: days
          in: query
          required: false
          schema:
            type: integer
            minimum: 1
          description: >-
            Alternative rolling lookback in whole days. Mutually exclusive with
            an explicit start/end range.
        - name: channel
          in: query
          required: false
          schema:
            type: string
          description: Optional single-channel filter (e.g. sms, whatsapp, email).
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            minimum: 1
            maximum: 20
            default: 5
          description: Maximum number of error codes to return.
      responses:
        '200':
          description: >-
            Top rejection codes for the step, resolved to readable names and
            categories.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      step:
                        type: string
                      reasons:
                        type: array
                        items:
                          type: object
                          properties:
                            error_code:
                              type: string
                            name:
                              type: string
                            description:
                              type: string
                            category:
                              type: string
                            count:
                              type: integer
                            percentage:
                              type: number
                              description: Share of drops at this step, 0–100.
                  meta:
                    type: object
                    properties:
                      request_id:
                        type: string
                      timestamp:
                        type: string
                        format: date-time
              example:
                data:
                  step: sent
                  reasons:
                    - error_code: '30007'
                      name: Carrier filtering (spam)
                      description: >-
                        The carrier's spam filter blocked the message. Review
                        content and sender reputation.
                      category: carrier_filtering
                      count: 141
                      percentage: 56.18
                    - error_code: '30003'
                      name: Unreachable destination handset
                      description: The destination handset was unreachable or powered off.
                      category: network
                      count: 58
                      percentage: 23.11
                meta:
                  request_id: req_9f2c1a7b
                  timestamp: '2026-08-02T12:00:00.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_*)

````