> ## 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.

# Read Exact Native Budget for Review

> Read one exact Meta campaign or owned ad-set budget, or Google campaign budget, in native account currency and integer units. Version 1 returns a budgetGuard only for an eligible exact native owner. An inherited Meta ad-set budget requires selecting its campaign; Bily never retargets the selected row. Google supports STANDARD DAILY amount_micros and verifies the complete affected set of at most 100 campaigns, including explicitly shared budgets with one actual user. Missing/ambiguous owners, incomplete shared scope and Google CUSTOM_PERIOD/other budget types are ineligible. Classic VIDEO and any shared budget with a non-removed VIDEO member are read only; missing or unknown native family proof is ineligible. Use the unchanged absolute approved amount plus this guard in a reviewed update-asset draft; changed amount, owner, currency, cadence or source requires a fresh review. Bily publications serialize the exact native budget owner across jobs and authorized sources; external platform changes can still race after the final read. The fresh reader reports bounded global coordination guidance without releasing or replaying unknown outcomes.



## OpenAPI

````yaml /openapi.json post /platform/{resourceUrl}/actions/read-asset-budget
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: Ad drafts and jobs
    description: Save, review, publish and reconcile immutable advertising changes.
  - name: Creative library
    description: >-
      Analyze references and retain generated images separately from ad
      publication.
  - name: Tracking connections
    description: >-
      List and manage store-scoped tracking connections without returning
      credential secrets.
  - name: Tracking evidence
    description: >-
      Inspect installation, incoming receipts, reviewed events and destination
      evidence within one workspace.
paths:
  /platform/{resourceUrl}/actions/read-asset-budget:
    post:
      tags:
        - Campaign actions
      summary: Read Exact Native Budget for Review
      description: >-
        Read one exact Meta campaign or owned ad-set budget, or Google campaign
        budget, in native account currency and integer units. Version 1 returns
        a budgetGuard only for an eligible exact native owner. An inherited Meta
        ad-set budget requires selecting its campaign; Bily never retargets the
        selected row. Google supports STANDARD DAILY amount_micros and verifies
        the complete affected set of at most 100 campaigns, including explicitly
        shared budgets with one actual user. Missing/ambiguous owners,
        incomplete shared scope and Google CUSTOM_PERIOD/other budget types are
        ineligible. Classic VIDEO and any shared budget with a non-removed VIDEO
        member are read only; missing or unknown native family proof is
        ineligible. Use the unchanged absolute approved amount plus this guard
        in a reviewed update-asset draft; changed amount, owner, currency,
        cadence or source requires a fresh review. Bily publications serialize
        the exact native budget owner across jobs and authorized sources;
        external platform changes can still race after the final read. The fresh
        reader reports bounded global coordination guidance without releasing or
        replaying unknown outcomes.
      operationId: ads-read-asset-budget
      parameters:
        - name: resourceUrl
          in: path
          required: true
          description: Exact workspace URL returned by GET /context.
          schema:
            type: string
        - $ref: '#/components/parameters/OrganizationId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AdsReadAssetBudgetInput'
            example:
              platform: FACEBOOK
              adAccountId: act_123456789012345
              sourceAuthority:
                dataSourceAdAccountId: source-account-example
                dataSourceConnectorId: connector-example
              payload:
                version: 1
                assetType: campaign
                assetId: '234567890123456'
      responses:
        '200':
          description: >-
            Request completed. Inspect the returned state and any verification
            fields.
          headers:
            x-request-id:
              schema:
                type: string
              description: Keep this identifier for diagnostics.
          content:
            application/json:
              schema:
                type: object
                properties:
                  ok:
                    const: true
                  result:
                    $ref: '#/components/schemas/NativeBudgetSnapshot'
                required:
                  - ok
                  - result
              example:
                ok: true
                result:
                  version: 1
                  resourceUrl: store.example.com
                  platform: FACEBOOK
                  adAccountId: act_123456789012345
                  sourceAuthority:
                    dataSourceAdAccountId: source-account-example
                    dataSourceConnectorId: connector-example
                  selection:
                    assetType: campaign
                    assetId: '234567890123456'
                  currency: USD
                  canEdit: false
                  reason: native_budget_unavailable
                  unitsPerCurrency: 100
        '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'
        '502':
          $ref: '#/components/responses/BadGateway'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
