---
title: "Settle shared metering rows or independent immutable gateway WAL sources"
method: POST
path: "/internal/metering/ingest"
---

# Settle shared metering rows or independent immutable gateway WAL sources

`POST /internal/metering/ingest`

## Request

- Base URL: `https://api.eurobase.dev`
- URL: `https://api.eurobase.dev/internal/metering/ingest`
- Auth: none declared

## Request body

- union
  - MeteringIngestRequest: The union of every counter sourceReservationIds array and every function request sourceReservationId must exactly equal the top-level sourceReservationIds set. Every row member must belong to that set. A batch contains at most 500 counters plus function requests and at most 2,000 contribution references.
    - `producerId` string, required
    - `batchId` string, required
    - `batchSequence` integer, required
    - `schemaVersion` 'usage-metering.v2', required
    - `sourceReservationIds` string[], required
    - `observedAfter` string, date-time, nullable
    - `counters` object[]
      - `organizationId` string, nullable
      - `projectId` string, required
      - `resourceType` string, required
      - `resourceId` string, required
      - `metricCode` string, required
      - `unit` string, required
      - `windowStart` string, date-time, required
      - `windowEnd` string, date-time, required
      - `valueDecimal` string, required
      - `sourceFamily` string, required
      - `sourceReservationIds` string[], required
      - `pricingVersion` string, nullable
      - `observedAt` string, date-time, required
    - `functionRequests` object[]
      - `sourceReservationId` string, required
      - `projectId` string, required
      - `resourceType` 'function', required
      - `resourceId` string, required
      - `routeId` string, required
      - `functionId` string, required
      - `deploymentId` string, nullable
      - `method` string, nullable
      - `normalizedPath` string, nullable
      - `observedHost` string, nullable
      - `startedAt` string, date-time, required
      - `finishedAt` string, date-time, required
      - `httpStatus` integer, required
      - `statusClass` string, nullable
      - `latencyMs` integer, required
      - `responseBytes` integer
      - `outcome` 'success' | 'error' | 'timeout', required
      - `sourceFamily` 'gateway', required
  - union
    - object
      - `producerId` string, required
      - `schemaVersion` 'gateway-metering-source.v1', required
      - `sources` GatewayMeteringTerminalSourceV1[], required (unresolved $ref)
    - object
      - `producerId` string, required
      - `schemaVersion` 'gateway-metering-source.v2', required
      - `sources` GatewayMeteringTerminalSourceV2[], required
        - `storeUid` string, required
        - `walRecordId` string, required
        - `sourceReservationId` string, required
        - `terminal` GatewayMeteringTerminalRecordV2, required
          - `gatewayInstanceId` string, required
          - `reservationId` string, required
          - `projectId` string, required
          - `organizationId` string
          - `resourceType` 'function', required
          - `resourceId` string, required
          - `routeId` string, required
          - `requestClass` 'worker' | 'asset' | 'redirect' | 'not_found' | 'reserved' | 'manifest_unavailable': Required for app_route; immutable through Gateway WAL, receipt, and usage.
          - `routeRevisionId` string, required
          - `functionId` string, required
          - `deploymentId` string
          - `method` string
          - `normalizedPath` string
          - `observedHost` string
          - `surfaceKind` string, required
          - `minuteBucket` string, date-time, required
          - `startedAt` string, date-time, required
          - `httpStatus` integer, required
          - `statusClass` string, required
          - `responseBytes` integer, required
          - `latencyMs` integer, required
          - `outcome` 'success' | 'error' | 'timeout', required
          - `denyReason` string
          - `finishedAt` string, date-time, required
          - `leaseId` string
          - `grantId` string
          - `leaseSerial` integer
          - `leaseOwnerBootId` string
          - `leaseAdmittedAt` string, date-time
          - `executionLeaseId` string
          - `executionSerial` integer
          - `admissionProtocol` string
          - `projectionVersion` integer

## Response `200`

