Documentation Index Fetch the complete documentation index at: https://docs.revize.app/llms.txt
Use this file to discover all available pages before exploring further.
A API Pública de Cancelamento permite adicionar cancelamento de pedido em autoatendimento em qualquer lugar — e-mails pós-compra, páginas de suporte, chatbots ou formulários personalizados. Sem necessidade de embed do app.
Por que usar a API de Cancelamento
Cancelamento em Qualquer Lugar Adicione botões de cancelamento a e-mails, páginas de FAQ, fluxos de chatbot ou qualquer interface personalizada fora da sua loja.
Sem Necessidade de Embed do App Funciona independentemente do portal do cliente Revize. Basta chamar o endpoint da API.
Suas Regras se Aplicam A API respeita suas janelas de tempo de cancelamento e regras de elegibilidade automaticamente.
Integração Simples Um endpoint, formato simples de requisição. Fácil de integrar com qualquer sistema ou plataforma.
Endpoint da API
POST https://revize.untechnickle.com/api/public/v1/{shop-domain-slug}/cancel_order
Parâmetros:
shop-domain-slug — O domínio da sua loja Shopify sem .myshopify.com (ex.: my-store de my-store.myshopify.com)
{
"order_number" : "#2667" ,
"email" : "customer@example.com"
}
Campo Tipo Obrigatório Descrição order_numberstring Sim O número do pedido incluindo o símbolo # emailstring Sim E-mail do cliente usado no pedido
Códigos de resposta
A API retorna um campo status indicando o resultado:
Status Descrição SUCCESSPedido cancelado com sucesso ORDER_NOT_FOUNDPedido não existe ou e-mail não corresponde NOT_CANCELLABLEPedido não pode ser cancelado (restrições de política) ORDER_FULFILLEDPedido já processado, não pode cancelar NOT_EDITABLEPedido bloqueado para edição CANCEL_DISABLEDRecurso de cancelamento não habilitado para esta loja APP_INACTIVEApp Revize não está ativo SHOP_NOT_FOUNDLoja não encontrada no sistema DOMAIN_MISSINGSlug de domínio da loja ausente na requisição FAILEDFalha geral na operação
Exemplo de integração
Aqui está um exemplo em JavaScript para chamar a API:
async function cancelOrder ( orderNumber , email ) {
const shopDomain = 'your-store' ; // Without .myshopify.com
const apiUrl = 'https://revize.untechnickle.com' ;
try {
const response = await fetch (
` ${ apiUrl } /api/public/v1/ ${ shopDomain } /cancel_order` ,
{
method: 'POST' ,
headers: {
'Content-Type' : 'application/json' ,
'Accept' : 'application/json'
},
body: JSON . stringify ({
order_number: orderNumber ,
email: email
})
}
);
const result = await response . json ();
if ( result . success === true || result . status === 'SUCCESS' ) {
console . log ( 'Order cancelled successfully' );
return { success: true };
} else {
console . log ( 'Cancellation failed:' , result . status );
return { success: false , status: result . status };
}
} catch ( error ) {
console . error ( 'Error:' , error );
return { success: false , status: 'FAILED' };
}
}
Seção do tema Shopify
Adicione um formulário de cancelamento a qualquer página do seu tema Shopify. Esta seção pronta para uso lida com todas as chamadas da API e exibe mensagens apropriadas.
Código Completo da Seção Shopify
order-cancellation-form.liquid
< div class = "order-cancel-section" >
< div class = "order-cancel-container" >
< div class = "order-cancel-form" >
{% if section . settings . show_heading %}
< h2 >{{ section . settings . heading }}</ h2 >
{% endif %}
{% if section . settings . show_description %}
< p class = "form-description" >{{ section . settings . description }}</ p >
{% endif %}
< form id = "cancelOrderForm" >
< div class = "form-group" >
< label for = "orderNumber" >{{ section . settings . order_label }}</ label >
< input
type = "text"
id = "orderNumber"
name = "orderNumber"
required
placeholder = " {{ section . settings . order_placeholder }} "
>
< small >{{ section . settings . order_help_text }}</ small >
</ div >
< div class = "form-group" >
< label for = "email" >{{ section . settings . email_label }}</ label >
< input
type = "email"
id = "email"
name = "email"
required
placeholder = " {{ section . settings . email_placeholder }} "
>
</ div >
< button type = "submit" id = "submitBtn" >{{ section . settings . button_text }}</ button >
< div id = "message" ></ div >
</ form >
</ div >
</ div >
</ div >
< script >
document . getElementById ( 'cancelOrderForm' ). addEventListener ( 'submit' , async ( e ) => {
e . preventDefault ();
const submitBtn = document . getElementById ( 'submitBtn' );
const messageDiv = document . getElementById ( 'message' );
submitBtn . disabled = true ;
submitBtn . textContent = 'Processing...' ;
messageDiv . textContent = '' ;
messageDiv . className = '' ;
const orderNumber = document . getElementById ( 'orderNumber' ). value . trim ();
const email = document . getElementById ( 'email' ). value . trim ();
const shopDomain = {{ shop . permanent_domain | json }} ;
const domainSlug = shopDomain . replace ( '.myshopify.com' , '' );
const apiUrl = {{ section . settings . api_url | json }} ;
const statusMessages = {
'SUCCESS' : {{ section . settings . msg_success | json }} ,
'ORDER_NOT_FOUND' : {{ section . settings . msg_order_not_found | json }} ,
'NOT_CANCELLABLE' : {{ section . settings . msg_not_cancellable | json }} ,
'ORDER_FULFILLED' : {{ section . settings . msg_order_fulfilled | json }} ,
'NOT_EDITABLE' : {{ section . settings . msg_not_editable | json }} ,
'CANCEL_DISABLED' : {{ section . settings . msg_cancel_disabled | json }} ,
'APP_INACTIVE' : {{ section . settings . msg_app_inactive | json }} ,
'FAILED' : {{ section . settings . msg_failed | json }}
};
const buttonText = {{ section . settings . button_text | json }} ;
try {
const response = await fetch ( ` ${ apiUrl } /api/public/v1/ ${ domainSlug } /cancel_order` , {
method: 'POST' ,
headers: {
'Content-Type' : 'application/json' ,
'Accept' : 'application/json'
},
body: JSON . stringify ({
order_number: orderNumber ,
email: email
})
});
const result = await response . json ();
if ( result . success === true || result . status === 'SUCCESS' ) {
messageDiv . className = 'success' ;
messageDiv . textContent = statusMessages [ 'SUCCESS' ];
document . getElementById ( 'cancelOrderForm' ). reset ();
} else {
messageDiv . className = 'error' ;
messageDiv . textContent = statusMessages [ result . status ] || statusMessages [ 'FAILED' ];
}
} catch ( error ) {
console . error ( 'Error:' , error );
messageDiv . className = 'error' ;
messageDiv . textContent = statusMessages [ 'FAILED' ];
} finally {
submitBtn . disabled = false ;
submitBtn . textContent = buttonText ;
}
});
</ script >
< style >
.order-cancel-section {
padding : {{ section . settings . section_padding_top }} px 0 {{ section . settings . section_padding_bottom }} px;
background : {{ section . settings . background_color }} ;
}
.order-cancel-container {
max-width : 1200 px ;
margin : 0 auto ;
padding : 0 20 px ;
}
.order-cancel-form {
max-width : {{ section . settings . form_width }} px;
margin : 0 auto ;
padding : {{ section . settings . form_padding }} px;
border : 1 px solid {{ section . settings . border_color }} ;
border-radius : {{ section . settings . border_radius }} px;
background : {{ section . settings . form_background }} ;
}
.order-cancel-form h2 {
margin-bottom : 10 px ;
font-size : {{ section . settings . heading_size }} px;
color : {{ section . settings . heading_color }} ;
text-align : {{ section . settings . text_align }} ;
}
.order-cancel-form .form-description {
margin-bottom : 24 px ;
color : {{ section . settings . description_color }} ;
text-align : {{ section . settings . text_align }} ;
}
.form-group {
margin-bottom : 20 px ;
text-align : left ;
}
.form-group label {
display : block ;
margin-bottom : 8 px ;
font-weight : 600 ;
font-size : 14 px ;
}
.form-group input {
width : 100 % ;
padding : 12 px ;
border : 1 px solid {{ section . settings . input_border_color }} ;
border-radius : 4 px ;
font-size : 14 px ;
box-sizing : border-box ;
}
.form-group small {
display : block ;
margin-top : 4 px ;
color : #666 ;
font-size : 12 px ;
}
button {
width : 100 % ;
padding : 14 px ;
background : {{ section . settings . button_background }} ;
color : {{ section . settings . button_text_color }} ;
border : none ;
border-radius : 4 px ;
font-size : 16 px ;
font-weight : 600 ;
cursor : pointer ;
}
button :disabled {
opacity : 0.5 ;
cursor : not-allowed ;
}
#message {
margin-top : 20 px ;
padding : 12 px ;
border-radius : 4 px ;
text-align : center ;
}
#message.success {
background : #d4edda ;
color : #155724 ;
}
#message.error {
background : #f8d7da ;
color : #721c24 ;
}
</ style >
{% schema %}
{
"name" : "Order Cancellation Form" ,
"settings" : [
{
"type" : "text" ,
"id" : "api_url" ,
"label" : "API URL" ,
"default" : "https://revize.untechnickle.com"
},
{
"type" : "text" ,
"id" : "heading" ,
"label" : "Heading" ,
"default" : "Cancel Your Order"
},
{
"type" : "textarea" ,
"id" : "description" ,
"label" : "Description" ,
"default" : "Enter your order number and email to cancel your order"
},
{
"type" : "text" ,
"id" : "button_text" ,
"label" : "Button Text" ,
"default" : "Cancel Order"
},
{
"type" : "textarea" ,
"id" : "msg_success" ,
"label" : "Success Message" ,
"default" : "Your order has been cancelled successfully!"
},
{
"type" : "textarea" ,
"id" : "msg_order_not_found" ,
"label" : "Order Not Found" ,
"default" : "We couldn't find an order with that number and email."
},
{
"type" : "textarea" ,
"id" : "msg_not_cancellable" ,
"label" : "Not Cancellable" ,
"default" : "This order cannot be cancelled due to our cancellation policy."
},
{
"type" : "textarea" ,
"id" : "msg_order_fulfilled" ,
"label" : "Order Fulfilled" ,
"default" : "This order has already been fulfilled and cannot be cancelled."
},
{
"type" : "textarea" ,
"id" : "msg_failed" ,
"label" : "General Error" ,
"default" : "Unable to process your request. Please try again."
}
],
"presets" : [{ "name" : "Order Cancellation Form" }]
}
{% endschema %}
Casos de uso comuns
Páginas de Suporte
E-mails Pós-Compra
Chatbots
Cancelamento em autoatendimento em páginas de FAQ/Ajuda Adicione o formulário de cancelamento às suas páginas de suporte ou FAQ para que os clientes possam cancelar pedidos sem contatar o suporte.
Reduz tickets de suporte
Disponibilidade 24/7
Processamento instantâneo
Botão de cancelar em e-mails de confirmação de pedido Adicione um link “Cancelar Pedido” nos seus e-mails transacionais que abre uma página de cancelamento na sua loja.
Conveniente para clientes
Captura solicitações de cancelamento por impulso cedo
Reduz consultas de “como cancelo?”
Cancelamento automatizado via chat Integre a API com chatbots (Gorgias, Zendesk, etc.) para lidar com solicitações de cancelamento automaticamente.
Resposta instantânea
Sem necessidade de envolvimento de agente
Funciona 24/7
Requisitos de configuração
A API Pública de Cancelamento é um recurso avançado que requer ativação pela nossa equipe.
Entre em contato para habilitar
Configure as definições de reembolso
Defina seu método de reembolso em Pagamentos e Reembolsos — método de pagamento original ou crédito da loja.
Obtenha seus detalhes de integração
Forneceremos o slug do domínio da sua loja e qualquer configuração personalizada necessária para o seu caso de uso.
Teste com pedidos rascunho
Crie pedidos de teste para verificar se a API funciona corretamente antes de entrar no ar.
Este recurso está disponível nos planos Pro. Entre em contato para preços e assistência de configuração.
Perguntas frequentes
A API respeita minhas regras de cancelamento?
Sim. A API aplica automaticamente suas configurações de janela de edição, restrições de pedido e políticas de reembolso. Pedidos fora da janela de edição ou com tags de bloqueio não podem ser cancelados via API.
Como os reembolsos são processados?
Os reembolsos são processados de acordo com suas configurações de pagamento Revize — tanto para o método de pagamento original quanto como crédito da loja, exatamente como cancelamentos pelo portal do cliente.
Posso usar isto para integrações de terceiros?
Com certeza. A API é projetada para integrações externas — chatbots, provedores de serviços de e-mail, apps personalizados ou qualquer sistema que possa fazer requisições HTTP.
É necessária autenticação?
A API usa verificação por número do pedido + e-mail para segurança. Não são necessárias chaves de API, tornando a integração simples enquanto garante que apenas os donos do pedido possam cancelar.
A API Pública de Cancelamento estende o cancelamento em autoatendimento além do portal Revize. Use-a para encontrar os clientes onde quer que estejam — e-mails, páginas de suporte ou chatbots.
Recursos relacionados