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

# Get prepared asset performance

> Returns decision-ready performance rows at campaign, ad set, or ad level. A 409 response means the requested range does not have complete prepared coverage.



## OpenAPI

````yaml /openapi.json get /ad-metrics/{storeUrl}/prepared-asset-performance
openapi: 3.1.0
info:
  title: Bily API
  version: 1.0.0
  description: >-
    Discover stores, read analytics and commerce data, inspect connections, and
    run explicitly authorized actions with the Bily API.
  contact:
    name: Bily support
    email: support@bily.ai
servers:
  - url: https://app.bily.ai/api/customer/v1
    description: Production
security:
  - ApiKeyAuth: []
  - BearerAuth: []
tags:
  - name: Identity
    description: Discover the identity and organizations attached to a key.
  - name: Stores
    description: Discover stores within an organization.
  - name: Store data
    description: Read store profiles, readiness, catalogs, and connected accounts.
  - name: Commerce
    description: Run scoped commerce reads and explicitly approved GraphQL mutations.
  - name: Analytics
    description: >-
      Read normalized advertising, attribution, product, customer, and cohort
      metrics.
  - name: Analytics SQL
    description: Run constrained read-only SQL over store-scoped Bily datasets.
  - name: Customer journeys
    description: Read customer touchpoints within an authenticated store scope.
  - name: Connections
    description: Inspect available connections, support, and advertising assets.
  - name: Supported actions
    description: Synchronize connections and update supported advertising assets.
  - name: Campaign actions
    description: Create or clone supported advertising campaign resources.
  - name: Tracking connections
    description: >-
      List and manage store-scoped tracking connections without returning
      credential secrets.
paths:
  /ad-metrics/{storeUrl}/prepared-asset-performance:
    get:
      tags:
        - Analytics
      summary: Get prepared asset performance
      description: >-
        Returns decision-ready performance rows at campaign, ad set, or ad
        level. A 409 response means the requested range does not have complete
        prepared coverage.
      operationId: getPreparedAssetPerformance
      parameters:
        - $ref: '#/components/parameters/StoreUrl'
        - $ref: '#/components/parameters/OrganizationId'
        - name: startDate
          in: query
          description: First date to include, in YYYY-MM-DD format.
          required: true
          schema:
            type: string
            format: date
        - name: endDate
          in: query
          description: Last date to include, in YYYY-MM-DD format.
          required: true
          schema:
            type: string
            format: date
        - name: hierarchyLevel
          in: query
          description: Advertising hierarchy level.
          required: false
          schema:
            type: string
            enum:
              - campaign
              - adset
              - ad
            default: campaign
        - name: ad_accounts
          in: query
          description: >-
            Optional comma-separated advertising account IDs from the store's
            accessible account set.
          required: false
          schema:
            type: string
      responses:
        '200':
          description: Request completed successfully.
          headers:
            x-request-id:
              description: The request identifier selected or generated by Bily.
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PreparedAssetPerformanceResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/ServerError'
components:
  parameters:
    StoreUrl:
      name: storeUrl
      in: path
      required: true
      description: The exact store URL returned by GET /context or GET /stores.
      schema:
        type: string
        example: store.example.com
    OrganizationId:
      name: x-bily-organization-id
      in: header
      required: false
      description: >-
        An organization ID returned by GET /context or GET /organizations.
        Required for GET /stores and optional for store-scoped paths.
      schema:
        type: string
        example: org_01J8W7T9G3E6ZQ4M2K5N8P1R0S
  schemas:
    PreparedAssetPerformanceResponse:
      type: object
      required:
        - prepared
        - hierarchyLevel
        - data
        - statistics
      properties:
        prepared:
          type: boolean
          const: true
        hierarchyLevel:
          type: string
          enum:
            - campaign
            - adset
            - ad
        data:
          type: array
          items:
            $ref: '#/components/schemas/FlexibleMetricRow'
        statistics:
          $ref: '#/components/schemas/MetricStatistics'
      additionalProperties: true
    FlexibleMetricRow:
      type: object
      description: >-
        A normalized metric row. Available dimensions depend on the requested
        view and hierarchy.
      properties:
        shop:
          type: string
        date:
          type: string
          format: date
        time:
          type: string
        channel:
          type: string
        ad_id:
          type: string
        adset_id:
          type: string
        campaign_id:
          type: string
        ad_name:
          type: string
        adset_name:
          type: string
        campaign_name:
          type: string
        p_spend:
          type: number
        p_clicks:
          type: number
        p_impressions:
          type: number
        p_reach:
          type: number
        conversions:
          type: number
        conv_value:
          type: number
        customers:
          type: number
        sessions:
          type: number
        pageviews:
          type: number
        p_currency:
          type:
            - string
            - 'null'
        fp_currency:
          type:
            - string
            - 'null'
      additionalProperties: true
    MetricStatistics:
      type:
        - object
        - 'null'
      properties:
        elapsed:
          type: number
        rows_read:
          type: integer
        bytes_read:
          type: integer
      additionalProperties: true
    Error:
      type: object
      required:
        - error
      properties:
        error:
          type: string
          example: Store not found
        requestId:
          type: string
          description: Present on some server errors.
        details:
          description: Optional safe details for an action failure.
        retryAfter:
          type:
            - string
            - 'null'
      additionalProperties: true
  responses:
    BadRequest:
      description: The request path, query, or body is invalid.
      headers:
        x-request-id:
          description: The request identifier selected or generated by Bily.
          schema:
            type: string
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: Authentication is missing or invalid.
      headers:
        x-request-id:
          description: The request identifier selected or generated by Bily.
          schema:
            type: string
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Forbidden:
      description: The identity or API key is not allowed to perform this request.
      headers:
        x-request-id:
          description: The request identifier selected or generated by Bily.
          schema:
            type: string
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: The resource was not found in the caller's accessible scope.
      headers:
        x-request-id:
          description: The request identifier selected or generated by Bily.
          schema:
            type: string
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Conflict:
      description: The request conflicts with the current resource state.
      headers:
        x-request-id:
          description: The request identifier selected or generated by Bily.
          schema:
            type: string
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    TooManyRequests:
      description: The request rate is too high.
      headers:
        x-request-id:
          description: The request identifier selected or generated by Bily.
          schema:
            type: string
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    ServerError:
      description: Bily could not complete the request.
      headers:
        x-request-id:
          description: The request identifier selected or generated by Bily.
          schema:
            type: string
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        A server-side Bily API key created under Settings > MCP > Access key
        fallback. Select the intended store before creating it.
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: Bily API key
      description: An alternative way to send the same server-side Bily API key.

````