Constructor Retail Media API

Retail media surface for updating advertiser engagement suspension status and retrieving per-advertiser ad spend accrued within an index.

OpenAPI Specification

constructorio-retail-media-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Retail Media
  contact:
    email: support@constructor.io
  version: 1.0.0
servers:
- url: https://retail.media-cnstrc.com
paths:
  /v1/engagements/{engagement_id}:
    patch:
      tags:
      - Engagements
      summary: Update Engagement
      description: '**🔐 This endpoint requires [HTTP Bearer authentication](https://docs.constructor.com/reference/main-authentication#bearer-authentication).**

        For authenticating with Bearer token, required scopes are: `retail_media.engagements(w)`.


        **Beta:** This endpoint is in beta and may change. Updates the suspension status of an advertiser engagement. When suspended, the engagement''s ads will stop serving. When unsuspended, the engagement''s ads will resume serving.'
      operationId: v1-engagements-update
      parameters:
      - name: engagement_id
        in: path
        required: true
        schema:
          type: string
          title: Engagement ID
          description: The advertiser engagement ID.
        description: The advertiser engagement ID.
      - name: key
        in: query
        required: true
        schema:
          type: string
          description: The key of the index to use.
          title: Key
        description: The key of the index to use.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EngagementUpdateRequest'
      responses:
        '200':
          description: Successful Response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EngagementResponse'
        '400':
          description: Bad Request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicErrorResponse'
        '401':
          description: Unauthorized.
        '403':
          description: Forbidden.
      security:
      - bearerAuth:
        - retail_media.engagements(w)
    servers:
    - url: https://retail.media-cnstrc.com
  /v1/advertiser_spend:
    get:
      tags:
      - Engagements
      summary: Retrieve Advertiser Spend
      description: '**🔐 This endpoint requires [HTTP Bearer authentication](https://docs.constructor.com/reference/main-authentication#bearer-authentication).**

        For authenticating with Bearer token, required scopes are: `retail_media.ad_spend_tracking(r)`.


        **Beta:** This endpoint is in beta and may change. Returns the spend for every advertiser (engagement) that has accrued spend within the given index, broken down by day for the last 30 days.'
      operationId: v1-advertiser-spend-retrieve-advertiser-spend
      parameters:
      - name: key
        in: query
        required: true
        schema:
          type: string
          description: The key of the index to use.
          title: Key
        description: The key of the index to use.
      - name: next_page_cursor
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: Opaque cursor returned by a previous response. When omitted, the first page is returned.
          title: Next Page Cursor
        description: Opaque cursor returned by a previous response. When omitted, the first page is returned.
      - name: num_results_per_page
        in: query
        required: false
        schema:
          type: integer
          minimum: 1
          description: Maximum number of advertisers to return in a single page. Defaults to 100, with a maximum of 1000. Values above the maximum are clamped.
          default: 100
          title: Num Results Per Page
        description: Maximum number of advertisers to return in a single page. Defaults to 100, with a maximum of 1000. Values above the maximum are clamped.
      responses:
        '200':
          description: Successful Response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvertiserSpendResponse'
        '400':
          description: Bad Request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicErrorResponse'
        '401':
          description: Unauthorized.
        '403':
          description: Forbidden.
      security:
      - bearerAuth:
        - retail_media.ad_spend_tracking(r)
    servers:
    - url: https://retail.media-cnstrc.com
components:
  schemas:
    AdvertiserSpendRecord:
      properties:
        engagement_id:
          type: string
          title: Engagement ID
          description: The advertiser (engagement) ID for the record.
        daily_spend:
          additionalProperties:
            type: string
            pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          type: object
          title: Daily Spend
          description: Map of date (YYYY-MM-DD) to spend for that advertiser. Includes the last 30 days.
          examples:
          - '2026-06-18': '40.0'
            '2026-06-19': '12.5'
      type: object
      required:
      - engagement_id
      - daily_spend
      title: AdvertiserSpendRecord
    AdvertiserSpendResponse:
      properties:
        advertiser_spend:
          items:
            $ref: '#/components/schemas/AdvertiserSpendRecord'
          type: array
          title: Advertiser Spend
          description: Array of advertiser (engagement) spend records for the given index. Contains at most `num_results_per_page` entries.
        total_count:
          type: integer
          title: Total Count
          description: Total number of advertisers with accrued spend for the index in the window, across all pages.
          examples:
          - 5
        next_page_cursor:
          anyOf:
          - type: string
          - type: 'null'
          title: Next Page Cursor
          description: Opaque cursor for the next page, or null when the current page is the last one.
      type: object
      required:
      - advertiser_spend
      - total_count
      - next_page_cursor
      title: AdvertiserSpendResponse
    EngagementResponse:
      properties:
        engagement_id:
          type: string
          title: Engagement ID
          description: The advertiser engagement ID.
        key:
          type: string
          title: Key
          description: The key of the index.
        is_suspended:
          type: boolean
          title: Is Suspended
          description: Whether the engagement is suspended.
      type: object
      required:
      - engagement_id
      - key
      - is_suspended
      title: EngagementResponse
    EngagementUpdateRequest:
      properties:
        is_suspended:
          type: boolean
          title: Is Suspended
          description: Whether the engagement is suspended.
      type: object
      required:
      - is_suspended
      title: EngagementUpdateRequest
    PublicErrorDetails:
      properties:
        code:
          type: string
          title: Code
        message:
          type: string
          title: Message
        source:
          anyOf:
          - type: string
          - type: 'null'
          title: Source
      type: object
      required:
      - code
      - message
      - source
      title: PublicErrorDetails
    PublicErrorResponse:
      properties:
        message:
          type: string
          title: Message
        errors:
          items:
            $ref: '#/components/schemas/PublicErrorDetails'
          type: array
          title: Errors
        trace_id:
          anyOf:
          - type: string
          - type: 'null'
          title: Trace ID
      type: object
      required:
      - message
      - errors
      - trace_id
      title: PublicErrorResponse
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: token
x-readme:
  explorer-enabled: false