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

# Per-arm results of a campaign's A/B splits

> For each A/B split in the campaign's sequence: per arm, the leads routed to it and their share, the leads it reached, LinkedIn invitations sent and accepted, human replies, positive replies and meetings booked (rates are per lead routed), bounces and unsubscribes; for all time and, once the split's weights changed on the running campaign, for the leads the split routed since (leads the change moved to the other arm count in all time only, in their new arm). Each split also carries `replySeries`, its replies per arm over time. `since` and `to` keep only the leads that entered an arm in that range; leads waiting at a split are counted whatever the range. A lead counts in the arm it is in, whatever step it replied to. There is no winner and no significance test: `isSmallSample` is true below 20 replies across both arms, where a gap is most likely chance. Only the token owner's own campaigns resolve here. Rate limit: 30 requests/minute and 1,000/day per token owner, shared by every campaign, scheduled-send, campaign-template and knowledge-hub endpoint.

Errors:
- `404` `CAMPAIGN_NOT_FOUND` — No campaign with this id exists, it belongs to another account (including a campaign delegated to you or shared by your team's visibility settings), or it has been deleted.
- `422` `VALIDATION_FAILED` — campaignId is not a 24-character hex id, since or to is not an ISO 8601 date-time, since is in the future, to is earlier than since, or timezone is not a known IANA name.
- `429` `RATE_LIMITED` — More than 30 campaign requests in a minute, or 1,000 in a day, for this token owner (the bucket is shared by every /business/campaigns, /business/scheduled-sends, /business/campaign-templates and /business/knowledge-hubs call).
- `500` `UNEXPECTED_ERROR` — An unhandled failure; the detail stays in our logs and is never returned.

Requires one of the following token scopes: campaigns.



## OpenAPI

````yaml /openapi.json get /business/campaigns/{campaignId}/split-results
openapi: 3.1.0
info:
  title: Fuse Business API
  version: 1.0.0
  description: >-
    External API for lists, campaigns, prospect search and contacts.
    Authenticate with your API token as HTTP Basic. All paths are under /api/v1.
servers:
  - url: https://api.tryfuse.ai/api/v1
    description: Production
security:
  - basicAuth: []
tags:
  - name: Lists
  - name: Custom columns
  - name: Smart columns
  - name: Exports
  - name: Campaigns
  - name: Knowledge hubs
  - name: Analytics
  - name: Website intent
  - name: Account
  - name: Prospect search
  - name: Campaign steps
  - name: Scheduled sends
  - name: Campaign templates
  - name: Agents
  - name: Research
  - name: Company search
  - name: Saved searches
  - name: Folders
  - name: Contacts
paths:
  /business/campaigns/{campaignId}/split-results:
    get:
      tags:
        - Campaigns
      summary: Per-arm results of a campaign's A/B splits
      description: >-
        For each A/B split in the campaign's sequence: per arm, the leads routed
        to it and their share, the leads it reached, LinkedIn invitations sent
        and accepted, human replies, positive replies and meetings booked (rates
        are per lead routed), bounces and unsubscribes; for all time and, once
        the split's weights changed on the running campaign, for the leads the
        split routed since (leads the change moved to the other arm count in all
        time only, in their new arm). Each split also carries `replySeries`, its
        replies per arm over time. `since` and `to` keep only the leads that
        entered an arm in that range; leads waiting at a split are counted
        whatever the range. A lead counts in the arm it is in, whatever step it
        replied to. There is no winner and no significance test: `isSmallSample`
        is true below 20 replies across both arms, where a gap is most likely
        chance. Only the token owner's own campaigns resolve here. Rate limit:
        30 requests/minute and 1,000/day per token owner, shared by every
        campaign, scheduled-send, campaign-template and knowledge-hub endpoint.


        Errors:

        - `404` `CAMPAIGN_NOT_FOUND` — No campaign with this id exists, it
        belongs to another account (including a campaign delegated to you or
        shared by your team's visibility settings), or it has been deleted.

        - `422` `VALIDATION_FAILED` — campaignId is not a 24-character hex id,
        since or to is not an ISO 8601 date-time, since is in the future, to is
        earlier than since, or timezone is not a known IANA name.

        - `429` `RATE_LIMITED` — More than 30 campaign requests in a minute, or
        1,000 in a day, for this token owner (the bucket is shared by every
        /business/campaigns, /business/scheduled-sends,
        /business/campaign-templates and /business/knowledge-hubs call).

        - `500` `UNEXPECTED_ERROR` — An unhandled failure; the detail stays in
        our logs and is never returned.


        Requires one of the following token scopes: campaigns.
      operationId: getCampaignSplitResults
      parameters:
        - name: campaignId
          in: path
          required: true
          description: >-
            The campaign's id (24-character hex ObjectId), as returned by POST
            /business/campaigns or as the campaignId of a GET
            /business/campaigns row.
          schema:
            type: string
            description: >-
              The campaign's id (24-character hex ObjectId), as returned by POST
              /business/campaigns or as the campaignId of a GET
              /business/campaigns row.
        - name: since
          in: query
          required: false
          description: >-
            ISO 8601 date-time: count only the leads that entered an arm at or
            after it. Default: since the campaign started.
          schema:
            type: string
            format: date-time
            description: >-
              ISO 8601 date-time: count only the leads that entered an arm at or
              after it. Default: since the campaign started.
        - name: to
          in: query
          required: false
          description: >-
            ISO 8601 date-time, not earlier than `since`: count only the leads
            that entered an arm at or before it. Default: up to now.
          schema:
            type: string
            format: date-time
            description: >-
              ISO 8601 date-time, not earlier than `since`: count only the leads
              that entered an arm at or before it. Default: up to now.
        - name: timezone
          in: query
          required: false
          description: >-
            IANA timezone name (e.g. `Europe/Kyiv`, `America/New_York`) whose
            calendar days `replySeries` is bucketed by. Offsets such as `+03:00`
            are rejected. Default: `UTC`.
          schema:
            type: string
            maxLength: 64
            default: UTC
            description: >-
              IANA timezone name (e.g. `Europe/Kyiv`, `America/New_York`) whose
              calendar days `replySeries` is bucketed by. Offsets such as
              `+03:00` are rejected. Default: `UTC`.
      responses:
        '200':
          description: Success
          headers:
            RateLimit-Limit:
              schema:
                type: integer
              description: Requests permitted in the current window.
            RateLimit-Remaining:
              schema:
                type: integer
              description: Requests remaining in the current window.
            RateLimit-Reset:
              schema:
                type: integer
              description: Seconds until the current window resets.
          content:
            application/json:
              schema:
                type: object
                properties:
                  splits:
                    type: array
                    items:
                      type: object
                      properties:
                        splitStepId:
                          type: string
                        arms:
                          type: array
                          items:
                            type: object
                            properties:
                              key:
                                type: string
                                enum:
                                  - a
                                  - b
                              label:
                                type:
                                  - string
                                  - 'null'
                              weight:
                                type: integer
                            required:
                              - key
                              - label
                              - weight
                          description: The split's current arms and weights.
                        weightsChangedAt:
                          type:
                            - string
                            - 'null'
                          description: >-
                            When the weights last changed after the campaign
                            started (ISO 8601); null if they never did.
                        waiting:
                          type: integer
                          description: >-
                            Leads at the split not routed yet: the campaign was
                            paused when they reached it, or a weights change
                            moved them and they are about to be routed again.
                        allTime:
                          type: object
                          description: Every lead the split routed.
                          properties:
                            entered:
                              type: integer
                            replied:
                              type: integer
                            isSmallSample:
                              type: boolean
                              description: >-
                                Fewer than 20 replies across both arms: a gap
                                between the arms is most likely chance.
                            arms:
                              type: array
                              items:
                                type: object
                                properties:
                                  key:
                                    type: string
                                    enum:
                                      - a
                                      - b
                                  entered:
                                    type: integer
                                    description: Leads routed to the arm.
                                  share:
                                    type:
                                      - number
                                      - 'null'
                                    description: entered / entered of both arms, 0-1.
                                  reached:
                                    type: integer
                                    description: >-
                                      Leads the arm sent at least one message,
                                      invitation or task.
                                  invitesSent:
                                    type: integer
                                  invitesAccepted:
                                    type: integer
                                  acceptanceRate:
                                    type:
                                      - number
                                      - 'null'
                                    description: invitesAccepted / invitesSent, 0-1.
                                  replied:
                                    type: integer
                                    description: >-
                                      Human replies; out-of-office and
                                      unsubscribe requests excluded.
                                  replyRate:
                                    type:
                                      - number
                                      - 'null'
                                    description: replied / entered, 0-1.
                                  positiveReplies:
                                    type: integer
                                    description: >-
                                      Replies marked interested or meeting
                                      booked.
                                  positiveReplyRate:
                                    type:
                                      - number
                                      - 'null'
                                    description: positiveReplies / entered, 0-1.
                                  meetingsBooked:
                                    type: integer
                                    description: Replies marked meeting booked.
                                  meetingRate:
                                    type:
                                      - number
                                      - 'null'
                                    description: meetingsBooked / entered, 0-1.
                                  bounced:
                                    type: integer
                                  unsubscribed:
                                    type: integer
                                required:
                                  - key
                                  - entered
                                  - share
                                  - reached
                                  - invitesSent
                                  - invitesAccepted
                                  - acceptanceRate
                                  - replied
                                  - replyRate
                                  - positiveReplies
                                  - positiveReplyRate
                                  - meetingsBooked
                                  - meetingRate
                                  - bounced
                                  - unsubscribed
                          required:
                            - entered
                            - replied
                            - isSmallSample
                            - arms
                        sinceChange:
                          type:
                            - object
                            - 'null'
                          description: >-
                            Only the leads the split routed since
                            weightsChangedAt, not those the change moved; null
                            when the weights never changed.
                          properties:
                            entered:
                              type: integer
                            replied:
                              type: integer
                            isSmallSample:
                              type: boolean
                              description: >-
                                Fewer than 20 replies across both arms: a gap
                                between the arms is most likely chance.
                            arms:
                              type: array
                              items:
                                type: object
                                properties:
                                  key:
                                    type: string
                                    enum:
                                      - a
                                      - b
                                  entered:
                                    type: integer
                                    description: Leads routed to the arm.
                                  share:
                                    type:
                                      - number
                                      - 'null'
                                    description: entered / entered of both arms, 0-1.
                                  reached:
                                    type: integer
                                    description: >-
                                      Leads the arm sent at least one message,
                                      invitation or task.
                                  invitesSent:
                                    type: integer
                                  invitesAccepted:
                                    type: integer
                                  acceptanceRate:
                                    type:
                                      - number
                                      - 'null'
                                    description: invitesAccepted / invitesSent, 0-1.
                                  replied:
                                    type: integer
                                    description: >-
                                      Human replies; out-of-office and
                                      unsubscribe requests excluded.
                                  replyRate:
                                    type:
                                      - number
                                      - 'null'
                                    description: replied / entered, 0-1.
                                  positiveReplies:
                                    type: integer
                                    description: >-
                                      Replies marked interested or meeting
                                      booked.
                                  positiveReplyRate:
                                    type:
                                      - number
                                      - 'null'
                                    description: positiveReplies / entered, 0-1.
                                  meetingsBooked:
                                    type: integer
                                    description: Replies marked meeting booked.
                                  meetingRate:
                                    type:
                                      - number
                                      - 'null'
                                    description: meetingsBooked / entered, 0-1.
                                  bounced:
                                    type: integer
                                  unsubscribed:
                                    type: integer
                                required:
                                  - key
                                  - entered
                                  - share
                                  - reached
                                  - invitesSent
                                  - invitesAccepted
                                  - acceptanceRate
                                  - replied
                                  - replyRate
                                  - positiveReplies
                                  - positiveReplyRate
                                  - meetingsBooked
                                  - meetingRate
                                  - bounced
                                  - unsubscribed
                          required:
                            - entered
                            - replied
                            - isSmallSample
                            - arms
                        replySeries:
                          type: array
                          description: >-
                            The allTime window's replies per arm over time, one
                            zero-filled point per bucket, from `since` (or the
                            campaign's creation) to `to` (or now). Buckets are
                            daily, ISO-weekly or monthly, the finest that keeps
                            the series at 13 points or fewer; past 13 months
                            they are quarterly, which runs past 13 points once
                            the window spans more than 13 quarters. Days are
                            calendar days in `timezone`. A reply after `to` is
                            left out of the series but still counts in
                            `replied`.
                          items:
                            type: object
                            properties:
                              date:
                                type: string
                                description: >-
                                  The bucket's start as a display label: 'Sep 1'
                                  for daily and weekly buckets, 'Sep' for
                                  monthly, 'Sep 2026' for quarterly.
                              isoDate:
                                type: string
                                description: The bucket's start as YYYY-MM-DD.
                              a:
                                type: integer
                                description: Replies from arm a's leads in the bucket.
                              b:
                                type: integer
                                description: Replies from arm b's leads in the bucket.
                            required:
                              - date
                              - isoDate
                              - a
                              - b
                      required:
                        - splitStepId
                        - arms
                        - weightsChangedAt
                        - waiting
                        - allTime
                        - sinceChange
                        - replySeries
                required:
                  - splits
              example:
                splits:
                  - splitStepId: 6a8dce2ef83628aea1088041
                    arms:
                      - key: a
                        label: Email first
                        weight: 50
                      - key: b
                        label: LinkedIn first
                        weight: 50
                    weightsChangedAt: null
                    waiting: 0
                    allTime:
                      entered: 200
                      replied: 9
                      isSmallSample: true
                      arms:
                        - key: a
                          entered: 101
                          share: 0.505
                          reached: 98
                          invitesSent: 0
                          invitesAccepted: 0
                          acceptanceRate: null
                          replied: 3
                          replyRate: 0.0297
                          positiveReplies: 1
                          positiveReplyRate: 0.0099
                          meetingsBooked: 1
                          meetingRate: 0.0099
                          bounced: 2
                          unsubscribed: 1
                        - key: b
                          entered: 99
                          share: 0.495
                          reached: 90
                          invitesSent: 90
                          invitesAccepted: 21
                          acceptanceRate: 0.2333
                          replied: 6
                          replyRate: 0.0606
                          positiveReplies: 2
                          positiveReplyRate: 0.0202
                          meetingsBooked: 1
                          meetingRate: 0.0101
                          bounced: 0
                          unsubscribed: 0
                    sinceChange: null
                    replySeries:
                      - date: Aug 31
                        isoDate: '2026-08-31'
                        a: 1
                        b: 1
                      - date: Sep 7
                        isoDate: '2026-09-07'
                        a: 1
                        b: 3
                      - date: Sep 14
                        isoDate: '2026-09-14'
                        a: 1
                        b: 2
        '400':
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '402':
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '422':
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - basicAuth: []
components:
  schemas:
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
            message:
              type: string
            param:
              type:
                - string
                - 'null'
            doc_url:
              type:
                - string
                - 'null'
            request_id:
              type:
                - string
                - 'null'
          required:
            - code
            - message
      required:
        - error
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
      description: >-
        Your API token (`af_…`) as the Basic-auth username, with an empty
        password.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.