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

# Everything we hold for one RIN

> The latest Unified Agenda entry and edition span, OIRA reviews with their outcome and the Federal Register document each one cleared, Regulations.gov dockets (with how many documents are open for comment), Federal Register documents by role (proposed, final, correction, extension), CFR parts, public laws and related RINs, each with the basis and quality of the link. `coverage` lists what we do not hold for this RIN.



## OpenAPI

````yaml https://api.vaquill.ai/external/openapi.json get /api/v1/us/rulemaking/rins/{rin}
openapi: 3.1.0
info:
  title: Vaquill Developer API
  description: >-
    Public API for legal statutes and legislation.


    **Authentication**: Pass your API key as `Authorization: Bearer vq_key_...`
    (preferred) or in the `X-API-Key` header. Sending two different keys in one
    request is rejected with a 401.


    **Credits**: Each call costs API credits. See `GET
    /api/v1/api-credits/pricing` for the full pricing matrix.


    ## Jurisdictions


    | Jurisdiction | Coverage | `countryCode` |

    |---|---|---|

    | **United States** | USC and the Statutes at Large, the CFR and its annual
    editions, all 56 state and territory statutory codes (50 states, DC and five
    territories), state administrative regulations, court rules, federal and
    state constitutions, federal agency guidance and adjudications, the Federal
    Register, the Sentencing Guidelines and US tax treaties. | `US` |


    See the full [Coverage page](https://www.vaquill.ai/docs/api-guide/coverage)
    for the jurisdiction-by-jurisdiction breakdown, or call
    `/us/statutes/coverage` for live counts. Coverage is per (jurisdiction,
    corpusType) pair, so treat that endpoint as the authoritative list rather
    than this summary.


    ## Endpoints


    - **US Statutes**: Search and retrieve any of the corpora above with full
    text, resolve a citation to its exact section, browse the statutory
    hierarchy, read a section as it stood on a past date, and follow its change
    history, cross-references and defined terms

    - **Board Watches**: Subscribe to a corpus source and get a webhook or email
    when it refreshes with real changes (free, API key required)

    - **Pricing**: Credit costs per endpoint (no auth required)


    ## Rate limits


    Limits are enforced per API key and scale with your plan. A `429` response
    includes a `Retry-After` header.


    | Plan | Per minute | Per hour | Per day |

    |---|---|---|---|

    | Vaquill API Pro | 60 | 1,000 | 2,000 |

    | Vaquill API Business | 150 | 2,500 | 10,000 |


    For full documentation, visit the [API
    Reference](https://www.vaquill.ai/docs/api-reference/).
  version: 1.0.0+a1f3e4af5900e02d
  contact:
    name: Vaquill API Support
    url: https://www.vaquill.ai
    email: support@vaquill.ai
  license:
    name: Proprietary
    url: https://www.vaquill.ai/terms
  termsOfService: https://www.vaquill.ai/terms
  x-revision: a1f3e4af5900e02d
servers:
  - url: https://api.vaquill.ai
    description: Production
security:
  - ApiKeyAuth: []
  - ApiKeyHeader: []
tags:
  - name: US Statutes
    description: >-
      Search and retrieve US primary law. Covers the United States Code and the
      Statutes at Large, the Code of Federal Regulations and its annual
      editions, state statutory codes and administrative regulations, federal
      and state constitutions, court rules, Federal Register rules and
      Presidential documents, federal and state agency guidance, agency
      adjudications, state Attorney General opinions, the Sentencing Guidelines
      and US tax treaties. Scope a search with the `corpusType` filter, and call
      `/us/statutes/coverage` for the live jurisdiction-by-corpusType list.


      - **Search**: Search across all USC, CFR, state, and regulatory sections

      - **Section**: Get metadata, citation, hierarchy, and source links for a
      specific section

      - **Body**: Get the full text of a section

      - **Enactments**: Which state session laws a publisher's own tables list
      against a section (supported jurisdictions only, never a complete history)
  - name: US Session Laws
    description: >-
      State session laws: the acts of each legislature as they were enacted,
      chapter by chapter, before they are folded into a code. A session law is
      what the governor signs. It carries the act's own text, including the
      language it strikes and inserts, its approval and effective dates, and,
      where the publisher prints one, the code sections it changes. That makes
      it the source for "which act changed this section, and when did it take
      effect".


      Every act has a permanent `sessionLawId` (for example
      `SSL_MN_2025R_G_Y2025_C1`, Minnesota Laws 2025, regular session, chapter
      1) whether or not we hold its text, and a citation or bill number such as
      `S.F.No. 1552` is accepted where an id goes. v1 serves STATE acts only.
      Federal session laws (the Statutes at Large, `SAL_` ids) are served by
      `/us/statutes/section`, and `/us/statutes/resolve` points a session-law
      citation here.


      **Start here**: check `/us/statutes/coverage` (free) for what we hold per
      state: each jurisdiction's `sessionLaws` block lists its sessions, which
      are complete or only partly collected, and the `series` and
      `instrumentTypes` that exist. Then **List** a session or a date range to
      get ids, **Get** one act for its record, then **Body** for its text. A law
      missing from a partly collected session is a free 404
      (`session_not_fully_collected`), not proof it does not exist.


      - **List**: everything enacted in a state's session, approved in a window,
      or taking effect on a date

      - **Get**: one act by id or by citation; dates (`effectiveDates` is always
      a list), sources and the code sections it affects

      - **Body**: the act's text as printed, paged by cursor, with amendatory
      markup preserved where the publisher printed it

      - **Batch**: up to 50 ids or citations in one call, the same record as
      Get, billed per law served, with every miss listed and its reason

      - **Changes**: a sync feed of the registry over an integer cursor
      (`sinceId`): what began to be served, was corrected, withdrawn or merged


      The reverse link, from a code section to the acts a publisher's own tables
      list against it, is `GET /us/statutes/section/{actId}/enactments`.
  - name: US Rulemaking
    description: >-
      How a federal rule is made, as public records tied together by its
      Regulation Identifier Number (RIN): the semiannual Unified Agenda (every
      edition from Fall 1995), the OIRA review under Executive Order 12866, the
      Regulations.gov docket and its documents, and the Federal Register
      documents that proposed and finalised it.


      **Start here**: `GET /us/rulemaking/coverage` (free) lists what is held
      per source and whether each is fresh. Then **By RIN** for everything held
      for one rule, **Agenda history** for how its timetable moved edition by
      edition, or **Dockets** and **Documents** for the Regulations.gov side.


      Every link between sources carries its `basis` and `quality` (`verified`,
      `candidate`, `ambiguous`). A link we could not make with confidence is
      marked, never guessed, and an umbrella RIN shared by unrelated rules
      claims no proposal-to-final pairing. A comment count of `null` means not
      measured, never zero. Comment text, attachments and commenter information
      are not held or served.
  - name: Board Watches
    description: >-
      Law-change alerts. Subscribe to a **board** (a tracked corpus source,
      identified by `corpusType` plus an optional `state`) and get a webhook or
      email whenever it refreshes with real changes, naming the exact sections
      that changed. Fetch old-vs-new text for any amended section via the change
      diff.


      Boards refresh on their own existing cadence; watching one does not change
      how often it refreshes. Every endpoint here is **free**: authenticated by
      API key and rate-limited, but not credit-metered.


      See the [Law Change Alerts
      guide](https://www.vaquill.ai/docs/api-guide/alerts) for the full
      walkthrough.
  - name: Pricing
    description: >-
      Credit pricing and conversion rates. No authentication required. 1 credit
      = $0.01 USD.
  - name: Agent Onboarding
    description: >-
      How an AI agent gets an API key for its human, with no copy and paste.
      Free and keyless. The agent starts a signup, the human approves a short
      code while signed in, and the agent collects an ordinary API key. Full
      walkthrough: https://api.vaquill.ai/auth.md
  - name: Credits
    description: >-
      Your own credit balance: what is spendable right now, where it came from,
      and what is about to expire.


      Free and never charged, so it is safe to poll for low-balance alerting or
      to pre-flight a batch job.
externalDocs:
  description: Full API Reference
  url: https://www.vaquill.ai/docs/api-reference/
paths:
  /api/v1/us/rulemaking/rins/{rin}:
    get:
      tags:
        - US Rulemaking
      summary: Everything we hold for one RIN
      description: >-
        The latest Unified Agenda entry and edition span, OIRA reviews with
        their outcome and the Federal Register document each one cleared,
        Regulations.gov dockets (with how many documents are open for comment),
        Federal Register documents by role (proposed, final, correction,
        extension), CFR parts, public laws and related RINs, each with the basis
        and quality of the link. `coverage` lists what we do not hold for this
        RIN.
      operationId: get_rulemaking_by_rin
      parameters:
        - name: rin
          in: path
          required: true
          schema:
            type: string
            maxLength: 32
            description: Regulation Identifier Number `NNNN-XXNN`; lower case is accepted.
            examples:
              - 2060-AV16
            pattern: ^[0-9]{4}[- ][A-Za-z]{2}[0-9]{2}$
            title: Rin
          description: Regulation Identifier Number `NNNN-XXNN`; lower case is accepted.
        - name: Idempotency-Key
          in: header
          required: false
          schema:
            anyOf:
              - type: string
                minLength: 16
                maxLength: 255
                pattern: ^[\x21-\x7e]+$
              - type: 'null'
            description: >-
              Optional. 16 to 255 visible ASCII characters (a UUIDv4 works).
              Repeating the same request with the same key replays the original
              2xx response for 24 hours without charging again. The same key on
              a different request is rejected. With the account's
              `cacheQueryDerivedData` retention setting off, no body is stored
              and a retry answers 409 `idempotency_replay_unavailable`, still
              without a second charge.
            examples:
              - 3f9c2a1e-7b44-4d0a-9c1e-5a6b7c8d9e0f
            title: Idempotency-Key
          description: >-
            Optional. 16 to 255 visible ASCII characters (a UUIDv4 works).
            Repeating the same request with the same key replays the original
            2xx response for 24 hours without charging again. The same key on a
            different request is rejected. With the account's
            `cacheQueryDerivedData` retention setting off, no body is stored and
            a retry answers 409 `idempotency_replay_unavailable`, still without
            a second charge.
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RinResponse'
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/X-RateLimit-Reset'
            X-RateLimit-Limit-Day:
              $ref: '#/components/headers/X-RateLimit-Limit-Day'
            X-RateLimit-Remaining-Day:
              $ref: '#/components/headers/X-RateLimit-Remaining-Day'
            X-RateLimit-Limit-Hour:
              $ref: '#/components/headers/X-RateLimit-Limit-Hour'
            X-RateLimit-Remaining-Hour:
              $ref: '#/components/headers/X-RateLimit-Remaining-Hour'
            X-RateLimit-Reset-Day:
              $ref: '#/components/headers/X-RateLimit-Reset-Day'
            X-RateLimit-Scope:
              $ref: '#/components/headers/X-RateLimit-Scope'
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
        '401':
          $ref: '#/components/responses/Unauthorized3'
        '402':
          $ref: '#/components/responses/InsufficientCredits2'
        '404':
          description: We hold nothing for this RIN. Refunded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiDetailError'
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/X-RateLimit-Reset'
            X-RateLimit-Limit-Day:
              $ref: '#/components/headers/X-RateLimit-Limit-Day'
            X-RateLimit-Remaining-Day:
              $ref: '#/components/headers/X-RateLimit-Remaining-Day'
            X-RateLimit-Limit-Hour:
              $ref: '#/components/headers/X-RateLimit-Limit-Hour'
            X-RateLimit-Remaining-Hour:
              $ref: '#/components/headers/X-RateLimit-Remaining-Hour'
            X-RateLimit-Reset-Day:
              $ref: '#/components/headers/X-RateLimit-Reset-Day'
            X-RateLimit-Scope:
              $ref: '#/components/headers/X-RateLimit-Scope'
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
        '409':
          description: >-
            Idempotency conflict. `idempotency_in_progress`: the original
            request with this key is still running (retry after `Retry-After`).
            `idempotency_replay_unavailable`: it completed but its response was
            not kept (too large, or the account's data retention setting), so it
            cannot be replayed; nothing is charged again, so check the credit
            balance instead of retrying. Read the top-level `code`; `detail` is
            the message string, as on every other error. A replayed response
            reports `creditsConsumed: 0`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiDetailError'
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/X-RateLimit-Reset'
            X-RateLimit-Limit-Day:
              $ref: '#/components/headers/X-RateLimit-Limit-Day'
            X-RateLimit-Remaining-Day:
              $ref: '#/components/headers/X-RateLimit-Remaining-Day'
            X-RateLimit-Limit-Hour:
              $ref: '#/components/headers/X-RateLimit-Limit-Hour'
            X-RateLimit-Remaining-Hour:
              $ref: '#/components/headers/X-RateLimit-Remaining-Hour'
            X-RateLimit-Reset-Day:
              $ref: '#/components/headers/X-RateLimit-Reset-Day'
            X-RateLimit-Scope:
              $ref: '#/components/headers/X-RateLimit-Scope'
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
        '422':
          description: >-
            Validation error: `detail` plus one `errors` entry per rejected
            field. `idempotency_key_reused`: the `Idempotency-Key` was already
            used with a different request (another body, path or method). Not
            charged.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiDetailError'
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/X-RateLimit-Reset'
            X-RateLimit-Limit-Day:
              $ref: '#/components/headers/X-RateLimit-Limit-Day'
            X-RateLimit-Remaining-Day:
              $ref: '#/components/headers/X-RateLimit-Remaining-Day'
            X-RateLimit-Limit-Hour:
              $ref: '#/components/headers/X-RateLimit-Limit-Hour'
            X-RateLimit-Remaining-Hour:
              $ref: '#/components/headers/X-RateLimit-Remaining-Hour'
            X-RateLimit-Reset-Day:
              $ref: '#/components/headers/X-RateLimit-Reset-Day'
            X-RateLimit-Scope:
              $ref: '#/components/headers/X-RateLimit-Scope'
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
components:
  schemas:
    RinResponse:
      properties:
        processingTimeMs:
          type: number
          title: Processingtimems
          description: Server-side time in milliseconds, not billed on.
          default: 0
        creditsConsumed:
          type: number
          title: Creditsconsumed
          description: Credits charged for this call. 0 when not charged or refunded.
          default: 0
        rin:
          type: string
          title: Rin
        title:
          anyOf:
            - type: string
            - type: 'null'
          title: Title
        agencyCode:
          anyOf:
            - type: string
            - type: 'null'
          title: Agencycode
        status:
          anyOf:
            - type: string
            - type: 'null'
          title: Status
          description: >-
            Spine status: pending, final, final_only, ambiguous, withdrawn,
            umbrella_excluded.
        stage:
          anyOf:
            - type: string
            - type: 'null'
          title: Stage
          description: Stage of the newest Unified Agenda entry.
        isUmbrella:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Isumbrella
          description: >-
            An umbrella RIN covers many unrelated documents; no
            proposal-to-final pairing is claimed.
        umbrellaBasis:
          anyOf:
            - type: string
            - type: 'null'
          title: Umbrellabasis
        agenda:
          anyOf:
            - $ref: '#/components/schemas/AgendaSummary'
            - type: 'null'
        reviews:
          items:
            $ref: '#/components/schemas/ReviewItem'
          type: array
          title: Reviews
        dockets:
          items:
            $ref: '#/components/schemas/DocketLink'
          type: array
          title: Dockets
        federalRegister:
          items:
            $ref: '#/components/schemas/FederalRegisterLink'
          type: array
          title: Federalregister
        cfrParts:
          items:
            $ref: '#/components/schemas/CfrPartLink'
          type: array
          title: Cfrparts
        publicLaws:
          items:
            $ref: '#/components/schemas/SimpleLink'
          type: array
          title: Publiclaws
        craDisapprovals:
          items:
            $ref: '#/components/schemas/SimpleLink'
          type: array
          title: Cradisapprovals
        relatedRins:
          items:
            $ref: '#/components/schemas/SimpleLink'
          type: array
          title: Relatedrins
        coverage:
          items:
            $ref: '#/components/schemas/CoverageNote'
          type: array
          title: Coverage
          description: What we hold and do not hold for this RIN.
        asOf:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Asof
          description: When the cross-link spine was last built.
      type: object
      required:
        - rin
      title: RinResponse
      description: >-
        Response for `GET /us/rulemaking/rins/{rin}`: everything we hold about
        one rulemaking.
    ApiDetailError:
      properties:
        detail:
          type: string
          title: Detail
          description: >-
            Human-readable reason, safe to surface to an end user. Branch on the
            HTTP status rather than on this string: the wording is not part of
            the contract and may be reworded, but 401 (bad key), 402 (out of
            credits), 403 (missing scope), 404 (no such resource) and 429 (rate
            limited) are stable.
          examples:
            - Insufficient API credits.
        errors:
          anyOf:
            - items:
                $ref: '#/components/schemas/ApiFieldError'
              type: array
            - type: 'null'
          title: Errors
          description: 'Present on 422 only: every field that failed validation.'
        code:
          anyOf:
            - type: string
            - type: 'null'
          title: Code
          description: >-
            Stable machine code for the failure. Branch on this, not on
            `detail`. The set is open: tolerate values you do not know. Known
            values: authentication_required, invalid_api_key, api_key_expired,
            permission_denied, insufficient_scope, insufficient_credits,
            payment_required, rate_limited, quota_exceeded, daily_cap_exceeded,
            bad_request, validation_error, method_not_allowed,
            payload_too_large, unsupported_media_type, invalid_query,
            invalid_citation_input, section_not_found, resource_not_found,
            idempotency_key_reused, idempotency_in_progress,
            idempotency_replay_unavailable, upstream_timeout,
            service_unavailable, internal_error, conflict.
          examples:
            - insufficient_credits
          x-known-values:
            - authentication_required
            - invalid_api_key
            - api_key_expired
            - permission_denied
            - insufficient_scope
            - insufficient_credits
            - payment_required
            - rate_limited
            - quota_exceeded
            - daily_cap_exceeded
            - bad_request
            - validation_error
            - method_not_allowed
            - payload_too_large
            - unsupported_media_type
            - invalid_query
            - invalid_citation_input
            - section_not_found
            - resource_not_found
            - idempotency_key_reused
            - idempotency_in_progress
            - idempotency_replay_unavailable
            - upstream_timeout
            - service_unavailable
            - internal_error
            - conflict
        type:
          anyOf:
            - type: string
            - type: 'null'
          title: Type
          description: >-
            URL naming the error kind,
            `https://www.vaquill.ai/docs/errors/{code}`.
          examples:
            - https://www.vaquill.ai/docs/errors/insufficient_credits
        title:
          anyOf:
            - type: string
            - type: 'null'
          title: Title
          description: Short fixed English title for `code`.
          examples:
            - Insufficient credits
        status:
          anyOf:
            - type: integer
            - type: 'null'
          title: Status
          description: Echo of the HTTP status code.
          examples:
            - 402
        requestId:
          anyOf:
            - type: string
            - type: 'null'
          title: Requestid
          description: Equals the `X-Request-ID` response header. Quote it to support.
          examples:
            - 8d32789e-7b27-44f7-9523-424596e7a929
        retryable:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Retryable
          description: True only when repeating the same request is safe and may succeed.
          examples:
            - false
        retryAfterSeconds:
          anyOf:
            - type: integer
            - type: 'null'
          title: Retryafterseconds
          description: 'On 429 and 503 when `Retry-After` is set: the same value in seconds.'
          examples:
            - 30
        actId:
          anyOf:
            - type: string
            - type: 'null'
          title: Actid
          description: 'Section routes only, on a miss: the identifier that matched nothing.'
          examples:
            - UNKNOWN_99999
        reason:
          anyOf:
            - type: string
            - type: 'null'
          title: Reason
          description: >-
            Section routes only, on a miss: why nothing matched, for example
            `unsupported_jurisdiction` or `not_in_registry`. The set is open.
          examples:
            - not_in_registry
        didYouMean:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Didyoumean
          description: 'Section routes only, on a miss: identifiers worth trying instead.'
        sessionLawId:
          anyOf:
            - type: string
            - type: 'null'
          title: Sessionlawid
          description: >-
            Session-law routes only, on a miss: the id or citation that matched
            nothing.
          examples:
            - Pub. L. 117-58
        defaultSessionLawId:
          anyOf:
            - type: string
            - type: 'null'
          title: Defaultsessionlawid
          description: >-
            Session-law routes only, on an `ambiguous_citation` miss: the
            conventional reading, which is NOT chosen for you. `didYouMean`
            lists every candidate.
          examples:
            - us1_ca_2019_ch_123
        candidateCount:
          anyOf:
            - type: integer
            - type: 'null'
          title: Candidatecount
          description: 'Session-law routes only: how many laws the citation names in all.'
          examples:
            - 3
        truncated:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Truncated
          description: >-
            Session-law routes only: true when `didYouMean` lists fewer laws
            than `candidateCount`, so the list is not complete.
          examples:
            - false
        jurisdictions:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Jurisdictions
          description: >-
            Session-law routes only, on a `needs_jurisdiction` miss: every state
            where the citation exists. Name one in the citation, or pass
            `state`.
        sessionCoverage:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Sessioncoverage
          description: >-
            Session-law routes only, on a `session_not_fully_collected` miss:
            how much of the session we hold.
        creditsRequired:
          anyOf:
            - type: integer
            - type: 'null'
          title: Creditsrequired
          description: '402 only, when known: the credits this call needed.'
          examples:
            - 5
        creditsAvailable:
          anyOf:
            - type: integer
            - type: 'null'
          title: Creditsavailable
          description: '402 only, when known: the credits you can spend right now.'
          examples:
            - 2
        topUpHint:
          anyOf:
            - type: string
            - type: 'null'
          title: Topuphint
          description: '402 only, when known: where to add credits.'
          examples:
            - >-
              Add credits in the developer dashboard, then retry the same
              request.
      type: object
      required:
        - detail
      title: ApiDetailError
      description: >-
        Error envelope the API actually returns.


        Every error (400/401/402/403/404/405/422/429/5xx) carries a `detail`

        string, e.g. `{"detail": "Insufficient API credits."}`, on every mount
        of

        the API. A 422 adds `errors`, one entry per rejected field. Some 404s
        add

        endpoint-specific diagnosis beside `detail` (the statutes section routes

        add `actId`, `reason` and `didYouMean`); treat unknown keys as optional.
    AgendaSummary:
      properties:
        editions:
          type: integer
          title: Editions
          description: Editions of the Unified Agenda that carry this RIN.
        firstEdition:
          anyOf:
            - type: string
            - type: 'null'
          title: Firstedition
        lastEdition:
          anyOf:
            - type: string
            - type: 'null'
          title: Lastedition
        latest:
          anyOf:
            - $ref: '#/components/schemas/AgendaLatest'
            - type: 'null'
      type: object
      required:
        - editions
      title: AgendaSummary
    ReviewItem:
      properties:
        reviewKey:
          type: string
          title: Reviewkey
        stage:
          anyOf:
            - type: string
            - type: 'null'
          title: Stage
        stageNorm:
          anyOf:
            - type: string
            - type: 'null'
          title: Stagenorm
        title:
          anyOf:
            - type: string
            - type: 'null'
          title: Title
        dateReceived:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: Datereceived
        dateCompleted:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: Datecompleted
        decision:
          anyOf:
            - type: string
            - type: 'null'
          title: Decision
          description: OIRA's decision as printed.
        economicallySignificant:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Economicallysignificant
        status:
          anyOf:
            - type: string
            - type: 'null'
          title: Status
          description: '`pending` or `concluded`.'
        agencyAcronym:
          anyOf:
            - type: string
            - type: 'null'
          title: Agencyacronym
        meetingCount:
          type: integer
          title: Meetingcount
          default: 0
        linkStatus:
          anyOf:
            - type: string
            - type: 'null'
          title: Linkstatus
          description: >-
            `linked`, `ambiguous`, `umbrella_rin`, `no_candidate`,
            `no_fr_for_rin`, `pending` or `not_applicable`.
        frActId:
          anyOf:
            - type: string
            - type: 'null'
          title: Fractid
          description: Federal Register act id, set only when `linkStatus` is `linked`.
        frCitation:
          anyOf:
            - type: string
            - type: 'null'
          title: Frcitation
        frPublicationDate:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: Frpublicationdate
      type: object
      required:
        - reviewKey
      title: ReviewItem
    DocketLink:
      properties:
        docketId:
          type: string
          title: Docketid
        agencyId:
          anyOf:
            - type: string
            - type: 'null'
          title: Agencyid
        docketType:
          anyOf:
            - type: string
            - type: 'null'
          title: Dockettype
        title:
          anyOf:
            - type: string
            - type: 'null'
          title: Title
        commentCount:
          anyOf:
            - type: integer
            - type: 'null'
          title: Commentcount
        lastModifiedAt:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Lastmodifiedat
        documentCount:
          type: integer
          title: Documentcount
          default: 0
        openDocumentCount:
          type: integer
          title: Opendocumentcount
          default: 0
        sourceUrl:
          type: string
          title: Sourceurl
      type: object
      required:
        - docketId
        - sourceUrl
      title: DocketLink
    FederalRegisterLink:
      properties:
        documentNumber:
          type: string
          title: Documentnumber
        role:
          type: string
          enum:
            - proposed
            - final
            - correction
            - extension
            - other
          title: Role
        actId:
          anyOf:
            - type: string
            - type: 'null'
          title: Actid
        citation:
          anyOf:
            - type: string
            - type: 'null'
          title: Citation
        publicationDate:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: Publicationdate
        title:
          anyOf:
            - type: string
            - type: 'null'
          title: Title
        docKind:
          anyOf:
            - type: string
            - type: 'null'
          title: Dockind
        action:
          anyOf:
            - type: string
            - type: 'null'
          title: Action
        basis:
          type: string
          title: Basis
        quality:
          type: string
          enum:
            - verified
            - candidate
            - ambiguous
          title: Quality
      type: object
      required:
        - documentNumber
        - role
        - basis
        - quality
      title: FederalRegisterLink
    CfrPartLink:
      properties:
        cfrTitle:
          type: integer
          title: Cfrtitle
        cfrPart:
          type: string
          title: Cfrpart
        basis:
          type: string
          title: Basis
        quality:
          type: string
          enum:
            - verified
            - candidate
            - ambiguous
          title: Quality
      type: object
      required:
        - cfrTitle
        - cfrPart
        - basis
        - quality
      title: CfrPartLink
    SimpleLink:
      properties:
        key:
          type: string
          title: Key
        basis:
          type: string
          title: Basis
        quality:
          type: string
          enum:
            - verified
            - candidate
            - ambiguous
          title: Quality
      type: object
      required:
        - key
        - basis
        - quality
      title: SimpleLink
    CoverageNote:
      properties:
        source:
          type: string
          title: Source
        held:
          type: boolean
          title: Held
        note:
          anyOf:
            - type: string
            - type: 'null'
          title: Note
      type: object
      required:
        - source
        - held
      title: CoverageNote
    ApiFieldError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Loc
          description: >-
            Where the bad value is: `body`, `query` or `path`, then the
            parameter name exactly as you send it (camelCase), then list
            indexes. A bare `["body"]` means the body as a whole was not a JSON
            object.
          examples:
            - - body
              - query
        msg:
          type: string
          title: Msg
          description: What is wrong with the value, in plain English.
          examples:
            - Field required
        type:
          type: string
          title: Type
          description: >-
            Machine-readable error kind, e.g. `missing`, `literal_error`,
            `json_invalid`.
          examples:
            - missing
      type: object
      required:
        - loc
        - msg
        - type
      title: ApiFieldError
      description: One rejected field in a 422 response.
    AgendaLatest:
      properties:
        editionId:
          type: string
          title: Editionid
          description: Unified Agenda edition id `YYYYMM`.
          examples:
            - '202510'
        season:
          anyOf:
            - type: string
            - type: 'null'
          title: Season
        year:
          anyOf:
            - type: integer
            - type: 'null'
          title: Year
        runDate:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: Rundate
        title:
          anyOf:
            - type: string
            - type: 'null'
          title: Title
        stage:
          anyOf:
            - type: string
            - type: 'null'
          title: Stage
        priority:
          anyOf:
            - type: string
            - type: 'null'
          title: Priority
        rinStatus:
          anyOf:
            - type: string
            - type: 'null'
          title: Rinstatus
        major:
          anyOf:
            - type: string
            - type: 'null'
          title: Major
        agencyCode:
          anyOf:
            - type: string
            - type: 'null'
          title: Agencycode
        agencyName:
          anyOf:
            - type: string
            - type: 'null'
          title: Agencyname
        agencyAcronym:
          anyOf:
            - type: string
            - type: 'null'
          title: Agencyacronym
        parentAgencyName:
          anyOf:
            - type: string
            - type: 'null'
          title: Parentagencyname
        furtherInfoUrl:
          anyOf:
            - type: string
            - type: 'null'
          title: Furtherinfourl
          description: Served only when it is an official (.gov or .mil) link.
        publicCommentUrl:
          anyOf:
            - type: string
            - type: 'null'
          title: Publiccommenturl
        sourceUrl:
          anyOf:
            - type: string
            - type: 'null'
          title: Sourceurl
      type: object
      required:
        - editionId
      title: AgendaLatest
  headers:
    X-RateLimit-Limit:
      description: Requests allowed in the current per-minute window.
      schema:
        type: integer
    X-RateLimit-Remaining:
      description: Requests left in the current per-minute window.
      schema:
        type: integer
    X-RateLimit-Reset:
      description: Unix timestamp at which the per-minute window resets.
      schema:
        type: integer
    X-RateLimit-Limit-Day:
      description: Requests allowed per day (the slow-drip backstop).
      schema:
        type: integer
    X-RateLimit-Remaining-Day:
      description: Requests left in the daily window.
      schema:
        type: integer
    X-RateLimit-Limit-Hour:
      description: Requests allowed per hour.
      schema:
        type: integer
    X-RateLimit-Remaining-Hour:
      description: Requests left in the hourly window.
      schema:
        type: integer
    X-RateLimit-Reset-Day:
      description: Unix timestamp at which the daily window resets (next UTC midnight).
      schema:
        type: integer
    X-RateLimit-Scope:
      description: >-
        Which bucket the limits above describe: `key` (this API key's own
        allowance) or `ip` (the shared per-address ceiling, also used when the
        key did not validate). Absent on requests without an API key.
      schema:
        type: string
        enum:
          - key
          - ip
    X-Request-ID:
      description: Correlation id of this request. Quote it when contacting support.
      schema:
        type: string
    Retry-After:
      description: Seconds to wait before retrying.
      schema:
        type: integer
  responses:
    Unauthorized3:
      description: Missing, invalid or revoked API key. Not charged.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiDetailError'
      headers:
        X-RateLimit-Limit:
          $ref: '#/components/headers/X-RateLimit-Limit'
        X-RateLimit-Remaining:
          $ref: '#/components/headers/X-RateLimit-Remaining'
        X-RateLimit-Reset:
          $ref: '#/components/headers/X-RateLimit-Reset'
        X-RateLimit-Limit-Day:
          $ref: '#/components/headers/X-RateLimit-Limit-Day'
        X-RateLimit-Remaining-Day:
          $ref: '#/components/headers/X-RateLimit-Remaining-Day'
        X-RateLimit-Limit-Hour:
          $ref: '#/components/headers/X-RateLimit-Limit-Hour'
        X-RateLimit-Remaining-Hour:
          $ref: '#/components/headers/X-RateLimit-Remaining-Hour'
        X-RateLimit-Reset-Day:
          $ref: '#/components/headers/X-RateLimit-Reset-Day'
        X-RateLimit-Scope:
          $ref: '#/components/headers/X-RateLimit-Scope'
        X-Request-ID:
          $ref: '#/components/headers/X-Request-ID'
    InsufficientCredits2:
      description: Insufficient credits. Nothing was done and nothing was charged.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiDetailError'
      headers:
        X-RateLimit-Limit:
          $ref: '#/components/headers/X-RateLimit-Limit'
        X-RateLimit-Remaining:
          $ref: '#/components/headers/X-RateLimit-Remaining'
        X-RateLimit-Reset:
          $ref: '#/components/headers/X-RateLimit-Reset'
        X-RateLimit-Limit-Day:
          $ref: '#/components/headers/X-RateLimit-Limit-Day'
        X-RateLimit-Remaining-Day:
          $ref: '#/components/headers/X-RateLimit-Remaining-Day'
        X-RateLimit-Limit-Hour:
          $ref: '#/components/headers/X-RateLimit-Limit-Hour'
        X-RateLimit-Remaining-Hour:
          $ref: '#/components/headers/X-RateLimit-Remaining-Hour'
        X-RateLimit-Reset-Day:
          $ref: '#/components/headers/X-RateLimit-Reset-Day'
        X-RateLimit-Scope:
          $ref: '#/components/headers/X-RateLimit-Scope'
        X-Request-ID:
          $ref: '#/components/headers/X-Request-ID'
    RateLimited:
      description: Rate limit exceeded.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiDetailError'
      headers:
        X-RateLimit-Limit:
          $ref: '#/components/headers/X-RateLimit-Limit'
        X-RateLimit-Remaining:
          $ref: '#/components/headers/X-RateLimit-Remaining'
        X-RateLimit-Reset:
          $ref: '#/components/headers/X-RateLimit-Reset'
        X-RateLimit-Limit-Day:
          $ref: '#/components/headers/X-RateLimit-Limit-Day'
        X-RateLimit-Remaining-Day:
          $ref: '#/components/headers/X-RateLimit-Remaining-Day'
        X-RateLimit-Limit-Hour:
          $ref: '#/components/headers/X-RateLimit-Limit-Hour'
        X-RateLimit-Remaining-Hour:
          $ref: '#/components/headers/X-RateLimit-Remaining-Hour'
        X-RateLimit-Reset-Day:
          $ref: '#/components/headers/X-RateLimit-Reset-Day'
        X-RateLimit-Scope:
          $ref: '#/components/headers/X-RateLimit-Scope'
        X-Request-ID:
          $ref: '#/components/headers/X-Request-ID'
        Retry-After:
          $ref: '#/components/headers/Retry-After'
    InternalError:
      description: >-
        Internal error (`internal_error`, retryable). Any credits charged for
        the call are refunded; retry with backoff and quote `requestId` to
        support if it persists.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiDetailError'
      headers:
        X-RateLimit-Limit:
          $ref: '#/components/headers/X-RateLimit-Limit'
        X-RateLimit-Remaining:
          $ref: '#/components/headers/X-RateLimit-Remaining'
        X-RateLimit-Reset:
          $ref: '#/components/headers/X-RateLimit-Reset'
        X-RateLimit-Limit-Day:
          $ref: '#/components/headers/X-RateLimit-Limit-Day'
        X-RateLimit-Remaining-Day:
          $ref: '#/components/headers/X-RateLimit-Remaining-Day'
        X-RateLimit-Limit-Hour:
          $ref: '#/components/headers/X-RateLimit-Limit-Hour'
        X-RateLimit-Remaining-Hour:
          $ref: '#/components/headers/X-RateLimit-Remaining-Hour'
        X-RateLimit-Reset-Day:
          $ref: '#/components/headers/X-RateLimit-Reset-Day'
        X-RateLimit-Scope:
          $ref: '#/components/headers/X-RateLimit-Scope'
        X-Request-ID:
          $ref: '#/components/headers/X-Request-ID'
    ServiceUnavailable:
      description: The rulemaking database is unavailable. Refunded.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiDetailError'
      headers:
        X-RateLimit-Limit:
          $ref: '#/components/headers/X-RateLimit-Limit'
        X-RateLimit-Remaining:
          $ref: '#/components/headers/X-RateLimit-Remaining'
        X-RateLimit-Reset:
          $ref: '#/components/headers/X-RateLimit-Reset'
        X-RateLimit-Limit-Day:
          $ref: '#/components/headers/X-RateLimit-Limit-Day'
        X-RateLimit-Remaining-Day:
          $ref: '#/components/headers/X-RateLimit-Remaining-Day'
        X-RateLimit-Limit-Hour:
          $ref: '#/components/headers/X-RateLimit-Limit-Hour'
        X-RateLimit-Remaining-Hour:
          $ref: '#/components/headers/X-RateLimit-Remaining-Hour'
        X-RateLimit-Reset-Day:
          $ref: '#/components/headers/X-RateLimit-Reset-Day'
        X-RateLimit-Scope:
          $ref: '#/components/headers/X-RateLimit-Scope'
        X-Request-ID:
          $ref: '#/components/headers/X-Request-ID'
  securitySchemes:
    ApiKeyAuth:
      type: http
      scheme: bearer
      bearerFormat: vq_key_*
      description: >-
        API key issued from the developer dashboard. Pass as `Authorization:
        Bearer vq_key_...` (preferred).
    ApiKeyHeader:
      type: apiKey
      in: header
      name: X-API-Key
      description: >-
        The same API key as a bare header value: `X-API-Key: vq_key_...`.
        Equivalent to the Bearer form.

````

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