Skip to content

Confirm a membership request submitted on your behalf (link from the e-mail)

POST
/v1/enroll/confirm
curl --request POST \
--url https://api.vimine.network/v1/enroll/confirm \
--header 'Content-Type: application/json' \
--data '{ "token": "example", "identification": { "dob": "2026-04-15", "birthplace": "example", "birth_country": "example", "codicefiscale": "example", "codicefiscale_confirmed": true }, "address": { "kind": "residence", "line": "example", "postal_code": "example", "city": "example", "province": "example", "country": "IT" } }'

Consumes the token carried by the confirmation link and creates the pending membership request. Replay-idempotent: using the link twice just reports the current status.

Media typeapplication/json
object
token
required
string
identification

Only after a 409 identification_required: what the account still lacks — a fiscal code, or date, place and country of birth. Completes the EMPTY fields of the profile, never over what is there

object
dob
string format: date
birthplace
string
<= 150 characters
birth_country
string
>= 2 characters <= 2 characters
codicefiscale
string
<= 16 characters
codicefiscale_confirmed
boolean
address

Only after a 409 address_required: the association asks every member for an address (member_address: required on its public profile). Optional where it declared optional; ignored where it collects none

object
kind
string
default: residence
Allowed values: residence domicile
line
required

Street and number

string
<= 150 characters
postal_code
string
nullable <= 12 characters
city
required
string
<= 150 characters
province

Italian addresses only (two letters); dropped abroad

string
nullable <= 2 characters
country

ISO 3166-1 alpha-2

string
default: IT >= 2 characters <= 2 characters

The membership request in the association

Media typeapplication/json
object
status
required
string
Allowed values: pending active suspended revoked rejected
already
required

The person already had a membership request or membership here

boolean
pending_reasons

Why the membership is still pending, in order: the association’s approval first (when it admits by decision of its board), then the fee. Empty when active

Array<string>
Allowed values: approval payment
payment_open

May the fee be paid yet? False while the approval is pending: approval opens payment

boolean
valid_from

When the card becomes usable, for an active membership inside the association’s usability delay; null otherwise

string format: date-time
nullable
association
required
object
name
string
slug
string
event

Only for a link sent by the association’s hosted enrolment page when that page was opened from one of its public events: what became of the place the person asked for together with the request. null for every other link

object
slug
string
title
string
starts_at
string format: date-time
timezone
string
place
string
nullable
registration_type
object
uid
string format: uuid
name
string
amount

0 = free

number
currency
string
state

confirmed: the place is theirs. reserved: held, see waiting. held: the membership request itself still waits for the address to be confirmed, and no place was asked for. unavailable: no place, see reasons

string
Allowed values: confirmed reserved held unavailable
waiting

What a reserved place waits for: the membership to become active (it is then confirmed by itself when free), the contribution, or both

Array<string>
Allowed values: membership contribution
reasons

Why the place is unavailable: the reasons of GET /v1/events/{slug}/eligibility

Array<string>
reserved_until
string format: date-time
nullable
payment_instructions

How to pay a contribution that is owed, in the association’s words

string
nullable
already

The person held this place before the link was used

boolean
Example
{
"status": "pending",
"pending_reasons": [
"approval"
],
"event": {
"state": "confirmed",
"waiting": [
"membership"
]
}
}

The link is invalid or has expired (invalid_token)

Not found

Media typeapplication/problem+json
object
type
required
string format: uri
title
required
string
status
required
integer
detail
string
code
required
string
request_id
string
errors
Array<object>
object
field
string
code
string
message
string
Examplegenerated
{
"type": "https://example.com",
"title": "example",
"status": 1,
"detail": "example",
"code": "example",
"request_id": "example",
"errors": [
{
"field": "example",
"code": "example",
"message": "example"
}
]
}

The statuto changed since the link was sent (statuto_outdated); the account is not identified yet (identification_required, errors[] names what is missing): post the token again with identification; or the association asks every member for an address (address_required): post the token again with address

The identification block does not hold (validation_failed)

Rate limited

Media typeapplication/problem+json
object
type
required
string format: uri
title
required
string
status
required
integer
detail
string
code
required
string
request_id
string
errors
Array<object>
object
field
string
code
string
message
string
Examplegenerated
{
"type": "https://example.com",
"title": "example",
"status": 1,
"detail": "example",
"code": "example",
"request_id": "example",
"errors": [
{
"field": "example",
"code": "example",
"message": "example"
}
]
}

Internal error

Media typeapplication/problem+json
object
type
required
string format: uri
title
required
string
status
required
integer
detail
string
code
required
string
request_id
string
errors
Array<object>
object
field
string
code
string
message
string
Examplegenerated
{
"type": "https://example.com",
"title": "example",
"status": 1,
"detail": "example",
"code": "example",
"request_id": "example",
"errors": [
{
"field": "example",
"code": "example",
"message": "example"
}
]
}