Perguntas de clientes
Lista as perguntas que clientes fizeram nos produtos do seller e publica a resposta.
Na página do produto o cliente pode perguntar ("serve em 110v?"). A pergunta chega ao seller, que responde; a resposta fica pública ao lado do produto e ajuda as próximas vendas. Quem responde pode ser o seller ou o administrador.
Listar perguntas
/api/v1/vendor/product-questionsSellerListar perguntas dos seus produtos
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso de um usuário do painel do seller (lojista), obtido no login (veja Tokens).Parâmetros de consulta
statusstringpendingansweredrejectedarchivedFiltra pela situação. Omitido, traz todas. Um valor fora da lista devolve lista vazia.
pageintegerpadrão: 1Página, a partir de 1. Cada página tem 50 itens (fixo).
Exemplo de requisição
bash
curl "$BASE_URL/api/v1/vendor/product-questions?status=pending" \
-H "Authorization: Bearer $TOKEN"Resposta
200Perguntas
json
{
"questions": [
{
"id": "8d3b6a1e-4f20-4c97-b5a8-9e0f1a2b3c4d",
"product_id": "d8a6c5e7-8e44-4055-a0e2-49014f5d17f6",
"question_text": "Serve em tensão 110v?",
"status": "pending",
"ai_draft": "Este modelo é bivolt (110v e 220v).",
"ai_draft_shown": false,
"created_at": "2026-10-11T15:02:11Z",
"product_name": "Cafeteira Moderno Branco"
}
]
}Campos da resposta
questionsarrayPerguntas da página (até 50), da mais nova para a mais antiga.
questions[].iduuidId da pergunta.
questions[].product_iduuidProduto perguntado.
questions[].product_namestringNome do produto.
questions[].question_textstringTexto da pergunta (5 a 500 caracteres).
questions[].statusstringpendingansweredrejectedarchivedSituação da pergunta.
questions[].ai_draftstringRascunho de resposta sugerido automaticamente. Ausente se não houver. Revise antes de usar: ele não é publicado sozinho.
questions[].ai_draft_shownbooleanSe o rascunho foi mostrado ao cliente como resposta provisória.
questions[].answer_textstringResposta. Ausente enquanto não respondida.
questions[].answered_bystringQuem respondeu:
vendor ou admin. Ausente se não respondida.questions[].answered_atstringRFC 3339. Ausente se não respondida.
questions[].created_atstringRFC 3339.
Erros
| Status | Quando | Corpo |
|---|---|---|
| 401 | Sem token ou token inválido/expirado. | {"error":"missing authorization header"} / {"error":"invalid or expired token"} |
| 403 | O token é de cliente, ou de um administrador/usuário que não está ligado a um seller. | {"error":"insufficient permissions"} / {"error":"not a vendor account"} |
Responder uma pergunta
Grava a resposta e publica a pergunta. Só vale para pergunta de produto seu. A resposta é pública, então escreva como se fosse para o cliente.
/api/v1/vendor/product-questions/{id}/answerSellerResponder uma pergunta
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso de um usuário do painel do seller (lojista), obtido no login (veja Tokens).Content-Typestringobrigatórioapplication/json.Parâmetros de caminho
iduuidobrigatórioId da pergunta.
Corpo da requisição
answer_textstringobrigatórioTexto da resposta. Espaços nas pontas são removidos; vazio é recusado.
Exemplo de requisição
bash
curl -X PUT "$BASE_URL/api/v1/vendor/product-questions/$QUESTION_ID/answer" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"answer_text": "Sim, o modelo é bivolt: funciona em 110v e 220v."
}'Resposta
200Pergunta respondida
json
{
"id": "8d3b6a1e-4f20-4c97-b5a8-9e0f1a2b3c4d",
"product_id": "d8a6c5e7-8e44-4055-a0e2-49014f5d17f6",
"question_text": "Serve em tensão 110v?",
"status": "answered",
"ai_draft": "Este modelo é bivolt (110v e 220v).",
"ai_draft_shown": false,
"created_at": "2026-10-11T15:02:11Z",
"product_name": "Cafeteira Moderno Branco",
"answer_text": "Sim, o modelo é bivolt: funciona em 110v e 220v.",
"answered_by": "vendor",
"answered_at": "2026-10-11T16:40:00Z",
"guest_name": "Carlos"
}Campos da resposta (a pergunta)
questions[].iduuidId da pergunta.
questions[].product_iduuidProduto perguntado.
questions[].product_namestringNome do produto.
questions[].question_textstringTexto da pergunta (5 a 500 caracteres).
questions[].statusstringpendingansweredrejectedarchivedSituação da pergunta.
questions[].ai_draftstringRascunho de resposta sugerido automaticamente. Ausente se não houver. Revise antes de usar: ele não é publicado sozinho.
questions[].ai_draft_shownbooleanSe o rascunho foi mostrado ao cliente como resposta provisória.
questions[].answer_textstringResposta. Ausente enquanto não respondida.
questions[].answered_bystringQuem respondeu:
vendor ou admin. Ausente se não respondida.questions[].answered_atstringRFC 3339. Ausente se não respondida.
questions[].created_atstringRFC 3339.
user_iduuidCliente logado que perguntou. Ausente se foi visitante.
guest_namestringNome informado por visitante. Ausente se não houver.
guest_emailstringE-mail informado por visitante. Ausente se não houver. Dado pessoal: não publique.
Erros
| Status | Quando | Corpo |
|---|---|---|
| 401 | Sem token ou token inválido/expirado. | {"error":"missing authorization header"} / {"error":"invalid or expired token"} |
| 400 | answer_text vazio ou corpo que não é JSON. | {"error":"answer required"} / {"error":"invalid request body"} |
| 403 | A pergunta é de produto de outro seller (ou não existe), ou a conta não é de seller. | {"error":"not your product"} / {"error":"not a vendor account"} |
| 500 | id que não é UUID, ou falha ao gravar. | {"error":"failed to answer","detail":"..."} |