curl --request GET \
--url https://api.roofkit.ai/api/v1/objects/{object_id}/records \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.roofkit.ai/api/v1/objects/{object_id}/records"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.roofkit.ai/api/v1/objects/{object_id}/records', 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.roofkit.ai/api/v1/objects/{object_id}/records",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.roofkit.ai/api/v1/objects/{object_id}/records"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.roofkit.ai/api/v1/objects/{object_id}/records")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.roofkit.ai/api/v1/objects/{object_id}/records")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"records": [
{
"id": "<string>",
"object_id": "<string>",
"display_label": "<string>",
"values": {},
"relationships": [
{
"id": "<string>",
"relationship_definition_id": "<string>",
"field_id": "<string>",
"source_object_id": "<string>",
"source_record_id": "<string>",
"target_object_id": "<string>",
"target_object_slug": "<string>",
"target_record_id": "<string>",
"target_label": "<string>",
"target_attribution": {
"source": "<string>",
"medium": "<string>",
"campaign": "<string>",
"content": "<string>",
"conversion_url": "<string>",
"entry": "button"
}
}
],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"record_key": "<string>",
"stage_history": [
{
"field_id": "<string>",
"field_key": "<string>",
"option_id": "<string>",
"option_label": "<string>",
"entered_at": "2023-11-07T05:31:56Z"
}
],
"stage_dates": {
"appointment_at": "2023-11-07T05:31:56Z",
"won_at": "2023-11-07T05:31:56Z",
"lost_at": "2023-11-07T05:31:56Z"
}
}
],
"pagination": {
"limit": 5000,
"next_cursor": "<string>",
"has_more": true,
"is_capped": true,
"total": 1
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "<string>",
"request_id": "<string>",
"details": {}
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "<string>",
"request_id": "<string>",
"details": {}
}
}{
"error": {
"code": "FORBIDDEN",
"message": "API key does not include the required scope: leads.write.",
"request_id": "req_123",
"details": {
"required_scope": "leads.write",
"missing_scopes": [
"leads.write"
]
}
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "<string>",
"request_id": "<string>",
"details": {}
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "<string>",
"request_id": "<string>",
"details": {}
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "<string>",
"request_id": "<string>",
"details": {}
}
}Listar registros del objeto
Lista registros de un objeto. La paginación usa limit, next_cursor y has_more. Vuelve a solicitar con next_cursor hasta que has_more sea false. Una lectura de un objeto personalizado sin search, en orden de created_at o updated_at, sigue un cursor keyset y devuelve cada registro exactamente una vez. El orden predeterminado es created_at, del más reciente al más antiguo. Una página de esa lectura lee como máximo 1,000 registros, así que una página con filtros puede contener menos registros que limit, o ninguno, mientras has_more sea true. No uses el tamaño de la página para decidir que la lista terminó. Una lectura con search, con un orden por otro campo, o sobre un objeto nativo como Contacts pagina por número, e is_capped es true cuando la ventana del motor se detiene en 1,000 filas. Contacts solo lista leads finalizados. Un cursor solo funciona con el orden que lo emitió. Un cursor malformado o que no coincide devuelve 400.
curl --request GET \
--url https://api.roofkit.ai/api/v1/objects/{object_id}/records \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.roofkit.ai/api/v1/objects/{object_id}/records"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.roofkit.ai/api/v1/objects/{object_id}/records', 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.roofkit.ai/api/v1/objects/{object_id}/records",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.roofkit.ai/api/v1/objects/{object_id}/records"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.roofkit.ai/api/v1/objects/{object_id}/records")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.roofkit.ai/api/v1/objects/{object_id}/records")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"records": [
{
"id": "<string>",
"object_id": "<string>",
"display_label": "<string>",
"values": {},
"relationships": [
{
"id": "<string>",
"relationship_definition_id": "<string>",
"field_id": "<string>",
"source_object_id": "<string>",
"source_record_id": "<string>",
"target_object_id": "<string>",
"target_object_slug": "<string>",
"target_record_id": "<string>",
"target_label": "<string>",
"target_attribution": {
"source": "<string>",
"medium": "<string>",
"campaign": "<string>",
"content": "<string>",
"conversion_url": "<string>",
"entry": "button"
}
}
],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"record_key": "<string>",
"stage_history": [
{
"field_id": "<string>",
"field_key": "<string>",
"option_id": "<string>",
"option_label": "<string>",
"entered_at": "2023-11-07T05:31:56Z"
}
],
"stage_dates": {
"appointment_at": "2023-11-07T05:31:56Z",
"won_at": "2023-11-07T05:31:56Z",
"lost_at": "2023-11-07T05:31:56Z"
}
}
],
"pagination": {
"limit": 5000,
"next_cursor": "<string>",
"has_more": true,
"is_capped": true,
"total": 1
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "<string>",
"request_id": "<string>",
"details": {}
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "<string>",
"request_id": "<string>",
"details": {}
}
}{
"error": {
"code": "FORBIDDEN",
"message": "API key does not include the required scope: leads.write.",
"request_id": "req_123",
"details": {
"required_scope": "leads.write",
"missing_scopes": [
"leads.write"
]
}
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "<string>",
"request_id": "<string>",
"details": {}
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "<string>",
"request_id": "<string>",
"details": {}
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "<string>",
"request_id": "<string>",
"details": {}
}
}data_objects.readAutorizaciones
Usa Authorization: Bearer rk_live_....
Parámetros de ruta
Id del objeto, clave de sistema como system:leads, o slug del descubrimiento.
1 - 200Parámetros de consulta
200Cursor opaco devuelto por respuestas de listado/exportación. Envíalo de vuelta sin cambios; los cursores malformados devuelven 400.
5001 <= x <= 100200Texto JSON de un ObjectFilterQuery. Envía un array de filtros que deben coincidir todos, o un objeto con filters y un filtro avanzado cuyas reglas se unen con and u or. Cada filtro indica un campo en fieldId por su id o su clave, tal como los lista GET /api/v1/objects/{object_id}. Operadores: is_empty e is_not_empty no reciben value. equals, not_equals, contains y has_reached reciben value. any_of recibe un array de cadenas. greater_than y less_than reciben un número, y between recibe value y valueTo. before y after reciben una fecha (YYYY-MM-DD) o una fecha/hora ISO 8601 y excluyen el día que indican. within_range recibe value y valueTo e incluye ambos días. Una fecha sola cubre todo el día UTC. Una fecha/hora con desfase se convierte a UTC. Sin filters_json, la lectura aplica los filtros de view_id, o ninguno. Un JSON inválido, un operador desconocido, un value faltante, un campo desconocido o un campo que no se puede filtrar devuelve 400 con la ruta de cada problema. Ejemplo, registros creados en octubre de 2026: [{"fieldId":"created_at","operator":"within_range","value":"2026-10-01","valueTo":"2026-10-31"}]
20000Texto JSON de un array de ObjectSort. Cada orden indica un campo en fieldId por su id o su clave. Sin sorts_json, la lectura usa el orden de view_id, o created_at, del más reciente al más antiguo. Solo un único orden por created_at o updated_at conserva el cursor keyset. Cualquier otro orden pagina por número. Un JSON inválido, un campo desconocido o un campo de fórmula devuelve 400. Ejemplo, registros más antiguos primero: [{"fieldId":"created_at","direction":"asc"}]
20000