Saltar al contenido
Cannis
API

Tres endpoints y nada más

La superficie pública es chica a propósito: dos consultas abiertas de datos de referencia y una escritura autenticada. Alcanza para que el sitio de una organización reciba solicitudes de pacientes sin sacar a nadie de su propia web.

01 Base y formato

Todo cuelga del prefijo /api y responde application/json. Es una API sin estado: no hay cookies ni sesión, y el cuerpo de las respuestas siempre trae un status.

BaseHTTPS
https://cannis.org/api

Los dos endpoints abiertos están limitados a 60 pedidos por minuto por IP. Si vas a poblar un selector, cacheá la respuesta del lado de tu sitio: las provincias no cambian.

02 Autenticación

Provincias y localidades son abiertas. La escritura no: va con un token que se emite por organización y viaja en el encabezado Authorization. El token identifica a la organización, así que no hace falta —ni se puede— mandar cuál es: la solicitud queda asociada a la que emitió el token.

EncabezadoBearer
Authorization: Bearer <tu-token>
Accept: application/json
  • Un token puede tener fecha de vencimiento o no tenerla.
  • Un token revocado deja de funcionar al instante.
  • Cada uso queda registrado: se puede auditar qué integración escribió qué.
Qué pasa con tu pedido
1 Llega el token
2 Se resuelve la organización
3 Se valida el cuerpo
4 Se crea la solicitud y se avisa por mail

03 Provincias

GET /api/provincias Sin token

Devuelve las provincias argentinas con el identificador que después espera el alta de solicitud. Sin parámetros.

Respuesta · 200
JSONArray
[
  { "id_provincia": 1, "nombre": "Buenos Aires" },
  { "id_provincia": 2, "nombre": "Catamarca" }
]
Ejemplo
curlbash
curl https://cannis.org/api/provincias

04 Localidades

GET /api/localidades Sin token

Las localidades de una provincia. El clásico segundo selector.

Parámetros de consulta
id_provincia* entero El id_provincia que devolvió el endpoint anterior. Tiene que existir.
Respuesta · 200
JSONArray
[
  { "id": 1042, "nombre": "Rosario" },
  { "id": 1043, "nombre": "Venado Tuerto" }
]
Ejemplo
curlbash
curl "https://cannis.org/api/localidades?id_provincia=21"

Guardate el id: es lo que después va en el campo localidad del alta de solicitud, igual que el id_provincia va en provincia.

05 Solicitud de paciente

El único endpoint que escribe. Está pensado para el formulario de ingreso que una organización publica en su propio sitio: la persona completa sus datos ahí y la solicitud entra al panel de esa organización, que recibe además un aviso por correo.

POST /api/post/solicitud_paciente Con token

Se envía como multipart/form-data, porque admite archivos. Está protegido con reCAPTCHA: el formulario tiene que resolverlo del lado del navegador y mandar el resultado.

Los nombres de campo de esta página describen qué datos pide el endpoint, no cómo se llaman exactamente en el cuerpo del pedido. Los nombres definitivos te los pasamos junto con el token, cuando coordinamos la integración.

Identidad y contacto
nombre* texto · 100 Nombre de la persona.
apellido* texto · 100 Apellido.
documento* 8 a 9 dígitos Sólo números. Único por organización: si esa persona ya mandó una solicitud, la segunda se rechaza.
numero_tramite texto · 20 Número de trámite del DNI. Opcional.
fecha_nacimiento* fecha Formato AAAA-MM-DD.
email* email · 255 Único por organización.
celular* texto · 20 Único por organización.
profesion texto · 100 Opcional.
Domicilio
provincia* entero El id_provincia del endpoint de provincias.
localidad* entero El id del endpoint de localidades.
calle* texto · 255 Calle.
numero* texto · 10 Altura.
REPROCANN y consentimiento
reprocann* booleano Si la persona ya tiene REPROCANN.
estado_reprocann texto · 5 El estado del trámite, si lo sabe.
consentimiento* tiene que valer 1 Sin consentimiento informado no hay solicitud. No es un formalismo: es el requisito legal.
captcha* texto El token que devuelve reCAPTCHA en tu formulario.
Archivos y texto libre
carnet_reprocann PDF · 5 MB El carnet de REPROCANN.
declaracion_jurada PDF · 5 MB Declaración jurada.
consentimiento_bilateral PDF · 5 MB Consentimiento firmado por las dos partes.
descripcion texto Lo que la persona quiera contar de su caso.
informacion_adicional texto Campo libre para lo que tu formulario necesite guardar.
La forma del pedido
curlEjemplo ilustrativo
curl -X POST https://cannis.org/api/post/solicitud_paciente \
  -H "Authorization: Bearer <tu-token>" \
  -H "Accept: application/json" \
  -F "nombre=Lucía" \
  -F "apellido=Fernández" \
  -F "documento=30111222" \
  -F "fecha_nacimiento=1983-04-12" \
  -F "[email protected]" \
  -F "celular=3415551234" \
  -F "provincia=21" \
  -F "localidad=1042" \
  -F "calle=San Martín" \
  -F "numero=1234" \
  -F "reprocann=1" \
  -F "consentimiento=1" \
  -F "captcha=<token-del-captcha>" \
  -F "[email protected]"
Respuesta · 200
JSONObjeto
{
  "status": "success",
  "message": "Tu solicitud ha sido enviada exitosamente."
}

06 Errores

Los errores de validación vienen en messages, ya redactados en español y con el nombre legible del campo: se pueden mostrar tal cual al lado del formulario.

JSON422
{
  "status": "error",
  "messages": [
    "Email: Ya existe un registro con ese Email en esta ONG.",
    "Documento: El Documento debe contener entre 8 y 9 números."
  ]
}
401 Sin token Falta el encabezado Authorization o no arranca con Bearer.
403 Token inválido Está revocado, venció, o no tiene una organización asociada.
422 Validación Faltan campos, hay duplicados o el reCAPTCHA no verificó.
429 Demasiados pedidos Se pasó del límite por minuto de los endpoints abiertos.

¿Vas a integrarte? Escribinos: el token se emite por organización y te acompañamos en la primera prueba.