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

# View post analysis

> Get the media analysis for one post: the storyboard scenes the analyzer wrote plus retention data.

`analysisStatus` is the state of the post's latest non-fingerprint analysis: `none` when the post has never been analyzed, `pending`, `failed`, or `complete`. `storyboard` is `null` until a complete analysis with scenes exists.

`retention.organic` follows the post insights contract: `status` and `reason` are paired — `available` with `reason: null` means an Instagram snapshot exists; `no_data` with `never_fetched` means none was stored; `no_data` with `unsupported_platform` means the post is not Instagram.

`retention.paid` sums the post's video paid metrics across all of its boosts: `impressions`, three-second views, and watch-through quartile counters (`videoP25Views` … `videoP100Views`), plus `hookRatePct` (three-second views ÷ impressions) and `completionRatePct` (completes ÷ impressions), both as percentages from 0 to 100. Paid metrics are video-level, so every crossposted sibling post of one video reports the same paid block. `no_data` with reason `no_paid_metrics` means the video has no reported paid metrics.




## OpenAPI

````yaml /api-reference/openapi.json get /posts/{id}/analysis
openapi: 3.0.4
info:
  title: Launchpoint Public API
  version: 1.0.0
  description: >-
    **Private preview.** The Launchpoint Public API is in private preview and
    available only to trusted partners we work with directly. Access is not
    self-serve. Email hi@launchpointhq.com to ask about access.


    REST API for Launchpoint brands and agencies. Use an API key in the
    `x-api-key` header to authenticate.


    ## Requirements

    - Public API access must be enabled for the company. During private preview,
    access is limited to trusted partners.

    - Create and manage API keys in Dashboard → Settings → Developer.


    ## Creator privacy

    - Responses never include creator email addresses. Creator phone numbers are
    null when no number is stored or the workspace does not have access to
    creator contact details.


    ## Rate limits

    - Default: **100 requests per minute** per API key.

    - Approved partner accounts: **400 requests per minute**.

    - Every response includes `X-RateLimit-Limit`, `X-RateLimit-Remaining`, and
    `X-RateLimit-Reset`. Requests over the limit return `429`.


    ## Errors

    - Errors use `{ "error": "<message>" }` with the matching HTTP status. Some
    endpoints also include a `code`.


    ## Timestamps

    - Timestamps are Unix timestamps in milliseconds unless a field says
    otherwise.


    ## Pagination

    - Most list endpoints accept `page` and `limit` and return `{ data, page,
    total }`. Some also return `totalPages`.

    - `scope=company` is the default. A parent agency key can pass
    `scope=agency` on supported routes to include its own data and linked
    brands.
servers:
  - url: https://dashboard.launchpointhq.com/api/v1
    description: Live API server
security:
  - apiKeyAuth: []
tags:
  - name: Deals
    description: Public creator opportunities across Launchpoint
  - name: Programs
    description: Programs and campaign management
  - name: Posts
    description: Posts and social content
  - name: Analytics
    description: KPIs and performance metrics
  - name: Payouts
    description: Payouts, balances, and pending creator funds
  - name: Contracts
    description: Contracts and creator agreements
  - name: Creators
    description: Creator profiles and metrics
  - name: Applications
    description: Creator applications to Canvas programs
  - name: Messages
    description: Read and send creator messages
