Respuesta VE

Humanitarian Federation API

API para desarrolladores y agentes

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.

Puntos de entrada

Base URLhttps://respuestave.org/api/v1Descubrimiento JSONhttps://respuestave.org/api/v1OpenAPI 3.1https://respuestave.org/api/v1/openapiManifest de instanciahttps://respuestave.org/federation.instance.json

Instancia de una plataforma abierta

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

Qué soporta hoy

Personas desaparecidas

Score local, match contra el índice vivo, ingest idempotente, búsqueda pública redacted y sincronización de cambios.

Estado federado

Cada socio conserva su externalId y puede consultar señales canónicas cuando otra fuente actualiza una persona.

Entidades de coordinación

Hospitales, refugios, centros de acopio, organizaciones, canales públicos, necesidades activas y recursos fuera de Venezuela.

Intake autenticado

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.

Insignias de socios

Cualquier sitio puede verificar si un dominio pertenece a un socio federado y mostrar metadatos públicos de confianza.

Contratos para agentes

El manifest, el discovery JSON, OpenAPI y el servidor MCP dan rutas consumibles por herramientas automatizadas.

Backend federado

Sitios conectados a Respuesta VE

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.

Intake de datos en cualquier forma para revisión operativaLimpieza y normalización hacia personas, entidades, necesidades y canalesDeduplicación revisable, nunca fusión automática irreversible
Ver red de socios

terremotovenezuela.app

Conectado ahora

Mapa ciudadano, carga de archivos y coordinación local.

Abrir sitio

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.

Qué procesa

Reportes del mapaPersonasHospitalesArchivos y textoAcopio fuera de Venezuela

Reglas de seguridad y privacidad

  • - La cédula y las huellas de foto se usan solo para encontrar coincidencias; nunca se devuelven.
  • - Las coordenadas precisas y contactos privados no salen por la API pública; las respuestas usan proyecciones verificadas y coordenadas difuminadas.
  • - Las coincidencias son señales asesoras. La API no fusiona ni resuelve registros de forma destructiva.
  • - Los datos crudos enviados por public-intake quedan restringidos hasta que operadores los revisen.

Catálogo completo de endpoints

Las rutas se muestran con el prefijo completo. Los endpoints de socio aceptan `Authorization: Bearer rvk_...` o `x-api-key`.

Descubrimiento público

MétodoRutaAccesoPara quéNotas
GET/api/v1PúblicoMapa JSON de versión, rutas, scopes, auth y política PII.Punto inicial recomendado para agentes.
GET/api/v1/openapiPúblicoContrato OpenAPI 3.1 completo.Cache público de 1 hora.
GET/federation.instance.jsonPúblicoManifest de instancia y capacidades soportadas.Incluye dominios, eventId y apiBaseUrl.
GET/api/v1/badge?domain=PúblicoVerifica si un dominio es socio federado.Normaliza protocolo, path y www.

Personas desaparecidas

MétodoRutaAccesoPara quéNotas
POST/api/v1/scoreScope `score`Compara un registro contra candidatos propios.Puro: no consulta ni guarda en base de datos. Máximo 200 candidatos.
POST/api/v1/matchScope `match`Busca coincidencias contra el índice federado vivo.Devuelve registros redacted con link-back a la fuente.
POST/api/v1/personsScope `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.

Entidades, necesidades y canales

MétodoRutaAccesoPara quéNotas
POST/api/v1/entitiesScope `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.

Intake público restringido

MétodoRutaAccesoPara quéNotas
GET/api/v1/public-intakePúblicoExplica el contrato, límites y payload recomendado.Útil para agentes antes de enviar datos no normalizados.
POST/api/v1/public-intakeScope `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.

Autenticación, límites y errores

  • - Scopes disponibles: score, match, search, ingest.
  • - Crea una cuenta en esta web para emitir una clave inicial; el equipo puede pausar, revocar o ajustar límites por cuenta.
  • - Los cuerpos JSON de endpoints de socio tienen límite de 256 KiB; public-intake acepta hasta 5 MiB con scope ingest.
  • - Las respuestas exitosas de socio incluyen X-RateLimit-Remaining-Minute y X-RateLimit-Remaining-Day.
  • - Rate limit devuelve 429 con Retry-After; errores usan { "ok": false, "error": "..." }.
  • - La fuente de ingest se toma de la clave de API, no del body. El campo source de /persons queda por compatibilidad.

Modelos clave

PersonInput

name
Requerido. Nombre reportado.
age, estado, municipio
Opcionales para mejorar scoring y búsqueda.
cedula, photoPhash
Opcionales y solo para match; nunca se devuelven. photoPhash debe ser dHash hex de 16 caracteres.
status
missing, found_safe, found_injured, deceased o unknown.
lastSeenAt, sourceUpdatedAt
sourceUpdatedAt es el reloj de sincronización; updates viejos no pisan datos nuevos.

EntityInput

kind, name
Requeridos. kind cubre hospital, clinic, shelter, donation_center, supply_hub, organization y más.
audienceScope, countryCode
in_venezuela, outside_venezuela o both; countryCode usa ISO-3166 alfa-2.
lat, lng, address
lat/lng se guardan precisos pero salen difuminados; address no sale por la API pública.
channels
Hasta 20 canales: website, phone_public, whatsapp_public, donation_url, volunteer_form, social, etc.
needs
Hasta 50 necesidades con categoría, urgencia, cantidad opcional y expiresAt.

PublicIntakeRequest

Payload libre
Objeto JSON, array, string, texto plano o CSV.
sourceRecordId, contentFingerprint
Recomendados para dedupe humano-operativo.
processingHints, canonicalCandidates
Guían promoción posterior a /persons o /entities; no auto-merge.
contact, notes, media metadata
Se preservan como campos restringidos, no como recibo público.

Contrato rápido para agentes

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"
  ]
}

Ejemplos copiables

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"

MCP para agentes

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.

Herramientas MCP disponibles

match_personscore_personssearch_personssubmit_personget_person_statuslist_person_changessubmit_entitysearch_entitieslist_entity_changesverify_badge
{
  "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"
      }
    }
  }
}

Crear cuenta y clave

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.