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

# Single product detail (with latest metrics)

> Same `Product` shape as the list endpoint, scoped to one slug. Use this when you already know
the slug (e.g. from a deep-link or cached config) and don't need to fetch the whole list.




## OpenAPI

````yaml /openapi.yaml get /api/partner/products/{slug}
openapi: 3.0.3
info:
  title: Barker Yield Engine API
  version: 1.0.0
  description: >
    Yield-embed API for partners (wallets, payment apps).


    Authentication: `X-Api-Key` header, self-served from portal.barker.money.

    Revenue: 100% via on-chain fee split inside the engine contract — calling
    this API is free.

    Rate limit: 1000 req/min for production keys (`bk_live_*`), 100 req/min for
    sandbox keys (`bk_test_*`). Anti-abuse, not usage billing.


    Two integration modes — same engines, same key, same fee split, different UI
    surface:
      - Embed (iframe): drop-in UI hosted at app.barker.money, no contract calls in your code.
      - Headless API: your UI calls BarkerEngine (ERC-4626) directly with the user's wallet; this API serves metadata, position, fee stats, and webhooks.
    See https://docs.barker.money/integration-modes for the decision guide.


    Error responses share `{ success: false, code, message }`. Full code catalog
    at https://docs.barker.money/error-codes.
  contact:
    name: Barker
    url: https://docs.barker.money
servers:
  - url: https://api.barker.money
    description: Production
security:
  - ApiKeyAuth: []
tags:
  - name: products
    description: Partner products (engines) — read access
  - name: position
    description: User position queries
  - name: webhooks
    description: Event subscriptions and callbacks
paths:
  /api/partner/products/{slug}:
    get:
      tags:
        - products
      summary: Single product detail (with latest metrics)
      description: >
        Same `Product` shape as the list endpoint, scoped to one slug. Use this
        when you already know

        the slug (e.g. from a deep-link or cached config) and don't need to
        fetch the whole list.
      parameters:
        - $ref: '#/components/parameters/SlugParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  data:
                    $ref: '#/components/schemas/Product'
              example:
                success: true
                data:
                  slug: acme-usdc-base
                  partner: Acme Pay
                  chain: base
                  chain_id: 8453
                  engine_contract_address: '0x8874f47Af3305B0BeffaE9EB55A174c306091003'
                  asset_symbol: USDC
                  status: active
                  latest_metrics:
                    as_of_date: '2026-05-04'
                    engine_total_assets: '1245678.123456'
                    underlying_apy: '0.0612'
                    net_apy_for_user: '0.0490'
        '404':
          description: Slug not found, or not owned by this partner
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                success: false
                code: not_found
                message: Product not found
components:
  parameters:
    SlugParam:
      in: path
      name: slug
      required: true
      schema:
        type: string
      example: acme-usdc-base
  schemas:
    Product:
      type: object
      required:
        - slug
        - partner
        - chain
        - chain_id
        - engine_contract_address
        - asset_symbol
        - status
      properties:
        slug:
          type: string
          example: acme-usdc-base
        partner:
          type: string
          example: Acme Pay
        chain:
          type: string
          example: base
        chain_id:
          type: integer
          example: 8453
        engine_contract_address:
          type: string
          example: '0x1234567890123456789012345678901234567890'
        underlying_vault_address:
          type: string
        asset_symbol:
          type: string
          example: USDC
        asset_address:
          type: string
        asset_decimals:
          type: integer
          example: 6
        barker_fee_bps:
          type: integer
          description: Configured per partner contract
        partner_fee_bps:
          type: integer
          description: Configured per partner contract
        display_name:
          type: string
        description:
          type: string
        risk_label:
          type: string
          nullable: true
          enum:
            - conservative
            - balanced
            - aggressive
            - null
          description: >
            Risk tier for multi-tier offerings. Set when partner registers 3
            products to offer

            users a Conservative / Balanced / Aggressive choice; null on
            single-tier products.

            See https://docs.barker.money/multi-tier-products
          example: balanced
        status:
          type: string
          enum:
            - active
            - paused
            - deprecated
        latest_metrics:
          $ref: '#/components/schemas/ProductMetrics'
    Error:
      type: object
      required:
        - success
        - message
      properties:
        success:
          type: boolean
          example: false
        message:
          type: string
          description: Human-readable; wording may change. Do not parse.
        code:
          type: string
          description: >
            Stable machine-readable error code — switch on this in your code.


            Auth & rate-limit: `missing_api_key` · `invalid_api_key` ·
            `revoked_api_key` · `rate_limited`

            Product / slug: `not_found` · `not_owned` · `engine_not_deployed` ·
            `product_paused` · `product_deprecated`

            Position / address: `invalid_address` · `chain_not_supported`

            Yield-calc / fee-stats: `invalid_amount` · `range_too_large` ·
            `invalid_days`

            Webhooks (inbound): `signature_mismatch` · `missing_idempotency_key`
            · `unknown_event` · `idempotency_replay`

            Server: `internal_error` · `chain_rpc_unavailable`


            Full reference: https://docs.barker.money/error-codes
          example: engine_not_deployed
    ProductMetrics:
      type: object
      properties:
        as_of_date:
          type: string
          format: date
        engine_total_assets:
          type: string
          description: Total assets, denominated in the underlying asset
        underlying_apy:
          type: string
          description: Underlying APY (decimal, 0.05 = 5%)
        net_apy_for_user:
          type: string
          description: Net APY for the user after fees (decimal)
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-Api-Key

````