Personas desaparecidas
Score local, match contra el índice vivo, ingest idempotente, búsqueda pública redacted y sincronización de cambios.
Humanitarian Federation API
Respuesta VE expone una API federada para que registros, sitios de ayuda y agentes de IA puedan deduplicar personas desaparecidas, sincronizar estados, publicar entidades verificadas, enviar datos crudos a revisión y mostrar insignias de socios.
Esta web es la primera instancia desplegada de Humanitarian Federation Platform: registros con fuente, deduplicación revisable, proyecciones públicas seguras, sincronización por cursor e insignias verificables por dominio.
Repositorio de la plataforma →Score local, match contra el índice vivo, ingest idempotente, búsqueda pública redacted y sincronización de cambios.
Cada socio conserva su externalId y puede consultar señales canónicas cuando otra fuente actualiza una persona.
Hospitales, refugios, centros de acopio, organizaciones, canales públicos, necesidades activas y recursos fuera de Venezuela.
JSON, texto, CSV o listas de URLs entran con clave de socio a una cola restringida para revisión operativa antes de promover datos canónicos.
Cualquier sitio puede verificar si un dominio pertenece a un socio federado y mostrar metadatos públicos de confianza.
El manifest, el discovery JSON, OpenAPI y el servidor MCP dan rutas consumibles por herramientas automatizadas.
Backend federado
Respuesta VE sirve como backend de federación: recibe datos de superficies aliadas, los preserva con procedencia, los limpia, los deduplica para revisión y publica una verdad normalizada cuando corresponde.
Mapa ciudadano, carga de archivos y coordinación local.
Envía reportes, personas, hospitales, pacientes restringidos, archivos, texto y recursos de la diáspora a Respuesta VE para revisión, limpieza, deduplicación y promoción a registros normalizados.
Las rutas se muestran con el prefijo completo. Los endpoints de socio aceptan `Authorization: Bearer rvk_...` o `x-api-key`.
| Método | Ruta | Acceso | Para qué | Notas |
|---|---|---|---|---|
| GET | /api/v1 | Público | Mapa JSON de versión, rutas, scopes, auth y política PII. | Punto inicial recomendado para agentes. |
| GET | /api/v1/openapi | Público | Contrato OpenAPI 3.1 completo. | Cache público de 1 hora. |
| GET | /federation.instance.json | Público | Manifest de instancia y capacidades soportadas. | Incluye dominios, eventId y apiBaseUrl. |
| GET | /api/v1/badge?domain= | Público | Verifica si un dominio es socio federado. | Normaliza protocolo, path y www. |
| Método | Ruta | Acceso | Para qué | Notas |
|---|---|---|---|---|
| POST | /api/v1/score | Scope `score` | Compara un registro contra candidatos propios. | Puro: no consulta ni guarda en base de datos. Máximo 200 candidatos. |
| POST | /api/v1/match | Scope `match` | Busca coincidencias contra el índice federado vivo. | Devuelve registros redacted con link-back a la fuente. |
| POST | /api/v1/persons | Scope `ingest` | Federa un registro con dedupe al ingresar. | Requiere record, externalId y externalUrl. Idempotente por clave + externalId. |
| GET | /api/v1/persons?q=&estado=&limit= | Scope `search` | Busca el índice aceptado por nombre y/o estado. | Requiere q de 2+ caracteres o estado. Límite máximo 50. |
| GET | /api/v1/persons/status?externalId= | Scope `search` | Consulta señales canónicas para tu propio registro. | Úsalo para reconciliar cuando otra fuente marque a alguien como ubicado. |
| GET | /api/v1/persons/changes?since=&limit= | Scope `search` | Sincroniza registros públicos aceptados desde un cursor. | since debe ser ISO. Usa nextSince como siguiente cursor. |
| Método | Ruta | Acceso | Para qué | Notas |
|---|---|---|---|---|
| POST | /api/v1/entities | Scope `ingest` | Federa una entidad verificada con canales y necesidades. | Hospitales, refugios, centros, organizaciones, canales oficiales y recursos transfronterizos. |
| GET | /api/v1/entities?q=&kind=&estado=&audienceScope=&countryCode=&limit= | Scope `search` | Busca entidades verificadas. | Requiere al menos un filtro. Límite máximo 100. |
| GET | /api/v1/entities/changes?since=&limit= | Scope `search` | Sincroniza entidades verificadas desde un cursor. | Devuelve canales públicos, necesidades activas y nextSince. |
| Método | Ruta | Acceso | Para qué | Notas |
|---|---|---|---|---|
| GET | /api/v1/public-intake | Público | Explica el contrato, límites y payload recomendado. | Útil para agentes antes de enviar datos no normalizados. |
| POST | /api/v1/public-intake | Scope `ingest` | Envía JSON, texto, CSV o URLs a revisión operativa. | Máximo 5 MiB. Devuelve receipt 202; nada se publica automáticamente. |
| GET | /api/v1/public-intake?id= | Scope `ingest` | Consulta el estado seguro de un receipt. | No devuelve el payload crudo ni contactos privados. |
score, match, search, ingest.ingest.X-RateLimit-Remaining-Minute y X-RateLimit-Remaining-Day.429 con Retry-After; errores usan { "ok": false, "error": "..." }.source de /persons queda por compatibilidad.missing, found_safe, found_injured, deceased o unknown.sourceUpdatedAt es el reloj de sincronización; updates viejos no pisan datos nuevos.in_venezuela, outside_venezuela o both; countryCode usa ISO-3166 alfa-2./persons o /entities; no auto-merge.Si tu agente no conoce el dominio, empieza por el manifest. Si conoce la API, empieza por discovery y luego OpenAPI. Usa public-intake con clave para formas desconocidas; usa `/persons` y `/entities` solo cuando tienes un registro canónico con link-back.
{
"eventId": "venezuela-earthquakes-2026",
"apiBaseUrl": "https://respuestave.org/api/v1",
"manifest": "https://respuestave.org/federation.instance.json",
"discovery": "https://respuestave.org/api/v1",
"openapi": "https://respuestave.org/api/v1/openapi",
"publicRoutes": [
"GET /api/v1",
"GET /api/v1/openapi",
"GET /federation.instance.json",
"GET /api/v1/badge?domain=",
"GET /api/v1/public-intake"
],
"keyManagement": "/desarrolladores/claves",
"partnerAuth": [
"Authorization: Bearer $RVK_API_KEY",
"x-api-key: $RVK_API_KEY"
],
"scopes": {
"score": [
"POST /api/v1/score"
],
"match": [
"POST /api/v1/match"
],
"search": [
"GET /api/v1/persons",
"GET /api/v1/persons/status",
"GET /api/v1/persons/changes",
"GET /api/v1/entities",
"GET /api/v1/entities/changes"
],
"ingest": [
"POST /api/v1/persons",
"POST /api/v1/entities",
"POST /api/v1/public-intake",
"GET /api/v1/public-intake?id="
]
},
"syncRules": [
"Treat matches as advisory; never auto-merge people.",
"Use sourceUpdatedAt when changing person/entity status so stale source data cannot overwrite newer data.",
"Use nextSince from changes responses as the next cursor.",
"Send unknown/raw shapes to public-intake for operator review before canonical promotion."
],
"privacyRules": [
"cedula and photoPhash are match-only and never returned",
"public responses use redacted records and fuzzed coordinates",
"public-intake receipts never echo raw payloads or private contacts"
]
}curl -s https://respuestave.org/api/v1/match \
-H "Authorization: Bearer $RVK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"record": {
"name": "Ana Diaz",
"age": 31,
"estado": "Lara",
"municipio": "Barquisimeto"
},
"limit": 10
}'curl -s https://respuestave.org/api/v1/entities \
-H "Authorization: Bearer $RVK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"externalId": "hospital-central-123",
"sourceUrl": "https://partner.example/hospital-central-123",
"entity": {
"kind": "hospital",
"name": "Hospital Central",
"estado": "Lara",
"municipio": "Barquisimeto",
"audienceScope": "in_venezuela",
"countryCode": "VE",
"channels": [
{"type": "website", "url": "https://partner.example/hospital-central-123", "isPrimary": true}
],
"needs": [
{"category": "medical_supplies", "title": "Gasas y solucion salina", "urgency": "high"}
]
}
}'curl -s https://respuestave.org/api/v1/public-intake \
-H "Authorization: Bearer $RVK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"eventId": "venezuela-earthquakes-2026",
"source": "volunteer-discord",
"sourceRecordId": "discord:message:123",
"contentFingerprint": "sha256:...",
"kind": "mixed",
"processingHints": {
"dedupeMode": "candidate_review_not_auto_merge",
"promotionPath": "/api/v1/entities"
},
"data": "Hospital Central solicita agua y gasas. https://example.org/post/123"
}'curl -s "https://respuestave.org/api/v1/persons/changes?since=2026-06-26T00:00:00Z&limit=100" \
-H "Authorization: Bearer $RVK_API_KEY"El servidor MCP incluido en este repo envuelve los flujos con clave de socio y la verificación de insignia. Para public-intake, llama la API HTTP con la misma clave de socio.
{
"mcpServers": {
"respuesta-ve-federation": {
"command": "node",
"args": ["/absolute/path/to/respuesta-ve/mcp-server/index.mjs"],
"env": {
"RVK_API_KEY": "rvk_your_partner_key",
"RVK_API_BASE": "https://respuestave.org/api/v1"
}
}
}
}Crea una cuenta, emite una clave y úsala desde tu servidor. La clave queda asociada a tu cuenta para poder pausar, revocar o ajustar límites si hace falta.
Las integraciones de confianza pueden pedir verificación y límites más altos cuando ya estén conectadas.