paths:
  /posts/{id}/analysis:
    get:
      tags:
        - Posts
      summary: View post analysis
      description: >
        Get the media analysis for one post: the storyboard scenes the analyzer
        wrote plus retention data.


        `analysisStatus` is the state of the post's latest non-fingerprint
        analysis: `none` when the post has never been analyzed, `pending`,
        `failed`, or `complete`. `storyboard` is `null` until a complete
        analysis with scenes exists.


        `retention.organic` follows the post insights contract: `status` and
        `reason` are paired — `available` with `reason: null` means an Instagram
        snapshot exists; `no_data` with `never_fetched` means none was stored;
        `no_data` with `unsupported_platform` means the post is not Instagram.


        `retention.paid` sums the post's video paid metrics across all of its
        boosts: `impressions`, three-second views, and watch-through quartile
        counters (`videoP25Views` … `videoP100Views`), plus `hookRatePct`
        (three-second views ÷ impressions) and `completionRatePct` (completes ÷
        impressions), both as percentages from 0 to 100. Paid metrics are
        video-level, so every crossposted sibling post of one video reports the
        same paid block. `no_data` with reason `no_paid_metrics` means the video
        has no reported paid metrics.
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
          description: ID of the post
      responses:
        '200':
          description: Post analysis returned successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      id:
                        type: string
                      analysisStatus:
                        type: string
                        enum:
                          - none
                          - pending
                          - failed
                          - complete
                      analyzedAt:
                        type: integer
                        nullable: true
                        description: >-
                          Unix timestamp in milliseconds of the latest analysis
                          update
                      durationSeconds:
                        type: number
                        nullable: true
                      storyboard:
                        type: array
                        nullable: true
                        items:
                          type: object
                          properties:
                            startMs:
                              type: number
                            endMs:
                              type: number
                            description:
                              type: string
                            transcript:
                              type: string
                              nullable: true
                            textOnScreen:
                              type: string
                              nullable: true
                            sellsProduct:
                              type: boolean
                              nullable: true
                              description: >-
                                Present on newer analyses; null on older
                                artifacts
                      retention:
                        type: object
                        properties:
                          organic:
                            type: object
                            properties:
                              status:
                                type: string
                                enum:
                                  - available
                                  - no_data
                              reason:
                                type: string
                                nullable: true
                                enum:
                                  - never_fetched
                                  - unsupported_platform
                              durationSeconds:
                                type: number
                                nullable: true
                              hookRatePct:
                                type: number
                                nullable: true
                                description: >-
                                  Share still watching at 3s, percentage from 0
                                  to 100 (1 − reels skip rate)
                              skipRatePct:
                                type: number
                                nullable: true
                                description: Percentage from 0 to 100
                              avgWatchTimeMs:
                                type: number
                                nullable: true
                              totalWatchTimeMs:
                                type: number
                                nullable: true
                              updatedAt:
                                type: integer
                                nullable: true
                                description: >-
                                  Unix timestamp in milliseconds for the stored
                                  post snapshot
                          paid:
                            type: object
                            properties:
                              status:
                                type: string
                                enum:
                                  - available
                                  - no_data
                              reason:
                                type: string
                                nullable: true
                                enum:
                                  - no_paid_metrics
                              daysLive:
                                type: integer
                                nullable: true
                                description: Distinct days with a reported paid row
                              throughDate:
                                type: string
                                nullable: true
                                description: Most recent reported day, YYYY-MM-DD
                              impressions:
                                type: number
                                nullable: true
                              video3sViews:
                                type: number
                                nullable: true
                              videoP25Views:
                                type: number
                                nullable: true
                                description: Views that reached 25% of the video
                              videoP50Views:
                                type: number
                                nullable: true
                                description: Views that reached 50% of the video
                              videoP75Views:
                                type: number
                                nullable: true
                                description: Views that reached 75% of the video
                              videoP100Views:
                                type: number
                                nullable: true
                                description: Views that reached 100% of the video
                              hookRatePct:
                                type: number
                                nullable: true
                                description: >-
                                  Three-second views ÷ impressions, percentage
                                  from 0 to 100
                              completionRatePct:
                                type: number
                                nullable: true
                                description: >-
                                  Completes ÷ impressions, percentage from 0 to
                                  100
              example:
                data:
                  id: post_demo_4k9
                  analysisStatus: complete
                  analyzedAt: 1786183200000
                  durationSeconds: 14.2
                  storyboard:
                    - startMs: 0
                      endMs: 6400
                      description: >-
                        A person reacts in surprise to the product on a kitchen
                        counter.
                      transcript: Wait, this actually works?
                      textOnScreen: null
                      sellsProduct: true
                    - startMs: 6400
                      endMs: 14200
                      description: Close-up demo of the product with a price overlay.
                      transcript: null
                      textOnScreen: Only $19
                      sellsProduct: true
                  retention:
                    organic:
                      status: available
                      reason: null
                      durationSeconds: 14.2
                      hookRatePct: 68.6
                      skipRatePct: 31.4
                      avgWatchTimeMs: 14360
                      totalWatchTimeMs: 184520000
                      updatedAt: 1786089600000
                    paid:
                      status: available
                      reason: null
                      daysLive: 12
                      throughDate: '2026-09-18'
                      impressions: 245000
                      video3sViews: 121000
                      videoP25Views: 88000
                      videoP50Views: 54000
                      videoP75Views: 31000
                      videoP100Views: 19000
                      hookRatePct: 49.4
                      completionRatePct: 7.8
        '404':
          description: Post not found or not visible to the API key's scope
components:
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: API key created in Dashboard → Settings → Developer

````