Skip to main content

📌 Endpoint

POST /stores/:storeId/products Cria um novo produto na loja.

🔐 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

🧍 Body (JSON)

CampoTipoObrigatórioRegras
namestringSim3-32 caracteres
imagestringNãoURL, até 512
descriptionstringNão12-256 caracteres
categoryIdsstring[]NãoIDs de categorias da própria loja
deliverystringSimDIGITAL ou PHYSICAL
pricenumberSim0.5 até 9999
stocknumberNãointeiro, 1 até 999
metadataobjectNãoobjeto livre

✅ Exemplo de requisição

curl -X POST "https://api.cabrapi.com.br/stores/STORE_ID/products" \
	-H "Authorization: SUA_API_KEY_AQUI" \
	-H "Content-Type: application/json" \
	-d '{
		"name": "Curso Premium",
		"description": "Acesso completo ao conteúdo.",
		"delivery": "DIGITAL",
		"price": 49.9,
		"stock": 100,
		"categoryIds": ["CATEGORY_ID"]
	}'

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

if (!storesResponse.ok || !storesData?.stores?.length) {
	throw new Error("Nenhuma loja encontrada para essa API key.");
}

const storeId = storesData.stores[0].id;

const response = await fetch(`${API_BASE}/stores/${storeId}/products`, {
	method: "POST",
	headers: authHeaders,
	body: JSON.stringify({
		name: `Produto ${Date.now()}`,
		description: "Produto criado via script da documentação.",
		delivery: "DIGITAL",
		price: 49.9,
		stock: 100
	})
});

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

📦 Resposta de sucesso (200)

{
	"status": true,
	"code": "SUCCESS",
	"product": {
		"id": "PRODUCT_ID",
		"name": "Curso Premium",
		"position": 1,
		"price": 49.9,
		"delivery": "DIGITAL",
		"stock": 100,
		"storeId": "STORE_ID"
	}
}

⚠️ Possíveis erros

  • 400 INVALID_DATA → body inválido
  • 400 RELATION_NOT_FOUND / 400 CATEGORY_NOT_FOUND → categoria inválida
  • 400 NAME_ALREADY_EXISTS → já existe produto com esse nome
  • 404 STORE_NOT_FOUND → loja não encontrada
  • 500 INTERNAL_SERVER_ERROR → erro interno