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

# Browse Marketplace Catalog

> Browse marketplace catalog with optional filters.

Returns published, listed marketplace listings only. Unlisted retrievers
are still accessible via direct link but don't appear here.



## OpenAPI

````yaml get /v1/marketplace/catalog
openapi: 3.1.0
info:
  title: Mixpeek API
  description: >-
    This is the Mixpeek API, providing access to various endpoints for data
    processing and retrieval.
  termsOfService: https://mixpeek.com/terms
  contact:
    name: Mixpeek Support
    url: https://mixpeek.com/contact
    email: info@mixpeek.com
  version: '0.82'
servers:
  - url: https://api.mixpeek.com
    description: Production
security:
  - BearerAuth: []
paths:
  /v1/marketplace/catalog:
    get:
      tags:
        - Marketplace
      summary: Browse Marketplace Catalog
      description: |-
        Browse marketplace catalog with optional filters.

        Returns published, listed marketplace listings only. Unlisted retrievers
        are still accessible via direct link but don't appear here.
      operationId: get_marketplace_catalog_v1_marketplace_catalog_get
      parameters:
        - name: category
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: >-
              Filter by category label or slug (e.g., 'Brand Safety' or
              'brand-safety').
            title: Category
          description: >-
            Filter by category label or slug (e.g., 'Brand Safety' or
            'brand-safety').
        - name: group
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: Filter by curated group slug (e.g., 'ip-screening').
            title: Group
          description: Filter by curated group slug (e.g., 'ip-screening').
        - name: tags
          in: query
          required: false
          schema:
            anyOf:
              - items:
                  type: string
                type: array
              - type: 'null'
            description: Filter by tags (AND logic - listing must have all tags)
            title: Tags
          description: Filter by tags (AND logic - listing must have all tags)
        - name: search
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: Search in title and description
            title: Search
          description: Search in title and description
        - name: skip
          in: query
          required: false
          schema:
            type: integer
            minimum: 0
            description: Number of listings to skip
            default: 0
            title: Skip
          description: Number of listings to skip
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            maximum: 100
            minimum: 1
            description: Number of listings to return
            default: 20
            title: Limit
          description: Number of listings to return
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/MarketplaceCatalogListing'
                title: Response Get Marketplace Catalog V1 Marketplace Catalog Get
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          description: Service Unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security: []
components:
  schemas:
    MarketplaceCatalogListing:
      properties:
        listing_id:
          type: string
          title: Listing Id
          description: Unique identifier for the listing
        namespace_id:
          type: string
          title: Namespace Id
          description: Namespace containing the retriever
        retriever_id:
          type: string
          title: Retriever Id
          description: Retriever being offered in the marketplace
        title:
          type: string
          title: Title
          description: Public display title
          examples:
            - Brand Safety Classification API
            - Video Search Engine
        description:
          type: string
          title: Description
          description: Public description of what this listing provides
        public_name:
          type: string
          maxLength: 50
          minLength: 3
          title: Public Name
          description: >-
            Public URL-safe slug for the listing (e.g., 'video-search'). Used in
            public URL: mxp.co/m/{public_name}. Must be globally unique.
          examples:
            - brand-safety-api
            - video-search
            - product-catalog
        category:
          anyOf:
            - type: string
            - type: 'null'
          title: Category
          description: >-
            Catalog category. One of: Brand Safety, Advertising, Media, Faces &
            People, Art & Archives, Personalization, Content Safety, Spatial,
            Ecommerce. Writes also accept the slug form (e.g.,
            'faces-and-people') and store the label.
          examples:
            - Brand Safety
            - Media
        groups:
          items:
            type: string
          type: array
          title: Groups
          description: >-
            Curated groups this listing belongs to, as lowercase slugs (e.g.,
            'ip-screening'). Filter the catalog by one with ?group=.
          examples:
            - - ip-screening
            - - media-archives
        tags:
          items:
            type: string
          type: array
          title: Tags
          description: Tags for discovery
        logo_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Logo Url
          description: URL to listing logo/icon
        app_url:
          anyOf:
            - type: string
            - type: 'null'
          title: App Url
          description: >-
            Optional URL to a live canvas app powered by this retriever (e.g.,
            'https://nga.mxp.co'). When set, the listing appears in the public
            showcase at mixpeek.com/showcase.
          examples:
            - https://nga.mxp.co
            - https://mxp.co/r/superbowl
        icon_base64:
          anyOf:
            - type: string
              maxLength: 300000
            - type: 'null'
          title: Icon Base64
          description: >-
            Base64 encoded icon/favicon (data URI format). Max size: ~200KB
            encoded. Use for small icons.
          examples:
            - data:image/png;base64,iVBORw0KGgoAAAANS...
        available_tiers:
          items:
            $ref: '#/components/schemas/SubscriptionTierConfig'
          type: array
          title: Available Tiers
          description: >-
            Available subscription tiers (must include at least one tier,
            typically FREE for public listings)
        display_config:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Display Config
          description: >-
            JSON-based UI configuration for the public interface. Follows a
            component-based schema (inspired by json-render): { 'components':
            [...], 'theme': {...}, 'layout': {...} }. If not provided, a default
            UI is generated from retriever input_schema.
          examples:
            - components:
                - props:
                    field: video_url
                    label: Enter video URL
                  type: SearchInput
                - props:
                    fields:
                      - title
                      - description
                      - score
                    layout: grid
                  type: ResultCard
              theme:
                fontFamily: Inter, sans-serif
                primaryColor: '#007AFF'
        status:
          $ref: '#/components/schemas/ListingStatus'
          description: Publication status
          default: draft
        visibility:
          $ref: '#/components/schemas/ListingVisibility'
          description: >-
            Visibility level. 'listed' = shown in marketplace catalog & homepage
            showcase. 'unlisted' = accessible via direct link only (not in
            catalog).
          default: unlisted
        is_active:
          type: boolean
          title: Is Active
          description: >-
            DEPRECATED: Use 'status' field instead. Computed from status (True
            if PUBLISHED, False otherwise).
          default: true
          deprecated: true
        featured_rank:
          anyOf:
            - type: integer
            - type: 'null'
          title: Featured Rank
          description: >-
            Editorial ordering for the catalog. Lower sorts first (1 = top
            slot). Listings without a rank fall back to subscriber-count
            ordering and always sort after ranked ones. This is the single
            source of truth for catalog order — the homepage showcase, the
            homepage landing-page showcase strip, and the Studio marketplace all
            read it, so ordering never has to be hardcoded per-surface.
          examples:
            - 1
            - 2
            - 3
        created_at:
          type: string
          format: date-time
          title: Created At
          description: When the listing was created
        updated_at:
          type: string
          format: date-time
          title: Updated At
          description: When the listing was last updated
        published_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Published At
          description: When the listing was first published
        total_subscribers:
          type: integer
          title: Total Subscribers
          description: Total number of active subscribers
          default: 0
        total_queries:
          type: integer
          title: Total Queries
          description: Total queries executed across all subscribers
          default: 0
      type: object
      required:
        - namespace_id
        - retriever_id
        - title
        - description
        - public_name
        - available_tiers
      title: MarketplaceCatalogListing
      description: >-
        A listing as the public catalog serves it, to callers with no
        credential.


        The owner org's internal_id and the name of its access-password secret
        stay

        on the record and out of the response: elsewhere the API keeps
        internal_id

        out of what it returns (users/controllers.py, blobs/models.py).
    ErrorResponse:
      properties:
        success:
          type: boolean
          title: Success
          description: Always false for error responses
          default: false
        status:
          type: integer
          title: Status
          description: HTTP status code for this error
        error:
          $ref: '#/components/schemas/ErrorDetail'
          description: Error details payload
      type: object
      required:
        - status
        - error
      title: ErrorResponse
      description: Error response model.
      examples:
        - error:
            details:
              id: ns_123
              resource: namespace
            message: Namespace not found
            type: NotFoundError
          status: 404
          success: false
    SubscriptionTierConfig:
      properties:
        tier:
          $ref: '#/components/schemas/SubscriptionTier'
          description: Tier level
        price_per_month:
          type: number
          minimum: 0
          title: Price Per Month
          description: Monthly price in USD (0.0 for free tier)
          default: 0
        limits:
          $ref: '#/components/schemas/TierLimits'
          description: Rate limits and quotas for this tier
        features:
          items:
            type: string
          type: array
          title: Features
          description: List of features included in this tier
        stripe_price_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Stripe Price Id
          description: Stripe price ID for paid tiers
      type: object
      required:
        - tier
      title: SubscriptionTierConfig
      description: Configuration for a subscription tier.
    ListingStatus:
      type: string
      enum:
        - draft
        - published
        - archived
        - suspended
      title: ListingStatus
      description: Status of a marketplace listing.
    ListingVisibility:
      type: string
      enum:
        - listed
        - unlisted
      title: ListingVisibility
      description: >-
        Visibility level for a marketplace listing.


        - LISTED: Appears in marketplace catalog, homepage showcase, and
        sitemap.

        - UNLISTED: Accessible via direct link but hidden from catalog/showcase.
    ErrorDetail:
      properties:
        message:
          type: string
          title: Message
          description: Human-readable error message
        type:
          type: string
          title: Type
          description: Stable error type identifier (machine-readable)
        code:
          anyOf:
            - type: string
            - type: 'null'
          title: Code
          description: >-
            Fine-grained error code for programmatic handling (e.g.,
            namespace_name_taken, feature_extractor_not_found). Present only
            when consumers may need to branch on a specific error condition.
        details:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Details
          description: >-
            Optional structured details to help debugging (validation errors,
            IDs, etc.)
      type: object
      required:
        - message
        - type
      title: ErrorDetail
      description: Error detail model.
    SubscriptionTier:
      type: string
      enum:
        - free
        - basic
        - pro
        - enterprise
      title: SubscriptionTier
      description: Subscription tier levels for marketplace offerings.
    TierLimits:
      properties:
        requests_per_minute:
          anyOf:
            - type: integer
            - type: 'null'
          title: Requests Per Minute
          description: Maximum requests per minute (None = unlimited)
        requests_per_hour:
          anyOf:
            - type: integer
            - type: 'null'
          title: Requests Per Hour
          description: Maximum requests per hour (None = unlimited)
        requests_per_day:
          anyOf:
            - type: integer
            - type: 'null'
          title: Requests Per Day
          description: Maximum requests per day (None = unlimited)
        requests_per_month:
          anyOf:
            - type: integer
            - type: 'null'
          title: Requests Per Month
          description: Maximum requests per month (None = unlimited)
      type: object
      title: TierLimits
      description: Rate limits and quotas for a subscription tier.
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: >-
        Mixpeek API key, sent as `Authorization: Bearer mxp_sk_...`. Create one
        in Studio under Settings → API Keys, or with an admin key via `POST
        /v1/organizations/users/{user_email}/api-keys`. A missing, malformed,
        unknown, revoked, inactive or expired key returns 401; a key without the
        permission, scope or plan an operation needs returns 403.

````

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