Skip to main content

📌 Endpoint

PUT /stores/:storeId/coupons/:couponId Atualiza parcialmente um cupom existente.

🔐 Autenticação

  • Rota privada.
  • Requer header Authorization com sua API key e plano ativo.
{
	"Authorization": "SUA_API_KEY_AQUI"
}

🧾 Parâmetros de rota

ParâmetroTipoObrigatórioDescrição
storeIdstringSimID da loja
couponIdstringSimID do cupom

🧍 Body (JSON)

Envie pelo menos um campo:
  • code (3-32)
  • discount (1-100)
  • position (inteiro maior ou igual a 1)
  • useLimit (inteiro -1 a 999)
  • expiredAt (data futura ou null)
  • productIds (array de IDs)
  • categoryIds (array de IDs)

✅ Exemplo de requisição

curl -X PUT "https://api.cabrapi.com.br/stores/STORE_ID/coupons/COUPON_ID" \
	-H "Authorization: SUA_API_KEY_AQUI" \
	-H "Content-Type: application/json" \
	-d '{
		"discount": 15,
		"useLimit": 200
	}'

🧩 Snippet (JavaScript - fetch, só trocar Authorization)

const API_BASE = "https://api.cabrapi.com.br";
const AUTHORIZATION = "SUA_API_KEY_AQUI";

const authHeaders = {
	Authorization: AUTHORIZATION,
	"Content-Type": "application/json"
};

const storesResponse = await fetch(`${API_BASE}/stores`, {
	headers: { Authorization: AUTHORIZATION }
});
const storesData = await storesResponse.json();
const storeId = storesData?.stores?.[0]?.id;

if (!storeId) throw new Error("Nenhuma loja encontrada para essa API key.");

const couponsResponse = await fetch(`${API_BASE}/stores/${storeId}/coupons`, {
	headers: { Authorization: AUTHORIZATION }
});
const couponsData = await couponsResponse.json();

let couponId = couponsData?.coupons?.[0]?.id;

if (!couponId) {
	const productsResponse = await fetch(`${API_BASE}/stores/${storeId}/products`);
	const productsData = await productsResponse.json();
	let productId = productsData?.products?.[0]?.id;

	if (!productId) {
		const newProductResponse = await fetch(`${API_BASE}/stores/${storeId}/products`, {
			method: "POST",
			headers: authHeaders,
			body: JSON.stringify({
				name: `ProdutoCupom ${Date.now()}`,
				description: "Produto base para cupom via script da documentação.",
				delivery: "DIGITAL",
				price: 39.9,
				stock: 50
			})
		});
		const newProductData = await newProductResponse.json();
		productId = newProductData?.product?.id;
	}

	const newCouponResponse = await fetch(`${API_BASE}/stores/${storeId}/coupons`, {
		method: "POST",
		headers: authHeaders,
		body: JSON.stringify({
			code: `CUPOM${Date.now()}`,
			discount: 10,
			useLimit: -1,
			productIds: [productId]
		})
	});
	const newCouponData = await newCouponResponse.json();
	couponId = newCouponData?.coupon?.id;
}

if (!couponId) throw new Error("Não foi possível obter couponId.");

const response = await fetch(`${API_BASE}/stores/${storeId}/coupons/${couponId}`, {
	method: "PUT",
	headers: authHeaders,
	body: JSON.stringify({
		discount: 15,
		useLimit: 200
	})
});

const data = await response.json();
console.log({ status: response.status, data });

📦 Resposta de sucesso (200)

{
	"status": true,
	"code": "COUPON_UPDATED",
	"coupon": {
		"id": "COUPON_ID",
		"code": "bemvindo10",
		"position": 2,
		"discount": 15,
		"useLimit": 200,
		"storeId": "STORE_ID"
	}
}

⚠️ Possíveis erros

  • 400 INVALID_DATA → body inválido
  • 400 RELATION_NOT_FOUND → produto/categoria inválido
  • 404 STORE_NOT_FOUND → loja não encontrada
  • 404 COUPON_NOT_FOUND → cupom não encontrado
  • 409 COUPON_ALREADY_EXISTS → código duplicado
  • 500 INTERNAL_SERVER_ERROR → erro interno