Envoyer une demande d’adhésion pour une personne (côté serveur)
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" } }'Crée l’identité quand l’adresse est nouvelle, et la demande d’adhésion (émise à l’état ACTIVE tout de suite pour un type gratuit sans approbation, sinon à l’état PENDING jusqu’à ce que l’association enregistre la cotisation et/ou donne son approbation). Une adresse qui a déjà un compte Vimine n’est jamais liée en silence : son titulaire reçoit un lien de confirmation et la demande est créée quand il l’utilise. Répond toujours 202. accept_statuto doit nommer la version du statuto en vigueur (et son sha256 quand il est publié). Jetons client seulement (enroll:write) ; accepte Idempotency-Key.
Autorisations
Section intitulée « Autorisations »Corps de la requêteobligatoire
Section intitulée « Corps de la requêteobligatoire »object
Facultatif. Une personne est identifiée par un code fiscal OU par dob + birthplace + birth_country — jamais ni l’un ni l’autre (422 required sur chaque donnée de naissance manquante). Quand il est présent, il est validé et comparé avec les noms, la date et le lieu (l’État, pour les personnes nées à l’étranger)
La personne confirme un code en désaccord avec ses données de naissance (422 codicefiscale_mismatch avec confirmable: true)
La personne qui exerce l’autorité parentale sur un mineur (moins de 18 ans d’après dob). OBLIGATOIRE pour un mineur là où l’association a déclaré recueillir ce bloc (aps.collects_guardian_data) : sinon 422 required sur guardian ; conservé seulement là où elle l’a déclaré
object
Parent, tuteur… tel que l’association l’enregistre
Facultatif ; refusé s’il est malformé
Adresse de résidence ou, si le domicile est différent, de domicile. Demandée à tous les membres ou à aucun : le profil public dit ce que l’association a déclaré (member_address : none — ignorée, non conservée · optional · required — 422 required sur address sans elle)
object
Rue et numéro
Adresses italiennes seulement (deux lettres) ; ignorée à l’étranger
ISO 3166-1 alpha-2
Démographique seulement : il n’est pas comparé avec le code
Comune (né en Italie) ou ville, texte libre (né à l’étranger)
ISO 3166-1 alpha-2
L’un des types d’adhésion de l’association (à omettre quand elle en a exactement un)
La langue de la page que la personne a remplie (une langue de la plateforme — it, en, … ; toute autre étiquette est ramenée à celles de la plateforme : en-GB → en, zh-TW → zh-Hant). Elle décide de la langue des e-mails qui suivent et devient la préférence d’un NOUVEAU compte ; un compte existant garde la sienne. Les valeurs non prises en charge sont ignorées
Le statuto en vigueur que la personne a accepté sur votre site (depuis GET /v1/aps/{slug})
object
La notice d’information de l’association que la personne a lue sur votre site (GET /v1/aps/{slug} → privacy_notice). OBLIGATOIRE quand l’association en publie une ; 422 privacy_notice_outdated quand ce n’est pas la version en vigueur
object
La version en vigueur de la notice affichée (GET /v1/aps/{slug} → privacy_notice)
La langue de la notice que vous avez affichée (privacy_notice.locale de la réponse dans laquelle vous l’avez lue). Chaque langue est un document à part, avec sa propre version : nommez-la quand vous lisez le profil avec ?locale=. Par défaut : le locale de la requête, puis la langue de l’association
Les conditions du compte (platform_terms) que la personne a acceptées sur votre site — facultatif, doit nommer la version en vigueur
object
Le libellé de la version en vigueur affichée (GET /v1/legal/{kind})
L’empreinte de son modèle, quand elle est publiée
La notice d’information sur la vie privée de la plateforme (platform_privacy) que la personne a lue — facultatif, même règle
object
Le libellé de la version en vigueur affichée (GET /v1/legal/{kind})
L’empreinte de son modèle, quand elle est publiée
Réponses
Section intitulée « Réponses »Accepté
object
Exemple
{ "status": "accepted"}Requête invalide
object
object
Exemplegénéré
{ "type": "https://example.com", "title": "example", "status": 1, "detail": "example", "code": "example", "request_id": "example", "errors": [ { "field": "example", "code": "example", "message": "example" } ]}Identifiants manquants ou invalides
object
object
Exemplegénéré
{ "type": "https://example.com", "title": "example", "status": 1, "detail": "example", "code": "example", "request_id": "example", "errors": [ { "field": "example", "code": "example", "message": "example" } ]}L’association n’accepte pas de demandes d’adhésion (api_disabled)
Introuvable
object
object
Exemplegénéré
{ "type": "https://example.com", "title": "example", "status": 1, "detail": "example", "code": "example", "request_id": "example", "errors": [ { "field": "example", "code": "example", "message": "example" } ]}Échec de la validation, type d’adhésion inconnu, ou accept_statuto ne nomme pas le statuto en vigueur
Limite de débit atteinte
object
object
Exemplegénéré
{ "type": "https://example.com", "title": "example", "status": 1, "detail": "example", "code": "example", "request_id": "example", "errors": [ { "field": "example", "code": "example", "message": "example" } ]}Erreur interne
object
object
Exemplegénéré
{ "type": "https://example.com", "title": "example", "status": 1, "detail": "example", "code": "example", "request_id": "example", "errors": [ { "field": "example", "code": "example", "message": "example" } ]}