curl --request POST \
--url https://api.croma.run/global/extract/json/v1 \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"url": "https://www.funcionpublica.gov.co/eva/gestornormativo/norma.php?i=304",
"json_schema": {
"type": "object",
"required": [
"title"
],
"properties": {
"title": {
"type": "string",
"description": "Nombre de la norma."
},
"issued_on": {
"type": "string",
"description": "Fecha de expedición."
}
}
}
}
'import requests
url = "https://api.croma.run/global/extract/json/v1"
payload = {
"url": "https://www.funcionpublica.gov.co/eva/gestornormativo/norma.php?i=304",
"json_schema": {
"type": "object",
"required": ["title"],
"properties": {
"title": {
"type": "string",
"description": "Nombre de la norma."
},
"issued_on": {
"type": "string",
"description": "Fecha de expedición."
}
}
}
}
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({
url: 'https://www.funcionpublica.gov.co/eva/gestornormativo/norma.php?i=304',
json_schema: {
type: 'object',
required: ['title'],
properties: {
title: {type: 'string', description: 'Nombre de la norma.'},
issued_on: {type: 'string', description: 'Fecha de expedición.'}
}
}
})
};
fetch('https://api.croma.run/global/extract/json/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/global/extract/json/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([
'url' => 'https://www.funcionpublica.gov.co/eva/gestornormativo/norma.php?i=304',
'json_schema' => [
'type' => 'object',
'required' => [
'title'
],
'properties' => [
'title' => [
'type' => 'string',
'description' => 'Nombre de la norma.'
],
'issued_on' => [
'type' => 'string',
'description' => 'Fecha de expedición.'
]
]
]
]),
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/global/extract/json/v1"
payload := strings.NewReader("{\n \"url\": \"https://www.funcionpublica.gov.co/eva/gestornormativo/norma.php?i=304\",\n \"json_schema\": {\n \"type\": \"object\",\n \"required\": [\n \"title\"\n ],\n \"properties\": {\n \"title\": {\n \"type\": \"string\",\n \"description\": \"Nombre de la norma.\"\n },\n \"issued_on\": {\n \"type\": \"string\",\n \"description\": \"Fecha de expedición.\"\n }\n }\n }\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/global/extract/json/v1")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"url\": \"https://www.funcionpublica.gov.co/eva/gestornormativo/norma.php?i=304\",\n \"json_schema\": {\n \"type\": \"object\",\n \"required\": [\n \"title\"\n ],\n \"properties\": {\n \"title\": {\n \"type\": \"string\",\n \"description\": \"Nombre de la norma.\"\n },\n \"issued_on\": {\n \"type\": \"string\",\n \"description\": \"Fecha de expedición.\"\n }\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.croma.run/global/extract/json/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 \"url\": \"https://www.funcionpublica.gov.co/eva/gestornormativo/norma.php?i=304\",\n \"json_schema\": {\n \"type\": \"object\",\n \"required\": [\n \"title\"\n ],\n \"properties\": {\n \"title\": {\n \"type\": \"string\",\n \"description\": \"Nombre de la norma.\"\n },\n \"issued_on\": {\n \"type\": \"string\",\n \"description\": \"Fecha de expedición.\"\n }\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"url": "<string>",
"result": {}
}
}{
"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": {}
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"details": {}
}
}Pull structured data off any public web page. You supply a JSON Schema describing the object you want and the fields are located on the page and returned under result, already typed.
curl --request POST \
--url https://api.croma.run/global/extract/json/v1 \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"url": "https://www.funcionpublica.gov.co/eva/gestornormativo/norma.php?i=304",
"json_schema": {
"type": "object",
"required": [
"title"
],
"properties": {
"title": {
"type": "string",
"description": "Nombre de la norma."
},
"issued_on": {
"type": "string",
"description": "Fecha de expedición."
}
}
}
}
'import requests
url = "https://api.croma.run/global/extract/json/v1"
payload = {
"url": "https://www.funcionpublica.gov.co/eva/gestornormativo/norma.php?i=304",
"json_schema": {
"type": "object",
"required": ["title"],
"properties": {
"title": {
"type": "string",
"description": "Nombre de la norma."
},
"issued_on": {
"type": "string",
"description": "Fecha de expedición."
}
}
}
}
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({
url: 'https://www.funcionpublica.gov.co/eva/gestornormativo/norma.php?i=304',
json_schema: {
type: 'object',
required: ['title'],
properties: {
title: {type: 'string', description: 'Nombre de la norma.'},
issued_on: {type: 'string', description: 'Fecha de expedición.'}
}
}
})
};
fetch('https://api.croma.run/global/extract/json/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/global/extract/json/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([
'url' => 'https://www.funcionpublica.gov.co/eva/gestornormativo/norma.php?i=304',
'json_schema' => [
'type' => 'object',
'required' => [
'title'
],
'properties' => [
'title' => [
'type' => 'string',
'description' => 'Nombre de la norma.'
],
'issued_on' => [
'type' => 'string',
'description' => 'Fecha de expedición.'
]
]
]
]),
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/global/extract/json/v1"
payload := strings.NewReader("{\n \"url\": \"https://www.funcionpublica.gov.co/eva/gestornormativo/norma.php?i=304\",\n \"json_schema\": {\n \"type\": \"object\",\n \"required\": [\n \"title\"\n ],\n \"properties\": {\n \"title\": {\n \"type\": \"string\",\n \"description\": \"Nombre de la norma.\"\n },\n \"issued_on\": {\n \"type\": \"string\",\n \"description\": \"Fecha de expedición.\"\n }\n }\n }\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/global/extract/json/v1")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"url\": \"https://www.funcionpublica.gov.co/eva/gestornormativo/norma.php?i=304\",\n \"json_schema\": {\n \"type\": \"object\",\n \"required\": [\n \"title\"\n ],\n \"properties\": {\n \"title\": {\n \"type\": \"string\",\n \"description\": \"Nombre de la norma.\"\n },\n \"issued_on\": {\n \"type\": \"string\",\n \"description\": \"Fecha de expedición.\"\n }\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.croma.run/global/extract/json/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 \"url\": \"https://www.funcionpublica.gov.co/eva/gestornormativo/norma.php?i=304\",\n \"json_schema\": {\n \"type\": \"object\",\n \"required\": [\n \"title\"\n ],\n \"properties\": {\n \"title\": {\n \"type\": \"string\",\n \"description\": \"Nombre de la norma.\"\n },\n \"issued_on\": {\n \"type\": \"string\",\n \"description\": \"Fecha de expedición.\"\n }\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"url": "<string>",
"result": {}
}
}{
"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": {}
}
}{
"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
Public http or https URL of the page to read. Loopback and private addresses are not accepted.
2000JSON Schema for the object to return. Field names and nesting are yours; describe each field so it can be located on the page.
Effort to spend on the page: min is fastest and may serve a recent copy, standard is the balanced default, max always reads the page live and handles pages that render themselves in the browser.
min, standard, max Response
Successful response
Show child attributes
Show child attributes