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

# Get group creatives

> Returns one paginated feed of creatives from the brands in a group, ordered by the specified sort. Each page holds up to 12 creatives.

Use `q` to search inside the creatives: their ad copy, video transcripts, on-screen text and landing page URLs. Results stay in `order_by` order.

Cursor-based pagination — pass `next_cursor` from the previous response as `cursor`, with the same `order_by`, `q` and filters. A cursor used with a different `order_by` returns `400`.


> [!NOTE]
>
> **Credits:** 1 credit per request, which returns one page of up to 12 creatives. Each page you fetch with `cursor` is another request.


## OpenAPI

````yaml GET /v1/groups/{group_id}/creatives
openapi: 3.1.0
info:
  title: Adspo API
  version: 1.0.0
  description: >
    The Adspo API gives you programmatic access to ad creative data across
    brands.


    ## Authentication


    All endpoints require an API key passed in the `x-api-key` header.


    ```

    x-api-key: YOUR_API_KEY

    ```


    ## Rate limits


    - **120 requests per minute** per key. Exceeding this returns `429` with a
    `Retry-After` header. Every response carries `RateLimit-Limit`,
    `RateLimit-Remaining` and `RateLimit-Reset` headers.

    - **Credits per billing period** vary by plan. Each request costs 1 credit
    (`/v1/usage` is free). Exceeding your quota returns `429` with `resets_at`
    indicating when it resets.

    - A key whose account has no active subscription gets `403`.

    - **Changes** have their own per-person limits, across all their keys and
    connections: saving creatives and adding them to boards, 30 a minute;
    creating boards, 10 a minute; following brands and adding them to groups, 30
    a minute. Exceeding these returns `429` with a `Retry-After` header. Each
    costs 1 credit only when it changes something; anything already there is
    free.
servers:
  - url: https://api.adspo.co
    description: Production
security:
  - apiKey: []
paths:
  /v1/groups/{group_id}/creatives:
    get:
      summary: Get group creatives
      description: >
        Returns one paginated feed of creatives from the brands in a group,
        ordered by the specified sort. Each page holds up to 12 creatives.


        Use `q` to search inside the creatives: their ad copy, video
        transcripts, on-screen text and landing page URLs. Results stay in
        `order_by` order.


        Cursor-based pagination — pass `next_cursor` from the previous response
        as `cursor`, with the same `order_by`, `q` and filters. A cursor used
        with a different `order_by` returns `400`.
      operationId: getGroupCreatives
      parameters:
        - name: group_id
          in: path
          required: true
          description: The group's ID, from [Get groups](/api-reference/get-groups).
          schema:
            type: string
            format: uuid
          example: 5b9f3c2e-8d41-4e6a-9a57-2f1c0d7e8b44
        - $ref: '#/components/parameters/feed_order_by'
        - $ref: '#/components/parameters/cursor'
        - $ref: '#/components/parameters/q'
        - $ref: '#/components/parameters/search_in'
        - $ref: '#/components/parameters/start_date'
        - $ref: '#/components/parameters/end_date'
        - $ref: '#/components/parameters/is_active'
        - $ref: '#/components/parameters/format'
        - $ref: '#/components/parameters/visual_format'
        - $ref: '#/components/parameters/runtime_min'
        - $ref: '#/components/parameters/runtime_max'
        - $ref: '#/components/parameters/ad_count_min'
        - $ref: '#/components/parameters/ad_count_max'
        - $ref: '#/components/parameters/impression_order_min'
        - $ref: '#/components/parameters/impression_order_max'
        - $ref: '#/components/parameters/country'
        - $ref: '#/components/parameters/language'
        - $ref: '#/components/parameters/include_ads'
      responses:
        '200':
          description: A page of creatives.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreativesResponse'
              example:
                group_id: 5b9f3c2e-8d41-4e6a-9a57-2f1c0d7e8b44
                count: 1
                next_cursor: null
                creatives:
                  - creative_id: f930d886d0fb9e86b9dd6c1200dab7ef
                    brand_id: '857986847394146'
                    brand_name: DRMTLGY
                    format: IMAGE
                    hd_url: >-
                      https://r2.adspo.co/creatives/images/original/f930d886d0fb9e86b9dd6c1200dab7ef.jpg
                    sd_url: >-
                      https://r2.adspo.co/creatives/images/resized/f930d886d0fb9e86b9dd6c1200dab7ef.jpg
                    is_active: false
                    start_date: '2026-03-16T07:00:00Z'
                    end_date: '2026-04-24T07:00:00Z'
                    runtime_days: 39
                    ad_count: 10
                    landing_pages:
                      - https://www.example.com
                    countries:
                      - AU
                      - GB
                      - NZ
                      - US
                    languages:
                      - en
                    impression_order: 11
                    variants: []
                    hook: null
                    visual_formats:
                      - High Production
                      - Demo
        '400':
          description: Invalid order_by, search_in, start_date, end_date or cursor.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Missing or invalid API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          description: Group not found, or not one of yours.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          $ref: '#/components/responses/SearchUnavailable'
        '504':
          $ref: '#/components/responses/SearchTimeout'
