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

# Planalto Law

> Retrieve one Brazilian federal act by the `law_id` the search returns (`lei-13105-2015`, `cf-1988`): its current consolidated text, whole or one `article`, its ementa, signature and publication dates, whether it was revoked and by what, a medida provisória's standing and the law it became, the later acts that amended it article by article, and the earlier acts it amended in turn. The text comes back a character range at a time (`offset`, `limit`); follow `next_offset` until `has_more` is false.

**Dataset endpoint**: answers from the whole source in milliseconds and carries `as_of`.



## OpenAPI

````yaml /api-reference/openapi.json post /br/planalto/law/v1
openapi: 3.1.0
info:
  title: Croma Marketplace API
  version: 1.0.0
  description: >-
    Government-data APIs for Colombia, Peru, Mexico, and global web search.
    Croma normalizes public-sector data into structured JSON for product teams
    and AI agents.


    Every operation is a POST with a JSON body and an organization API key as a
    bearer token; every operation is an idempotent lookup and accepts an
    optional `Idempotency-Key` header. Paths carry their major version (`/v1`);
    the versioning and deprecation policy, including the `Deprecation` and
    `Sunset` headers a retiring endpoint sends, is at
    https://docs.usecroma.com/versioning. Rate limits are per organization and
    reported on every response (`RateLimit-Policy`, `X-RateLimit-*`):
    https://docs.usecroma.com/rate-limits.
  termsOfService: https://usecroma.com/en/terms
  contact:
    name: Croma support
    url: https://usecroma.com/en/support
    email: tomas@usecroma.com
servers:
  - url: https://api.croma.run
security: []
paths:
  /br/planalto/law/v1:
    post:
      tags:
        - Brazil
        - Presidência da República (Planalto)
      summary: Planalto Law
      description: >-
        Retrieve one Brazilian federal act by the `law_id` the search returns
        (`lei-13105-2015`, `cf-1988`): its current consolidated text, whole or
        one `article`, its ementa, signature and publication dates, whether it
        was revoked and by what, a medida provisória's standing and the law it
        became, the later acts that amended it article by article, and the
        earlier acts it amended in turn. The text comes back a character range
        at a time (`offset`, `limit`); follow `next_offset` until `has_more` is
        false.


        **Dataset endpoint**: answers from the whole source in milliseconds and
        carries `as_of`.
      operationId: planalto_law
      parameters:
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - law_id
              properties:
                law_id:
                  type: string
                  pattern: >-
                    ^(?:cf-\d{4}|(?:lei|lcp|ldl|del|emc|ecr|mpv|dec)-[0-9a-z]+(?:-[0-9a-z]+)*-\d{4})$
                  description: >-
                    Id del acto, p. ej. `lei-13105-2015` o `cf-1988`, como lo
                    devuelve la búsqueda.
                article:
                  type: string
                  pattern: ^(?:\d[\d.]{0,6}\s*[º°o]?\s*(?:-?\s*[A-Za-z]{1,2})?)?$
                  default: ''
                  description: >-
                    Número de un artículo, p. ej. `12`, `1.029` u `8-A`, para
                    devolver solo ese artículo (opcional).
                offset:
                  type: integer
                  minimum: 0
                  maximum: 10000000
                  default: 0
                  description: >-
                    First character of the range to return. Pass the previous
                    response's `next_offset` to continue reading.
                limit:
                  type: integer
                  minimum: 1000
                  maximum: 1000000
                  default: 200000
                  description: Maximum characters to return (1000-1000000).
              additionalProperties: false
            example:
              law_id: lei-13105-2015
              article: '1.029'
      responses:
        '200':
          description: Successful response
          headers:
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            Idempotency-Key:
              $ref: '#/components/headers/Idempotency-Key'
            Deprecation:
              $ref: '#/components/headers/Deprecation'
            Sunset:
              $ref: '#/components/headers/Sunset'
            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-Cache:
              $ref: '#/components/headers/X-Cache'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlanaltoLawResponse'
        '400':
          description: Invalid request body
          headers:
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            Idempotency-Key:
              $ref: '#/components/headers/Idempotency-Key'
            Deprecation:
              $ref: '#/components/headers/Deprecation'
            Sunset:
              $ref: '#/components/headers/Sunset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '401':
          description: Missing or invalid API key
          headers:
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            Idempotency-Key:
              $ref: '#/components/headers/Idempotency-Key'
            Deprecation:
              $ref: '#/components/headers/Deprecation'
            Sunset:
              $ref: '#/components/headers/Sunset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '429':
          description: Rate limit exceeded
          headers:
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            Idempotency-Key:
              $ref: '#/components/headers/Idempotency-Key'
            Deprecation:
              $ref: '#/components/headers/Deprecation'
            Sunset:
              $ref: '#/components/headers/Sunset'
            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'
            Retry-After:
              $ref: '#/components/headers/Retry-After'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '500':
          description: Internal error
          headers:
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            Idempotency-Key:
              $ref: '#/components/headers/Idempotency-Key'
            Deprecation:
              $ref: '#/components/headers/Deprecation'
            Sunset:
              $ref: '#/components/headers/Sunset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
      security:
        - bearerAuth: []
      externalDocs:
        description: Interactive documentation and examples
        url: https://docs.usecroma.com/guides/brazil/planalto
