Cliente API
Descuentos
Crea y gestiona códigos de descuento con client.discounts — listar, obtener, crear, actualizar y eliminar registros de descuento.
client.discounts permite que tu plugin gestione códigos de descuento en la tienda del comerciante. Esto es útil para plugins de fidelización, sistemas de referidos o herramientas de campañas promocionales.
Permisos Requeridos
| Operación | Permiso requerido |
|---|---|
list, get | read:discounts |
create, update, delete | write:discounts |
Mapeo HTTP
| Método | Verbo HTTP | Ruta |
|---|---|---|
list(params?) | GET | /discounts |
get(id) | GET | /discounts/:id |
create(data) | POST | /discounts |
update(id, data) | PATCH | /discounts/:id |
delete(id) | DELETE | /discounts/:id |
Métodos
list
Obtiene una lista paginada de todos los códigos de descuento.
const { data, pagination } = await client.discounts.list();
data.forEach((discount) => {
console.log(`${discount.code} — ${discount.type}: ${discount.value}`);
});get
Obtiene un único descuento por su ID.
const discount = await client.discounts.get("disc_123");
console.log(discount.code); // e.g., "SAVE20"
console.log(discount.type); // "percentage" | "fixed"
console.log(discount.value); // e.g., 20 (percent) or 10.00 (fixed amount)create
Crea un nuevo código de descuento.
// Percentage discount
const percentDiscount = await client.discounts.create({
code: "AHORRA20",
type: "percentage",
value: 20,
});
// Fixed-amount discount
const fixedDiscount = await client.discounts.create({
code: "10MENOS",
type: "fixed",
value: 10.0,
});
console.log(percentDiscount.id);update
Actualiza parcialmente un descuento existente. Solo se cambian los campos que pases.
await client.discounts.update("disc_123", {
value: 25, // Increase the discount from 20% to 25%
});delete
Elimina permanentemente un código de descuento. Los usos activos del código no se ven afectados.
await client.discounts.delete("disc_123");Ejemplo de Plugin de Fidelización
import { WhataloClient } from "@whatalo/plugin-sdk";
const client = new WhataloClient({ apiKey: process.env.WHATALO_API_KEY! });
/**
* Generate a unique loyalty discount for a customer after
* they reach a reward threshold.
*/
async function issueLoyaltyReward(customerId: string): Promise<string> {
const code = `LEAL-${customerId.slice(-6).toUpperCase()}`;
const discount = await client.discounts.create({
code,
type: "percentage",
value: 15,
});
return discount.code; // Return the code to display to the customer
}Manejo de Errores
import { NotFoundError, ValidationError } from "@whatalo/plugin-sdk";
try {
await client.discounts.create({
code: "AHORRA20", // Duplicate code — store already has this
type: "percentage",
value: 20,
});
} catch (error) {
if (error instanceof ValidationError) {
error.fieldErrors.forEach((e) => console.log(`${e.field}: ${e.message}`));
} else {
throw error;
}
}Consulta Errores y Límites de Tasa para la referencia completa de clases de error.