components:
  parameters:
    OrganizationId:
      name: x-bily-organization-id
      in: header
      required: false
      description: >-
        An organization ID returned by GET /context or GET /organizations. Omit
        it when a scoped key supplies the organization. Otherwise provide it
        when no organization is selected.
      schema:
        type: string
        example: org_01J8W7T9G3E6ZQ4M2K5N8P1R0S
  schemas:
    AdsReadAssetBudgetInput:
      type: object
      additionalProperties: false
      required:
        - platform
        - adAccountId
        - sourceAuthority
        - payload
      properties:
        platform:
          enum:
            - FACEBOOK
            - GOOGLE_ADS
          type: string
        adAccountId:
          type: string
          pattern: ^(?:act_)?[1-9]\d{0,19}$
        sourceAuthority:
          type: object
          additionalProperties: false
          required:
            - dataSourceAdAccountId
            - dataSourceConnectorId
          properties:
            dataSourceAdAccountId:
              type: string
              minLength: 1
              maxLength: 512
            dataSourceConnectorId:
              type: string
              minLength: 1
              maxLength: 512
        payload:
          oneOf:
            - type: object
              additionalProperties: false
              required:
                - version
                - assetType
                - assetId
              properties:
                version:
                  const: 1
                  type: integer
                assetType:
                  const: campaign
                  type: string
                assetId:
                  type: string
                  pattern: ^[1-9]\d{0,19}$
            - type: object
              additionalProperties: false
              required:
                - version
                - assetType
                - assetId
                - parentAssetId
              properties:
                version:
                  const: 1
                  type: integer
                assetType:
                  const: adset
                  type: string
                assetId:
                  type: string
                  pattern: ^[1-9]\d{0,19}$
                parentAssetId:
                  type: string
                  pattern: ^[1-9]\d{0,19}$
      allOf:
        - if:
            properties:
              platform:
                const: GOOGLE_ADS
                type: string
          then:
            properties:
              adAccountId:
                type: string
                pattern: ^[1-9]\d{0,19}$
              payload:
                type: object
                additionalProperties: false
                required:
                  - version
                  - assetType
                  - assetId
                properties:
                  version:
                    const: 1
                    type: integer
                  assetType:
                    const: campaign
                    type: string
                  assetId:
                    type: string
                    pattern: ^[1-9]\d{0,19}$
      example:
        platform: FACEBOOK
        adAccountId: act_123456789012345
        sourceAuthority:
          dataSourceAdAccountId: source-account-example
          dataSourceConnectorId: connector-example
        payload:
          version: 1
          assetType: campaign
          assetId: '234567890123456'
    NativeBudgetSnapshot:
      type: object
      properties:
        version:
          const: 1
          type: integer
        resourceUrl:
          type: string
        platform:
          enum:
            - FACEBOOK
            - GOOGLE_ADS
          type: string
        adAccountId:
          type: string
        sourceAuthority:
          type: object
          additionalProperties: false
          required:
            - dataSourceAdAccountId
            - dataSourceConnectorId
          properties:
            dataSourceAdAccountId:
              type: string
              minLength: 1
              maxLength: 512
            dataSourceConnectorId:
              type: string
              minLength: 1
              maxLength: 512
        selection:
          oneOf:
            - type: object
              additionalProperties: false
              required:
                - assetType
                - assetId
              properties:
                assetType:
                  const: campaign
                  type: string
                assetId:
                  type: string
                  pattern: ^[1-9]\d{0,19}$
            - type: object
              additionalProperties: false
              required:
                - assetType
                - assetId
                - parentAssetId
              properties:
                assetType:
                  const: adset
                  type: string
                assetId:
                  type: string
                  pattern: ^[1-9]\d{0,19}$
                parentAssetId:
                  type: string
                  pattern: ^[1-9]\d{0,19}$
        currency:
          type: string
          pattern: ^[A-Z]{3}$
        canEdit:
          type: boolean
        reason:
          enum:
            - inherited_budget_select_campaign
            - native_budget_unavailable
            - ambiguous_budget_owner
            - unsupported_budget_period
            - unsupported_budget_type
            - incomplete_shared_scope
          type: string
        owner:
          oneOf:
            - type: object
              additionalProperties: false
              required:
                - assetType
                - assetId
              properties:
                assetType:
                  enum:
                    - campaign
                    - adset
                  type: string
                assetId:
                  type: string
                  pattern: ^[1-9]\d{0,19}$
            - type: object
              additionalProperties: false
              required:
                - assetType
                - resourceName
              properties:
                assetType:
                  const: campaign_budget
                  type: string
                resourceName:
                  type: string
                  pattern: ^customers/[1-9]\d{0,19}/campaignBudgets/[1-9]\d{0,19}$
        cadence:
          type: string
          enum:
            - daily
            - lifetime
        amountUnits:
          type: string
          pattern: ^[1-9]\d{0,18}$
        unitsPerCurrency:
          enum:
            - 1
            - 100
            - 1000
            - 1000000
          type: integer
        budgetGuard:
          $ref: '#/components/schemas/NativeBudgetGuard'
      required:
        - version
        - resourceUrl
        - platform
        - adAccountId
        - sourceAuthority
        - selection
        - currency
        - canEdit
        - unitsPerCurrency
      additionalProperties: false
      description: >-
        When canEdit is true, budgetGuard is present and every selection, owner,
        amount, cadence, currency and source field matches it. Otherwise reason
        is present and there is no budgetGuard. Do not invent a guard or reuse
        one for a different owner.
      allOf:
        - if:
            properties:
              canEdit:
                const: true
                type: boolean
            required:
              - canEdit
          then:
            required:
              - budgetGuard
            not:
              required:
                - reason
          else:
            required:
              - reason
            not:
              required:
                - budgetGuard
    NativeBudgetGuard:
      oneOf:
        - type: object
          additionalProperties: false
          required:
            - version
            - resourceUrl
            - sourceAuthority
            - currency
            - amountUnits
            - fingerprint
            - platform
            - adAccountId
            - selection
            - owner
            - cadence
            - unitsPerCurrency
          properties:
            version:
              const: 1
              type: integer
            resourceUrl:
              type: string
              pattern: ^[a-z0-9.-]{1,253}$
            sourceAuthority:
              type: object
              additionalProperties: false
              required:
                - dataSourceAdAccountId
                - dataSourceConnectorId
              properties:
                dataSourceAdAccountId:
                  type: string
                  minLength: 1
                  maxLength: 512
                dataSourceConnectorId:
                  type: string
                  minLength: 1
                  maxLength: 512
            currency:
              type: string
              pattern: ^[A-Z]{3}$
            amountUnits:
              type: string
              pattern: ^[1-9]\d{0,18}$
            fingerprint:
              type: string
              pattern: ^[a-f0-9]{64}$
            platform:
              const: FACEBOOK
              type: string
            adAccountId:
              type: string
              pattern: ^(?:act_)?[1-9]\d{0,19}$
            selection:
              oneOf:
                - type: object
                  additionalProperties: false
                  required:
                    - assetType
                    - assetId
                  properties:
                    assetType:
                      const: campaign
                      type: string
                    assetId:
                      type: string
                      pattern: ^[1-9]\d{0,19}$
                - type: object
                  additionalProperties: false
                  required:
                    - assetType
                    - assetId
                    - parentAssetId
                  properties:
                    assetType:
                      const: adset
                      type: string
                    assetId:
                      type: string
                      pattern: ^[1-9]\d{0,19}$
                    parentAssetId:
                      type: string
                      pattern: ^[1-9]\d{0,19}$
            owner:
              type: object
              additionalProperties: false
              required:
                - assetType
                - assetId
              properties:
                assetType:
                  enum:
                    - campaign
                    - adset
                  type: string
                assetId:
                  type: string
                  pattern: ^[1-9]\d{0,19}$
            cadence:
              type: string
              enum:
                - daily
                - lifetime
            unitsPerCurrency:
              enum:
                - 1
                - 100
                - 1000
              type: integer
        - type: object
          additionalProperties: false
          required:
            - version
            - resourceUrl
            - sourceAuthority
            - currency
            - amountUnits
            - fingerprint
            - platform
            - adAccountId
            - selection
            - owner
            - cadence
            - unitsPerCurrency
            - period
            - budgetType
            - explicitlyShared
            - referenceCount
            - affectedCampaignIds
          properties:
            version:
              const: 1
              type: integer
            resourceUrl:
              type: string
              pattern: ^[a-z0-9.-]{1,253}$
            sourceAuthority:
              type: object
              additionalProperties: false
              required:
                - dataSourceAdAccountId
                - dataSourceConnectorId
              properties:
                dataSourceAdAccountId:
                  type: string
                  minLength: 1
                  maxLength: 512
                dataSourceConnectorId:
                  type: string
                  minLength: 1
                  maxLength: 512
            currency:
              type: string
              pattern: ^[A-Z]{3}$
            amountUnits:
              type: string
              pattern: ^[1-9]\d{0,18}$
            fingerprint:
              type: string
              pattern: ^[a-f0-9]{64}$
            platform:
              const: GOOGLE_ADS
              type: string
            adAccountId:
              type: string
              pattern: ^[1-9]\d{0,19}$
            selection:
              type: object
              additionalProperties: false
              required:
                - assetType
                - assetId
              properties:
                assetType:
                  const: campaign
                  type: string
                assetId:
                  type: string
                  pattern: ^[1-9]\d{0,19}$
            owner:
              type: object
              additionalProperties: false
              required:
                - assetType
                - resourceName
              properties:
                assetType:
                  const: campaign_budget
                  type: string
                resourceName:
                  type: string
                  pattern: ^customers/[1-9]\d{0,19}/campaignBudgets/[1-9]\d{0,19}$
            cadence:
              const: daily
              type: string
            unitsPerCurrency:
              const: 1000000
              type: integer
            period:
              const: DAILY
              type: string
            budgetType:
              const: STANDARD
              type: string
            explicitlyShared:
              type: boolean
            referenceCount:
              type: integer
              minimum: 1
              maximum: 100
            affectedCampaignIds:
              type: array
              minItems: 1
              maxItems: 100
              uniqueItems: true
              items:
                type: string
                pattern: ^[1-9]\d{0,19}$
      description: >-
        Use the live quote unchanged. amountUnits must fit a positive signed
        64-bit integer (at most 9223372036854775807). Selection, owner,
        currency, cadence and source must match the exact request. Google
        affectedCampaignIds is the complete unique lexically sorted scope,
        includes the selected campaign, and matches referenceCount. A
        JSON-shaped guard without a current matching fingerprint is not
        executable authority.
    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'
    BadGateway:
      description: A dependent Bily operation was temporarily unavailable.
      headers:
        x-request-id:
          description: The request identifier selected or generated by Bily.
          schema:
            type: string
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    ServiceUnavailable:
      description: >-
        Authentication or a required data source is temporarily unavailable.
        Honor Retry-After when present; do not interpret this as an invalid key
        or an empty dataset.
      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 > AI tools > Access
        keys. Select the intended workspace 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.

````

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