SDKs officiels
Clients typés sur l'REST API pour les cinq langages les plus demandés. Chacun embarque l'auth par bearer token, la relance avec backoff exponentiel sur 429 et 5xx, et un helper verifyWebhookSignature pour la vérification HMAC-SHA256 du header X-Abundera-Signature. Licence MIT.
- TypeScript@abundera/qr-pronpmVoir →
- Pythonabundera-qr-proPyPIVoir →
- Gogithub.com/abundera/qr-pro-goGo modulesVoir →
- Rubyabundera-qr-proRubyGemsVoir →
- PHPabundera/qr-proPackagistVoir →
TypeScript / Node
@abundera/qr-proNode 18+. Zéro dépendance runtime. Builds ESM et CJS.
Installation
npm install @abundera/qr-proCréer un code
import { AbunderaQRProClient } from "@abundera/qr-pro";
const client = new AbunderaQRProClient({
apiKey: process.env.ABUNDERA_API_KEY!,
});
const code = await client.createCode({
destination_url: "https://example.com/launch",
label: "Spring launch poster",
});
console.log(code.short_url);Vérifier un webhook
import { verifyWebhookSignature } from "@abundera/qr-pro";
verifyWebhookSignature({
signature: req.headers["x-abundera-signature"],
body: rawBody,
secret: process.env.ABUNDERA_WEBHOOK_SECRET!,
});
// lève une erreur en cas de mauvaise signature / dérive temporelle, corps utilisable après cette lignePython
abundera-qr-proPython 3.9+. Une seule dépendance (httpx). Clients synchrone et asynchrone.
Installation
pip install abundera-qr-proCréer un code
from abundera_qr_pro import Client
with Client(api_key="abnd_qrpro_...") as c:
code = c.create_code(
destination_url="https://example.com/launch",
label="Spring launch poster",
)
print(code.short_url)Vérifier un webhook
from abundera_qr_pro import verify_webhook_signature
from abundera_qr_pro.webhook import WebhookVerificationError
try:
verify_webhook_signature(
signature=request.headers["X-Abundera-Signature"],
body=request.body,
secret=os.environ["ABUNDERA_WEBHOOK_SECRET"],
)
except WebhookVerificationError:
return "", 400Go
github.com/abundera/qr-pro-goGo 1.21+. Bibliothèque standard uniquement. Context-aware partout.
Installation
go get github.com/abundera/qr-pro-goCréer un code
import qrpro "github.com/abundera/qr-pro-go"
c, _ := qrpro.New(os.Getenv("ABUNDERA_API_KEY"))
ctx := context.Background()
code, err := c.CreateCode(ctx, qrpro.CodeCreate{
DestinationURL: "https://example.com/launch",
Label: "Spring launch poster",
})
if err != nil { log.Fatal(err) }
fmt.Println(code.ShortURL)Vérifier un webhook
if err := qrpro.VerifyWebhookSignature(
r.Header.Get("X-Abundera-Signature"),
body,
os.Getenv("ABUNDERA_WEBHOOK_SECRET"),
0, // tolérance par défaut 300s
); err != nil {
http.Error(w, "bad signature", http.StatusBadRequest)
return
}Ruby
abundera-qr-proRuby 3.0+. Basé sur Faraday. Compatible avec les initialiseurs Rails.
Installation
gem install abundera-qr-pro
# ou dans le Gemfile
gem "abundera-qr-pro"Créer un code
require "abundera/qr_pro"
client = Abundera::QRPro::Client.new(api_key: ENV.fetch("ABUNDERA_API_KEY"))
code = client.create_code(
destination_url: "https://example.com/launch",
label: "Spring launch poster",
)
puts code.short_urlVérifier un webhook
require "abundera/qr_pro/webhook"
begin
Abundera::QRPro::Webhook.verify!(
signature: request.headers["X-Abundera-Signature"],
body: request.raw_post,
secret: ENV.fetch("ABUNDERA_WEBHOOK_SECRET"),
)
rescue Abundera::QRPro::Webhook::InvalidSignature
head :bad_request
endPHP
abundera/qr-proPHP 8.1+. Compatible avec tout client HTTP PSR-18 (Guzzle par défaut). Les service providers Laravel et Symfony sont inclus dans le même paquet.
Installation
composer require abundera/qr-proCréer un code
use Abundera\QrPro\Client;
$client = new Client(apiKey: getenv('ABUNDERA_API_KEY'));
$code = $client->createCode(
destinationUrl: 'https://example.com/launch',
label: 'Spring launch poster',
);
echo $code->shortUrl;Vérifier un webhook
use Abundera\QrPro\Webhook;
use Abundera\QrPro\WebhookException;
try {
Webhook::verify(
signature: $_SERVER['HTTP_X_ABUNDERA_SIGNATURE'] ?? '',
body: file_get_contents('php://input'),
secret: getenv('ABUNDERA_WEBHOOK_SECRET'),
);
} catch (WebhookException $e) {
http_response_code(400);
exit;
}Ce que couvre chaque SDK
- Codesliste, récupération, création, mise à jour, suppression, vérification de slug, import.
- Analyticsexports JSON et CSV avec filtres de date
from/to. - Groupsliste, création, suppression, affectation de codes.
- Webhooksliste, création (avec secret), suppression, plus un helper de vérification de signature.
- User
/me, export de compte.
Les endpoints Admin, Stripe-webhook et infrastructure sont intentionnellement hors périmètre pour les SDKs — ils sont service-to-service uniquement. La liste complète des endpoints se trouve dans la spec OpenAPI 3.1.
Collection Postman
Import en un clic dans Postman ou Insomnia : /docs/postman.json (régénérée depuis la spec OpenAPI à chaque déploiement). Chaque requête est préconfigurée avec le template de header d'auth par bearer token — définissez votre clé API une fois au niveau de la collection et chaque endpoint en hérite.
Vous préférez le OpenAPI brut ? Postman supporte OpenAPI 3.1 nativement : File → Import → Link, puis collez https://pro.qr.abundera.ai/docs/openapi.json.
Politique de versionnage
Les SDKs suivent SemVer et sont versionnés indépendamment de l'API. Un correctif SDK (0.1.0 → 0.1.1) ne modifie pas la version de l'API. Un changement additif de l'API (nouvel endpoint, nouveau champ optionnel) n'impose pas un bump majeur de SDK.
- Patch SDK (
0.1.x) — correctif, documentation, pas de changement d'API publique. Mise à jour automatique sûre. - Mineur SDK (
0.x.0) — nouvelles méthodes couvrant de nouveaux endpoints API, ou ajouts ergonomiques. Rétrocompatible. - Majeur SDK (
1.0.0 → 2.0.0) — renommage, suppression, changement de forme de type. Uniquement lors d'une majeure API, ou pour corriger un bug ergonomique SDK persistant impossible à livrer en mineur.
Versionnage API. Le préfixe URL est la version majeure. Aujourd'hui : /api/... (v1). Un changement cassant est livré en /api/v2/..., avec v1 maintenu au moins 12 mois et les headers de réponse Deprecation + Sunset tout au long de la fenêtre de dépréciation. Définition complète de “cassant” sur /docs/changelog/.
Fenêtre de support. Le dernier mineur sur le majeur actuel reçoit les corrections de sécurité. Les majeurs plus anciens reçoivent des correctifs de sécurité sur demande pour les clients Pro payants.
Exemples d'applications
Applications minimales exécutables montrant la création de code, la mise à jour de destination, la lecture d'analytics et la vérification de signature de webhook :
- node-express — TypeScript + Express, endpoint webhook avec protection contre le rejeu.
- fastapi — Python 3.11 + FastAPI, helper de vérification de signature intégré.
- gin — Go 1.21 + Gin, pattern de handler idiomatique.
- rails — Rails 7 + Sidekiq, handler webhook en job.
- laravel — Laravel 11, contrôleur webhook avec route signée.
Chaque exemple est testé en CI contre une API mockée. Clonez, définissez ABUNDERA_API_KEY et ABUNDERA_WEBHOOK_SECRET, lancez.
Votre langage n'est pas là ?
La spec OpenAPI 3.1 est la source de vérité. Générez un client dans n'importe quel langage avec openapi-generator, ou écrivez un wrapper léger vous-même — l'API est petite (six ressources principales, auth bearer token). Si vous souhaitez un SDK officiel pour un langage non couvert, écrivez à support@abundera.ai.