Texas Childcare Register
Idioma: Español

Texas Childcare Register · ACCESO PARA DESARROLLADORES

API y webhooks

Utiliza la URL de tu producto en los ejemplos siguientes. Guarda las claves de API en tu servidor. Abrir la documentación interactiva de la API ↗

Agent purchases: free discovery, per-record access, and spending-limited MCP

Consultar registros públicos

curl 'https://texaschildcare.getregisters.com/api/v1/feeds/us-childcare/records?limit=50&offset=0'

Las respuestas públicas solo contienen los tres registros más recientes de cada registro. El contenido anterior requiere PRO; las URL directas muestran una vista previa limitada. Sigue next_offset hasta que sea null, incluso si una página filtrada no contiene registros. Cita cada source_url original. Las fechas de publicación y observación corresponden a hechos distintos.

Consultar registros PRO

curl 'https://texaschildcare.getregisters.com/api/v1/feeds/us-childcare/records?limit=50&offset=0' \
  -H 'Authorization: Bearer YOUR_SCOPED_KEY'

Crear o renovar la clave en tu cuenta. La clave solo funciona para este producto mientras el acceso de pago esté activo.

Formatos de exportación

PRO incluye CSV, Excel (.xlsx), XML, RSS y Atom. Utiliza la clave de API de tu producto y los mismos filtros para cada formato. Por ejemplo, descarga hasta 100 registros en un libro de Excel:

curl 'https://texaschildcare.getregisters.com/api/v1/feeds/us-childcare/records/export.xlsx?limit=100&offset=0' \
  -H 'Authorization: Bearer YOUR_SCOPED_KEY' \
  -D export-headers.txt -o records.xlsx

Sustituye xlsx por csv, xml, rss o atom. Añade filtros como document_type=adopted o facility_id=YOUR_FACILITY_ID. Sigue la cabecera Link de la respuesta con rel="next" hasta que desaparezca y conserva la cabecera Authorization en cada solicitud. Cada página admite hasta 100 registros; una página filtrada puede estar vacía aunque existan páginas posteriores.

Para RSS y Atom, configura un lector compatible con la cabecera Authorization. Las URL del lector no contienen claves. Las entradas tienen identificadores de registro estables; los lectores que no siguen la paginación reciben la página más reciente. Utiliza la API paginada si necesitas todos los registros.

Consultar el historial de un registro

curl 'https://texaschildcare.getregisters.com/api/v1/records/RECORD_ID/history?limit=50&offset=0' \
  -H 'Authorization: Bearer YOUR_SCOPED_KEY'

Sustituye RECORD_ID por un identificador de registro devuelto. El historial devuelve una matriz ordenada del más reciente al más antiguo. Aumenta offset según la longitud de cada página hasta que recibas una página más corta que el límite solicitado. Las versiones pueden reflejar cambios en la fuente o correcciones de extracción.

Conectar con MCP

curl 'https://texaschildcare.getregisters.com/api/v1/mcp' \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"read_register","arguments":{"feed_id":"us-childcare"}}}'

Añade la misma cabecera Authorization para los campos PRO. El endpoint también admite initialize, tools/list y notifications/initialized. Utiliza la paginación REST anterior para consultar un registro completo.

Verificar las firmas de los webhooks

La cabecera de firma es X-Register-Signature: t=TIMESTAMP,v1=HEX_DIGEST. Verifica el cuerpo original antes de interpretar el JSON. Guarda de forma duradera los identificadores X-Register-Event procesados correctamente para que los reintentos no repitan sus efectos.

import { createHmac, timingSafeEqual } from 'node:crypto';

export function verify(rawBody, header, secret) {
  const fields = Object.fromEntries(header.split(',').map(x => x.split('=')));
  const timestamp = Number(fields.t);
  if (!Number.isFinite(timestamp) || Math.abs(Date.now()/1000 - timestamp) > 300) return false;
  if (!/^[a-f0-9]{64}$/.test(fields.v1 || '')) return false;
  const expected = createHmac('sha256', secret).update(fields.t + '.').update(rawBody).digest();
  const supplied = Buffer.from(fields.v1, 'hex');
  return supplied.length === expected.length && timingSafeEqual(supplied, expected);
}

Devuelve una respuesta satisfactoria solo después de guardar el evento de forma duradera. Los reintentos de entrega son limitados; tu cuenta muestra el último resultado registrado. La confirmación de entrega no demuestra que tu aplicación haya terminado de procesar el evento.