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

# List proof packs

> List signed proof packs for this tenant, newest first. A proof pack is the externally-shareable, Ed25519-signed bundle of receipts that downstream verifiers consume. Requires scope `proof:read`.



## OpenAPI

````yaml /openapi-v1.yaml get /v1/proof-packs
openapi: 3.1.0
info:
  title: EnfinitOS API
  version: v1.0
  description: >-
    The governed-execution `/v1` developer API for EnfinitOS — rights, delivery,
    proof, and settlement.


    Use this API to register the legal **bases** a right rests on, **issue** and
    lifecycle-manage rights across delivery substrates (DOOH, CTV, spatial/AR,
    mobile, audio, and more), negotiate **offers**, raise and resolve
    **challenges**, observe constraint-gated **deliveries**, seal signed **proof
    packs**, read **metering** + **settlement** projections, configure
    settlement **rules** and **counterparties**, fulfil GDPR **compliance**
    requests, and subscribe to **webhooks**.


    Every state-changing action is appended to an immutable, signable audit log;
    delivery and proof artefacts are Ed25519-signed so a downstream auditor can
    verify them offline.


    ## Response envelope

    Every response wraps its payload in a canonical envelope.


    Success (HTTP 200):

    ```json { "ok": true, "data": { ... }, "contractVersion": "v1.0" } ```


    Error (4xx / 5xx):

    ```json { "ok": false, "error": "VALIDATION_FAILED", "message": "human
    text", "contractVersion": "v1.0" } ```

    Some error responses carry additional context fields alongside `error` and
    `message` (for example `field`, `validationErrors`, `requiredScopes`,
    `keyScopes`).


    ## Authentication

    All endpoints except `GET /v1` and `GET /v1/healthz` require an API key sent
    as `Authorization: Bearer <api-key>`. Keys carry a set of named scopes; each
    operation documents the scope it requires. A key carrying the `*` wildcard
    scope passes every scope check.

    Pre-launch, sandbox keys are issued through the apply flow: request access
    at `/apply`, receive an activation email on approval, and exchange it for a
    `/v1` sandbox key in the integration playground at `/developers/playground`.
    Self-service key issuance from the developer dashboard at
    `/developers/dashboard` lands at the April 2027 production launch.


    ## Identifiers

    Resource ids are prefixed: bases `bas_…`, rights `rgh_…`, offers `ofr_…`
    (passed as `rightId`/`offerId`), settlement rules `rule_…`, counterparties
    `cp_…`, webhook subscriptions, and webhook deliveries `dlv_…`. All
    timestamps are ISO-8601 strings.
  contact:
    name: EnfinitOS Developer Support
    url: https://docs.enfinitos.com
    email: developers@enfinitos.com
servers:
  - url: https://sandbox.api.enfinitos.com
    description: Sandbox — live today
  - url: https://api.enfinitos.com
    description: Production — at the April 2027 launch
security:
  - bearerAuth: []
tags:
  - name: Discovery
    description: Unauthenticated contract + health probes.
  - name: Tenant
    description: Read the caller's sandbox tenant snapshot.
  - name: Rights
    description: Bases and the right lifecycle (issue, suspend, resume, revoke).
  - name: Offers
    description: Propose, accept, reject, counter, and withdraw offers.
  - name: Challenges
    description: Open, resolve, and withdraw challenges against rights.
  - name: Delivery
    description: Observe constraint-gated delivery events.
  - name: Audit
    description: The append-only event log.
  - name: Proof
    description: Signed proof packs.
  - name: Metering & Settlement
    description: Metering and settlement projections.
  - name: Settlement config
    description: Settlement rules and counterparties.
  - name: Compliance
    description: GDPR Article 15 export and Article 17 erasure.
  - name: Webhooks
    description: Webhook subscriptions and delivery history.
  - name: Disputes
    description: Delivery disputes — open, investigate, respond, resolve.
