curl --request POST \
--url https://api.croma.run/br/mte/slave-labour-search/v1 \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"query": "fazenda"
}
'import requests
url = "https://api.croma.run/br/mte/slave-labour-search/v1"
payload = { "query": "fazenda" }
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: 'fazenda'})
};
fetch('https://api.croma.run/br/mte/slave-labour-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/br/mte/slave-labour-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' => 'fazenda'
]),
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/br/mte/slave-labour-search/v1"
payload := strings.NewReader("{\n \"query\": \"fazenda\"\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/br/mte/slave-labour-search/v1")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"query\": \"fazenda\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.croma.run/br/mte/slave-labour-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\": \"fazenda\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"as_of": "<string>",
"query": "<string>",
"list": "<string>",
"party_type": "<string>",
"state": "<string>",
"inspection_year": 123,
"total": 123,
"page": 123,
"per_page": 123,
"total_pages": 123,
"count": 123,
"employers": [
{
"id": "<string>",
"list": "slave_labour",
"party_type": "individual",
"document_type": "cpf",
"document": "<string>",
"employer_name": "<string>",
"establishment": "<string>",
"state": "<string>",
"inspection_year": 123,
"workers_involved": 123,
"cnae": "<string>",
"final_decision_date": "<string>",
"listed_on": "<string>",
"listing_history": [
{
"from": "<string>",
"to": "<string>"
}
],
"court_order": "<string>",
"conduct_adjustment_on": "<string>",
"agreement_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": {}
}
}MTE Slave Labour Register Search
Search Brazil’s register of employers caught keeping workers in conditions analogous to slavery (Cadastro de Empregadores, the “Lista Suja”), and the register of employers under a conduct-adjustment agreement, by CNPJ (or its 8-character root), CPF, name, state or inspection year. Each listing carries the establishment, workers found, activity, the final decision date and every period on the register. CPFs are matched exactly and returned masked. Updated daily.
Dataset endpoint: answers from the whole source in milliseconds and carries as_of.
curl --request POST \
--url https://api.croma.run/br/mte/slave-labour-search/v1 \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"query": "fazenda"
}
'import requests
url = "https://api.croma.run/br/mte/slave-labour-search/v1"
payload = { "query": "fazenda" }
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: 'fazenda'})
};
fetch('https://api.croma.run/br/mte/slave-labour-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/br/mte/slave-labour-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' => 'fazenda'
]),
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/br/mte/slave-labour-search/v1"
payload := strings.NewReader("{\n \"query\": \"fazenda\"\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/br/mte/slave-labour-search/v1")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"query\": \"fazenda\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.croma.run/br/mte/slave-labour-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\": \"fazenda\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"as_of": "<string>",
"query": "<string>",
"list": "<string>",
"party_type": "<string>",
"state": "<string>",
"inspection_year": 123,
"total": 123,
"page": 123,
"per_page": 123,
"total_pages": 123,
"count": 123,
"employers": [
{
"id": "<string>",
"list": "slave_labour",
"party_type": "individual",
"document_type": "cpf",
"document": "<string>",
"employer_name": "<string>",
"establishment": "<string>",
"state": "<string>",
"inspection_year": 123,
"workers_involved": 123,
"cnae": "<string>",
"final_decision_date": "<string>",
"listed_on": "<string>",
"listing_history": [
{
"from": "<string>",
"to": "<string>"
}
],
"court_order": "<string>",
"conduct_adjustment_on": "<string>",
"agreement_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": {}
}
}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
Palabras a buscar en los nombres (opcional).
200CPF o CNPJ del empleador, con o sin puntuación, p. ej. 12.345.678/0001-90, o la raíz de 8 caracteres de un CNPJ para todos sus establecimientos (opcional). Coincidencia exacta.
^(?:\d{11}|\d{3}\.\d{3}\.\d{3}-\d{2}|[A-Za-z0-9]{8}|[A-Za-z0-9]{12}\d{2}|[A-Za-z0-9]{2}\.[A-Za-z0-9]{3}\.[A-Za-z0-9]{3}(?:\/[A-Za-z0-9]{4}-\d{2})?)?$Registro: slave_labour (empleadores que sometieron trabajadores a condiciones análogas a la esclavitud) o conduct_adjustment (empleadores en ajuste de conducta) (opcional; por defecto ambos).
, slave_labour, conduct_adjustment Tipo de parte: individual (persona) o company (empresa u organización) (opcional).
, individual, company Sigla del estado (UF) de la fiscalización, p. ej. PA (opcional).
^(?:[A-Za-z]{2})?$Año de la fiscalización, p. ej. 2024; 0 sin filtro (opcional).
0 <= x <= 21001-based page number for paginated results.
1 <= x <= 1000Resultados por página (1-50).
1 <= x <= 50Response
Successful response
Show child attributes
Show child attributes