> ## 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 Post Details

> Get details of a specific publisher post

> **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 the full details of a specific publisher post, including its current status, platform URLs, and configuration.

## Rate Limiting

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

## Response

<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
  * `scheduled` - Post is scheduled for future publishing
  * `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 (populated after successful publishing)
</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>

## Example Request

<CodeGroup>
  ```bash cURL theme={"system"}
  curl -X GET "https://public.reap.video/api/v1/automation/get-post-details?postId=67b1c2d3e4f5a6b7c8d9e0f1" \
    -H "Authorization: Bearer YOUR_API_KEY" \
    -H "Content-Type: application/json"
  ```

  ```javascript JavaScript theme={"system"}
  const postId = '67b1c2d3e4f5a6b7c8d9e0f1';
  const response = await fetch(`https://public.reap.video/api/v1/automation/get-post-details?postId=${postId}`, {
    headers: {
      'Authorization': 'Bearer YOUR_API_KEY',
      'Content-Type': 'application/json'
    }
  });

  const post = await response.json();
  console.log(`Post ${post.id}: ${post.status}`);
  ```

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

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

  post_id = '67b1c2d3e4f5a6b7c8d9e0f1'
  response = requests.get(
      f'https://public.reap.video/api/v1/automation/get-post-details?postId={post_id}',
      headers=headers
  )

  post = response.json()
  print(f"Post {post['id']}: {post['status']}")
  ```

  ```php PHP theme={"system"}
  <?php
  $postId = '67b1c2d3e4f5a6b7c8d9e0f1';
  $ch = curl_init('https://public.reap.video/api/v1/automation/get-post-details?postId=' . $postId);
  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);
  $post = json_decode($response, true);
  echo 'Post ' . $post['id'] . ': ' . $post['status'] . "\n";
  ?>
  ```

  ```go Go theme={"system"}
  package main
  import (
      "encoding/json"
      "fmt"
      "io/ioutil"
      "net/http"
  )
  type Post struct {
      ID     string `json:"id"`
      Status string `json:"status"`
  }
  func main() {
      postId := "67b1c2d3e4f5a6b7c8d9e0f1"
      url := fmt.Sprintf("https://public.reap.video/api/v1/automation/get-post-details?postId=%s", postId)
      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 post Post
      json.Unmarshal(body, &post)
      fmt.Printf("Post %s: %s\n", post.ID, post.Status)
  }
  ```

  ```java Java theme={"system"}
  import java.io.*;
  import java.net.HttpURLConnection;
  import java.net.URL;
  public class GetPostDetailsExample {
      public static void main(String[] args) throws Exception {
          String postId = "67b1c2d3e4f5a6b7c8d9e0f1";
          URL url = new URL("https://public.reap.video/api/v1/automation/get-post-details?postId=" + postId);
          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"}
    {
      "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",
          "embeddable": true,
          "publicStats": true,
          "madeForKids": false
        },
        "tiktok": {
          "privacy": "public",
          "disableComments": false,
          "disableDuet": false,
          "disableStitch": false,
          "brandContent": false,
          "brandOrganic": false
        }
      },
      "createdAt": 1710000000,
      "updatedAt": 1710000300
    }
    ```
  </CodeGroup.Tab>

  <CodeGroup.Tab label="404 Not Found">
    ```json theme={"system"}
    {
      "detail": "Post not found"
    }
    ```
  </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-post-details
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-post-details:
    get:
      summary: Get Post Details
      description: Retrieve details for a specific post
      operationId: getPostDetails
      parameters:
        - $ref: '#/components/parameters/postId'
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AutomationPost'
components:
  parameters:
    postId:
      name: postId
      in: query
      required: true
      schema:
        type: string
      description: Unique identifier of the post
  schemas:
    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

````