Zum Inhalt springen

Öffentliche API

Als Markdown anzeigen
import { publicApi } from '@vimine/sdk';
const api = publicApi(); // oder vimine.public / vimineServer.public

Die Endpunkte, die weder Zugangsdaten noch eine Anmeldung brauchen. Verwendbar von jeder Seite, von einem Scanner, von einem Server. publicApi({ apiUrl?, fetch? }) nimmt dieselben Netzwerkoptionen wie die anderen Klassen.

Methode Endpunkt
verifyCard(cardToken) GET /v1/verify/{card_token} „Ist dieser Ausweis gerade aktiv?“ — nur Status und Ende der Gültigkeit
association(slug, { locale }?) GET /v1/aps/{slug} öffentliches Profil: Erscheinungsbild, Mitgliedsarten mit Beiträgen, geltendes Statuto, wie der Verein Mitglieder aufnimmt, ob er ihre Adresse erfasst (member_address)
validateFiscalCode(input) POST /v1/validate/fiscal-code Aufbau und Prüfzeichen; mit persönlichen Daten auch deren Übereinstimmung — und was die Steuernummer enthält (birth_date, birth_country). Für eine im Ausland geborene Person senden Sie country
cardKeys() GET /v1/card-keys die öffentlichen Schlüssel (JWKS, Ed25519), die Tokens offline prüfen
confirmEnrollment(token, identification?, address?) POST /v1/enroll/confirm löst das Token des Links „Bestätigen Sie Ihren Antrag“ ein, der verschickt wird, wenn ein System ein bestehendes Konto aufnimmt; nach einem 409 identification_required wird es mit identification wiederholt, nach einem 409 address_required mit address
events.list(slug, params?) · events.get(slug, event, { locale }?) GET /v1/aps/{slug}/events[/{event}] die öffentlichen Veranstaltungen eines Vereins, mit den freien Plätzen pro Art (Anleitung)
confirmRegistration(token) POST /v1/registrations/confirm löst das Token des Links „Bestätigen Sie Ihre Anmeldung“ eines Gasts ein: die Anmeldung, mit dem QR-token, wenn bestätigt
viewRegistration(token) POST /v1/registrations/view liest den Platz hinter dem eigenen Link eines Gasts (der E-Mail, die den Platz bestätigt): seinen Status und, solange er bestätigt ist, das QR-token; funktioniert, bis die Veranstaltung vorbei ist (ab 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); // aus dem Link, der per E-Mail kam
// { status: 'pending', already: false, association: { name, slug } } — 400 invalid_token, wenn abgelaufen, 409 statuto_outdated
// 409 identification_required: Das Konto ist nicht identifiziert; err.errors nennt, was fehlt. Fragen Sie danach und wiederholen Sie:
await api.confirmEnrollment(token, { dob: '1985-03-10', birthplace: 'Lyon', birth_country: 'FR' });
// 409 address_required: Der Verein verlangt von jedem Mitglied eine Adresse. Fragen Sie danach und wiederholen Sie (mit der Identifizierung, falls schon angegeben):
await api.confirmEnrollment(token, undefined, { line: 'Via Roma 1', postal_code: '20100', city: 'Milano', province: 'MI' });

Die Steuernummer ist optional: error ist invalid, mismatch oder null, und hints enthält names_swapped, wenn die Steuernummer passt, sobald Nachname und Vorname vertauscht werden. Die Geburtsdaten von identification und die Adresse reisen im Body der Anfrage, nie im Link. Siehe Mitglieder ohne Steuernummer.

Die Schlüssel ändern sich selten: Speichern Sie sie zwischen und laden Sie sie einmal am Tag neu, oder wenn Sie auf eine unbekannte kid stoßen. Der Rest der Offline-Prüfung steht in Einbetten und Ausweisprüfung.

Diese Endpunkte haben ein Limit pro IP (60 Anfragen pro Minute bei Prüfung und Steuernummer): Für größere Mengen verwenden Sie einen vertraulichen Client mit verify:read.