Aller au contenu

Envoyer une demande d’adhésion pour une personne (côté serveur)

POST
/v1/enroll
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.

Type de médiaapplication/json
object
email
obligatoire
string format : email
first_name
obligatoire
string
<= 50 caractères
last_name
obligatoire
string
<= 50 caractères
codicefiscale

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)

string
nullable <= 16 caractères
codicefiscale_confirmed

La personne confirme un code en désaccord avec ses données de naissance (422 codicefiscale_mismatch avec confirmable: true)

boolean
guardian

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
first_name
obligatoire
string
<= 50 caractères
last_name
obligatoire
string
<= 50 caractères
relation
obligatoire

Parent, tuteur… tel que l’association l’enregistre

string
<= 20 caractères
codicefiscale

Facultatif ; refusé s’il est malformé

string
nullable <= 16 caractères
email
string format : email
nullable
phone
string
nullable <= 20 caractères
address

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
kind
string
par défaut : residence
Valeurs autorisées : residence domicile
line
obligatoire

Rue et numéro

string
<= 150 caractères
postal_code
string
nullable <= 12 caractères
city
obligatoire
string
<= 150 caractères
province

Adresses italiennes seulement (deux lettres) ; ignorée à l’étranger

string
nullable <= 2 caractères
country

ISO 3166-1 alpha-2

string
par défaut : IT >= 2 caractères <= 2 caractères
phone
string
nullable <= 20 caractères
dob
string format : date
nullable
gender

Démographique seulement : il n’est pas comparé avec le code

string
nullable
Valeurs autorisées : M F
birthplace

Comune (né en Italie) ou ville, texte libre (né à l’étranger)

string
nullable <= 150 caractères
birth_country

ISO 3166-1 alpha-2

string
nullable >= 2 caractères <= 2 caractères
membership_type

L’un des types d’adhésion de l’association (à omettre quand elle en a exactement un)

string format : uuid
locale

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

string
nullable
accept_statuto
obligatoire

Le statuto en vigueur que la personne a accepté sur votre site (depuis GET /v1/aps/{slug})

object
version
obligatoire
integer
sha256
string
privacy_notice

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
version
obligatoire

La version en vigueur de la notice affichée (GET /v1/aps/{slug} → privacy_notice)

integer
sha256
string
locale

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

string
accept_terms

Les conditions du compte (platform_terms) que la personne a acceptées sur votre site — facultatif, doit nommer la version en vigueur

object
version
obligatoire

Le libellé de la version en vigueur affichée (GET /v1/legal/{kind})

string
sha256

L’empreinte de son modèle, quand elle est publiée

string
acknowledge_privacy

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
version
obligatoire

Le libellé de la version en vigueur affichée (GET /v1/legal/{kind})

string
sha256

L’empreinte de son modèle, quand elle est publiée

string

Accepté

Type de médiaapplication/json
object
status
obligatoire
string
Valeurs autorisées : accepted
Exemple
{
"status": "accepted"
}

Requête invalide

Type de médiaapplication/problem+json
object
type
obligatoire
string format : uri
title
obligatoire
string
status
obligatoire
integer
detail
string
code
obligatoire
string
request_id
string
errors
Array<object>
object
field
string
code
string
message
string
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

Type de médiaapplication/problem+json
object
type
obligatoire
string format : uri
title
obligatoire
string
status
obligatoire
integer
detail
string
code
obligatoire
string
request_id
string
errors
Array<object>
object
field
string
code
string
message
string
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

Type de médiaapplication/problem+json
object
type
obligatoire
string format : uri
title
obligatoire
string
status
obligatoire
integer
detail
string
code
obligatoire
string
request_id
string
errors
Array<object>
object
field
string
code
string
message
string
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

Type de médiaapplication/problem+json
object
type
obligatoire
string format : uri
title
obligatoire
string
status
obligatoire
integer
detail
string
code
obligatoire
string
request_id
string
errors
Array<object>
object
field
string
code
string
message
string
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

Type de médiaapplication/problem+json
object
type
obligatoire
string format : uri
title
obligatoire
string
status
obligatoire
integer
detail
string
code
obligatoire
string
request_id
string
errors
Array<object>
object
field
string
code
string
message
string
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"
}
]
}