components:
  parameters:
    IdempotencyKey:
      name: Idempotency-Key
      in: header
      required: false
      description: >-
        Optional client-chosen key for this request (any string up to 255
        characters, e.g. a UUID). Every Croma operation is an idempotent lookup:
        repeating a request with the same body returns the same result and
        creates nothing, so retrying after a timeout or network failure is
        always safe. The key is echoed back in the `Idempotency-Key` response
        header so you can correlate a retry with its first attempt. Each attempt
        that reaches the API counts against the rate limit.
      schema:
        type: string
        maxLength: 255
        example: 0f8e9a42-6b7c-4d1e-9a3f-2c5d7e8f9a0b
  headers:
    X-Request-Id:
      description: Unique id for the request (req_…). Include it in support reports.
      schema:
        type: string
    RateLimit-Policy:
      description: >-
        Quota policy for this endpoint as an IETF RateLimit-Policy structured
        field, e.g. `"default";q=100;w=86400` (100 requests per 86400-second
        window per organization). Endpoints with an extra hourly ceiling list
        both policies, e.g. `"webSearch";q=10;w=3600, "default";q=100;w=86400`.
        Present on every response, including 401 and 429.
      schema:
        type: string
        example: '"default";q=100;w=86400'
    Idempotency-Key:
      description: >-
        The `Idempotency-Key` the request carried, echoed back unchanged. Absent
        when the request sent none.
      schema:
        type: string
    Deprecation:
      description: >-
        Present only on an endpoint version scheduled for removal: the date the
        deprecation took effect (RFC 9745). A `Sunset` header and a `Link` with
        `rel="successor-version"` accompany it. Policy:
        https://docs.usecroma.com/versioning
      schema:
        type: string
        example: '@1767225600'
    Sunset:
      description: >-
        Present only on an endpoint version scheduled for removal: the date
        after which it answers 410 (RFC 8594). Announced in the changelog at
        least 90 days ahead.
      schema:
        type: string
        format: date-time
        example: Wed, 01 Apr 2026 00:00:00 GMT
    X-RateLimit-Limit:
      description: Requests allowed in the current window.
      schema:
        type: integer
    X-RateLimit-Remaining:
      description: Requests left before you are throttled.
      schema:
        type: integer
    X-RateLimit-Reset:
      description: ISO 8601 timestamp when the window resets.
      schema:
        type: string
        format: date-time
    X-Cache:
      description: HIT or MISS. Cached hits still count against your quota.
      schema:
        type: string
        enum:
          - HIT
          - MISS
    Retry-After:
      description: Seconds to wait before retrying.
      schema:
        type: integer
  schemas:
    PlanaltoLawResponse:
      type: object
      required:
        - data
      properties:
        data:
          $ref: '#/components/schemas/PlanaltoLawData'
    ApiError:
      type: object
      required:
        - error
      properties:
        error:
          type: object
          required:
            - type
            - code
            - message
          properties:
            type:
              type: string
              description: >-
                Broad category: invalid_request_error, authentication_error,
                not_found_error, rate_limit_error, upstream_error, api_error.
            code:
              type: string
              description: Machine-readable specific code.
            message:
              type: string
              description: Human-readable explanation, safe to surface in UI.
            param:
              type: string
              description: Field that triggered the error. Present on validation errors.
            details:
              type: object
              description: Free-form structured detail.
    PlanaltoLawData:
      type: object
      properties:
        as_of:
          anyOf:
            - type: string
            - type: 'null'
          description: How current the data in this response is.
        found:
          type: boolean
        law_id:
          type: string
        article:
          anyOf:
            - type: string
            - type: 'null'
          description: The article asked for, as the text numbers it. Null when none was.
        article_found:
          anyOf:
            - type: boolean
            - type: 'null'
          description: >-
            Whether that article is in the text. Null when no article was asked
            for.
        law:
          anyOf:
            - type: object
              properties:
                id:
                  type: string
                  description: >-
                    Croma's id for the act: its kind, number and signature year,
                    e.g. `lei-13105-2015`; `cf-1988` for the Constitution.
                type:
                  type: string
                  enum:
                    - constitution
                    - constitutional_amendment
                    - complementary_law
                    - ordinary_law
                    - delegated_law
                    - decree_law
                    - decree
                    - provisional_measure
                  description: >-
                    `constitution`, `constitutional_amendment` (including the
                    six revision amendments of 1994), `complementary_law`,
                    `ordinary_law`, `delegated_law`, `decree_law`, `decree` or
                    `provisional_measure` (a medida provisória).
                type_label:
                  type: string
                  description: >-
                    The kind as Brazilian law names it: "Lei", "Lei
                    Complementar", "Decreto-Lei", "Emenda Constitucional" and so
                    on.
                number:
                  type: string
                  description: >-
                    The act's number as it is cited, e.g. "13.105" or "1.234-A".
                    Empty for the Constitution.
                year:
                  type: number
                  description: The year the act was signed.
                name:
                  type: string
                  description: >-
                    The act's full citation, e.g. "Lei nº 13.105, de 16 de março
                    de 2015".
                summary:
                  anyOf:
                    - type: string
                    - type: 'null'
                  description: >-
                    The ementa: the act's own one-line statement of what it
                    does, e.g. "Código de Processo Civil.".
                signed_on:
                  type: string
                  description: '`yyyy-mm-dd` the act was signed.'
                published_on:
                  anyOf:
                    - type: string
                    - type: 'null'
                  description: >-
                    `yyyy-mm-dd` it was published in the Diário Oficial da
                    União. Null for the oldest acts, published before the DOU.
                revoked:
                  type: boolean
                  description: >-
                    True when the Presidência marks the whole act as revoked.
                    False does not prove the act is in force: an act can be
                    superseded without a note saying so.
                revoked_by:
                  anyOf:
                    - type: object
                      properties:
                        law_id:
                          anyOf:
                            - type: string
                            - type: 'null'
                          description: >-
                            Id of the revoking act, to look it up in turn. Null
                            when the citation names an instrument outside this
                            dataset's id scheme.
                        name:
                          type: string
                          description: >-
                            How the revoking act is cited, e.g. "Lei nº 13.105,
                            de 2015".
                      required:
                        - law_id
                        - name
                    - type: 'null'
                  description: >-
                    The act that revoked this one, when `revoked` is true and
                    the note names it.
                amended_by:
                  type: array
                  items:
                    type: object
                    properties:
                      law_id:
                        type: string
                        description: >-
                          Id of the other act, e.g. `lei-13256-2016`. It may be
                          an act this dataset does not hold yet (a medida
                          provisória or a decreto), so a lookup can come back
                          `found: false`.
                      name:
                        type: string
                        description: >-
                          How the other act is cited, e.g. "Lei nº 13.256, de
                          2016".
                      changes:
                        type: array
                        items:
                          type: string
                          enum:
                            - amended
                            - added
                            - revoked
                            - renumbered
                        description: >-
                          What it did: `amended` (gave a provision new wording),
                          `added` (inserted one), `revoked`, `renumbered`.
                      articles:
                        type: array
                        items:
                          type: string
                        description: >-
                          The articles it touched, as they are numbered, e.g.
                          ["12", "1.029", "8-A"]. Empty when every change it
                          made sits outside an article (a heading, an annex).
                    required:
                      - law_id
                      - name
                      - changes
                      - articles
                  description: >-
                    Later acts whose changes the text records in its notes, most
                    recent first, each with the articles it touched.
                official_url:
                  type: string
                  description: The act's page at the Presidência.
                consolidated_url:
                  anyOf:
                    - type: string
                    - type: 'null'
                  description: >-
                    The Presidência's consolidated version of the act, when it
                    keeps one apart from the original.
                veto_message_url:
                  anyOf:
                    - type: string
                    - type: 'null'
                  description: >-
                    The presidential veto message, when the act was partly
                    vetoed.
                measure_status:
                  anyOf:
                    - type: string
                      enum:
                        - pending
                        - converted
                        - lapsed
                        - rejected
                        - prejudiced
                        - revoked
                    - type: 'null'
                  description: >-
                    Where a medida provisória stands: `pending` (before
                    Congress), `converted` (into a law, named in
                    `converted_into`), `lapsed` (it expired unvoted),
                    `rejected`, `prejudiced` (set aside without a vote) or
                    `revoked`. Null for every other kind, and for the pre-2001
                    medidas provisórias whose index records only their chain of
                    monthly editions.
                measure_status_note:
                  anyOf:
                    - type: string
                    - type: 'null'
                  description: >-
                    A medida provisória's standing in the Presidência's own
                    words, e.g. "Convertida Lei nº 15.347, de 2026" or "Vigência
                    encerrada Ato nº 101, de 2024".
                converted_into:
                  anyOf:
                    - type: object
                      properties:
                        law_id:
                          anyOf:
                            - type: string
                            - type: 'null'
                          description: Id of the law, to look it up in turn.
                        name:
                          type: string
                          description: How the law is cited, e.g. "Lei nº 15.347, de 2026".
                      required:
                        - law_id
                        - name
                    - type: 'null'
                  description: The law a medida provisória was converted into.
                amends:
                  type: array
                  items:
                    type: object
                    properties:
                      law_id:
                        type: string
                        description: >-
                          Id of the other act, e.g. `lei-13256-2016`. It may be
                          an act this dataset does not hold yet (a medida
                          provisória or a decreto), so a lookup can come back
                          `found: false`.
                      name:
                        type: string
                        description: >-
                          How the other act is cited, e.g. "Lei nº 13.256, de
                          2016".
                      changes:
                        type: array
                        items:
                          type: string
                          enum:
                            - amended
                            - added
                            - revoked
                            - renumbered
                        description: >-
                          What it did: `amended` (gave a provision new wording),
                          `added` (inserted one), `revoked`, `renumbered`.
                      articles:
                        type: array
                        items:
                          type: string
                        description: >-
                          The articles it touched, as they are numbered, e.g.
                          ["12", "1.029", "8-A"]. Empty when every change it
                          made sits outside an article (a heading, an annex).
                    required:
                      - law_id
                      - name
                      - changes
                      - articles
                  description: >-
                    Earlier acts this one changed, as their own notes record it,
                    each with the articles it touched there.
                content:
                  anyOf:
                    - type: object
                      properties:
                        text:
                          type: string
                          description: The requested character range of the text.
                        offset:
                          type: number
                          description: First character of the range.
                        total_length:
                          type: number
                          description: >-
                            Length of the whole text, or of the requested
                            article, in characters.
                        has_more:
                          type: boolean
                          description: Whether the text continues past this range.
                        next_offset:
                          anyOf:
                            - type: number
                            - type: 'null'
                          description: >-
                            Pass this back as `offset` to read on. Null at the
                            end.
                      required:
                        - text
                        - offset
                        - total_length
                        - has_more
                        - next_offset
                    - type: 'null'
                  description: >-
                    A range of the act's text (or of one article), or null when
                    there is none to return.
              required:
                - id
                - type
                - type_label
                - number
                - year
                - name
                - summary
                - signed_on
                - published_on
                - revoked
                - revoked_by
                - amended_by
                - official_url
                - consolidated_url
                - veto_message_url
                - measure_status
                - measure_status_note
                - converted_into
                - amends
                - content
            - type: 'null'
      required:
        - as_of
        - found
        - law_id
        - article
        - article_found
        - law
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: 'Use Authorization: Bearer YOUR_API_KEY'

````