Saltar para o conteúdo principal

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)

Formato da requisição

{
  "order_number": "#2667",
  "email": "customer@example.com"
}
CampoTipoObrigatórioDescrição
order_numberstringSimO número do pedido incluindo o símbolo #
emailstringSimE-mail do cliente usado no pedido

Códigos de resposta

A API retorna um campo status indicando o resultado:
StatusDescriçã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.
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: 1200px;
  margin: 0 auto;
  padding: 0 20px;
}

.order-cancel-form {
  max-width: {{ section.settings.form_width }}px;
  margin: 0 auto;
  padding: {{ section.settings.form_padding }}px;
  border: 1px solid {{ section.settings.border_color }};
  border-radius: {{ section.settings.border_radius }}px;
  background: {{ section.settings.form_background }};
}

.order-cancel-form h2 {
  margin-bottom: 10px;
  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: 24px;
  color: {{ section.settings.description_color }};
  text-align: {{ section.settings.text_align }};
}

.form-group {
  margin-bottom: 20px;
  text-align: left;
}

.form-group label {
  display: block;
  margin-bottom: 8px;
  font-weight: 600;
  font-size: 14px;
}

.form-group input {
  width: 100%;
  padding: 12px;
  border: 1px solid {{ section.settings.input_border_color }};
  border-radius: 4px;
  font-size: 14px;
  box-sizing: border-box;
}

.form-group small {
  display: block;
  margin-top: 4px;
  color: #666;
  font-size: 12px;
}

button {
  width: 100%;
  padding: 14px;
  background: {{ section.settings.button_background }};
  color: {{ section.settings.button_text_color }};
  border: none;
  border-radius: 4px;
  font-size: 16px;
  font-weight: 600;
  cursor: pointer;
}

button:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

#message {
  margin-top: 20px;
  padding: 12px;
  border-radius: 4px;
  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

Cancelamento em autoatendimento em páginas de FAQ/AjudaAdicione 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

Requisitos de configuração

A API Pública de Cancelamento é um recurso avançado que requer ativação pela nossa equipe.
1

Entre em contato para habilitar

Entre em contato com nossa equipe para habilitar a API Pública de Cancelamento para sua loja.
2

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.
3

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.
4

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

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.
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.
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.
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