Vancouver Fee Register · ACCÈS DÉVELOPPEUR
API et webhooks
Utilisez l’URL de votre produit dans les exemples ci-dessous. Conservez les clés API sur votre serveur. Ouvrir la documentation interactive de l’API ↗
Agent purchases: free discovery, per-record access, and spending-limited MCP
Lire les fiches publiques
curl 'https://vancouverfees.getregisters.com/api/v1/feeds/metro-van-fees/records?limit=50&offset=0' Les réponses publiques contiennent uniquement les trois dernières fiches de chaque registre. Le contenu des fiches plus anciennes nécessite PRO ; les URL directes offrent un aperçu limité. Suivez next_offset jusqu’à sa valeur null, même lorsqu’une page filtrée ne contient aucune fiche. Citez chaque source_url d’origine. Les dates de publication et d’observation correspondent à des événements distincts.
Lire les fiches PRO
curl 'https://vancouverfees.getregisters.com/api/v1/feeds/metro-van-fees/records?limit=50&offset=0' \
-H 'Authorization: Bearer YOUR_SCOPED_KEY' Créez ou renouvelez votre clé dans votre compte. Une clé fonctionne uniquement pour ce produit et tant que l’accès payant est actif.
Formats d’exportation
PRO comprend CSV, Excel (.xlsx), XML, RSS et Atom. Utilisez la clé API de votre produit et les mêmes filtres pour chaque format. Par exemple, téléchargez jusqu’à 100 fiches dans un classeur Excel :
curl 'https://vancouverfees.getregisters.com/api/v1/feeds/metro-van-fees/records/export.xlsx?limit=100&offset=0' \
-H 'Authorization: Bearer YOUR_SCOPED_KEY' \
-D export-headers.txt -o records.xlsx Remplacez xlsx par csv, xml, rss ou atom. Ajoutez des filtres tels que document_type=adopted ou facility_id=YOUR_FACILITY_ID. Suivez l’en-tête Link de la réponse avec rel="next" jusqu’à son absence, en conservant l’en-tête Authorization à chaque requête. Chaque page est limitée à 100 fiches ; une page filtrée peut être vide alors qu’une page suivante existe.
Pour RSS et Atom, configurez un lecteur qui accepte l’en-tête Authorization. Les URL des lecteurs ne contiennent aucune clé. Les entrées ont des identifiants de fiche stables. Les lecteurs qui ne suivent pas la pagination reçoivent la page la plus récente. Utilisez l’API paginée pour obtenir toutes les fiches.
Lire l’historique d’une fiche
curl 'https://vancouverfees.getregisters.com/api/v1/records/RECORD_ID/history?limit=50&offset=0' \
-H 'Authorization: Bearer YOUR_SCOPED_KEY' Remplacez RECORD_ID par un identifiant de fiche renvoyé. L’historique renvoie un tableau, du plus récent au plus ancien. Augmentez offset du nombre d’éléments de la page jusqu’à ce qu’une page contienne moins d’éléments que la limite demandée. Les versions peuvent correspondre à des changements de source ou à des corrections d’extraction.
Se connecter avec MCP
curl 'https://vancouverfees.getregisters.com/api/v1/mcp' \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"read_register","arguments":{"feed_id":"metro-van-fees"}}}' Ajoutez le même en-tête Authorization pour les champs PRO. Le point d’accès prend aussi en charge initialize, tools/list et notifications/initialized. Utilisez la pagination REST ci-dessus pour lire un registre complet.
Vérifier les signatures des webhooks
L’en-tête de signature est X-Register-Signature: t=TIMESTAMP,v1=HEX_DIGEST. Vérifiez le corps brut avant d’analyser le JSON. Conservez durablement les identifiants X-Register-Event traités avec succès afin que les nouvelles tentatives ne répètent pas les effets des opérations.
import { createHmac, timingSafeEqual } from 'node:crypto';
export function verify(rawBody, header, secret) {
const fields = Object.fromEntries(header.split(',').map(x => x.split('=')));
const timestamp = Number(fields.t);
if (!Number.isFinite(timestamp) || Math.abs(Date.now()/1000 - timestamp) > 300) return false;
if (!/^[a-f0-9]{64}$/.test(fields.v1 || '')) return false;
const expected = createHmac('sha256', secret).update(fields.t + '.').update(rawBody).digest();
const supplied = Buffer.from(fields.v1, 'hex');
return supplied.length === expected.length && timingSafeEqual(supplied, expected);
} Renvoyez une réponse de succès uniquement après avoir enregistré l’événement durablement. Les tentatives de livraison sont limitées ; votre compte affiche le dernier résultat enregistré. Un accusé de livraison ne confirme pas que votre application a terminé le traitement de l’événement.