curl --request POST \
--url https://api.croma.run/sv/asamblea-sv/decrees-search/v1 \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"query": "préstamo",
"subject": "Hacienda y Presupuesto",
"year": 2026
}
'import requests
url = "https://api.croma.run/sv/asamblea-sv/decrees-search/v1"
payload = {
"query": "préstamo",
"subject": "Hacienda y Presupuesto",
"year": 2026
}
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: 'préstamo', subject: 'Hacienda y Presupuesto', year: 2026})
};
fetch('https://api.croma.run/sv/asamblea-sv/decrees-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/asamblea-sv/decrees-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' => 'préstamo',
'subject' => 'Hacienda y Presupuesto',
'year' => 2026
]),
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/asamblea-sv/decrees-search/v1"
payload := strings.NewReader("{\n \"query\": \"préstamo\",\n \"subject\": \"Hacienda y Presupuesto\",\n \"year\": 2026\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/asamblea-sv/decrees-search/v1")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"query\": \"préstamo\",\n \"subject\": \"Hacienda y Presupuesto\",\n \"year\": 2026\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.croma.run/sv/asamblea-sv/decrees-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\": \"préstamo\",\n \"subject\": \"Hacienda y Presupuesto\",\n \"year\": 2026\n}"
response = http.request(request)
puts response.read_body{
"data": {
"as_of": "<string>",
"query": "<string>",
"type": "<string>",
"subject": "<string>",
"subtopic": "<string>",
"area_of_law": "<string>",
"number": "<string>",
"year": 123,
"from_date": "<string>",
"to_date": "<string>",
"total": 123,
"page": 123,
"per_page": 123,
"total_pages": 123,
"count": 123,
"results": [
{
"id": "<string>",
"number": "<string>",
"type": "<string>",
"title": "<string>",
"summary": "<string>",
"subject": "<string>",
"subtopic": "<string>",
"area_of_law": "<string>",
"issue_date": "<string>",
"year": 123,
"publication_date": "<string>",
"gazette_number": "<string>",
"gazette_volume": "<string>",
"pending_publication": true,
"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": {}
}
}Asamblea Legislativa de El Salvador Decrees Search
Search every decree of El Salvador’s Asamblea Legislativa. Its register holds the laws, codes and regulations and every other legislative decree, from loan authorizations and tax exemptions to elections of officials and honorary distinctions. Free text matches the title, the Asamblea’s summary and the full text. Filter by type (Decreto, Ley, Código, Reglamento), subject, subtopic, area_of_law, number, year and the date the decree was issued (from_date/to_date). Each result carries Croma’s copy of the decree’s document and links to the record and the document on the Asamblea’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/asamblea-sv/decrees-search/v1 \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"query": "préstamo",
"subject": "Hacienda y Presupuesto",
"year": 2026
}
'import requests
url = "https://api.croma.run/sv/asamblea-sv/decrees-search/v1"
payload = {
"query": "préstamo",
"subject": "Hacienda y Presupuesto",
"year": 2026
}
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: 'préstamo', subject: 'Hacienda y Presupuesto', year: 2026})
};
fetch('https://api.croma.run/sv/asamblea-sv/decrees-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/asamblea-sv/decrees-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' => 'préstamo',
'subject' => 'Hacienda y Presupuesto',
'year' => 2026
]),
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/asamblea-sv/decrees-search/v1"
payload := strings.NewReader("{\n \"query\": \"préstamo\",\n \"subject\": \"Hacienda y Presupuesto\",\n \"year\": 2026\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/asamblea-sv/decrees-search/v1")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"query\": \"préstamo\",\n \"subject\": \"Hacienda y Presupuesto\",\n \"year\": 2026\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.croma.run/sv/asamblea-sv/decrees-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\": \"préstamo\",\n \"subject\": \"Hacienda y Presupuesto\",\n \"year\": 2026\n}"
response = http.request(request)
puts response.read_body{
"data": {
"as_of": "<string>",
"query": "<string>",
"type": "<string>",
"subject": "<string>",
"subtopic": "<string>",
"area_of_law": "<string>",
"number": "<string>",
"year": 123,
"from_date": "<string>",
"to_date": "<string>",
"total": 123,
"page": 123,
"per_page": 123,
"total_pages": 123,
"count": 123,
"results": [
{
"id": "<string>",
"number": "<string>",
"type": "<string>",
"title": "<string>",
"summary": "<string>",
"subject": "<string>",
"subtopic": "<string>",
"area_of_law": "<string>",
"issue_date": "<string>",
"year": 123,
"publication_date": "<string>",
"gazette_number": "<string>",
"gazette_volume": "<string>",
"pending_publication": true,
"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 decree's title, the Asamblea's summary and the full text.
300Optional kind of act as type names it: Decreto, Ley, Código or Reglamento. Case and accents are ignored.
40Optional subject as subject names it, e.g. Hacienda y Presupuesto, Asamblea Legislativa, Seguridad Pública, matched from the start. Case and accents are ignored.
120Optional subtopic as subtopic names it, e.g. Autorizaciones para Préstamos, Exenciones (Franquicias), Distinciones Honoríficas, matched from the start. Case and accents are ignored.
160Optional area of law as area_of_law names it, e.g. Derecho Administrativo, Derecho Penal, Derecho Tributario o Fiscal, matched from the start. Case and accents are ignored.
120Optional decree number, e.g. 632. Numbers restart with each legislature, so combine it with year or dates.
20Optional year the Asamblea issued the decree. 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