curl --request POST \
--url https://api.croma.run/mx/scjn/tesis-browse/v1 \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"subject": "Civil",
"tesis_type": "jurisprudencia",
"published_from": "2026-01-01"
}
'import requests
url = "https://api.croma.run/mx/scjn/tesis-browse/v1"
payload = {
"subject": "Civil",
"tesis_type": "jurisprudencia",
"published_from": "2026-01-01"
}
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({subject: 'Civil', tesis_type: 'jurisprudencia', published_from: '2026-01-01'})
};
fetch('https://api.croma.run/mx/scjn/tesis-browse/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/mx/scjn/tesis-browse/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([
'subject' => 'Civil',
'tesis_type' => 'jurisprudencia',
'published_from' => '2026-01-01'
]),
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/mx/scjn/tesis-browse/v1"
payload := strings.NewReader("{\n \"subject\": \"Civil\",\n \"tesis_type\": \"jurisprudencia\",\n \"published_from\": \"2026-01-01\"\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/mx/scjn/tesis-browse/v1")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"subject\": \"Civil\",\n \"tesis_type\": \"jurisprudencia\",\n \"published_from\": \"2026-01-01\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.croma.run/mx/scjn/tesis-browse/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 \"subject\": \"Civil\",\n \"tesis_type\": \"jurisprudencia\",\n \"published_from\": \"2026-01-01\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"as_of": "<string>",
"query": "<string>",
"tesis_type": "<string>",
"subject": "<string>",
"epoch": "<string>",
"year": "<string>",
"instance": "<string>",
"court": "<string>",
"formation": "<string>",
"published_from": "<string>",
"published_to": "<string>",
"updated_after": "<string>",
"total": 123,
"page": 123,
"per_page": 123,
"total_pages": 123,
"count": 123,
"results": [
{
"registration_number": "<string>",
"title": "<string>",
"subtitle": "<string>",
"type": "jurisprudencia",
"citation": "<string>",
"epoch": "<string>",
"epoch_number": 123,
"instance": "<string>",
"circuit": "<string>",
"court": "<string>",
"source": "<string>",
"subjects": [
"<string>"
],
"location": {
"book": "<string>",
"volume": "<string>",
"page": 123,
"month": 123,
"year": 123
},
"text": "<string>",
"facts": "<string>",
"legal_criteria": "<string>",
"justification": "<string>",
"notes": "<string>",
"precedent_notes": [
"<string>"
],
"linked_case_registrations": [
"<string>"
],
"linked_vote_registrations": [
"<string>"
],
"formation": "<string>",
"issue": "<string>",
"publication_date": "<string>",
"binding_date": "<string>",
"updated_at": "<string>",
"fingerprint": "<string>",
"official_url": "<string>"
}
]
},
"deprecation": {
"since": "2023-12-25",
"sunset": "2023-12-25",
"successor": "<string>",
"message": "<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": {}
}
}SCJN Tesis Browse
Deprecated since 2026-09-07; stops answering on 2026-12-15. Use POST /mx/scjn/tesis-search/v1 instead.
Same request and response as scjn-tesis-search, which replaces it: the Mexican Supreme Court’s case law in full, filtered by words in the title and text, binding force, subject, época, year, instance, court, formation, publication window and the court’s modification date. Newest first, pages of up to 20 full records, with as_of.
Dataset endpoint: answers from the whole source in milliseconds and carries as_of.
curl --request POST \
--url https://api.croma.run/mx/scjn/tesis-browse/v1 \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"subject": "Civil",
"tesis_type": "jurisprudencia",
"published_from": "2026-01-01"
}
'import requests
url = "https://api.croma.run/mx/scjn/tesis-browse/v1"
payload = {
"subject": "Civil",
"tesis_type": "jurisprudencia",
"published_from": "2026-01-01"
}
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({subject: 'Civil', tesis_type: 'jurisprudencia', published_from: '2026-01-01'})
};
fetch('https://api.croma.run/mx/scjn/tesis-browse/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/mx/scjn/tesis-browse/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([
'subject' => 'Civil',
'tesis_type' => 'jurisprudencia',
'published_from' => '2026-01-01'
]),
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/mx/scjn/tesis-browse/v1"
payload := strings.NewReader("{\n \"subject\": \"Civil\",\n \"tesis_type\": \"jurisprudencia\",\n \"published_from\": \"2026-01-01\"\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/mx/scjn/tesis-browse/v1")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"subject\": \"Civil\",\n \"tesis_type\": \"jurisprudencia\",\n \"published_from\": \"2026-01-01\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.croma.run/mx/scjn/tesis-browse/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 \"subject\": \"Civil\",\n \"tesis_type\": \"jurisprudencia\",\n \"published_from\": \"2026-01-01\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"as_of": "<string>",
"query": "<string>",
"tesis_type": "<string>",
"subject": "<string>",
"epoch": "<string>",
"year": "<string>",
"instance": "<string>",
"court": "<string>",
"formation": "<string>",
"published_from": "<string>",
"published_to": "<string>",
"updated_after": "<string>",
"total": 123,
"page": 123,
"per_page": 123,
"total_pages": 123,
"count": 123,
"results": [
{
"registration_number": "<string>",
"title": "<string>",
"subtitle": "<string>",
"type": "jurisprudencia",
"citation": "<string>",
"epoch": "<string>",
"epoch_number": 123,
"instance": "<string>",
"circuit": "<string>",
"court": "<string>",
"source": "<string>",
"subjects": [
"<string>"
],
"location": {
"book": "<string>",
"volume": "<string>",
"page": 123,
"month": 123,
"year": 123
},
"text": "<string>",
"facts": "<string>",
"legal_criteria": "<string>",
"justification": "<string>",
"notes": "<string>",
"precedent_notes": [
"<string>"
],
"linked_case_registrations": [
"<string>"
],
"linked_vote_registrations": [
"<string>"
],
"formation": "<string>",
"issue": "<string>",
"publication_date": "<string>",
"binding_date": "<string>",
"updated_at": "<string>",
"fingerprint": "<string>",
"official_url": "<string>"
}
]
},
"deprecation": {
"since": "2023-12-25",
"sunset": "2023-12-25",
"successor": "<string>",
"message": "<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 words to match in the title and text of the tesis.
300Filter by tesis type: binding jurisprudencia, non-binding aislada, or any.
any, jurisprudencia, aislada Optional subject filter (e.g. Civil, Constitucional).
60Optional época number filter (5 through 12).
Optional 4-digit year filter.
Optional deciding level, exactly as the source names it (e.g. Suprema Corte de Justicia de la Nación, Tribunales Colegiados de Circuito, Plenos Regionales).
80Optional court or chamber, exactly as court reads in results (e.g. Primera Sala, Pleno).
200Optional way the criterion was formed, exactly as the source names it (e.g. Reiteración, Contradicción de criterios (antes contradicción de tesis)).
120Optional date filter in yyyy-mm-dd format.
Optional 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-20). Every result carries the full text of the tesis.
1 <= x <= 20