> ## 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.

# Corte Suprema de Justicia de El Salvador Law

> Retrieve one legal text of El Salvador by its `id` from a search result (e.g. `558819`, the Código Penal) or its `official_url`: its consolidated text, status, every amendment with its act and Croma's copy of its own text, the rulings related to it, and every version of its document Croma has kept. 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 /sv/csj-sv/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:
  /sv/csj-sv/law/v1:
    post:
      tags:
        - El Salvador
        - Corte Suprema de Justicia de El Salvador
      summary: Corte Suprema de Justicia de El Salvador Law
      description: >-
        Retrieve one legal text of El Salvador by its `id` from a search result
        (e.g. `558819`, the Código Penal) or its `official_url`: its
        consolidated text, status, every amendment with its act and Croma's copy
        of its own text, the rulings related to it, and every version of its
        document Croma has kept. 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: csj_sv_law
      parameters:
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - law_id
              properties:
                law_id:
                  type: string
                  minLength: 1
                  maxLength: 600
                  description: >-
                    The act's `id` from a search result, e.g. `558819`. Its
                    `official_url` works too.
                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: '558819'
      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/CsjSvLawResponse'
        '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'
        '502':
          description: Upstream source returned an 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/el-salvador/csj
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 spend no credits, but still count toward an
        hourly ceiling.
      schema:
        type: string
        enum:
          - HIT
          - MISS
    Retry-After:
      description: Seconds to wait before retrying.
      schema:
        type: integer
  schemas:
    CsjSvLawResponse:
      type: object
      required:
        - data
      properties:
        data:
          $ref: '#/components/schemas/CsjSvLawData'
    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.
    CsjSvLawData:
      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
        law:
          anyOf:
            - type: object
              properties:
                id:
                  type: string
                  description: >-
                    The document's permanent number at the Corte Suprema's
                    documentation center, e.g. "558819" (the Código Penal).
                title:
                  type: string
                  description: The document's name, e.g. "CODIGO PENAL".
                type:
                  anyOf:
                    - type: string
                    - type: 'null'
                  description: >-
                    The kind of document: "Decretos Legislativos", "Decretos
                    Ejecutivos", "Decretos Institucionales", "Acuerdos",
                    "Reglamentos", "Ordenanzas Municipales" or "Documentos
                    Generales".
                nature:
                  anyOf:
                    - type: string
                    - type: 'null'
                  description: >-
                    The legal nature of the act, e.g. "Decreto Legislativo",
                    "Decreto Municipal", "Acuerdo Ejecutivo".
                number:
                  anyOf:
                    - type: string
                    - type: 'null'
                  description: The decree or agreement number, e.g. "1030".
                status:
                  anyOf:
                    - type: string
                      enum:
                        - vigente
                        - caducada
                        - derogada
                    - type: 'null'
                  description: >-
                    Whether the document is in force: `vigente`, `caducada`
                    (expired) or `derogada` (repealed), as the documentation
                    center records it.
                subject:
                  anyOf:
                    - type: string
                    - type: 'null'
                  description: >-
                    The area of law, e.g. "Penal", "Tributaria",
                    "Administrativa".
                issuing_body:
                  anyOf:
                    - type: string
                    - type: 'null'
                  description: >-
                    Who issued it, e.g. "ORGANO LEGISLATIVO", "ORGANO EJECUTIVO
                    (Ministerio de Salud)".
                state_organ:
                  anyOf:
                    - type: string
                    - type: 'null'
                  description: >-
                    The branch of the state, when recorded: "Legislativo",
                    "Ejecutivo", "Judicial" or "Instituciones autónomas".
                municipality:
                  anyOf:
                    - type: string
                    - type: 'null'
                  description: The municipality of an ordinance.
                department:
                  anyOf:
                    - type: string
                    - type: 'null'
                  description: The department of an ordinance.
                issue_date:
                  anyOf:
                    - type: string
                    - type: 'null'
                  description: '`yyyy-mm-dd` the act was issued.'
                publication_date:
                  type: string
                  description: '`yyyy-mm-dd` the act was published in the Diario Oficial.'
                year:
                  type: number
                  description: The year of publication in the Diario Oficial.
                gazette_number:
                  anyOf:
                    - type: string
                    - type: 'null'
                  description: The number of the Diario Oficial that published it.
                gazette_volume:
                  anyOf:
                    - type: string
                    - type: 'null'
                  description: The volume (tomo) of the Diario Oficial that published it.
                considerations:
                  anyOf:
                    - type: string
                    - type: 'null'
                  description: The documentation center's summary of what the act is for.
                reforms:
                  type: array
                  items:
                    type: object
                    properties:
                      order:
                        type: number
                        description: >-
                          The amendment's place in the documentation center's
                          list, 1 for the oldest.
                      decree:
                        anyOf:
                          - type: string
                          - type: 'null'
                        description: >-
                          The amending act as the documentation center cites it,
                          e.g. "Decreto Legislativo No. 537 de fecha 26 de marzo
                          de 2026, publicado en el Diario Oficial No. 61, Tomo
                          450 de fecha 27 de marzo de 2026".
                      decree_number:
                        anyOf:
                          - type: string
                          - type: 'null'
                        description: The amending act's number, e.g. "537".
                      issuing_body:
                        anyOf:
                          - type: string
                          - type: 'null'
                        description: >-
                          Who issued the amending act, e.g. "ORGANO
                          LEGISLATIVO".
                      decree_date:
                        anyOf:
                          - type: string
                          - type: 'null'
                        description: '`yyyy-mm-dd` the amending act was issued.'
                      publication_date:
                        anyOf:
                          - type: string
                          - type: 'null'
                        description: >-
                          `yyyy-mm-dd` the amending act was published in the
                          Diario Oficial.
                      gazette_number:
                        anyOf:
                          - type: string
                          - type: 'null'
                        description: The number of the Diario Oficial that published it.
                      gazette_volume:
                        anyOf:
                          - type: string
                          - type: 'null'
                        description: >-
                          The volume (tomo) of the Diario Oficial that published
                          it.
                      document_url:
                        anyOf:
                          - type: string
                          - type: 'null'
                        description: >-
                          Croma's copy of the amending act's text, byte for byte
                          as the documentation center published it. Null when it
                          publishes none.
                      source_document_url:
                        anyOf:
                          - type: string
                          - type: 'null'
                        description: >-
                          The amending act's text on the Corte Suprema's own
                          site. Null when it links none.
                    required:
                      - order
                      - decree
                      - decree_number
                      - issuing_body
                      - decree_date
                      - publication_date
                      - gazette_number
                      - gazette_volume
                      - document_url
                      - source_document_url
                  description: >-
                    Every amendment the documentation center records, oldest
                    first, each with its act, dates and its own text.
                reform_count:
                  type: number
                  description: How many amendments the documentation center records.
                related_rulings:
                  type: array
                  items:
                    type: string
                  description: >-
                    The `id`s of rulings of the Corte Suprema de Justicia de El
                    Salvador the documentation center relates to this act (read
                    them with the ruling endpoint).
                other_fields:
                  type: array
                  items:
                    type: object
                    properties:
                      label:
                        type: string
                        description: The field's name as the court's record prints it.
                      value:
                        type: string
                    required:
                      - label
                      - value
                  description: >-
                    Any other field of the court's record for this act, by its
                    label.
                text_status:
                  type: string
                  enum:
                    - ok
                    - scanned
                    - missing
                  description: >-
                    `ok` when the full text is here; `scanned` when the document
                    is an image with no text in it; `missing` when the court
                    publishes no readable document.
                official_url:
                  type: string
                  description: >-
                    The act's record at the Corte Suprema's documentation
                    center.
                document_url:
                  anyOf:
                    - type: string
                    - type: 'null'
                  description: >-
                    Croma's copy of the current version of the act's document
                    (PDF), byte for byte as the court published it. Null when
                    the court publishes none.
                source_document_url:
                  anyOf:
                    - type: string
                    - type: 'null'
                  description: >-
                    The act's document on the Corte Suprema's own site, which
                    the court rewrites when it incorporates an amendment.
                document_modified_at:
                  anyOf:
                    - type: string
                    - type: 'null'
                  description: >-
                    When the court last changed the current version of the
                    document.
                document_versions:
                  type: array
                  items:
                    type: object
                    properties:
                      document_url:
                        type: string
                        description: Croma's copy of this version of the document.
                      modified_at:
                        anyOf:
                          - type: string
                          - type: 'null'
                        description: >-
                          When the court last changed this version of the
                          document, as its site reports it. Null when it reports
                          nothing.
                      bytes:
                        type: number
                        description: The document's size in bytes.
                    required:
                      - document_url
                      - modified_at
                      - bytes
                  description: >-
                    Every version of the act's document Croma has kept, oldest
                    first: the court rewrites a consolidated text in place when
                    it incorporates an amendment, and each version stays
                    available here.
                content:
                  anyOf:
                    - type: object
                      properties:
                        text:
                          type: string
                          description: The requested character range of the act's text.
                        offset:
                          type: number
                          description: >-
                            First character of the range, which is where the
                            reading actually started.
                        total_length:
                          type: number
                          description: >-
                            Length of the whole text in characters, however much
                            of it this response carries.
                        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 the next range.
                            Null at the end of the text.
                      required:
                        - text
                        - offset
                        - total_length
                        - has_more
                        - next_offset
                    - type: 'null'
                  description: >-
                    A range of the act's text, or null when `text_status` is not
                    `ok`.
              required:
                - id
                - title
                - type
                - nature
                - number
                - status
                - subject
                - issuing_body
                - state_organ
                - municipality
                - department
                - issue_date
                - publication_date
                - year
                - gazette_number
                - gazette_volume
                - considerations
                - reforms
                - reform_count
                - related_rulings
                - other_fields
                - text_status
                - official_url
                - document_url
                - source_document_url
                - document_modified_at
                - document_versions
                - content
            - type: 'null'
      required:
        - as_of
        - found
        - law_id
        - law
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: 'Use Authorization: Bearer YOUR_API_KEY'

````