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

# Start campaign

> Starts a draft campaign. Its targets are worked out now.



## OpenAPI

````yaml /openapi.json post /campaigns/{campaignId}/start
openapi: 3.1.0
info:
  title: ReachHunt API
  version: 1.0.0
  description: >-
    The ReachHunt API gives your own apps and scripts programmatic access to
    your workspace: accounts, campaigns, lead lists, conversations, messages,
    tags and statuses.


    Send your API key in the `Authorization` header: `Authorization: Bearer
    YOUR_API_KEY`. The key decides the workspace, so no path or parameter names
    one.


    Every response has the same envelope: `{ "status": true, "data": ...,
    "error": null }`.
servers:
  - url: https://api.reachhunt.ai/api/v1
    description: Production
security: []
tags:
  - name: Workspaces
    description: Your workspace and the people in it.
  - name: Accounts
    description: The X and LinkedIn accounts you connected.
  - name: Analytics
    description: Activity over time.
  - name: Credits
    description: AI credits and how they were used.
  - name: Campaigns
    description: Outreach that messages your leads step by step.
  - name: Agents
    description: AI agents that reply to your leads.
  - name: Tags
    description: Labels you put on conversations.
  - name: Statuses
    description: Pipeline stages you put conversations in.
  - name: Leads
    description: The people in your lead lists.
  - name: Lead lists
    description: Lists of people you collect to message.
  - name: Conversations
    description: The conversations in your inbox.
  - name: Messages
    description: The messages in a conversation.
  - name: Conversation details
    description: Your team's record of the person in a conversation.
  - name: Internal notes
    description: Notes only your team sees.
  - name: Scheduled messages
    description: Messages set to send later.
  - name: Templates
    description: Saved messages you can reuse.
  - name: Webhook events
    description: What each event sends.
paths:
  /campaigns/{campaignId}/start:
    post:
      tags:
        - Campaigns
      summary: Start campaign
      description: Starts a draft campaign. Its targets are worked out now.
      operationId: campaigns.start
      parameters:
        - name: campaignId
          in: path
          required: true
          description: The campaign ID.
          schema:
            type: string
      responses:
        '200':
          description: 'OK. Check `status`: errors the API handles itself also return 200.'
          content:
            application/json:
              schema:
                type: object
                required:
                  - status
                  - data
                  - error
                properties:
                  status:
                    type: boolean
                    description: '`true` when the request succeeded.'
                  data:
                    type: object
                    properties:
                      campaign:
                        $ref: '#/components/schemas/Campaign'
                    required:
                      - campaign
                  error:
                    type: 'null'
                    description: Always `null` on success.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/PlanRequired'
        '500':
          $ref: '#/components/responses/ServerError'
      security:
        - bearerAuth: []
