Scope3 Storefront Proposals API

The Storefront Proposals API from Scope3 — 3 operation(s) for storefront proposals.

Operations 5

POST /proposals Create storefront proposal #
GET /proposals List storefront proposals #
GET /proposals/{id} Get storefront proposal #
PATCH /proposals/{id} Update storefront proposal #
POST /proposals/{id}/revoke Revoke storefront proposal #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/scope3-storefront-proposals-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

scope3-storefront-proposals-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Scope3 Storefront Storefront Proposals API
  version: 2.0.0
  description: 'REST API for partners to manage storefronts, inventory sources, and billing.


    ## Authentication


    All endpoints require a Bearer token in the Authorization header:

    ```

    Authorization: Bearer your-api-key

    ```


    ## Base URL


    `https://api.interchange.io/api/v2/storefront`


    ## For AI Agents


    AI agents can use the MCP endpoint at `/mcp/v2/storefront` with three tools:

    - `initialize`: Start an MCP session

    - `api_call`: Make REST API calls

    - `ask_about_capability`: Learn about API features'
servers:
- url: https://api.interchange.io/api/v2/storefront
  description: Production server
tags:
- name: Storefront Proposals
paths:
  /proposals:
    post:
      operationId: createStorefrontProposal
      summary: Create storefront proposal
      description: Save a discover-products response for a buyer (operator) and mint a shareable proposal_code. Buyers redeem the code on discover_products in a follow-up release.
      tags:
      - Storefront Proposals
      security:
      - bearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateStorefrontProposalBody'
      responses:
        '201':
          description: Create storefront proposal
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontProposal'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
    get:
      operationId: listStorefrontProposals
      summary: List storefront proposals
      description: List storefront proposals for the seller, filterable by status and operator.
      tags:
      - Storefront Proposals
      security:
      - bearerAuth: []
      parameters:
      - in: query
        name: status
        schema:
          description: Filter by status
          type: string
          enum:
          - active
          - redeemed
          - expired
          - revoked
        description: Filter by status
      - in: query
        name: operatorId
        schema:
          description: Filter by buyer operator
          type: string
          minLength: 1
          maxLength: 255
        description: Filter by buyer operator
      - in: query
        name: limit
        schema:
          description: Page size (default 20, max 100)
          default: 20
          type: integer
          maximum: 100
          minimum: 1
        description: Page size (default 20, max 100)
      - in: query
        name: offset
        schema:
          description: Number of rows to skip
          default: 0
          type: integer
          minimum: 0
          maximum: 9007199254740991
        description: Number of rows to skip
      responses:
        '200':
          description: List storefront proposals
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/StorefrontProposalSummary'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /proposals/{id}:
    get:
      operationId: getStorefrontProposal
      summary: Get storefront proposal
      description: Get a single storefront proposal, including the saved discovery response.
      tags:
      - Storefront Proposals
      security:
      - bearerAuth: []
      parameters:
      - in: path
        name: id
        schema:
          description: Proposal row id
          type: integer
          maximum: 9007199254740991
          minimum: 1
        required: true
        description: Proposal row id
      responses:
        '200':
          description: Get storefront proposal
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontProposal'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
    patch:
      operationId: updateStorefrontProposal
      summary: Update storefront proposal
      description: Update label, notes, or expiry of a storefront proposal.
      tags:
      - Storefront Proposals
      security:
      - bearerAuth: []
      parameters:
      - in: path
        name: id
        schema:
          description: Proposal row id
          type: integer
          maximum: 9007199254740991
          minimum: 1
        required: true
        description: Proposal row id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateStorefrontProposalBody'
      responses:
        '200':
          description: Update storefront proposal
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontProposal'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /proposals/{id}/revoke:
    post:
      operationId: revokeStorefrontProposal
      summary: Revoke storefront proposal
      description: Revoke a storefront proposal so the buyer can no longer redeem the code. Allowed only when status is 'active' or 'expired'.
      tags:
      - Storefront Proposals
      security:
      - bearerAuth: []
      parameters:
      - in: path
        name: id
        schema:
          description: Proposal row id
          type: integer
          maximum: 9007199254740991
          minimum: 1
        required: true
        description: Proposal row id
      responses:
        '200':
          description: Revoke storefront proposal
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontProposal'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    StorefrontProposal:
      description: A persisted storefront proposal
      type: object
      properties:
        id:
          description: Proposal row id
          type: integer
          maximum: 9007199254740991
          minimum: 1
        proposalCode:
          description: Short shareable handle. Sellers give this to buyers; buyers pass it to discover_products.
          example: PRP-XK4A29
          type: string
        operatorId:
          description: Encoded buyer identity retained for backwards compatibility. Use operatorRef for the structured form.
          type: string
        operatorRef:
          description: Structured buyer identity for redemption auth.
          allOf:
          - $ref: '#/components/schemas/StorefrontProposalOperatorReferenceOutput'
        label:
          type: string
        notes:
          type:
          - string
          - 'null'
        status:
          description: 'Proposal lifecycle status. ''active'': available to redeem. ''redeemed'': buyer has applied it to a media buy. ''expired'': past TTL. ''revoked'': seller withdrew.'
          type: string
          enum:
          - active
          - redeemed
          - expired
          - revoked
        expiresAt:
          type: string
          format: date-time
          pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
        proposalId:
          description: The protocol-level proposalId from the saved discovery snapshot
          type: string
        discoverySessionId:
          description: Discovery session id this proposal was captured from (for traceability)
          type: string
        snapshot:
          description: The frozen products + proposals returned to the buyer on redemption
          allOf:
          - $ref: '#/components/schemas/ProposalSnapshot'
        createdAt:
          type: string
          format: date-time
          pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
        createdBy:
          type: string
        firstViewedAt:
          type:
          - string
          - 'null'
          format: date-time
          pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
        lastViewedAt:
          type:
          - string
          - 'null'
          format: date-time
          pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
        redeemedAt:
          type:
          - string
          - 'null'
          format: date-time
          pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
        redeemedInMediaBuyId:
          type:
          - string
          - 'null'
      required:
      - id
      - proposalCode
      - operatorId
      - operatorRef
      - label
      - notes
      - status
      - expiresAt
      - proposalId
      - discoverySessionId
      - snapshot
      - createdAt
      - createdBy
      - firstViewedAt
      - lastViewedAt
      - redeemedAt
      - redeemedInMediaBuyId
      additionalProperties: false
    UpdateStorefrontProposalBody:
      description: Request body for editing a storefront proposal
      type: object
      properties:
        label:
          description: Updated label
          type: string
          minLength: 1
          maxLength: 255
        notes:
          description: Updated notes
          type: string
          maxLength: 4000
        expiresAt:
          description: Updated expiry (ISO 8601)
          type: string
          format: date-time
          pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
    ProductFormatOptionParams:
      description: Canonical format params. For hosted video, carries accepted containers/codecs.
      type: object
      properties:
        containers:
          description: Accepted delivery containers for hosted video. A buyer should only send a creative whose container is listed here.
          example:
          - mp4
          type: array
          items:
            type: string
            enum:
            - mp4
            - webm
            - mov
        video_codecs:
          description: Accepted video codecs for hosted video.
          example:
          - h264
          type: array
          items:
            type: string
            enum:
            - h264
            - h265
            - vp8
            - vp9
            - av1
            - prores
        audio_codecs:
          description: Accepted audio codecs for hosted video.
          example:
          - aac
          type: array
          items:
            type: string
            enum:
            - aac
            - mp3
            - opus
            - pcm
      additionalProperties: {}
    Proposal:
      description: A recommended media plan with budget allocations across products (ADCP v3)
      type: object
      properties:
        proposalId:
          description: Unique identifier — used to refine or execute the proposal
          type: string
        name:
          description: Human-readable name for this media plan proposal
          type: string
        description:
          description: Strategic explanation of what the proposal achieves
          type: string
        briefAlignment:
          description: Explanation of how this proposal aligns with the brief
          type: string
        salesAgentId:
          description: Sales agent that generated this proposal
          type: string
        salesAgentName:
          description: Human-readable sales agent name
          type: string
        storefrontId:
          description: Storefront the proposal was surfaced through. The storefront is the buyer-facing seller identity; the underlying sales agent is internal routing detail.
          type: string
        storefrontName:
          description: Human-readable storefront name. Use this as the seller label on proposal cards.
          type: string
        supportedRoutingTypes:
          deprecated: true
          description: Deprecated v2 compatibility field. It is not a storefront type or proposal capability and must not affect eligibility or execution.
          type: array
          items:
            type: string
            enum:
            - DECISIONED
            - ROUTED
        allocations:
          description: Budget distribution across products — percentages sum to 100
          minItems: 1
          type: array
          items:
            $ref: '#/components/schemas/ProductAllocation'
        expiresAt:
          description: When the proposal expires (ISO 8601)
          type: string
        totalBudgetGuidance:
          description: Budget guidance for this proposal
          type: object
          properties:
            min:
              type: number
            recommended:
              type: number
            max:
              type: number
            currency:
              type: string
          additionalProperties: false
      required:
      - proposalId
      - name
      - allocations
      additionalProperties: false
    StorefrontProposalSummary:
      description: Compact proposal summary for list views
      type: object
      properties:
        id:
          description: Proposal row id
          type: integer
          maximum: 9007199254740991
          minimum: 1
        proposalCode:
          description: Short shareable handle. Sellers give this to buyers; buyers pass it to discover_products.
          example: PRP-XK4A29
          type: string
        operatorId:
          description: Encoded buyer identity retained for backwards compatibility. Use operatorRef for the structured form.
          type: string
        operatorRef:
          description: Structured buyer identity for redemption auth.
          allOf:
          - $ref: '#/components/schemas/StorefrontProposalOperatorReferenceOutput'
        label:
          type: string
        notes:
          type:
          - string
          - 'null'
        status:
          description: 'Proposal lifecycle status. ''active'': available to redeem. ''redeemed'': buyer has applied it to a media buy. ''expired'': past TTL. ''revoked'': seller withdrew.'
          type: string
          enum:
          - active
          - redeemed
          - expired
          - revoked
        expiresAt:
          type: string
          format: date-time
          pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
        proposalId:
          description: The protocol-level proposalId from the saved discovery snapshot
          type: string
        discoverySessionId:
          description: Discovery session id this proposal was captured from (for traceability)
          type: string
        createdAt:
          type: string
          format: date-time
          pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
        createdBy:
          type: string
        firstViewedAt:
          type:
          - string
          - 'null'
          format: date-time
          pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
        lastViewedAt:
          type:
          - string
          - 'null'
          format: date-time
          pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
        redeemedAt:
          type:
          - string
          - 'null'
          format: date-time
          pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
        redeemedInMediaBuyId:
          type:
          - string
          - 'null'
      required:
      - id
      - proposalCode
      - operatorId
      - operatorRef
      - label
      - notes
      - status
      - expiresAt
      - proposalId
      - discoverySessionId
      - createdAt
      - createdBy
      - firstViewedAt
      - lastViewedAt
      - redeemedAt
      - redeemedInMediaBuyId
      additionalProperties: false
    ProductCardDetailedData:
      description: Detailed inline product card data for buyer UIs
      type: object
      properties:
        hero_image:
          type: object
          properties:
            asset_type:
              type: string
              enum:
              - image
            url:
              type: string
            width:
              type: number
              minimum: 1
            height:
              type: number
              minimum: 1
            format:
              type: string
            alt_text:
              type: string
            provenance:
              type: object
              properties:
                digital_source_type:
                  anyOf:
                  - type: string
                    enum:
                    - digital_capture
                  - type: string
                    enum:
                    - digital_creation
                  - type: string
                    enum:
                    - trained_algorithmic_media
                  - type: string
                    enum:
                    - composite_with_trained_algorithmic_media
                  - type: string
                    enum:
                    - algorithmic_media
                  - type: string
                    enum:
                    - composite_capture
                  - type: string
                    enum:
                    - composite_synthetic
                  - type: string
                    enum:
                    - human_edits
                  - type: string
                    enum:
                    - data_driven_media
                ai_tool:
                  type: object
                  properties:
                    name:
                      type: string
                    version:
                      type: string
                    provider:
                      type: string
                  required:
                  - name
                  additionalProperties: {}
                human_oversight:
                  anyOf:
                  - type: string
                    enum:
                    - none
                  - type: string
                    enum:
                    - prompt_only
                  - type: string
                    enum:
                    - selected
                  - type: string
                    enum:
                    - edited
                  - type: string
                    enum:
                    - directed
                declared_by:
                  type: object
                  properties:
                    agent_url:
                      type: string
                    role:
                      anyOf:
                      - type: string
                        enum:
                        - creator
                      - type: string
                        enum:
                        - advertiser
                      - type: string
                        enum:
                        - agency
                      - type: string
                        enum:
                        - platform
                      - type: string
                        enum:
                        - tool
                  required:
                  - role
                  additionalProperties: {}
                declared_at:
                  type: string
                  format: date-time
                  pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
                created_time:
                  type: string
                  format: date-time
                  pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
                c2pa:
                  type: object
                  properties:
                    manifest_url:
                      type: string
                  required:
                  - manifest_url
                  additionalProperties: {}
                embedded_provenance:
                  type: array
                  items:
                    type: object
                    properties:
                      method:
                        anyOf:
                        - type: string
                          enum:
                          - manifest_wrapper
                        - type: string
                          enum:
                          - provenance_markers
                      standard:
                        type: string
                      provider:
                        type: string
                      verify_agent:
                        type: object
                        properties:
                          agent_url:
                            type: string
                            pattern: ^https:\/\/
                          feature_id:
                            type: string
                        required:
                        - agent_url
                        additionalProperties: {}
                      embedded_at:
                        type: string
                        format: date-time
                        pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
                    required:
                    - method
                    - provider
                    additionalProperties: {}
                watermarks:
                  type: array
                  items:
                    type: object
                    properties:
                      media_type:
                        anyOf:
                        - type: string
                          enum:
                          - audio
                        - type: string
                          enum:
                          - image
                        - type: string
                          enum:
                          - video
                        - type: string
                          enum:
                          - text
                      provider:
                        type: string
                      verify_agent:
                        type: object
                        properties:
                          agent_url:
                            type: string
                            pattern: ^https:\/\/
                          feature_id:
                            type: string
                        required:
                        - agent_url
                        additionalProperties: {}
                      c2pa_action:
                        anyOf:
                        - type: string
                          enum:
                          - c2pa.watermarked.bound
                        - type: string
                          enum:
                          - c2pa.watermarked.unbound
                      embedded_at:
                        type: string
                        format: date-time
                        pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
                    required:
                    - media_type
                    - provider
                    additionalProperties: {}
                disclosure:
                  type: object
                  properties:
                    required:
                      type: boolean
                    jurisdictions:
                      type: array
                      items:
                        type: object
                        properties:
                          country:
                            type: string
                          region:
                            type: string
                          regulation:
                            type: string
                          label_text:
                            type: string
                          render_guidance:
                            type: object
                            properties:
                              persistence:
                                anyOf:
                                - type: string
                                  enum:
                                  - continuous
                                - type: string
                                  enum:
                                  - initial
                                - type: string
                                  enum:
                                  - flexible
                              min_duration_ms:
                                type: number
                                minimum: 1
                              positions:
                                type: array
                                items:
                                  anyOf:
                                  - type: string
                                    enum:
                                    - prominent
                                  - type: string
                                    enum:
                                    - footer
                                  - type: string
                                    enum:
                                    - audio
                                  - type: string
                                    enum:
                                    - subtitle
                                  - type: string
                                    enum:
                                    - overlay
                                  - type: string
                                    enum:
                                    - end_card
                                  - type: string
                                    enum:
                                    - pre_roll
                                  - type: string
                                    enum:
                                    - companion
                              ext:
                                type: object
                                properties: {}
                                additionalProperties: {}
                            additionalProperties: {}
                        required:
                        - country
                        - regulation
                        additionalProperties: {}
                  required:
                  - required
                  additionalProperties: {}
                verification:
                  type: array
                  items:
                    type: object
                    properties:
                      verified_by:
                        type: string
                      verified_time:
                        type: string
                        format: date-time
                        pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
                      result:
                        anyOf:
                        - type: string
                          enum:
                          - authentic
                        - type: string
                          enum:
                          - ai_generated
                        - type: string
                          enum:
                          - ai_modified
                        - type: string
                          enum:
                          - inconclusive
                      confidence:
                        type: number
                        minimum: 0
                        maximum: 1
                      details_u

# --- truncated at 32 KB (73 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/scope3/refs/heads/main/openapi/scope3-storefront-proposals-api-openapi.yml