Enviar una solicitud de inscripción para una persona (desde el servidor)
const url = 'https://api.vimine.network/v1/enroll';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"email":"hello@example.com","first_name":"example","last_name":"example","codicefiscale":"example","codicefiscale_confirmed":true,"guardian":{"first_name":"example","last_name":"example","relation":"example","codicefiscale":"example","email":"hello@example.com","phone":"example"},"address":{"kind":"residence","line":"example","postal_code":"example","city":"example","province":"example","country":"IT"},"phone":"example","dob":"2026-04-15","gender":"M","birthplace":"example","birth_country":"example","membership_type":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0","locale":"example","accept_statuto":{"version":1,"sha256":"example"},"privacy_notice":{"version":1,"sha256":"example","locale":"example"},"accept_terms":{"version":"example","sha256":"example"},"acknowledge_privacy":{"version":"example","sha256":"example"}}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.vimine.network/v1/enroll \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "email": "hello@example.com", "first_name": "example", "last_name": "example", "codicefiscale": "example", "codicefiscale_confirmed": true, "guardian": { "first_name": "example", "last_name": "example", "relation": "example", "codicefiscale": "example", "email": "hello@example.com", "phone": "example" }, "address": { "kind": "residence", "line": "example", "postal_code": "example", "city": "example", "province": "example", "country": "IT" }, "phone": "example", "dob": "2026-04-15", "gender": "M", "birthplace": "example", "birth_country": "example", "membership_type": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "locale": "example", "accept_statuto": { "version": 1, "sha256": "example" }, "privacy_notice": { "version": 1, "sha256": "example", "locale": "example" }, "accept_terms": { "version": "example", "sha256": "example" }, "acknowledge_privacy": { "version": "example", "sha256": "example" } }'Crea la identidad, cuando la dirección es nueva, y la solicitud de inscripción (emitida ACTIVE de inmediato para un tipo gratuito que no requiere aprobación; si no, PENDING hasta que la asociación registra la cuota y/o la aprueba). Una dirección que ya tiene una cuenta de Vimine nunca se vincula en silencio: su titular recibe un enlace de confirmación y la solicitud se crea cuando lo usa. Responde siempre 202. accept_statuto debe nombrar la versión del estatuto en vigor (y el sha256 cuando se publica). Solo tokens de cliente (enroll:write); acepta Idempotency-Key.
Autorizaciones
Sección titulada «Autorizaciones»Cuerpo de la peticiónobligatorio
Sección titulada «Cuerpo de la peticiónobligatorio»object
Opcional. Una persona se identifica con un código fiscal O con dob + birthplace + birth_country — nunca sin ninguno de los dos (422 required en cada dato que falte). Cuando está presente, se valida y se coteja con el nombre y los apellidos, la fecha y el lugar (el país, para las personas nacidas en el extranjero)
La persona confirma un código que no coincide con sus datos (422 codicefiscale_mismatch con confirmable: true)
Quien ejerce la responsabilidad parental sobre un menor (menos de 18 años según dob). OBLIGATORIO para un menor donde la asociación ha declarado que recoge este bloque (aps.collects_guardian_data): si no, 422 required en guardian; solo se guarda donde la asociación lo ha declarado
object
Progenitor, tutor… tal como lo registra la asociación
Opcional; se rechaza si está mal formado
Residencia o, cuando difiere, domicilio. Se pide a todos los socios o a ninguno: el perfil público dice lo que ha declarado la asociación (member_address: none — se ignora, no se guarda · optional · required — 422 required en address sin ella)
object
Calle y número
Solo direcciones italianas (dos letras); se descarta para las del extranjero
ISO 3166-1 alpha-2
Solo demográfico: no se coteja
Comune (nacidos en Italia) o ciudad, texto libre (nacidos en el extranjero)
ISO 3166-1 alpha-2
Uno de los tipos de carné de la asociación (omítelo cuando tiene exactamente uno)
El idioma de la página que ha rellenado la persona (un idioma de la plataforma — it, en, …; cualquier otra etiqueta se reduce a uno de los de la plataforma: en-GB → en, zh-TW → zh-Hant). Decide el idioma de los correos que siguen y se convierte en la preferencia de una cuenta NUEVA; una cuenta existente conserva la suya. Los valores no admitidos se ignoran
El estatuto en vigor que la persona ha aceptado en tu sitio (de GET /v1/aps/{slug})
object
La política de privacidad de la asociación que la persona ha leído en tu sitio (GET /v1/aps/{slug} → privacy_notice). OBLIGATORIO cuando la asociación publica una; 422 privacy_notice_outdated cuando no es la versión en vigor
object
La versión en vigor de la política que se ha mostrado (GET /v1/aps/{slug} → privacy_notice)
El idioma de la política que mostraste (privacy_notice.locale de la respuesta en la que la leíste). Cada idioma es un documento propio, con su propia versión: indícalo cuando leas el perfil con ?locale=. Por defecto: el locale de la petición y, después, el idioma de la asociación
Las condiciones de la cuenta (platform_terms) que la persona ha aceptado en tu sitio — opcional, debe nombrar la versión en vigor
object
La etiqueta de la versión en vigor que se ha mostrado (GET /v1/legal/{kind})
El hash de su plantilla, cuando se publica
La política de privacidad de la plataforma (platform_privacy) que la persona ha leído — opcional, misma regla
object
La etiqueta de la versión en vigor que se ha mostrado (GET /v1/legal/{kind})
El hash de su plantilla, cuando se publica
Respuestas
Sección titulada «Respuestas»Aceptada
object
Ejemplo
{ "status": "accepted"}Petición no válida
object
object
Ejemplogenerado
{ "type": "https://example.com", "title": "example", "status": 1, "detail": "example", "code": "example", "request_id": "example", "errors": [ { "field": "example", "code": "example", "message": "example" } ]}Credenciales ausentes o no válidas
object
object
Ejemplogenerado
{ "type": "https://example.com", "title": "example", "status": 1, "detail": "example", "code": "example", "request_id": "example", "errors": [ { "field": "example", "code": "example", "message": "example" } ]}La asociación no acepta solicitudes de inscripción (api_disabled)
No encontrado
object
object
Ejemplogenerado
{ "type": "https://example.com", "title": "example", "status": 1, "detail": "example", "code": "example", "request_id": "example", "errors": [ { "field": "example", "code": "example", "message": "example" } ]}Validación fallida, tipo de carné desconocido o accept_statuto no nombra el estatuto en vigor
Límite de frecuencia superado
object
object
Ejemplogenerado
{ "type": "https://example.com", "title": "example", "status": 1, "detail": "example", "code": "example", "request_id": "example", "errors": [ { "field": "example", "code": "example", "message": "example" } ]}Error interno
object
object
Ejemplogenerado
{ "type": "https://example.com", "title": "example", "status": 1, "detail": "example", "code": "example", "request_id": "example", "errors": [ { "field": "example", "code": "example", "message": "example" } ]}