Saltar al contenido
API pública

Solicitudes desde el sitio de tu organización

La API sirve para que una organización que usa Cannis OS reciba las solicitudes de ingreso que la gente completa en su propio sitio web, sin mandar a nadie a otra página. Tiene dos consultas abiertas —provincias y localidades— y el alta de la solicitud, con un token de la organización que Cannis entrega a pedido.

01 Antes de empezar

Cada solicitud que llega por la API entra a Cannis OS, en «Solicitudes de afiliación» de tu organización, marcada como llegada por su sitio, y la organización recibe un aviso por correo. Desde ahí se aprueba o se rechaza como cualquier otra.

  • El acceso se pide. Cannis lo configura para tu organización y te entrega el token junto con los nombres definitivos de los campos.
  • El alta se manda desde el servidor de tu sitio. El formulario que ve la persona le habla a tu servidor, y tu servidor a Cannis: el token nunca viaja al navegador.
  • El reCAPTCHA se resuelve en el formulario. La persona lo resuelve en tu sitio y tu servidor manda el resultado junto con la solicitud.
Cómo viaja una solicitud
1 La persona completa el formulario de tu sitio y el reCAPTCHA
2 Tu servidor la manda a Cannis con el token
3 Cannis valida los datos y el reCAPTCHA
4 La solicitud entra a Cannis OS y llega el aviso por correo

02 Base y formato

Todo cuelga del prefijo /api y responde JSON. Es una API sin estado: no usa cookies ni sesión. Mandá siempre el encabezado Accept: application/json: sin él, algunos errores —como el de demasiados pedidos— pueden llegar como una página web en lugar de JSON.

Las respuestas no tienen todas la misma forma: las dos consultas devuelven un arreglo y el alta, un objeto con su status. Cada sección muestra la suya.

BaseHTTPS
https://asesores.cannis.org/api

Las dos consultas abiertas aceptan hasta 60 pedidos por minuto desde una misma IP. Si las usás para llenar un selector, guardá la respuesta en tu sitio: las provincias y las localidades casi no cambian.

03 Autenticación

Provincias y localidades son abiertas. El alta 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 del 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.
  • Queda registrado cada uso del token.
  • El token es secreto: va en el servidor de tu sitio, nunca en el código que corre en el navegador. Quien lo tenga puede cargar solicitudes a nombre de tu organización; si se filtró, pedí que lo revoquen.

04 Provincias

GET /api/provincias Sin token

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

Respuesta · 200
JSONArreglo
[
  { "id_provincia": 1, "nombre": "Buenos Aires" },
  { "id_provincia": 2, "nombre": "Catamarca" }
]
Ejemplo
curlbash
curl -H "Accept: application/json" https://asesores.cannis.org/api/provincias

05 Localidades

GET /api/localidades Sin token

Las localidades de una provincia: el clásico segundo selector. La respuesta es un arreglo.

Parámetros de consulta
id_provincia* entero El id_provincia que devolvió la consulta de provincias. Tiene que existir.
Respuesta · 200
JSONArreglo
[
  { "id": 1042, "nombre": "Rosario" },
  { "id": 1043, "nombre": "Venado Tuerto" }
]
Respuesta · 422

Si falta id_provincia o no existe, los errores vienen por campo:

JSON422
{
  "message": "Parámetros inválidos",
  "errors": {
    "id_provincia": [ "El campo id provincia es obligatorio." ]
  }
}
Ejemplo
curlbash
curl -H "Accept: application/json" "https://asesores.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.

06 Solicitud de ingreso

Es el alta del formulario de ingreso que una organización publica en su propio sitio: la persona completa sus datos ahí, tu servidor los manda y la solicitud entra a Cannis OS, en «Solicitudes de afiliación» de tu organización.

POST /api/post/solicitud_paciente Con token

Se envía como multipart/form-data, porque admite archivos, y desde tu servidor. Está protegido con reCAPTCHA: la persona lo resuelve en el formulario y tu servidor manda el resultado.

Los nombres de campo de esta página describen qué datos pide el alta, no cómo se llaman exactamente en el cuerpo del pedido. Los nombres definitivos te los pasamos junto con el token, cuando configuramos el acceso de tu organizació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 de la consulta de provincias.
localidad* entero El id de la consulta 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 resultado del reCAPTCHA que la persona resolvió en tu formulario.
Archivos y texto libre
carnet_reprocann PDF · 5 MB El carnet de REPROCANN. Opcional.
declaracion_jurada PDF · 5 MB Declaración jurada. Opcional.
consentimiento_bilateral PDF · 5 MB Consentimiento firmado por las dos partes. Opcional.
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://asesores.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=<resultado-del-recaptcha>" \
  -F "[email protected]"
Respuesta · 200
JSONObjeto
{
  "status": "success",
  "message": "Tu solicitud ha sido enviada exitosamente."
}

07 Errores

Los errores del alta traen "status": "error". Los 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 · datos
{
  "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."
  ]
}

Si el reCAPTCHA no verifica, el 422 trae errors —un objeto con el campo y sus mensajes— en lugar de messages:

JSON422 · reCAPTCHA
{
  "status": "error",
  "errors": {
    "captcha": [ "Error en la verificación de reCAPTCHA." ]
  }
}

Sin token, o con uno que no sirve, la respuesta es un objeto con status y message:

JSON401
{
  "status": "error",
  "message": "Token API no proporcionado."
}
401 Sin token Falta el encabezado Authorization o no empieza con Bearer.
403 Token inválido Está revocado, venció o no tiene una organización asociada.
422 Validación En el alta, faltan campos o están mal, hay un duplicado o el reCAPTCHA no verificó. En localidades, falta la provincia o no existe.
429 Demasiados pedidos Se pasó del límite por minuto de las consultas abiertas. Con Accept: application/json llega como {"message": "Too Many Attempts."}, con el encabezado Retry-After: los segundos que hay que esperar.

¿Tu organización quiere recibir solicitudes desde su sitio? Pedí el acceso por WhatsApp: Cannis lo configura para tu organización. Si todavía no está en Cannis, sumala primero.