SDKs oficiales

Clientes tipados sobre la REST API para los cinco lenguajes más solicitados. Cada uno incluye autenticación por bearer token, reintentos con retroceso exponencial en 429 y 5xx, y un helper verifyWebhookSignature para verificación HMAC-SHA256 de la cabecera X-Abundera-Signature. Licencia MIT.

Fuente de verdad: /docs/openapi.json · Incidencias: support@abundera.ai

TS

TypeScript / Node

@abundera/qr-pro

Node 18+. Sin dependencias en runtime. Compilaciones ESM y CJS.

Instalación

npm install @abundera/qr-pro

Crear un código

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);

Verificar un webhook

import { verifyWebhookSignature } from "@abundera/qr-pro";

verifyWebhookSignature({
  signature: req.headers["x-abundera-signature"],
  body: rawBody,
  secret: process.env.ABUNDERA_WEBHOOK_SECRET!,
});
// lanza error en firma incorrecta / desviación temporal, seguro parsear el cuerpo después de esta línea

Código fuente en GitHub →

Py

Python

abundera-qr-pro

Python 3.9+. Una sola dependencia (httpx). Clientes síncronos y asíncronos.

Instalación

pip install abundera-qr-pro

Crear un código

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)

Verificar 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 "", 400

Código fuente en GitHub →

Go

Go

github.com/abundera/qr-pro-go

Go 1.21+. Solo biblioteca estándar. Context-aware en todo momento.

Instalación

go get github.com/abundera/qr-pro-go

Crear un código

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)

Verificar un webhook

if err := qrpro.VerifyWebhookSignature(
    r.Header.Get("X-Abundera-Signature"),
    body,
    os.Getenv("ABUNDERA_WEBHOOK_SECRET"),
    0, // tolerancia predeterminada de 300s
); err != nil {
    http.Error(w, "bad signature", http.StatusBadRequest)
    return
}

Código fuente en GitHub →

Rb

Ruby

abundera-qr-pro

Ruby 3.0+. Construido sobre Faraday. Funciona bien con los inicializadores de Rails.

Instalación

gem install abundera-qr-pro
# o en Gemfile
gem "abundera-qr-pro"

Crear un código

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_url

Verificar 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
end

Código fuente en GitHub →

PHP

PHP

abundera/qr-pro

PHP 8.1+. Compatible con cualquier cliente HTTP PSR-18 (Guzzle por defecto). Los proveedores de servicios para Laravel y Symfony se incluyen en el mismo paquete.

Instalación

composer require abundera/qr-pro

Crear un código

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;

Verificar 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;
}

Código fuente en GitHub →

Qué cubre cada SDK

  • Códigoslistar, obtener, crear, actualizar, eliminar, comprobar slug, importar.
  • Analíticasexportaciones JSON y CSV con filtros de fecha from/to.
  • Gruposlistar, crear, eliminar, asignar códigos.
  • Webhookslistar, crear (con secreto), eliminar, más un helper de verificación de firma.
  • Usuario/me, exportación de cuenta.

Los endpoints de administración, Stripe-webhook e infraestructura quedan intencionalmente fuera del alcance de los SDKs — son solo de servicio a servicio. La lista completa de endpoints está en la especificación OpenAPI 3.1.

Colección Postman

Importación en un clic en Postman o Insomnia: /docs/postman.json (regenerada desde la especificación OpenAPI en cada despliegue). Cada solicitud incluye el template de cabecera de autenticación por bearer token preconfigurado — introduce tu clave API una vez a nivel de colección y todos los endpoints la heredan.

¿Prefieres OpenAPI sin procesar? Postman soporta OpenAPI 3.1 de forma nativa: Archivo → Importar → Enlace, luego pega https://pro.qr.abundera.ai/docs/openapi.json.

Política de versiones

Los SDKs siguen SemVer y tienen versiones independientes de la API. Una corrección de bugs del SDK (0.1.0 → 0.1.1) no cambia la versión de la API. Un cambio aditivo de la API (nuevo endpoint, nuevo campo opcional) no fuerza un salto de versión mayor del SDK.

  • Parche del SDK (0.1.x) — corrección de bugs, docs, sin cambio de API pública. Seguro para actualizar automáticamente.
  • Menor del SDK (0.x.0) — nuevos métodos para cubrir nuevos endpoints de API, o adiciones ergonómicas. Compatible con versiones anteriores.
  • Mayor del SDK (1.0.0 → 2.0.0) — renombrado, eliminación, cambio de tipo. Solo cuando la API cambia de versión mayor, o al corregir un bug ergonómico del SDK de larga data que no puede publicarse en una versión menor.

Versiones de la API. El prefijo de URL es la versión mayor. Hoy: /api/... (v1). Un cambio incompatible se publica como /api/v2/..., con v1 mantenida activa al menos 12 meses y cabeceras Deprecation + Sunset durante toda la ventana de obsolescencia. Definición completa de “cambio incompatible” en /docs/changelog/.

Ventana de soporte. La última versión menor en la versión mayor actual recibe correcciones de seguridad. Las versiones mayores anteriores reciben parches de seguridad a petición para clientes Pro de pago.

Apps de ejemplo

Apps mínimas ejecutables que muestran creación de código, actualización de destino, lectura de analíticas y verificación de firma de webhook:

  • node-express — TypeScript + Express, endpoint de webhook con protección contra replay.
  • fastapi — Python 3.11 + FastAPI, helper de verificación de firma integrado.
  • gin — Go 1.21 + Gin, patrón de handler idiomático.
  • rails — Rails 7 + Sidekiq, handler de webhook como job.
  • laravel — Laravel 11, controlador de webhook con ruta firmada.

Cada ejemplo se prueba en CI contra una API simulada. Clona, define ABUNDERA_API_KEY y ABUNDERA_WEBHOOK_SECRET y ejecuta.

¿No ves tu lenguaje?

La especificación OpenAPI 3.1 es la fuente de verdad. Genera un cliente en cualquier lenguaje con openapi-generator, o escribe un wrapper ligero tú mismo — la API es pequeña (seis recursos principales, autenticación por bearer token). Si quieres un SDK oficial para un lenguaje que no cubrimos, escribe a support@abundera.ai.