API publique
import { publicApi } from '@vimine/sdk';const api = publicApi(); // ou vimine.public / vimineServer.publicLes endpoints qui n’exigent ni identifiants ni connexion. Utilisables depuis n’importe quelle page, depuis un scanner,
depuis un serveur. publicApi({ apiUrl?, fetch? }) accepte les mêmes options réseau que les autres classes.
| Méthode | Endpoint | |
|---|---|---|
verifyCard(cardToken) |
GET /v1/verify/{card_token} |
« cette carte est-elle active en ce moment ? » — seulement l’état et la fin de validité |
association(slug, { locale }?) |
GET /v1/aps/{slug} |
profil public : identité visuelle, types d’adhésion avec les cotisations, statuto en vigueur, façon d’admettre les membres, recueil ou non de leur adresse (member_address) |
validateFiscalCode(input) |
POST /v1/validate/fiscal-code |
structure et caractère de contrôle ; avec les données personnelles, leur cohérence aussi — et ce que contient le code (birth_date, birth_country). Pour une personne née à l’étranger, envoyez country |
cardKeys() |
GET /v1/card-keys |
les clés publiques (JWKS, Ed25519) qui vérifient les jetons hors ligne |
confirmEnrollment(token, identification?, address?) |
POST /v1/enroll/confirm |
consomme le jeton du lien « confirmez votre demande » envoyé quand un système fait adhérer un compte existant ; après un 409 identification_required, il est répété avec identification, après un 409 address_required avec address |
events.list(slug, params?) · events.get(slug, event, { locale }?) |
GET /v1/aps/{slug}/events[/{event}] |
les événements publics d’une association, avec les places restantes par type (guide) |
confirmRegistration(token) |
POST /v1/registrations/confirm |
consomme le jeton du lien « confirmez votre inscription » d’un invité : l’inscription, avec le token du QR quand elle est confirmée |
viewRegistration(token) |
POST /v1/registrations/view |
lit la place derrière le lien personnel d’un invité (l’e-mail qui confirme la place) : son état et, tant qu’elle est confirmée, le token du QR ; il fonctionne jusqu’à la fin de l’événement (depuis 0.3.2) |
const { status, valid_until } = await api.verifyCard('vmt_…');// { status: 'active', valid_until: '2027-03-31T22:59:59.000Z' } | { status: 'inactive', reason: 'expired' }
const { aps, membership_types, statuto } = await api.association('your-slug');
const check = await api.validateFiscalCode({ code: 'RSSMRA80A01H501U', first_name: 'Mario', last_name: 'Rossi', date: '1980-01-01', place: 'Roma', country: 'IT' });// { valid: true, error: null, mismatches: [], hints: [], birth_date: '1980-01-01', birth_country: 'IT' }// | { valid: false, error: 'mismatch', mismatches: ['date'], hints: [], birth_date: '1980-01-01', birth_country: 'IT' }
const { keys } = await api.cardKeys(); // [{ kty: 'OKP', crv: 'Ed25519', x, kid, use: 'sig', alg: 'EdDSA' }]
const { status, already, association } = await api.confirmEnrollment(token); // depuis le lien reçu par e-mail// { status: 'pending', already: false, association: { name, slug } } — 400 invalid_token quand il a expiré, 409 statuto_outdated
// 409 identification_required : le compte n’est pas identifié ; err.errors nomme ce qui manque. Demandez-le et répétez :await api.confirmEnrollment(token, { dob: '1985-03-10', birthplace: 'Lyon', birth_country: 'FR' });
// 409 address_required : l’association demande une adresse à chaque membre. Demandez-la et répétez (avec l’identification, si elle a déjà été donnée) :await api.confirmEnrollment(token, undefined, { line: 'Via Roma 1', postal_code: '20100', city: 'Milano', province: 'MI' });Le code fiscal est facultatif : error vaut invalid, mismatch ou null, et hints contient names_swapped quand
le code correspond une fois le nom et le prénom intervertis. Les données de naissance d’identification et l’adresse
voyagent dans le corps de la requête, jamais dans le lien. Voir Membres sans code fiscal.
Les clés changent rarement : mettez-les en cache et rechargez-les une fois par jour, ou quand vous rencontrez un kid
inconnu. Le reste de la vérification hors ligne se trouve dans
Intégration et vérification des cartes.
Ces endpoints ont une limite par IP (60 requêtes par minute sur la vérification et le code fiscal) : pour des volumes
plus élevés, utilisez un client confidentiel avec verify:read.