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

# List this tenant's outbound Dataprev rail throughput transitions

> Walks this tenant's append-only outbound-rail throughput chain, newest transition first: every rate the tenant has held, when it changed, and who changed it.

It is the SIBLING of GET /v1/consignado/throughput and never a replacement for it: that read answers what the tenant is paced at right now, and this one answers how it got there.

'sequence' is the chain's own authority on order and is the ONLY column this read sorts by. 'changed_at' is reported and never ordered by, because a wall clock stamped by whichever replica served the change would let two links swap places under clock skew.

'previous_requests_per_second' is null on sequence 1 and on no other link. A stored ZERO is a real predecessor and means the tenant was coming off a pause, so absent and zero never share a spelling here.

'requests_per_second' of zero is a deliberate self-service pause, not an absent value. 'changed_by' names the actor: the gateway's own reserved system actor marks the automatic first grant, which is how a rate somebody chose is told apart from the floor the gateway opened the chain at.

The rows are reported AS STORED, and this read asserts nothing about the sequence advancing by exactly one. The plus-one step lives in the write path under an advisory lock and the table enforces only uniqueness and the first-link rule, so a reader that refused a jump would be claiming a guarantee nothing makes. A consumer that cares about continuity verifies what it received.

A tenant that never changed its rate reads as an EMPTY page and never as a not-found: never having changed the rate is an ordinary state.

There is deliberately no time window. A window would hide exactly the old transition an operator is looking for when they ask why a client is paced the way it is.

Paging is keyset over the sequence. Send the previous page's page.next_after as after. has_more is true exactly when another page exists, and next_after is null exactly when it is false, so a client loop may terminate on either. The cursor never expires; a cursor this service did not mint is refused with 422 rather than silently restarting the walk from the head.

It answers from a LOCAL table and never reaches the Dataprev rail, so it cannot answer 501. The tenant is derived from the validated identity and is never read from the request.



## OpenAPI

````yaml /en/openapi/v3-current/consignado.yaml get /v1/consignado/throughput/history
openapi: 3.1.0
info:
  contact:
    email: contact@lerian.studio
    name: Lerian Studio
    url: https://lerian.studio
  description: >-
    OpenAPI 3.1 surface for Lerian Consignado — Dataprev. The API covers tenant
    credentials and rail configuration, worker margin, loan auctions and bids,
    contract registration and lifecycle, disbursement confirmation, portability,
    refinancing, renegotiation, FGTS guarantees, reconciliation, funds,
    assignments, usage, throughput, and event subscriptions. Secret material is
    written to the tenant secret store and is never returned by any operation.
  license:
    name: Lerian Studio General License
  title: Lerian Consignado API
  version: v1.0.0
servers:
  - url: https://br-consignado-gw.sandbox.lerian.net
security:
  - BearerAuth: []
tags:
  - description: >-
      Per-tenant Dataprev credential custody and public rail configuration
      (upload, status, rotation, revoke, requester code, and worker portal base
      URL)
    name: Credentials
  - description: >-
      Tenant-scoped consignado gateway usage: priced billable-unit aggregation
      per competência
    name: Consignado Usage
  - description: >-
      Per-tenant streaming-hub subscription control-plane (list, create, get,
      rotate, revoke, and test delivery)
    name: Subscriptions
  - description: >-
      Dataprev payroll-rail surface: FGTS balance and authorization reads, the
      FGTS guarantee execution, contract suspension, reactivation and term
      changes, the rail's own contract documents, and the on-demand reads of
      leilão solicitações, escriturações, repasses and employment terminations
    name: Consignado Rail
  - description: >-
      Synchronous rail command surface: the operations a bancarizador without
      the lender drives over HTTP. Each shares its command implementation with
      the equivalent lender event trigger.
    name: Consignado Rail Commands
  - description: >-
      Gateway-owned disbursement confirmation: a client bank recording money it
      has ALREADY paid to a worker. It crosses no government boundary and
      proxies no Dataprev operation.
    name: Consignado Disbursement
  - description: >-
      Per-tenant self-service outbound Dataprev rail throughput: read and set
      this tenant's own requests-per-second, including a deliberate pause at
      zero
    name: Consignado Throughput
