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

# Get All Posts

> List publisher posts with pagination and filtering

> **For AI agents:** a documentation index is at [/llms.txt](/llms.txt). Every page is also available as markdown, just append `.md` to the URL.

## Overview

Retrieve a paginated list of all publisher posts. Filter by status or date range to find specific posts.

## Rate Limiting

This endpoint is rate limited to 10 requests per minute per API key.

## Response

<ResponseField name="posts" type="array">
  Array of post objects

  <Expandable title="AutomationPost Object">
    <ResponseField name="id" type="string">
      Unique post identifier
    </ResponseField>

    <ResponseField name="projectId" type="string">
      ID of the parent project
    </ResponseField>

    <ResponseField name="clipId" type="string">
      ID of the published clip
    </ResponseField>

    <ResponseField name="platforms" type="array">
      Array of target platform names
    </ResponseField>

    <ResponseField name="successPlatforms" type="array">
      Platforms where publishing succeeded
    </ResponseField>

    <ResponseField name="failedPlatforms" type="array">
      Platforms where publishing failed
    </ResponseField>

    <ResponseField name="integrations" type="array">
      Array of integration IDs used for publishing
    </ResponseField>

    <ResponseField name="title" type="string">
      Post title
    </ResponseField>

    <ResponseField name="description" type="string">
      Post description
    </ResponseField>

    <ResponseField name="tags" type="array">
      Array of tags applied to the post
    </ResponseField>

    <ResponseField name="status" type="string">
      Current post status

      * `processing` - Post is being published
      * `draft` - Post is saved as draft
      * `completed` - Published successfully
      * `failed` - Publishing failed
      * `cancelled` - Post was cancelled
      * `unresolved` - Partial success (some platforms failed)
    </ResponseField>

    <ResponseField name="scheduleType" type="string">
      Type of scheduling (`immediate` or `scheduled`)
    </ResponseField>

    <ResponseField name="scheduleDate" type="integer">
      Scheduled publish date as Unix timestamp (null for immediate)
    </ResponseField>

    <ResponseField name="publishDate" type="integer">
      Actual publish date as Unix timestamp
    </ResponseField>

    <ResponseField name="urls" type="object">
      Published URLs per platform
    </ResponseField>

    <ResponseField name="platformSettings" type="object">
      Per-platform configuration

      <Expandable title="Platform Settings">
        <ResponseField name="youtube" type="object">
          YouTube-specific settings

          <Expandable title="YouTube Settings">
            <ResponseField name="privacy" type="string">
              Video privacy: `public`, `private`, or `unlisted`
            </ResponseField>

            <ResponseField name="embeddable" type="boolean">
              Whether the video can be embedded on other sites
            </ResponseField>

            <ResponseField name="publicStats" type="boolean">
              Whether view counts are publicly visible
            </ResponseField>

            <ResponseField name="madeForKids" type="boolean">
              Whether the video is made for kids (COPPA compliance)
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="tiktok" type="object">
          TikTok-specific settings

          <Expandable title="TikTok Settings">
            <ResponseField name="privacy" type="string">
              Video privacy: `public`, `friends`, or `private`
            </ResponseField>

            <ResponseField name="disableComments" type="boolean">
              Disable comments on the video
            </ResponseField>

            <ResponseField name="disableDuet" type="boolean">
              Disable duets for the video
            </ResponseField>

            <ResponseField name="disableStitch" type="boolean">
              Disable stitches for the video
            </ResponseField>

            <ResponseField name="brandContent" type="boolean">
              Mark as paid partnership / brand content
            </ResponseField>

            <ResponseField name="brandOrganic" type="boolean">
              Mark as organic brand content
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="instagram" type="object">
          Instagram-specific settings

          <Expandable title="Instagram Settings">
            <ResponseField name="shareToFeed" type="boolean">
              Whether to share Reels to the main feed
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="linkedin" type="object">
          LinkedIn-specific settings

          <Expandable title="LinkedIn Settings">
            <ResponseField name="privacy" type="string">
              Post visibility: `public` or `connections`
            </ResponseField>
          </Expandable>
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="createdAt" type="integer">
      Unix timestamp when the post was created
    </ResponseField>

    <ResponseField name="updatedAt" type="integer">
      Unix timestamp when the post was last updated
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="currentPage" type="integer">
  Current page number
</ResponseField>

<ResponseField name="totalPages" type="integer">
  Total number of pages
</ResponseField>

<ResponseField name="totalPosts" type="integer">
  Total number of posts matching the filters
</ResponseField>

## Example Request

