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.
L’API d’annulation publique te permet d’ajouter l’annulation de commande en libre-service n’importe où — e-mails post-achat, pages de support, chatbots ou formulaires personnalisés. Aucun app embed requis.
Pourquoi utiliser l’API d’annulation
Annulation partout Ajoute des boutons d’annulation aux e-mails, pages FAQ, flux de chatbot ou toute interface personnalisée hors de ta boutique.
Aucun app embed nécessaire Fonctionne indépendamment du portail client Revize. Il suffit d’appeler l’endpoint API.
Tes règles s'appliquent L’API respecte automatiquement tes fenêtres temporelles d’annulation et tes règles d’éligibilité.
Intégration simple Un endpoint, un format de requête simple. Facile à intégrer avec n’importe quel système ou plateforme.
Endpoint API
POST https://revize.untechnickle.com/api/public/v1/{shop-domain-slug}/cancel_order
Paramètres :
shop-domain-slug — Le domaine de ta boutique Shopify sans .myshopify.com (ex. my-store depuis my-store.myshopify.com)
{
"order_number" : "#2667" ,
"email" : "customer@example.com"
}
Champ Type Requis Description order_numberstring Oui Le numéro de commande incluant le symbole # emailstring Oui L’adresse e-mail du client utilisée pour la commande
Codes de réponse
L’API retourne un champ status indiquant le résultat :
Status Description SUCCESSCommande annulée avec succès ORDER_NOT_FOUNDLa commande n’existe pas ou l’e-mail ne correspond pas NOT_CANCELLABLELa commande ne peut pas être annulée (restrictions de politique) ORDER_FULFILLEDCommande déjà préparée, annulation impossible NOT_EDITABLELa commande est verrouillée pour l’édition CANCEL_DISABLEDFonctionnalité d’annulation non activée pour cette boutique APP_INACTIVEL’application Revize n’est pas active SHOP_NOT_FOUNDBoutique introuvable dans le système DOMAIN_MISSINGSlug de domaine de boutique manquant dans la requête FAILEDÉchec général de l’opération
Exemple d’intégration
Voici un exemple JavaScript pour appeler l’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' };
}
}
Section de thème Shopify
Ajoute un formulaire d’annulation à n’importe quelle page de ton thème Shopify. Cette section prête à l’emploi gère tous les appels API et affiche les messages appropriés.
Code complet de la section 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 %}
Cas d’usage courants
Pages de support
E-mails post-achat
Chatbots
Annulation en libre-service sur les pages FAQ/Aide Ajoute le formulaire d’annulation à tes pages de support ou FAQ pour que les clients puissent annuler des commandes sans contacter le support.
Réduit les tickets de support
Disponibilité 24/7
Traitement instantané
Bouton d’annulation dans les e-mails de confirmation Ajoute un lien « Cancel Order » dans tes e-mails transactionnels qui ouvre une page d’annulation sur ta boutique.
Pratique pour les clients
Capte tôt les demandes d’annulation impulsives
Réduit les questions « comment annuler ? »
Annulation automatisée via chat Intègre l’API avec des chatbots (Gorgias, Zendesk, etc.) pour gérer automatiquement les demandes d’annulation.
Réponse instantanée
Aucune intervention d’agent nécessaire
Fonctionne 24/7
Exigences de configuration
L’API d’annulation publique est une fonctionnalité avancée qui nécessite une activation par notre équipe.
Contacte-nous pour l'activer
Configurer les paramètres de remboursement
Définis ta méthode de remboursement dans Payments & Refunds — moyen de paiement initial ou crédit boutique.
Récupérer tes détails d'intégration
Nous te fournirons ton slug de domaine boutique et toute configuration personnalisée nécessaire à ton cas d’usage.
Tester avec des draft orders
Crée des commandes test pour vérifier que l’API fonctionne correctement avant la mise en production.
Cette fonctionnalité est disponible sur les forfaits Pro. Contacte-nous pour la tarification et l’aide à la configuration.
Questions fréquentes
L'API respecte-t-elle mes règles d'annulation ?
Oui. L’API applique automatiquement tes paramètres de fenêtre d’édition, restrictions de commande et politiques de remboursement. Les commandes hors fenêtre d’édition ou avec des tags bloquants ne peuvent pas être annulées via l’API.
Comment les remboursements sont-ils traités ?
Puis-je l'utiliser pour des intégrations tierces ?
Absolument. L’API est conçue pour les intégrations externes — chatbots, fournisseurs de service e-mail, applications personnalisées ou tout système capable de faire des requêtes HTTP.
Une authentification est-elle requise ?
L’API utilise la vérification numéro de commande + e-mail pour la sécurité. Aucune clé API n’est requise, ce qui rend l’intégration simple tout en garantissant que seuls les propriétaires de commande peuvent annuler.
L’API d’annulation publique étend l’annulation en libre-service au-delà du portail Revize. Utilise-la pour rejoindre les clients où qu’ils soient — e-mails, pages de support ou chatbots.
Fonctionnalités liées