paths:
  /v1/consignado/throughput/history:
    get:
      tags:
        - Consignado Throughput
      summary: List this tenant's outbound Dataprev rail throughput transitions
      description: >-
        Walks this tenant's append-only outbound-rail throughput chain, newest
        transition first: every rate the tenant has held, when it changed, and
        who changed it.


        It is the SIBLING of GET /v1/consignado/throughput and never a
        replacement for it: that read answers what the tenant is paced at right
        now, and this one answers how it got there.


        'sequence' is the chain's own authority on order and is the ONLY column
        this read sorts by. 'changed_at' is reported and never ordered by,
        because a wall clock stamped by whichever replica served the change
        would let two links swap places under clock skew.


        'previous_requests_per_second' is null on sequence 1 and on no other
        link. A stored ZERO is a real predecessor and means the tenant was
        coming off a pause, so absent and zero never share a spelling here.


        'requests_per_second' of zero is a deliberate self-service pause, not an
        absent value. 'changed_by' names the actor: the gateway's own reserved
        system actor marks the automatic first grant, which is how a rate
        somebody chose is told apart from the floor the gateway opened the chain
        at.


        The rows are reported AS STORED, and this read asserts nothing about the
        sequence advancing by exactly one. The plus-one step lives in the write
        path under an advisory lock and the table enforces only uniqueness and
        the first-link rule, so a reader that refused a jump would be claiming a
        guarantee nothing makes. A consumer that cares about continuity verifies
        what it received.


        A tenant that never changed its rate reads as an EMPTY page and never as
        a not-found: never having changed the rate is an ordinary state.


        There is deliberately no time window. A window would hide exactly the
        old transition an operator is looking for when they ask why a client is
        paced the way it is.


        Paging is keyset over the sequence. Send the previous page's
        page.next_after as after. has_more is true exactly when another page
        exists, and next_after is null exactly when it is false, so a client
        loop may terminate on either. The cursor never expires; a cursor this
        service did not mint is refused with 422 rather than silently restarting
        the walk from the head.


        It answers from a LOCAL table and never reaches the Dataprev rail, so it
        cannot answer 501. The tenant is derived from the validated identity and
        is never read from the request.
      operationId: listConsignadoThroughputHistory
      parameters:
        - description: >-
            The previous page's page.next_after. Omitted starts at the head of
            the chain, the rate the tenant holds right now. A cursor this
            service did not mint is refused, never restarted from the top.
          explode: false
          in: query
          name: after
          schema:
            description: >-
              The previous page's page.next_after. Omitted starts at the head of
              the chain, the rate the tenant holds right now. A cursor this
              service did not mint is refused, never restarted from the top.
            examples:
              - >-
                eyJ2IjoxLCJyIjoiYm9hcmQiLCJ0IjoiMjAyNi0wOC0xNFQwOToxMjozM1oiLCJrIjpbImMwMDEyIl19
            type: string
        - description: >-
            Maximum number of transitions to return. Omitted means the ceiling
            of 200.
          explode: false
          in: query
          name: limit
          schema:
            description: >-
              Maximum number of transitions to return. Omitted means the ceiling
              of 200.
            examples:
              - 50
            format: int64
            maximum: 200
            minimum: 1
            type: integer
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ThroughputHistoryPage'
          description: OK
        '401':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Unprocessable Entity
        '429':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Too Many Requests
        '500':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Internal Server Error
        '503':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Service Unavailable
      security:
        - BearerAuth: []