components:
  parameters:
    feed_order_by:
      name: order_by
      in: query
      description: Sort order for results.
      schema:
        type: string
        enum:
          - latest
          - oldest
          - longest_running
          - most_ads
        default: latest
    cursor:
      name: cursor
      in: query
      description: Pagination cursor from a previous response.
      schema:
        type: string
    q:
      name: q
      in: query
      description: >
        Search inside the creatives for a word or phrase: their ad copy, video
        transcripts, on-screen text and landing page URLs. Matches the exact
        phrase.

        Results keep `order_by`; they are not ranked by relevance. Works with
        every other filter.
      schema:
        type: string
      example: free shipping
    search_in:
      name: search_in
      in: query
      description: Limit `q` to one kind of text. Leave out to search all of them.
      schema:
        type: string
        enum:
          - copy
          - transcript
          - on_screen_text
          - landing_page
    start_date:
      name: start_date
      in: query
      description: >
        Filter creatives first seen on or after this date.

        Accepted formats: `YYYY-MM-DD`, `YYYY-MM-DD HH:MM:SS`,
        `YYYY-MM-DDTHH:MM:SS`.

        A bare date (e.g. `2024-11-12`) is interpreted as `2024-11-12 00:00:00`.
        Times without an offset are UTC.
      schema:
        type: string
      example: '2024-11-12 00:00:00'
    end_date:
      name: end_date
      in: query
      description: >
        Filter creatives first seen on or before this date. With `start_date`,
        this is the window the creatives started running in.

        Accepted formats: `YYYY-MM-DD`, `YYYY-MM-DD HH:MM:SS`,
        `YYYY-MM-DDTHH:MM:SS`.

        A bare date (e.g. `2024-11-12`) includes the whole day. Times without an
        offset are UTC.

        To find creatives that have stopped running, use `is_active=false`.
      schema:
        type: string
      example: '2024-11-12'
    is_active:
      name: is_active
      in: query
      description: Filter by whether the creative is currently running.
      schema:
        type: boolean
    format:
      name: format
      in: query
      description: Filter by creative format.
      schema:
        type: string
        enum:
          - IMAGE
          - VIDEO
    visual_format:
      name: visual_format
      in: query
      description: >
        Only creatives in this visual style, tagged from the image or video, the
        same list as the app's **Visual format** filter. Matched ignoring case.
        Each creative's `visual_formats` lists its own.
      schema:
        type: string
        enum:
          - Animation
          - Before & After
          - Challenge / Experiment
          - Cinematic B-Roll
          - Customer Testimonial
          - Demo
          - Employee / BTS
          - Expert / Authority
          - Explainer
          - Flatlay
          - Founder Story
          - GIF / Static To Video
          - High Production
          - Illustration
          - Interview
          - Lifestyle
          - Listicle / Tier List
          - Low Stock / Back in Stock
          - Meme
          - Model / Try-on
          - Native
          - Offer / Discount
          - Organic
          - POV
          - Podcast
          - Product Features & Benefits
          - Product Shot
          - Reaction / Taste Test
          - Retail Announcement
          - Review / Social Proof
          - Screenshot / Mockup
          - Skit
          - Talking Head
          - Text-Heavy
          - Unboxing
          - Us vs Them
          - Yapper
      example: Talking Head
    runtime_min:
      name: runtime_min
      in: query
      description: Minimum runtime in days.
      schema:
        type: integer
    runtime_max:
      name: runtime_max
      in: query
      description: Maximum runtime in days.
      schema:
        type: integer
    ad_count_min:
      name: ad_count_min
      in: query
      description: Minimum number of ad variants using this creative.
      schema:
        type: integer
    ad_count_max:
      name: ad_count_max
      in: query
      description: Maximum number of ad variants using this creative.
      schema:
        type: integer
    impression_order_min:
      name: impression_order_min
      in: query
      description: >-
        Minimum impression order rank. Lower values indicate higher estimated
        impressions.
      schema:
        type: integer
    impression_order_max:
      name: impression_order_max
      in: query
      description: Maximum impression order rank.
      schema:
        type: integer
    country:
      name: country
      in: query
      description: >-
        Comma-separated or repeated. Matches creatives shown in any of these
        countries.
      schema:
        type: string
      example: US
    language:
      name: language
      in: query
      description: >-
        Comma-separated or repeated. Matches creatives in any of these
        languages.
      schema:
        type: string
      example: en
    include_ads:
      name: include_ads
      in: query
      description: >-
        Returns an `ads` array containing all Meta ads running the creative,
        including details such as `title`, `body_text`, `link_text`, etc.
      schema:
        type: boolean
        default: false
  schemas:
    CreativesResponse:
      type: object
      properties:
        brand_id:
          type: string
          nullable: true
          description: >-
            Facebook Ad Library page ID. Only present on brand creatives
            responses.
        group_id:
          type: string
          format: uuid
          description: The group's ID. Only present on group creatives responses.
        count:
          type: integer
          description: Number of creatives returned in this page.
        next_cursor:
          type: string
          nullable: true
          description: >-
            Pass this value as cursor to retrieve the next page. null when there
            are no more results.
        creatives:
          type: array
          items:
            $ref: '#/components/schemas/Creative'
    Error:
      type: object
      properties:
        error:
          type: string
    Creative:
      type: object
      properties:
        creative_id:
          type: string
          description: Unique identifier for this creative.
        brand_id:
          type: string
          description: Facebook Ad Library page ID of the brand running this creative.
        brand_name:
          type: string
          nullable: true
          description: >-
            Display name of the brand. null only when the brand record is
            missing.
        format:
          type: string
          enum:
            - IMAGE
            - VIDEO
          description: Whether the creative uses a static image or video.
        hd_url:
          type: string
          description: >-
            High-resolution media URL. For videos the HD stream, for images the
            original.
        sd_url:
          type: string
          description: >-
            Lower-resolution media URL. For videos the SD stream, for images the
            resized version.
        is_active:
          type: boolean
          description: Whether the creative is currently running as an active ad.
        start_date:
          type: string
          format: date-time
          description: Date the creative was first observed in the Ad Library.
        end_date:
          type: string
          format: date-time
          nullable: true
          description: >-
            Date the creative was last observed. null if the creative is still
            active.
        runtime_days:
          type: integer
          description: >-
            Number of days between start_date and end_date (or today if still
            active).
        ad_count:
          type: integer
          description: Number of individual ad variants using this creative.
        landing_pages:
          type: array
          description: Destination URLs this creative links to.
          items:
            type: string
        countries:
          type: array
          description: Country codes where this creative has been shown.
          items:
            type: string
        languages:
          type: array
          description: Languages this creative has been served in.
          items:
            type: string
        impression_order:
          type: integer
          nullable: true
          description: >-
            Estimated impression rank among active ads for this brand, where 1
            is the most-served. null when the creative has no rank.
        variants:
          type: array
          description: Alternate copies of this creative.
          items:
            type: object
            properties:
              creative_id:
                type: string
              hd_url:
                type: string
              sd_url:
                type: string
        hook:
          type: string
          nullable: true
          description: >-
            Opening line of the video transcript. null if unavailable or not a
            video creative.
        visual_formats:
          type: array
          description: >-
            Visual styles detected in this creative, such as "Customer
            Testimonial", "Demo", "High Production" or "Model / Try-on". Empty
            when the creative has not been classified. The creative feeds can
            filter on one with `visual_format`.
          items:
            type: string
        ads:
          type: array
          description: >-
            Individual ad variants for this creative. Only present when
            include_ads=true.
          items:
            $ref: '#/components/schemas/Ad'
    Ad:
      type: object
      properties:
        ad_archive_id:
          type: string
          description: Unique ID for this ad in the Facebook Ad Library.
        brand_id:
          type: string
          description: Facebook Ad Library page ID of the brand running this ad.
        creative_id:
          type: string
          description: ID of the parent creative this ad belongs to.
        ad_format:
          type: string
          enum:
            - IMAGE
            - VIDEO
            - DCO
          description: The format of the ad.
        is_active:
          type: boolean
          description: Whether this ad is currently running.
        start_date:
          type: string
          format: date-time
          description: Date this ad started running.
        end_date:
          type: string
          format: date-time
          nullable: true
          description: Date this ad stopped running. null if still active.
        title_text:
          type: string
          nullable: true
          description: Headline or title text of the ad.
        body_text:
          type: string
          nullable: true
          description: Main body copy of the ad.
        cta_text:
          type: string
          nullable: true
          description: Call-to-action button label.
        link_text:
          type: string
          nullable: true
          description: Display text shown on the destination link.
        link_url:
          type: string
          nullable: true
          description: Destination URL the ad links to.
        language:
          type: string
          description: Language this ad variant is served in.
        countries:
          type: array
          description: Country codes where this ad is running.
          items:
            type: string
  responses:
    Forbidden:
      description: >
        The account behind the key has no active subscription (`No active
        subscription`), or a team key's subscription can't be found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: No active subscription
    TooManyRequests:
      description: >
        Either the per-minute rate limit or the credit quota was exceeded. The
        two look different:


        - **Rate limit** (120 requests per minute): the response has a
        `Retry-After` header with the seconds to wait.

        - **Quota** (credits per billing period): the body includes `limit` and
        `resets_at`. Retrying won't help until then.
      headers:
        Retry-After:
          description: >-
            Seconds until the rate limit window resets. Only sent when the rate
            limit was hit.
          schema:
            type: integer
      content:
        application/json:
          schema:
            type: object
            properties:
              error:
                type: string
              limit:
                type: integer
                description: >-
                  Credits in the billing period. Only present when the quota was
                  exceeded.
              resets_at:
                type: string
                format: date-time
                description: >-
                  When the quota resets. Only present when the quota was
                  exceeded.
          examples:
            rate_limit:
              summary: Rate limit
              value:
                error: Rate limit exceeded. Maximum 120 requests per minute.
            quota:
              summary: Quota
              value:
                error: Quota exceeded
                limit: 10000
                resets_at: '2026-06-04T22:38:10Z'
    SearchUnavailable:
      description: >
        Creatives are temporarily unavailable for this request. Try again
        shortly. With `q`, you can also leave it out: the other filters work
        without it.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    SearchTimeout:
      description: >
        The `q` search matched too many creatives to finish in time. Use a more
        specific phrase, or narrow it with filters such as `category`, `format`
        or `start_date`.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: x-api-key
      description: Your Adspo API key.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.