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

# Schedule Recurring Posts to Facebook Groups

> Use ReachOwl post schedulers to automatically publish content to multiple Facebook groups on a recurring interval or fixed schedule.

The ReachOwl Post Scheduler lets you queue content to be published across multiple Facebook groups on a repeating interval or fixed schedule. This guide covers setting up a scheduler, pausing it, removing specific queued posts, and cloning an existing scheduler.

<Steps>
  <Step title="Get group URLs">
    Start by listing the groups synced to your workspace so you can target the right ones.

    <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"
          },
          {
            "id": 2,
            "name": "Startup Founders",
            "group_url": "https://facebook.com/groups/startupfounders"
          }
        ]
      }
      ```
    </CodeGroup>

    Copy the `group_url` values you want to schedule posts for.
  </Step>

  <Step title="Get an executor ID">
    Post schedulers require an active browser executor. List 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 one active executor `id` for the next step.
  </Step>

  <Step title="Create a post scheduler">
    Create the scheduler with a recurring interval, target groups, and post content. The example below posts every 20 minutes.

    <CodeGroup>
      ```bash Request theme={null}
      curl -X POST "{{baseUrl}}/api/v1/post-scheduler" \
        -H "Authorization: Bearer {token}" \
        -H "Content-Type: application/json" \
        -d '{
          "name": "Weekly Tips",
          "executor_id": 101,
          "team_id": 3,
          "group_urls": [
            "https://facebook.com/groups/digimarketpro",
            "https://facebook.com/groups/startupfounders"
          ],
          "schedule_type": "interval",
          "interval": 20,
          "posts": [
            {"text": "Here is today's tip for growing your audience!"}
          ]
        }'
      ```

      ```json Response theme={null}
      {
        "id": 88,
        "name": "Weekly Tips",
        "status": 1,
        "interval": 20
      }
      ```
    </CodeGroup>
  </Step>

  <Step title="Pause the scheduler">
    Change the scheduler status by sending a PATCH request to the scheduler ID.

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

      ```json Response theme={null}
      {
        "id": 88,
        "status": 0
      }
      ```
    </CodeGroup>

    Use `status: 1` to resume later.
  </Step>

  <Step title="Delete queue rows">
    Remove specific queued posts by passing an array of queue IDs in a PATCH update.

    <CodeGroup>
      ```bash Request theme={null}
      curl -X PATCH "{{baseUrl}}/api/v1/post-scheduler/88" \
        -H "Authorization: Bearer {token}" \
        -H "Content-Type: application/json" \
        -d '{
          "delete_queue_ids": [201, 202]
        }'
      ```

      ```json Response theme={null}
      {
        "id": 88,
        "deleted_queue_ids": [201, 202]
      }
      ```
    </CodeGroup>
  </Step>

  <Step title="Clone a post scheduler">
    Duplicate an existing scheduler, including its groups and posts, by using the `clone_from` field on creation.

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

      ```json Response theme={null}
      {
        "id": 89,
        "name": "Weekly Tips - Copy",
        "status": 1
      }
      ```
    </CodeGroup>
  </Step>
</Steps>

<Tip>
  When <code>schedule\_type</code> is set to <code>interval</code>, the <code>interval</code> value is interpreted in minutes. There is no separate scheduling endpoint. Create and update requests handle all scheduling behavior.
</Tip>