paths:
  /v1/proof-packs:
    get:
      tags:
        - Proof
      summary: List proof packs
      description: >-
        List signed proof packs for this tenant, newest first. A proof pack is
        the externally-shareable, Ed25519-signed bundle of receipts that
        downstream verifiers consume. Requires scope `proof:read`.
      operationId: listProofPacks
      parameters:
        - $ref: '#/components/parameters/Cursor'
        - $ref: '#/components/parameters/Limit200'
      responses:
        '200':
          description: A page of proof packs.
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/SuccessEnvelope'
                  - type: object
                    properties:
                      data:
                        type: object
                        properties:
                          proofPacks:
                            type: array
                            items:
                              $ref: '#/components/schemas/SignedProofPack'
                          nextCursor:
                            $ref: '#/components/schemas/NextCursor'
                          total:
                            type: integer
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
components:
  parameters:
    Cursor:
      name: cursor
      in: query
      required: false
      description: >-
        Zero-indexed pagination cursor (slice start). Echo `nextCursor` from the
        previous page.
      schema:
        type: integer
        minimum: 0
        default: 0
    Limit200:
      name: limit
      in: query
      required: false
      description: Max items per page, clamped to [1, 200]. Defaults to 50.
      schema:
        type: integer
        minimum: 1
        maximum: 200
        default: 50
  schemas:
    SuccessEnvelope:
      type: object
      required:
        - ok
        - data
        - contractVersion
      properties:
        ok:
          type: boolean
          const: true
        data:
          description: Route-specific payload. Operation responses refine this.
          type: object
        contractVersion:
          type: string
          const: v1.0
    SignedProofPack:
      type: object
      description: The top-level signed envelope — one pack per proof-emission window.
      properties:
        envelopeVersion:
          type: string
          const: envelope.v1
        issuedAt:
          type: string
          format: date-time
        orgId:
          type: string
        packId:
          type: string
        label:
          type: string
        records:
          type: array
          items:
            $ref: '#/components/schemas/ProofRecord'
        metering:
          $ref: '#/components/schemas/MeteringSummary'
        settlement:
          $ref: '#/components/schemas/SettlementSummary'
    NextCursor:
      type:
        - integer
        - 'null'
      description: Cursor for the next page, or null when this is the last page.
    ProofRecord:
      type: object
      description: One signed receipt plus its provenance-chain anchors.
      properties:
        payload:
          $ref: '#/components/schemas/ProofReceiptPayload'
        keyId:
          type: string
        algorithm:
          type: string
          const: ed25519
        signature:
          type: string
          description: Base64url-encoded 64-byte Ed25519 signature.
        payloadCanonical:
          type: string
          description: >-
            The canonical-encoded payload string the signature was computed
            over.
        beforeHash:
          type:
            - string
            - 'null'
          description: Predecessor's afterHash; null for the genesis record.
        afterHash:
          type: string
          description: SHA-256 (hex) of payloadCanonical.
    MeteringSummary:
      type: object
      properties:
        schemaVersion:
          type: string
          const: metering.v1
        orgId:
          type: string
        periodStart:
          type: string
          format: date-time
          description: ISO-8601 inclusive.
        periodEnd:
          type: string
          format: date-time
          description: ISO-8601 exclusive.
        records:
          type: array
          items:
            $ref: '#/components/schemas/MeterRecord'
        totals:
          type: object
          description: Per-unit-type totals as decimal strings.
          additionalProperties:
            type: string
    SettlementSummary:
      type: object
      properties:
        schemaVersion:
          type: string
          enum:
            - settlement.v1
            - settlement.v2
          description: >-
            settlement.v2 is current (3-field content-hash idemKey);
            settlement.v1 appears on summaries sealed before the CRYPTO-01 flip
            and remains verifiable.
        orgId:
          type: string
        periodStart:
          type: string
          format: date-time
        periodEnd:
          type: string
          format: date-time
        currency:
          type: string
        meterGross:
          type: object
          description: Gross amount per meterRecordIdemKey (minor units).
          additionalProperties:
            type: integer
        lines:
          type: array
          items:
            $ref: '#/components/schemas/SettlementLine'
        totals:
          type: object
          properties:
            grossCents:
              type: integer
            netToTenantCents:
              type: integer
            platformFeeCents:
              type: integer
            vatCents:
              type: integer
            passThroughFeeLedgerCodes:
              type: array
              items:
                type: string
    ErrorEnvelope:
      type: object
      required:
        - ok
        - error
        - message
      properties:
        ok:
          type: boolean
          const: false
        error:
          $ref: '#/components/schemas/ErrorCode'
        message:
          type: string
          description: Human-readable explanation.
        contractVersion:
          type: string
          const: v1.0
        field:
          type: string
          description: Present on some VALIDATION_FAILED errors — the offending field.
        validationErrors:
          type: array
          description: Present on settlement-rule / counterparty validation failures.
          items:
            type: object
            additionalProperties: true
        requiredScopes:
          type: array
          description: Present on SCOPE_MISSING — the scopes the operation needs.
          items:
            type: string
        keyScopes:
          type: array
          description: Present on SCOPE_MISSING — the scopes the presented key carries.
          items:
            type: string
      additionalProperties: true
    ProofReceiptPayload:
      type: object
      description: The exact signed receipt payload the platform emits (version "1").
      properties:
        version:
          type: string
          const: '1'
        receiptId:
          type: string
        correlationId:
          type:
            - string
            - 'null'
        spatialAnchorId:
          type: string
        spatialPlacementId:
          type:
            - string
            - 'null'
        issuedAt:
          type: string
          format: date-time
        renderedAt:
          type: string
          format: date-time
        dwellMs:
          type: number
        nonce:
          type: string
        witness:
          type:
            - string
            - 'null'
    MeterRecord:
      type: object
      description: One billable-unit projection of one proof receipt. Decimals are strings.
      properties:
        idemKey:
          type: string
          description: sha256(proofReceiptId|unitType), hex with `sha256:` prefix.
        proofReceiptId:
          type: string
        unitType:
          $ref: '#/components/schemas/MeterUnitType'
        unitCount:
          type: string
          description: Decimal as string.
        weight:
          type: string
          description: Multiplier applied during projection. Default "1".
        spatialAnchorId:
          type: string
        spatialPlacementId:
          type:
            - string
            - 'null'
        observedAt:
          type: string
          format: date-time
        status:
          $ref: '#/components/schemas/MeterRecordStatus'
    SettlementLine:
      type: object
      description: One row of the post-meter settlement projection.
      properties:
        idemKey:
          type: string
          description: >-
            sha256(meterRecordIdemKey|partyRole|ledgerAccountCode), hex with
            `sha256:` prefix (settlement.v2). Summaries stamped settlement.v1
            (sealed before the CRYPTO-01 flip) carry the legacy 2-field
            sha256(meterRecordIdemKey|partyRole); verifiers select the
            reconstruction by the summary's schemaVersion.
        meterRecordIdemKey:
          type: string
        partyRole:
          $ref: '#/components/schemas/SettlementPartyRole'
        share:
          type: string
          description: 0..1 decimal as string; per-meter lines sum to 1.
        ledgerAccountCode:
          type: string
        amountCents:
          type: integer
          description: Minor currency units (cents / pence).
        currency:
          type: string
        status:
          $ref: '#/components/schemas/SettlementLineStatus'
    ErrorCode:
      type: string
      description: Machine-readable error code. Drives the HTTP status.
      enum:
        - AUTH_REQUIRED
        - AUTH_INVALID
        - SCOPE_MISSING
        - BAD_REQUEST
        - VALIDATION_FAILED
        - RESOURCE_NOT_FOUND
        - STATE_CONFLICT
        - PRECONDITION_FAILED
        - RATE_LIMITED
        - INTERNAL_ERROR
    MeterUnitType:
      type: string
      enum:
        - DWELL_SECONDS
        - IMPRESSION_IN_PLACE
        - ATTENTION_SECONDS
        - OCCUPANCY_WEIGHTED_EXPOSURE
        - COMPLIANT_DELIVERY_MINUTE
        - CUSTOM
    MeterRecordStatus:
      type: string
      enum:
        - PROJECTED
        - ACCEPTED
        - SETTLED
        - VOID
    SettlementPartyRole:
      type: string
      enum:
        - TENANT
        - VENUE
        - CUSTOMER
        - PLATFORM
        - AGENCY
        - AFFILIATE
        - RESELLER
        - TAX_AUTHORITY
    SettlementLineStatus:
      type: string
      enum:
        - PROJECTED
        - ACCEPTED
        - POSTED
        - VOID
  responses:
    BadRequest:
      description: >-
        Malformed request (e.g. an invalid query parameter or body that is not
        JSON).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
    Unauthorized:
      description: >-
        Missing/malformed Authorization header (AUTH_REQUIRED) or an invalid key
        (AUTH_INVALID).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
    Forbidden:
      description: >-
        The key is valid but missing one or more required scopes
        (SCOPE_MISSING).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: 'API key sent as `Authorization: Bearer <api-key>`.'

````