curl --request POST \
--url https://api.croma.run/bo/tsj-bo/rulings-search/v1 \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"query": "nulidad de contrato",
"chamber": "Sala Civil",
"type": "auto_supremo"
}
'import requests
url = "https://api.croma.run/bo/tsj-bo/rulings-search/v1"
payload = {
"query": "nulidad de contrato",
"chamber": "Sala Civil",
"type": "auto_supremo"
}
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: 'nulidad de contrato', chamber: 'Sala Civil', type: 'auto_supremo'})
};
fetch('https://api.croma.run/bo/tsj-bo/rulings-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/bo/tsj-bo/rulings-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' => 'nulidad de contrato',
'chamber' => 'Sala Civil',
'type' => 'auto_supremo'
]),
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/bo/tsj-bo/rulings-search/v1"
payload := strings.NewReader("{\n \"query\": \"nulidad de contrato\",\n \"chamber\": \"Sala Civil\",\n \"type\": \"auto_supremo\"\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/bo/tsj-bo/rulings-search/v1")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"query\": \"nulidad de contrato\",\n \"chamber\": \"Sala Civil\",\n \"type\": \"auto_supremo\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.croma.run/bo/tsj-bo/rulings-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\": \"nulidad de contrato\",\n \"chamber\": \"Sala Civil\",\n \"type\": \"auto_supremo\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"as_of": "<string>",
"query": "<string>",
"chamber": "<string>",
"type": "<string>",
"subject": "<string>",
"outcome": "<string>",
"registration_number": "<string>",
"case_number": "<string>",
"reporting_judge": "<string>",
"department": "<string>",
"year": 123,
"from_date": "<string>",
"to_date": "<string>",
"total": 123,
"total_is_exact": true,
"page": 123,
"per_page": 123,
"total_pages": 123,
"count": 123,
"results": [
{
"id": "<string>",
"registration_number": "<string>",
"case_number": "<string>",
"ruling_date": "<string>",
"year": 123,
"chamber": "<string>",
"type": "auto_supremo",
"type_label": "<string>",
"subtype": "<string>",
"outcome": "<string>",
"subject": "<string>",
"proceeding": "<string>",
"department": "<string>",
"reporting_judge": "<string>",
"jurisprudence": [
{
"kind": "<string>",
"descriptor": "<string>",
"restrictor": "<string>",
"ratio_decidendi": "<string>",
"maxim": "<string>",
"summary": "<string>",
"precedent": "<string>"
}
],
"descriptors": [
"<string>"
],
"text_status": "ok",
"document_kind": "scan",
"official_url": "<string>",
"document_url": "<string>",
"source_document_url": "<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": {}
}
}Tribunal Supremo de Justicia de Bolivia Rulings Search
Search the jurisprudencia of Bolivia’s Tribunal Supremo de Justicia: every auto supremo, sentencia and resolución its chambers have published since 2001. Free text matches the resolution and case numbers, the chamber, the area of law, the outcome, the court’s jurisprudence notes and the full text. Filter by chamber, type, subject, outcome, registration_number, case_number, reporting_judge, department, year and the ruling date (from_date/to_date). Each result carries the document, kept by Croma, and a link to the resolution 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/bo/tsj-bo/rulings-search/v1 \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"query": "nulidad de contrato",
"chamber": "Sala Civil",
"type": "auto_supremo"
}
'import requests
url = "https://api.croma.run/bo/tsj-bo/rulings-search/v1"
payload = {
"query": "nulidad de contrato",
"chamber": "Sala Civil",
"type": "auto_supremo"
}
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: 'nulidad de contrato', chamber: 'Sala Civil', type: 'auto_supremo'})
};
fetch('https://api.croma.run/bo/tsj-bo/rulings-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/bo/tsj-bo/rulings-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' => 'nulidad de contrato',
'chamber' => 'Sala Civil',
'type' => 'auto_supremo'
]),
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/bo/tsj-bo/rulings-search/v1"
payload := strings.NewReader("{\n \"query\": \"nulidad de contrato\",\n \"chamber\": \"Sala Civil\",\n \"type\": \"auto_supremo\"\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/bo/tsj-bo/rulings-search/v1")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"query\": \"nulidad de contrato\",\n \"chamber\": \"Sala Civil\",\n \"type\": \"auto_supremo\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.croma.run/bo/tsj-bo/rulings-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\": \"nulidad de contrato\",\n \"chamber\": \"Sala Civil\",\n \"type\": \"auto_supremo\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"as_of": "<string>",
"query": "<string>",
"chamber": "<string>",
"type": "<string>",
"subject": "<string>",
"outcome": "<string>",
"registration_number": "<string>",
"case_number": "<string>",
"reporting_judge": "<string>",
"department": "<string>",
"year": 123,
"from_date": "<string>",
"to_date": "<string>",
"total": 123,
"total_is_exact": true,
"page": 123,
"per_page": 123,
"total_pages": 123,
"count": 123,
"results": [
{
"id": "<string>",
"registration_number": "<string>",
"case_number": "<string>",
"ruling_date": "<string>",
"year": 123,
"chamber": "<string>",
"type": "auto_supremo",
"type_label": "<string>",
"subtype": "<string>",
"outcome": "<string>",
"subject": "<string>",
"proceeding": "<string>",
"department": "<string>",
"reporting_judge": "<string>",
"jurisprudence": [
{
"kind": "<string>",
"descriptor": "<string>",
"restrictor": "<string>",
"ratio_decidendi": "<string>",
"maxim": "<string>",
"summary": "<string>",
"precedent": "<string>"
}
],
"descriptors": [
"<string>"
],
"text_status": "ok",
"document_kind": "scan",
"official_url": "<string>",
"document_url": "<string>",
"source_document_url": "<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 resolution number, the case number, the chamber, the jurisprudence notes (descriptor, restrictor, ratio decidendi) and the full text.
300Optional chamber as chamber names it, e.g. Sala Civil, Sala Penal, Sala Plena or Sala Contenciosa, matched from the start. Case and accents are ignored.
120Optional kind of resolution: auto_supremo, sentencia or resolucion.
, auto_supremo, sentencia, resolucion Optional area of law as subject names it, e.g. Civil, Penal, Familia, Social, Agrario, matched from the start. Case and accents are ignored.
120Optional outcome as outcome names it, e.g. Infundado, Casa, Improcedente, Anula, matched from the start. Case and accents are ignored.
120Optional resolution number as the court prints it, e.g. AS/0001/2013 or SE/0001/2023. Each chamber numbers its own resolutions, so a number can return several; add chamber to narrow it. Case, spaces and punctuation are ignored.
80Optional case file number (expediente) as the court prints it. Case, spaces and punctuation are ignored.
80Optional reporting justice (magistrado relator) as reporting_judge names them, matched from the start of the name. Case and accents are ignored.
160Optional department the case came from, e.g. La Paz, Santa Cruz, Chuquisaca, matched from the start. Case and accents are ignored.
60Optional year of the resolution. 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