curl --request POST \
--url https://api.croma.run/sv/csj-sv/laws-search/v1 \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"query": "código penal",
"status": "vigente"
}
'import requests
url = "https://api.croma.run/sv/csj-sv/laws-search/v1"
payload = {
"query": "código penal",
"status": "vigente"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({query: 'código penal', status: 'vigente'})
};
fetch('https://api.croma.run/sv/csj-sv/laws-search/v1', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.croma.run/sv/csj-sv/laws-search/v1",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'query' => 'código penal',
'status' => 'vigente'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.croma.run/sv/csj-sv/laws-search/v1"
payload := strings.NewReader("{\n \"query\": \"código penal\",\n \"status\": \"vigente\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.croma.run/sv/csj-sv/laws-search/v1")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"query\": \"código penal\",\n \"status\": \"vigente\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.croma.run/sv/csj-sv/laws-search/v1")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"query\": \"código penal\",\n \"status\": \"vigente\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"as_of": "<string>",
"query": "<string>",
"type": "<string>",
"status": "<string>",
"subject": "<string>",
"number": "<string>",
"municipality": "<string>",
"department": "<string>",
"year": 123,
"from_date": "<string>",
"to_date": "<string>",
"total": 123,
"page": 123,
"per_page": 123,
"total_pages": 123,
"count": 123,
"results": [
{
"id": "<string>",
"title": "<string>",
"type": "<string>",
"nature": "<string>",
"number": "<string>",
"status": "vigente",
"subject": "<string>",
"issuing_body": "<string>",
"state_organ": "<string>",
"municipality": "<string>",
"department": "<string>",
"issue_date": "<string>",
"publication_date": "<string>",
"year": 123,
"gazette_number": "<string>",
"gazette_volume": "<string>",
"considerations": "<string>",
"reform_count": 123,
"related_rulings": [
"<string>"
],
"other_fields": [
{
"label": "<string>",
"value": "<string>"
}
],
"text_status": "ok",
"official_url": "<string>",
"document_url": "<string>",
"source_document_url": "<string>",
"document_modified_at": "<string>"
}
]
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"details": {}
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"details": {}
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"details": {}
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"details": {}
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"details": {}
}
}Corte Suprema de Justicia de El Salvador Laws Search
Search El Salvador’s legislation as the Corte Suprema de Justicia’s documentation center keeps it: more than 10,000 legal texts published in the Diario Oficial since 1821, from the codes and laws to executive decrees, regulations, agreements and municipal ordinances. Free text matches the name, the documentation center’s summary and the consolidated text. Filter by type, status (vigente, caducada, derogada), subject, number, municipality, department, year and the publication date (from_date/to_date). Each result carries Croma’s copy of the original document and links to the record and the document on the court’s own site. Served by Croma (as_of says how current the data is).
Dataset endpoint: answers from the whole source in milliseconds and carries as_of.
curl --request POST \
--url https://api.croma.run/sv/csj-sv/laws-search/v1 \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"query": "código penal",
"status": "vigente"
}
'import requests
url = "https://api.croma.run/sv/csj-sv/laws-search/v1"
payload = {
"query": "código penal",
"status": "vigente"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({query: 'código penal', status: 'vigente'})
};
fetch('https://api.croma.run/sv/csj-sv/laws-search/v1', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.croma.run/sv/csj-sv/laws-search/v1",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'query' => 'código penal',
'status' => 'vigente'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.croma.run/sv/csj-sv/laws-search/v1"
payload := strings.NewReader("{\n \"query\": \"código penal\",\n \"status\": \"vigente\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.croma.run/sv/csj-sv/laws-search/v1")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"query\": \"código penal\",\n \"status\": \"vigente\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.croma.run/sv/csj-sv/laws-search/v1")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"query\": \"código penal\",\n \"status\": \"vigente\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"as_of": "<string>",
"query": "<string>",
"type": "<string>",
"status": "<string>",
"subject": "<string>",
"number": "<string>",
"municipality": "<string>",
"department": "<string>",
"year": 123,
"from_date": "<string>",
"to_date": "<string>",
"total": 123,
"page": 123,
"per_page": 123,
"total_pages": 123,
"count": 123,
"results": [
{
"id": "<string>",
"title": "<string>",
"type": "<string>",
"nature": "<string>",
"number": "<string>",
"status": "vigente",
"subject": "<string>",
"issuing_body": "<string>",
"state_organ": "<string>",
"municipality": "<string>",
"department": "<string>",
"issue_date": "<string>",
"publication_date": "<string>",
"year": 123,
"gazette_number": "<string>",
"gazette_volume": "<string>",
"considerations": "<string>",
"reform_count": 123,
"related_rulings": [
"<string>"
],
"other_fields": [
{
"label": "<string>",
"value": "<string>"
}
],
"text_status": "ok",
"official_url": "<string>",
"document_url": "<string>",
"source_document_url": "<string>",
"document_modified_at": "<string>"
}
]
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"details": {}
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"details": {}
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"details": {}
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"details": {}
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"details": {}
}
}Authorizations
Use Authorization: Bearer YOUR_API_KEY
Headers
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.
255"0f8e9a42-6b7c-4d1e-9a3f-2c5d7e8f9a0b"
Body
Optional search terms matched against the act's name, the documentation center's summary and the full text.
300Optional kind of document as type names it: Decretos Legislativos, Decretos Ejecutivos, Decretos Institucionales, Acuerdos, Reglamentos, Ordenanzas Municipales or Documentos Generales, matched from the start. Case and accents are ignored.
80Optional status: vigente (in force), caducada (expired) or derogada (repealed).
, vigente, caducada, derogada Optional area of law as subject names it, e.g. Penal, Tributaria, Laboral, matched from the start. Case and accents are ignored.
80Optional decree or agreement number, e.g. 1030. Case, spaces and punctuation are ignored.
40Optional municipality of an ordinance, e.g. San Salvador Centro, matched from the start. Case and accents are ignored.
120Optional department of an ordinance, e.g. La Libertad, matched from the start. Case and accents are ignored.
80Optional year of publication in the Diario Oficial. 0 searches every year.
0 <= x <= 2100Optional date filter in yyyy-mm-dd format.
Optional date filter in yyyy-mm-dd format.
1-based page number for paginated results.
1 <= x <= 1000Results per page (1-50).
1 <= x <= 50Response
Successful response
Show child attributes
Show child attributes