components:
  schemas:
    Campaign:
      type: object
      properties:
        id:
          type: string
          description: The ID.
        name:
          type: string
          description: The name.
        description:
          type:
            - string
            - 'null'
        platform:
          type: string
          description: 'The network: `x` or `linkedin`.'
        status:
          type: string
          enum:
            - draft
            - scheduled
            - running
            - paused
            - completed
            - stopped
            - failed
          description: Where the campaign stands.
        audience:
          type: array
          items:
            type: object
            properties:
              mode:
                type: string
                enum:
                  - include
                  - exclude
                description: Whether the list adds people or removes them.
              count:
                type: integer
              total:
                type: integer
                description: How many match, across all pages.
              selection:
                type:
                  - object
                  - 'null'
                additionalProperties: true
                description: Only some people from the list. `null` means the whole list.
              leadListId:
                type: string
                description: The lead list it was added through.
              leadListName:
                type: string
              preview:
                type: array
                items: {}
            required:
              - mode
              - count
              - total
              - selection
              - leadListId
              - leadListName
              - preview
          description: The lead lists it targets.
        accountIds:
          type: array
          items:
            type: string
            description: The accounts that send for it.
          description: The accounts that send for it.
        sequence:
          type: array
          description: >-
            The steps, in order: `message`, `wait`, `connect` (LinkedIn) or
            `inmail` (LinkedIn).
          items:
            type: object
            additionalProperties: true
            properties:
              id:
                type: string
              type:
                type: string
                enum:
                  - message
                  - wait
                  - connect
                  - inmail
              variants:
                type: array
                items:
                  type: string
                description: >-
                  Message versions. Spin syntax `{Hi|Hey}` and `{{firstName}}`
                  are filled in for each person.
              amount:
                type: integer
                description: 'For `wait`: how long.'
              unit:
                type: string
                enum:
                  - hours
                  - days
                description: 'For `wait`: the unit.'
              subject:
                type: string
                description: 'For `inmail`: the subject.'
        exclusions:
          type: object
          properties:
            activeCampaigns:
              type: boolean
            previouslyTargeted:
              type: boolean
            existingConversations:
              type: boolean
            noProfilePhoto:
              type: boolean
          required:
            - activeCampaigns
            - previouslyTargeted
            - existingConversations
            - noProfilePhoto
          description: Who to leave out when it starts.
        exclusionSkips:
          type: object
          properties:
            noProfilePhoto:
              type: integer
            activeCampaigns:
              type: integer
            previouslyTargeted:
              type: integer
            existingConversations:
              type: integer
          required:
            - noProfilePhoto
            - activeCampaigns
            - previouslyTargeted
            - existingConversations
          description: How many people each exclusion left out.
        autoTranslate:
          type: boolean
          description: Translate messages to each lead's language. LinkedIn only.
        replyAgentId:
          type: string
          description: The AI agent that replies to its leads. `null` when none.
        send:
          type: object
          properties:
            perHour:
              type: integer
            dailyPerAccount:
              type: integer
            timezone:
              type: string
            schedule:
              type: array
              description: One entry per weekday, 0 is Sunday.
              items:
                type: object
                properties:
                  day:
                    type: integer
                  enabled:
                    type: boolean
                  startHour:
                    type: integer
                  endHour:
                    type: integer
          required:
            - perHour
            - dailyPerAccount
            - timezone
            - schedule
          description: When and how fast it sends.
        metrics:
          type: object
          properties:
            targets:
              type: integer
              description: People the campaign targets.
            contacted:
              type: integer
              description: People messaged at least once.
            sent:
              type: integer
              description: Messages sent.
            invitesSent:
              type: integer
              description: Connection requests sent.
            accepted:
              type: integer
              description: Connection requests accepted.
            replies:
              type: integer
              description: People who replied.
            failed:
              type: integer
              description: People the campaign could not reach.
          required:
            - targets
            - contacted
            - sent
            - invitesSent
            - accepted
            - replies
            - failed
          description: Counters for the campaign.
        progressPercent:
          type: integer
          description: How far it is, from 0 to 100.
        estimatedHours:
          type:
            - integer
            - 'null'
          description: Hours left to reach everyone. `null` when it cannot be worked out.
        createdAt:
          type: string
          format: date-time
          description: When it was created, in ISO 8601 UTC.
        startedAt:
          type: string
          format: date-time
          description: When it started, in ISO 8601 UTC.
        completedAt:
          type: string
          format: date-time
          description: When it finished, in ISO 8601 UTC.
        pauseReason:
          type:
            - string
            - 'null'
          description: Why it is paused. `null` when it is not.
        sendWindow:
          type:
            - object
            - 'null'
          description: When sending opens and closes today.
          properties:
            opensAt:
              type:
                - string
                - 'null'
              format: date-time
            closesAt:
              type:
                - string
                - 'null'
              format: date-time
      required:
        - id
        - name
        - description
        - platform
        - status
        - audience
        - accountIds
        - sequence
        - exclusions
        - exclusionSkips
        - autoTranslate
        - replyAgentId
        - send
        - metrics
        - progressPercent
        - estimatedHours
        - createdAt
        - startedAt
        - completedAt
        - pauseReason
        - sendWindow
      description: >-
        A campaign: who it targets, which accounts send, the message sequence
        and its counters.
    Failure:
      type: object
      required:
        - status
        - data
        - error
      properties:
        status:
          type: boolean
          description: Always `false` for an error.
        data:
          type: 'null'
          description: Always `null` for an error.
        error:
          type: string
          description: What went wrong, in plain words.
  responses:
    Unauthorized:
      description: The API key is missing or not valid.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Failure'
          example:
            status: false
            data: null
            error: Not authenticated
    PlanRequired:
      description: The workspace has no active plan, or its trial has ended.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Failure'
          example:
            status: false
            data: null
            error: Your free trial has ended. Pick a plan to continue.
    ServerError:
      description: Something failed on our side. Try again.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Failure'
          example:
            status: false
            data: null
            error: Something went wrong. Please try again.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: Bearer
      description: >-
        Your API key, sent as `Authorization: Bearer YOUR_API_KEY`. Create one
        in **Settings → API**.
      x-default: Bearer YOUR_API_KEY

````

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