<CodeGroup>
  ```bash cURL theme={"system"}
  curl -X GET "https://public.reap.video/api/v1/automation/get-all-posts?page=1&pageSize=10&status=completed" \
    -H "Authorization: Bearer YOUR_API_KEY" \
    -H "Content-Type: application/json"
  ```

  ```javascript JavaScript theme={"system"}
  const params = new URLSearchParams({
    page: '1',
    pageSize: '10',
    status: 'completed'
  });

  const response = await fetch(`https://public.reap.video/api/v1/automation/get-all-posts?${params}`, {
    headers: {
      'Authorization': 'Bearer YOUR_API_KEY',
      'Content-Type': 'application/json'
    }
  });

  const data = await response.json();
  console.log(`Found ${data.totalPosts} posts (page ${data.currentPage}/${data.totalPages})`);
  ```

  ```python Python theme={"system"}
  import requests

  headers = {
      'Authorization': 'Bearer YOUR_API_KEY',
      'Content-Type': 'application/json'
  }

  params = {
      'page': 1,
      'pageSize': 10,
      'status': 'completed'
  }

  response = requests.get(
      'https://public.reap.video/api/v1/automation/get-all-posts',
      headers=headers,
      params=params
  )

  data = response.json()
  print(f"Found {data['totalPosts']} posts (page {data['currentPage']}/{data['totalPages']})")
  ```

  ```php PHP theme={"system"}
  <?php
  $query = http_build_query([
      'page' => 1,
      'pageSize' => 10,
      'status' => 'completed'
  ]);

  $ch = curl_init('https://public.reap.video/api/v1/automation/get-all-posts?' . $query);
  curl_setopt($ch, CURLOPT_HTTPHEADER, [
      'Authorization: Bearer YOUR_API_KEY',
      'Content-Type: application/json'
  ]);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  $response = curl_exec($ch);
  curl_close($ch);
  $data = json_decode($response, true);
  echo 'Found ' . $data['totalPosts'] . ' posts' . "\n";
  ?>
  ```

  ```go Go theme={"system"}
  package main
  import (
      "encoding/json"
      "fmt"
      "io/ioutil"
      "net/http"
  )
  type PostsResponse struct {
      TotalPosts  int `json:"totalPosts"`
      CurrentPage int `json:"currentPage"`
      TotalPages  int `json:"totalPages"`
  }
  func main() {
      url := "https://public.reap.video/api/v1/automation/get-all-posts?page=1&pageSize=10&status=completed"
      req, _ := http.NewRequest("GET", url, nil)
      req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
      req.Header.Set("Content-Type", "application/json")
      client := &http.Client{}
      resp, _ := client.Do(req)
      defer resp.Body.Close()
      body, _ := ioutil.ReadAll(resp.Body)
      var result PostsResponse
      json.Unmarshal(body, &result)
      fmt.Printf("Found %d posts (page %d/%d)\n", result.TotalPosts, result.CurrentPage, result.TotalPages)
  }
  ```

  ```java Java theme={"system"}
  import java.io.*;
  import java.net.HttpURLConnection;
  import java.net.URL;
  public class GetAllPostsExample {
      public static void main(String[] args) throws Exception {
          URL url = new URL("https://public.reap.video/api/v1/automation/get-all-posts?page=1&pageSize=10&status=completed");
          HttpURLConnection conn = (HttpURLConnection) url.openConnection();
          conn.setRequestMethod("GET");
          conn.setRequestProperty("Authorization", "Bearer YOUR_API_KEY");
          conn.setRequestProperty("Content-Type", "application/json");
          BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
          StringBuilder response = new StringBuilder();
          String responseLine;
          while ((responseLine = br.readLine()) != null) {
              response.append(responseLine.trim());
          }
          System.out.println(response.toString());
      }
  }
  ```
</CodeGroup>

## Example Response

<CodeGroup>
  <CodeGroup.Tab label="200 OK">
    ```json theme={"system"}
    {
      "posts": [
        {
          "id": "67b1c2d3e4f5a6b7c8d9e0f1",
          "projectId": "65f1a2b3c4d5e6f7a8b9c0d2",
          "clipId": "65f1a2b3c4d5e6f7a8b9c0d4",
          "platforms": ["youtube", "tiktok"],
          "successPlatforms": ["youtube", "tiktok"],
          "failedPlatforms": [],
          "integrations": ["66a1b2c3d4e5f6a7b8c9d0e1", "66a1b2c3d4e5f6a7b8c9d0e3"],
          "title": "The Future of AI",
          "description": "Exploring how AI will transform our daily lives",
          "tags": ["ai", "technology"],
          "status": "completed",
          "scheduleType": "immediate",
          "scheduleDate": null,
          "publishDate": 1710000300,
          "urls": {
            "youtube": "https://youtube.com/shorts/abc123",
            "tiktok": "https://tiktok.com/@user/video/123456"
          },
          "platformSettings": {
            "youtube": { "privacy": "public", "madeForKids": false },
            "tiktok": { "privacy": "public", "disableComments": false }
          },
          "createdAt": 1710000000,
          "updatedAt": 1710000300
        }
      ],
      "currentPage": 1,
      "totalPages": 3,
      "totalPosts": 24
    }
    ```
  </CodeGroup.Tab>

  <CodeGroup.Tab label="401 Unauthorized">
    ```json theme={"system"}
    {
      "detail": "Unauthorized - Invalid or missing API key"
    }
    ```
  </CodeGroup.Tab>

  <CodeGroup.Tab label="429 Too Many Requests">
    ```json theme={"system"}
    {
      "detail": "Too Many Requests - Rate limit of 10 requests per minute exceeded"
    }
    ```
  </CodeGroup.Tab>
</CodeGroup>


## OpenAPI

````yaml GET /automation/get-all-posts
openapi: 3.1.0
info:
  title: Reap Automation API
  description: AI-powered video processing automation API
  version: 1.0.0
servers:
  - url: https://public.reap.video/api/v1
security:
  - bearerAuth: []
paths:
  /automation/get-all-posts:
    get:
      summary: Get All Posts
      description: Retrieve all publisher posts
      operationId: getAllPosts
      parameters:
        - $ref: '#/components/parameters/page'
        - name: pageSize
          in: query
          schema:
            type: integer
            default: 10
          description: Number of posts per page (max 100)
        - name: status
          in: query
          schema:
            type: array
            items:
              type: string
              enum:
                - processing
                - draft
                - completed
                - failed
                - cancelled
                - unresolved
          description: Filter by post status
        - name: createdAfter
          in: query
          schema:
            type: integer
          description: Filter posts after this Unix timestamp
        - name: createdBefore
          in: query
          schema:
            type: integer
          description: Filter posts before this Unix timestamp
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetPostsResponse'
components:
  parameters:
    page:
      name: page
      in: query
      schema:
        type: integer
        default: 1
      description: Page number for pagination
  schemas:
    GetPostsResponse:
      type: object
      properties:
        posts:
          type: array
          items:
            $ref: '#/components/schemas/AutomationPost'
        currentPage:
          type: integer
        totalPages:
          type: integer
        totalPosts:
          type: integer
    AutomationPost:
      type: object
      properties:
        id:
          type: string
        projectId:
          type: string
          nullable: true
        clipId:
          type: string
          nullable: true
        platforms:
          type: array
          items:
            type: string
        successPlatforms:
          type: array
          items:
            type: string
        failedPlatforms:
          type: array
          items:
            type: string
        integrations:
          type: array
          items:
            type: string
        title:
          type: string
          nullable: true
        description:
          type: string
          nullable: true
        tags:
          type: array
          items:
            type: string
          nullable: true
        status:
          type: string
          enum:
            - processing
            - draft
            - completed
            - failed
            - cancelled
            - unresolved
        scheduleType:
          type: string
          enum:
            - scheduled
            - immediate
        scheduleDate:
          type: integer
        publishDate:
          type: integer
        urls:
          type: object
          description: Social media URLs keyed by integration ID
        platformSettings:
          $ref: '#/components/schemas/PlatformSettings'
        createdAt:
          type: integer
        updatedAt:
          type: integer
    PlatformSettings:
      type: object
      properties:
        youtube:
          $ref: '#/components/schemas/YouTubeSettings'
          nullable: true
        tiktok:
          $ref: '#/components/schemas/TikTokSettings'
          nullable: true
        instagram:
          $ref: '#/components/schemas/InstagramSettings'
          nullable: true
        linkedin:
          $ref: '#/components/schemas/LinkedInSettings'
          nullable: true
    YouTubeSettings:
      type: object
      properties:
        privacy:
          type: string
          enum:
            - public
            - unlisted
            - private
          default: public
          description: YouTube video privacy
        embeddable:
          type: boolean
          default: true
          description: Allow embedding
        publicStats:
          type: boolean
          default: true
          description: Show public statistics
        madeForKids:
          type: boolean
          default: false
          description: Mark as made for kids
    TikTokSettings:
      type: object
      properties:
        privacy:
          type: string
          enum:
            - public
            - unlisted
            - followers
            - friends
            - private
          default: public
          description: TikTok video privacy
        disableComments:
          type: boolean
          default: false
        disableDuet:
          type: boolean
          default: false
        disableStitch:
          type: boolean
          default: false
        brandContent:
          type: boolean
          default: false
        brandOrganic:
          type: boolean
          default: false
    InstagramSettings:
      type: object
      properties:
        shareToFeed:
          type: boolean
          default: false
          description: Share reel to Instagram feed
    LinkedInSettings:
      type: object
      properties:
        privacy:
          type: string
          enum:
            - public
            - connections
            - logged_in
          default: public
          description: LinkedIn post visibility
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer

````