Stored shared acknowledgement or independent gateway source outcomes

- union
  - MeteringIngestResponse
    - `id` string, required
    - `producerId` string, required
    - `batchId` string, required
    - `batchSequence` integer, required
    - `schemaVersion` 'usage-metering.v2', required
    - `payloadFingerprint` string, required
    - `replayed` boolean, required
    - `status` 'processing' | 'accepted' | 'partial' | 'rejected', required
    - `acceptedRows` integer, required
    - `rejectedRows` integer, required
    - `receivedAt` string, date-time, required
    - `processedAt` string, date-time, nullable
    - `createdAt` string, date-time, required
    - `updatedAt` string, date-time, required
    - `rejectionSummary` MeteringRejectionSummary
      - `reason` string, required
      - `reasonCounts` object[], required
        - `reason` string, required
        - `count` integer, required
      - `sampleRows` object[], required
      - `truncated` boolean, required
  - GatewayMeteringSourceEnvelopeResponse
    - `ok` true, required
    - `producerId` string, required
    - `schemaVersion` 'gateway-metering-source.v1' | 'gateway-metering-source.v2', required
    - `results` GatewayMeteringSourceResult[], required
      - union
        - object
          - `sourceIndex` integer, required
          - `sourceReservationId` string, required
          - `walRecordId` string, required
          - `batchId` string, required
          - `sourceFingerprint` string, required
          - `contributionFingerprint` string, required
          - `status` 'accepted', required
          - `statusCode` 200, required
          - `acknowledgement` GatewayMeteringSourceAcknowledgement, required
            - `id` string, required
            - `producerId` string, required
            - `batchId` string, required
            - `batchSequence` integer, required
            - `schemaVersion` 'usage-metering.v2', required
            - `payloadFingerprint` string, required
            - `replayed` boolean, required
            - `status` 'accepted', required
            - `acceptedRows` integer, required
            - `rejectedRows` 0, required
            - `receivedAt` string, date-time, required
            - `processedAt` string, date-time, nullable
            - `createdAt` string, date-time, required
            - `updatedAt` string, date-time, required
            - `rejectionSummary` MeteringRejectionSummary
              - …
        - object
          - `sourceIndex` integer, required
          - `sourceReservationId` string, required
          - `walRecordId` string, required
          - `batchId` string, required
          - `sourceFingerprint` string, required
          - `contributionFingerprint` string, required
          - `status` 'accepted' | 'exact_retry', required
          - `statusCode` 200, required
          - `disposition` 'denied_nonbilling', required
          - `dispositionReceipt` GatewayMeteringDeniedNonbillingReceipt, required
            - `schemaVersion` 'gateway-metering-denied-nonbilling-receipt.v1', required
            - `producerId` string, required
            - `storeUid` string, required
            - `walRecordId` string, required
            - `sourceReservationId` string, required
            - `batchId` string, required
            - `sourceSequence` integer, required
            - `sourceSchemaVersion` 'gateway-metering-source.v1' | 'gateway-metering-source.v2', required
            - `sourceFingerprint` string, required
            - `contributionFingerprint` string, required
            - `payloadFingerprint` string, required
            - `disposition` 'denied_nonbilling', required
            - `denyReason` string, required
            - `settledAt` string, date-time, required
            - `dispositionFingerprint` string, required
          - `acknowledgement` GatewayMeteringDeniedNonbillingAcknowledgement, required
            - `id` string, required
            - `producerId` string, required
            - `batchId` string, required
            - `batchSequence` integer, required
            - `schemaVersion` 'usage-metering.v2', required
            - `payloadFingerprint` string, required
            - `replayed` boolean, required
            - `status` 'accepted', required
            - `acceptedRows` 0, required
            - `rejectedRows` 0, required
            - `receivedAt` string, date-time, required
            - `processedAt` string, date-time, nullable
            - `createdAt` string, date-time, required
            - `updatedAt` string, date-time, required
            - `rejectionSummary` MeteringRejectionSummary
              - …
        - object
          - `sourceIndex` integer, required
          - `sourceReservationId` string, required
          - `walRecordId` string, required
          - `batchId` string, required
          - `sourceFingerprint` string, required
          - `contributionFingerprint` string, required
          - `status` 'exact_retry', required
          - `statusCode` 200, required
          - `acknowledgement` GatewayMeteringSourceAcknowledgement, required
            - `id` string, required
            - `producerId` string, required
            - `batchId` string, required
            - `batchSequence` integer, required
            - `schemaVersion` 'usage-metering.v2', required
            - `payloadFingerprint` string, required
            - `replayed` boolean, required
            - `status` 'accepted', required
            - `acceptedRows` integer, required
            - `rejectedRows` 0, required
            - `receivedAt` string, date-time, required
            - `processedAt` string, date-time, nullable
            - `createdAt` string, date-time, required
            - `updatedAt` string, date-time, required
            - `rejectionSummary` MeteringRejectionSummary
              - …
        - object
          - `sourceIndex` integer, required
          - `sourceReservationId` string, required
          - `walRecordId` string, required
          - `batchId` string, required
          - `sourceFingerprint` string, required
          - `contributionFingerprint` string, required
          - `status` 'discarded_nonbilling', required
          - `statusCode` 200, required
          - `reason` string, required
          - `dispositionReceipt` GatewayMeteringNonbillingDiscardReceipt, required
            - `schemaVersion` 'gateway-metering-nonbilling-discard-receipt.v1', required
            - `id` string, required
            - `authorizationFingerprint` string, required
            - `approvalReference` string, required
            - `authorizedAt` string, date-time, required
            - `producerId` string, required
            - `storeUid` string, required
            - `walRecordId` string, required
            - `sourceReservationId` string, required
            - `batchId` string, required
            - `sourceSequence` integer, required
            - `sourceSchemaVersion` 'gateway-metering-source.v1' | 'gateway-metering-source.v2', required
            - `sourceFingerprint` string, required
            - `contributionFingerprint` string, required
            - `payloadFingerprint` string, required
            - `disposition` 'discarded_nonbilling', required
            - `reason` string, required
            - `discardedAt` string, date-time, required
        - object
          - `sourceIndex` integer, required
          - `sourceReservationId` string, required
          - `walRecordId` string, required
          - `batchId` string, required
          - `status` 'retryable_rejection', required
          - `statusCode` 429 | 503, required
          - `reason` string, required
        - object
          - `sourceIndex` integer, required
          - `sourceReservationId` string, required
          - `walRecordId` string, required
          - `batchId` unknown, required
          - `status` 'retryable_rejection', required
          - `statusCode` 503, required
          - `reason` 'gateway-metering-source-envelope-invalid', required
        - object
          - `sourceIndex` integer, required
          - `sourceReservationId` string, required
          - `walRecordId` string, required
          - `batchId` string, required
          - `status` 'conflict', required
          - `statusCode` 409, required
          - `reason` string, required

## Other responses

- `401`: Internal metering ingest token required
- `403`: Metering ingest token scope mismatch
- `409`: V2 batch or DB-owned row identity was already claimed with different canonical content (metering-source-idempotency-conflict), or historical equality proof is unavailable (metering-idempotency-proof-unavailable)
- `413`: Batch row count or total V2 source-contribution proof exceeds the bounded ingest contract
- `422`: Schema, source, or row identity is invalid
- `503`: Stored V2 idempotency proof is incomplete, or gateway metering settlement is temporarily unavailable

---

[API](https://skmtc.dev/eurobase/apis/eurobase-api.md) · [All operations](https://skmtc.dev/eurobase/apis/eurobase-api/llms.txt) · [OpenAPI document](https://skmtc.dev/eurobase/apis/eurobase-api/revisions/5266a299d18a?raw)
