> ## Documentation Index
> Fetch the complete documentation index at: https://reach-owl.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Create and Manage Facebook Outreach Campaigns

> Step-by-step guide to creating a Facebook group campaign in ReachOwl: set your audience, message sequence, schedule, and daily limit.

Use ReachOwl outreach campaigns to automatically send friend requests and messages to members of Facebook groups. This guide walks you through the full lifecycle: discovering your synced groups, creating a campaign, controlling its status, and cloning it.

<Steps>
  <Step title="Find a Facebook group URL">
    Start by listing the groups already synced to your ReachOwl workspace. Each result includes the Facebook group URL you will target.

    <CodeGroup>
      ```bash Request theme={null}
      curl -X GET "{{baseUrl}}/api/v1/groups" \
        -H "Authorization: Bearer {token}"
      ```

      ```json Response theme={null}
      {
        "data": [
          {
            "id": 1,
            "name": "Digital Marketing Pros",
            "group_url": "https://facebook.com/groups/digimarketpro"
          }
        ]
      }
      ```
    </CodeGroup>

    Copy the `group_url` value from the group you want to target.
  </Step>

  <Step title="Get executor IDs">
    Campaigns need at least one browser executor. List available executors from your app states and pick an `id`.

    <CodeGroup>
      ```bash Request theme={null}
      curl -X GET "{{baseUrl}}/api/v1/app-states" \
        -H "Authorization: Bearer {token}"
      ```

      ```json Response theme={null}
      {
        "data": [
          {
            "id": 101,
            "platform": "facebook",
            "status": "active"
          }
        ]
      }
      ```
    </CodeGroup>

    Save the `id` of an active executor for the next step.
  </Step>

  <Step title="Create the campaign">
    Send a POST request to `/api/v1/campaigns` with your audience settings, messenger sequence, and daily limit. The default `limit` is `30` contacts per day if you omit the field.

    <CodeGroup>
      ```bash Request theme={null}
      curl -X POST "{{baseUrl}}/api/v1/campaigns" \
        -H "Authorization: Bearer {token}" \
        -H "Content-Type: application/json" \
        -d '{
          "name": "Welcome Campaign",
          "team_id": 3,
          "platform": "facebook",
          "action_type": "friend_request",
          "audience_type": "group",
          "post_url": "https://facebook.com/groups/digimarketpro",
          "executor_ids": [101],
          "messages": [
            "Hi {{first_name}}, thanks for being part of the community!"
          ],
          "schedule": "0 9 * * *",
          "limit": 30
        }'
      ```

      ```json Response theme={null}
      {
        "id": 42,
        "name": "Welcome Campaign",
        "status": 1,
        "limit": 30
      }
      ```
    </CodeGroup>

    <Note>
      You can personalize message content with variables like <code>{`{{first_name}}`}</code> and <code>{`{{last_name}}`}</code>.
    </Note>
  </Step>

  <Step title="Pause or resume">
    Update the campaign status through a PATCH request instead of using a dedicated pause endpoint. Send `status: 0` to pause or `status: 1` to resume.

    <CodeGroup>
      ```bash Pause theme={null}
      curl -X PATCH "{{baseUrl}}/api/v1/campaigns/42" \
        -H "Authorization: Bearer {token}" \
        -H "Content-Type: application/json" \
        -d '{"status": 0}'
      ```

      ```bash Resume theme={null}
      curl -X PATCH "{{baseUrl}}/api/v1/campaigns/42" \
        -H "Authorization: Bearer {token}" \
        -H "Content-Type: application/json" \
        -d '{"status": 1}'
      ```
    </CodeGroup>
  </Step>

  <Step title="Clone a campaign">
    You can duplicate an existing campaign, including its messages and schedule, by including a `clone_from` field in the POST body instead of calling a separate clone endpoint.

    <CodeGroup>
      ```bash Request theme={null}
      curl -X POST "{{baseUrl}}/api/v1/campaigns" \
        -H "Authorization: Bearer {token}" \
        -H "Content-Type: application/json" \
        -d '{
          "name": "Welcome Campaign - Copy",
          "clone_from": 42,
          "team_id": 3
        }'
      ```

      ```json Response theme={null}
      {
        "id": 43,
        "name": "Welcome Campaign - Copy",
        "status": 1
      }
      ```
    </CodeGroup>
  </Step>
</Steps>

<Note>
  There are no separate <code>/pause</code>, <code>/resume</code>, or <code>/clone</code> routes in the ReachOwl v1 API. Always use the update body fields shown above.
</Note>