components:
  schemas:
    ThroughputHistoryPage:
      additionalProperties: false
      properties:
        items:
          items:
            $ref: '#/components/schemas/ThroughputTransitionItem'
          type: array
        page:
          $ref: '#/components/schemas/KeysetPageMetadata'
      required:
        - items
        - page
      type: object
    Detail:
      additionalProperties: false
      properties:
        code:
          description: >-
            Stable, machine-readable domain error code scoped to the emitting
            service (format: <SERVICE>-NNNN).
          examples:
            - ERR-0001
          type: string
        detail:
          description: >-
            A human-readable explanation specific to this occurrence of the
            problem.
          examples:
            - Property foo is required but is missing.
          type: string
        errors:
          description: Optional list of individual error details
          items:
            $ref: '#/components/schemas/ErrorDetail'
          type:
            - array
            - 'null'
        instance:
          description: >-
            A URI reference that identifies the specific occurrence of the
            problem.
          examples:
            - https://example.com/error-log/abc123
          format: uri
          type: string
        status:
          description: HTTP status code
          examples:
            - 400
          format: int64
          type: integer
        title:
          description: >-
            A short, human-readable summary of the problem type. This value
            should not change between occurrences of the error.
          examples:
            - Bad Request
          type: string
        type:
          default: about:blank
          description: A URI reference to human-readable documentation for the error.
          examples:
            - https://example.com/errors/example
          format: uri
          type: string
        upstream:
          $ref: '#/components/schemas/Upstream'
          description: >-
            RFC 9457 extension member: the error a proxied third-party provider
            reported. Absent unless the emitting service explicitly surfaced
            one.
      type: object
    ThroughputTransitionItem:
      additionalProperties: false
      properties:
        changed_at:
          description: >-
            The instant of the transition, in UTC. Reported and never ordered
            by: a wall clock is not the authority on a chain that has a
            sequence.
          examples:
            - '2026-08-14T09:12:33Z'
          format: date-time
          type: string
        changed_by:
          description: >-
            The actor that made the change. system:gateway is the gateway's own
            automatic first grant.
          examples:
            - client-admin@bank
          type: string
        previous_requests_per_second:
          description: >-
            The rate held before this link. Null on sequence 1 and on no other
            row. A stored zero is a real predecessor and means the tenant was
            coming off a pause.
          examples:
            - 10
          format: int64
          type:
            - integer
            - 'null'
        requests_per_second:
          description: >-
            The rate the tenant became entitled to at this link. Zero is a
            requested pause, not an absent value.
          examples:
            - 25
          format: int64
          type: integer
        sequence:
          description: >-
            This link's position in the tenant's chain, starting at 1. The
            chain's own authority on order and the only column this read sorts
            by.
          examples:
            - 2
          format: int64
          type: integer
      required:
        - sequence
        - requests_per_second
        - previous_requests_per_second
        - changed_at
        - changed_by
      type: object
    KeysetPageMetadata:
      additionalProperties: false
      properties:
        after:
          description: >-
            The cursor this page resumed from, echoed back. Null when the read
            started at the beginning.
          examples:
            - >-
              eyJ2IjoxLCJyIjoiYm9hcmQiLCJ0IjoiMjAyNi0wOC0xNFQwOToxMjozM1oiLCJrIjpbImMwMDEyIl19
          type:
            - string
            - 'null'
        has_more:
          description: Whether at least one further page exists.
          examples:
            - true
          type: boolean
        next_after:
          description: >-
            The cursor for the page after this one. Null exactly when has_more
            is false.
          examples:
            - >-
              eyJ2IjoxLCJyIjoiYm9hcmQiLCJ0IjoiMjAyNi0wOC0xNFQwOTowNzo1MVoiLCJrIjpbImMwMDM3Il19
          type:
            - string
            - 'null'
      required:
        - after
        - next_after
        - has_more
      type: object
    ErrorDetail:
      additionalProperties: false
      properties:
        location:
          description: >-
            Where the error occurred, e.g. 'body.items[3].tags' or
            'path.thing-id'
          type: string
        message:
          description: Error message text
          type: string
        value:
          description: The value at the given location
      type: object
    Upstream:
      additionalProperties: false
      properties:
        code:
          description: The upstream provider's own error code, verbatim.
          examples:
            - E4001
          type: string
        message:
          description: >-
            The upstream provider's own error message, verbatim (bounded, never
            its raw response body).
          examples:
            - account not found at provider
          type: string
      type: object
  securitySchemes:
    BearerAuth:
      bearerFormat: JWT
      description: JWT bearer token issued by the identity provider.
      scheme: bearer
      type: http

````