Source: https://deskeen.fr/api-docs
Timestamp: 2020-08-14 08:17:33+00:00

Document:
Documentation de l'API de Deskeen.fr
L'API de l'application Deskeen.fr permet de réaliser toutes les fonctionnalités de l'application à partir de code informatique plutôt qu'en utilisant l'interface Web.
Elle donne la possibilité aux utilisateurs de Deskeen.fr d'interfacer leurs applications informatiques pour récupérer certaines informations ou automatiser certaines tâches.
La compréhension de cette documentation et la réalisation de programmes informatiques basées sur cette API nécessitent des compétences en informatique et en développement Web.
Types de requêtes de l'API
Codes HTTP des réponses de l'API
Requêtes d'authentification
Requêtes de l'API
Format des paramètres des requêtes
Format de données spécifiques
Créer un devis pour un client
Créer un devis pour le dossier d'un client
Créer un devis à partir d'un devis existant
Obtenir le rendu HTML d'un devis
Supprimer un devis
Clôturer un devis
Ré-ouvrir un devis clôturé
Obtenir un article d'un devis
Ajouter un article à un devis
Modifier un article d'un devis
Retirer un article d'un devis
Envoyer un devis par e-mail
Rechercher des devis
Articles initiaux des Devis
Ajouter un article initial aux devis
Modifier un article initial de devis
Supprimer un article initial de devis
Obtenir un article initial de devis
Obtenir tous les articles initiaux des devis
Créée une commande
Créer une commande dans un dossier
Obtenir une commande
Obtenir le rendu HTML d'une commande
Clôturer une commande
Ré-ouvrir une commande clôturée
Générer un bon de livraison à partir d'une commande
Obtenir un article d'une commande
Ajouter un article à une commande
Modifier un article d'une commande
Retirer un article d'une commande
Créer une facture à partir d'une commande
Obtenir le rendu HTML d'une facture
Valider une facture
Retirer un article d'une facture
Ajouter un escompte à une facture
Retirer un escompte d'une facture
Générer un courrier de relance pour une facture impayée
Générer un courrier de mise en demeure pour une facture impayée
Créer une facture d'acompte à partir d'une commande
Modifier le montant de l'acompte
Obtenir le paiement d'une facture
Ajouter un paiement à une facture
Supprimer un paiement d'une facture
Ajouter un contact au carnet d'adresses
Obtenir un contact du carnet d'adresses
Modifier un contact du carnet d'adresses
Supprimer un contact du carnet d'adresses
Créer un compte à un client
Supprimer le compte d'un client
Ajouter un article au catalogue
Obtenir un article du catalogue
Modifier un article du catalogue
Supprimer un article du catalogue
Ajouter un tarif négocié pour un client
Supprimer un tarif négocié d'un client
Obtenir une dépense
Modifier une dépense
Supprimer une dépense
Ajouter une article à une dépense
Modifier un article d'une dépense
Supprimer un article d'une dépense
Ajouter un justificatif à une dépense
Modifier un justificatif d'une dépense
Retirer un justificatif d'une dépense
Télécharger un justificatif d'une dépense
Ajouter le paiement d'une dépense
Modifier le paiement d'une dépense
Supprimer le paiement d'une dépense
Objets retournés par l'API
Objet - Informations du compte
Objet - Entreprise
Objet - Contact du carnet d'adresses
Objet - Devis
Objet - Article de devis
Objet - Recherche de devis
Objet - Commande
Objet - Article de commande
Objet - Facture
Objet - Article de facture
Objet - Paiement de facture
Objet - Conditions de paiement
Objet - Envoi
Objet - Article du catalogue
Objet - Activité
Objet - Dépense
L'API utilise principalement les conventions et standards du Web. Les notions les plus importantes sont reprises et expliquées pour plus de compréhension.
Les types de requêtes utilisées sont: POST, PUT et DELETE.
Les requêtes POST permettent de créer une ressource. L'objet présent dans le corps de la requête est utilisé pour altérer les propriétés de cette ressource. Si des propriétés de la ressource ne sont pas spécifiées, les valeurs par défaut de la ressource sont utilisées.
Les requêtes PUT permettent de modifier une ressource. Seules les propriétés présentes dans le corps de la requête sont utilisées pour modifier la ressources. Les propriétés non présentes dans le corps de la requête restent inchangées.
Enfin, les requêtes DELETE permettent de supprimer une ressource.
Les codes HTTP conventionnels sont utilisés pour indiquer le succès ou l'échec d'une requête.
Les codes 200, 201 et 204 sont utilisés pour indiquer le succès de la requête. Plus précisément:
200 indique que la requête a correctement été traitée et que la réponse contient un message.
201 indique que la ressource a bien été créée. La réponse peut contenir un message.
204 indique que la requête a bien été traitée et que la réponse ne contient pas de message.
Les codes entre 400 et 499 sont utilisés pour indiquer l'échec de la requête. Le corps de la réponse contient alors un message d'erreur avec la raison pour laquelle la requête a échoué. Plus précisément:
400 indique une erreur dans le format du corps de la requête.
401 indique une erreur d'authentification.
403 indique que l'opération n'est pas permise.
404 indique que la ressource n'existe pas.
409 indique une erreur de conflits entre plusieurs requêtes simultanées.
422 indique qu'une valeur du corps de la requête est incorrecte.
Enfin, les codes 500 et plus sont utilisés lorsqu'une erreur interne à l'API intervient.
Les requêtes d'authentification doivent contenir deux en-têtes personnalisées: dk-timestamp et dk-hash.
L'en-tête dk-timestamp correspond à la date de création de la requête au format JSON (ISO 8601), par exemple 2020-04-29T15:08:10.404Z, et l'en-tête dk-hash correspond à l'empreinte numérique de la requête.
L'empreinte numérique est générée en codant en Base64 le résultat de la fonction de hachage SHA-256 du texte composé des éléments suivants concaténés:
La valeur du paramètre dk-timestamp;
La méthode de la requête, GET, POST, PUT ou DELETE;
L'adresse du point d'accès, en excluant le nom de domaine (par exemple /login);
Le corps de la requête.
Le corps des requêtes d'authentification doit être au format JSON. L'entête content-type de la requête doit donc être égal à application/json.
Exemple d'une requête d'authentification avec en-têtes et contenu:
dk-timestamp: 2020-04-29T15:08:10.404Z
dk-hash: y20ASPRM5nktjO0T2SGjRaxm1dTFWIVv8wy8tXJnA0k=
body: {"email":"moncompte@deskeen.fr","password":"monmotdepasse"}
L'empreinte dk-hash de la requête d'exemple ci-dessous a été calculée à partir du texte suivant:
2020-04-29T15:08:10.404ZPOST/login{"email":"moncompte@deskeen.fr","password":"monmotdepasse"}
Toutes les requêtes envoyées à l'API, à l'exception des requêtes d'authentification, doivent contenir quatre paramètres personnalisés: dk-tenant, dk-user, dk-timestamp et dk-hmac.
Le paramètre dk-tenant correspond à l'identifiant de l'entreprise fourni lors de l'authentification.
Le paramètre dk-user correspond à l'identifiant de l'utilisateur également fourni lors l'authentification.
Le paramètre dk-timestamp correspond à la date de création de la requête au format JSON (ISO 8601), par exemple 2020-04-29T15:08:10.404Z.
Le paramètre dk-hmac correspond à la signature numérique de la requête. Elle est générée en codant en Base64 le résultat de l'algorithme HMAC - SHA-256 en utilisant la signature numérique de la session fournie lors de l'authentification sur le texte composé des éléments suivants concaténés:
La valeur de l'en-tête dk-timestamp;
L'adresse du point d'accès, en excluant le nom de domaine et les paramètres de l'adresse. Par exemple /contact et non pas https://api.deskeen.fr/contact ni /contact?query=foo;
Ces paramètres personnalisés peuvent êtres ajoutés à l'en-tête de la requête ou aux paramètres de l'adresse.
Exemple d'une requête avec les paramètres ajoutés à l'en-tête de la requête et en utilisant la signature numérique de la session suivante:
BDoTDSBkElWR2x0cT4HHrrbVDMOoeO9BWipFMdINxmSxqJf5SeS7uw==
Contenu de la requête:
dk-tenant: 1
dk-user: 808
dk-timestamp: 2020-05-01T16:40:45.374Z
dk-hash: RabkdDawnUGCSxOVyVPAlkXoFerq078BTGXnqzc+OqM=
Exemple de la même requête avec les paramètres ajoutés à l'adresse:
GET /contact?dk-tenant=1&dk-user=808&dk-timestamp=2020-05-01T16:40:45.374Z&dk-hash=RabkdDawnUGCSxOVyVPAlkXoFerq078BTGXnqzc+OqM=
Le contenu des requêtes, lorsqu'un contenu est présent, doit être au format JSON. L'entête content-type de la requête doit donc être égal à application/json.
Lorsque que des paramètres booléens sont ajoutés à l'adresse, les textes acceptés sont:
true ou 1 pour représenter la valeur VRAI.
false ou 0 pour FAUX.
Les numéros de téléphones sont au format international. Ils débutent par le signe plus ("+"), puis l'indicatif du pays et le numéro de téléphone sans le zéro inital et sans espace. Par exemple +33123456789 pour un numéro français.
Les pays sont représentés par leurs codes ISO-3166. Par exemple FR pour la France.
Avant de pouvoir effectuer des opérations, il est nécessaire de s'authentifier en envoyant ses identifiants dans une requête d'authentification.
post /login[/{Identifiant_de_l_entreprise}]
Adresse e-mail du compte de l'utilisateur.
Mot de passe du compte de l'utilisateur.
token Optionnel
Nombre TOTP à six chiffres généré par l'application d'authentification. Obligatoire si l'authentification à deux facteurs est activée sur le compte.
Les identifiants sont corrects.
Si le compte est rattaché qu'à une seule entreprise, un objet de type informations du compte est retourné. Il contient notamment la signature numérique de la session à utiliser par la suite pour envoyer des requêtes à l'API et effectuer des opérations.
Si le compte est rattaché à plusieurs entreprises, la liste des entreprises est retournée. Une seconde requête d'authentification doit être émise en rajoutant l'identifiant de l'entreprise à l'adresse.
401 Non-autorisé
Exemple - S'authentifier à partir d'un compte rattaché à une seule entreprise
{"email":"moncompte@deskeen.fr","password":"monmotdepasse"}
HTTP 200 OK {"tenant_id":1,"id":808,"token":"lLn9KLvn2kVYGtJgKxwbVp6yEzVBL+iQ+yXN16UjlUkFvnqS1Yo4FQ==","account_type":10,"description":"John","firstname":"Doe","email":"john.doe@example.com","has_2fa":false,"calendar_start_hour":null,"calendar_end_hour":null,"locale":"fr-fr","account_notif_type":null,"account_notif_file_email":false,"account_notif_msg_email":false,"account_notif_event_email":false,"company":{"siren":null,"description":"ABC Ltd","address":"1 rue du Paradis","postal_code":"67100","city":"Strasbourg","country_code":"fr","email":"abc@example.com","tel":"0123456789","tel2":null,"fax":null,"website":null,"vat":true,"quotation_valid_until":30,"acc_vat_out_nb":null,"acc_vat_in_nb":null,"deposit_rate":1000,"tax_rate":2000,"payment_terms":{"days_nb":15,"end_of_month":true,"early_payment_discount_rate":200},"layout_quotation_id":null,"layout_order_id":null,"layout_delivery_id":null,"layout_invoice_id":null,"layout_footer_id":15,"layout_term_id":12,"client_create_folder":true,"notif_folder_new_by_client_email":false,"client_default_manager_id":1,"task_rate":100,"task_rate_unit":24,"credit_card_iban":null,"stripe_account_id":null,"stripe_account_created_on":null,"stripe_account_validated_on":null},"parent":null,"auth":{"contact_edit":true,"employee_edit":true,"expense_show":true,"expense_edit":true,"folder_show":true,"folder_edit":true,"invoice_show":true,"invoice_edit":true,"invoice_validate":true,"invoice_payment_edit":true,"material_show":true,"material_edit":true,"note_show":true,"note_edit":true,"settings_show":true,"settings_edit":true,"order_show":true,"order_edit":true,"report":true,"quotation_edit":true,"quotation_show":true,"quotation_validate":true}}
Exemple - S'authentifier à partir d'un compte rattaché à deux entreprises, sans préciser l'entreprise souhaitée
HTTP 200 OK [{"id":1,"description":"ABC Ltd"},{"id":11,"description":"101 SAS"}]
Exemple - Authentification à partir d'un compte rattaché à deux entreprises, en précisant l'entreprise souhaitée
POST /login/1
Il est possible de créer un devis à deux endroits différents, selon que l'on souhaite rattacher le devis à la fiche du client directement, ou au dossier d'un client.
Dans les deux cas, un objet Devis est retourné. Le fonctionnement est identique ensuite.
Plus d'infos sur le fonctionnement des devis dans cet article: Fonctionnement des devis.
post /contact/{Identifiant_du_client}/quotation
201 OK - Créé
Le devis a été correctement créé. Un objet de type Devis est retourné.
Exemple - Créer un nouveau devis pour le client 1000
POST /contact/1000/quotation
HTTP 201 OK - Créé {"id":771,"state":"running","status":10,"number":7,"date":"2020-05-02T09:00:12.000Z","comment":null,"valid_until":"2020-06-01T09:00:12.000Z","shipping_date":null,"terms":{"id":12,"text":"Conditions du devis","created_on":"2019-04-20T12:51:07.000Z"},"client":{"id":1000,"description":"Doe","firstname":"John","address":null,"postal_code":null,"city":null,"country_code":null},"client_original":{"id":1000,"account_type":null,"company":false,"description":"Doe","firstname":"John","birth_name":null,"birth_city":null,"birth_date":null,"address":null,"postal_code":null,"city":null,"country_code":null,"birth_country_code":null,"email":null,"tel":null,"tel2":null,"fax":null,"website":null,"vat_nb":null,"iban":null,"comment":null,"role":null,"payment_terms":null,"expense_class":null,"profile_img_url":null,"profile_img_url_small":null,"parent":null},"folder":null,"payment_terms":{"days_nb":15,"end_of_month":true,"early_payment_discount_rate":200},"validated_by":null,"validated_on":null,"layout_id":null,"layout_footer_id":15,"order":null,"lines":[{"id":11055,"description":"Frais de dossier","unit_price":2000,"quantity":100,"discount":0,"tax_rate":2000,"material_id":null}],"sendings":null,"is_sent":false,"esignature":null}
post /folder/{Identifiant_du_dossier}/quotation
Exemple - Créer un nouveau devis pour le dossier 802
POST /folder/802/quotation
HTTP 201 OK - Créé {"id":772,"state":"running","status":10,"number":8,"date":"2020-05-02T09:09:10.000Z","comment":null,"valid_until":"2020-06-01T09:09:10.000Z","shipping_date":null,"terms":{"id":12,"text":"Conditions du devis","created_on":"2019-04-20T12:51:07.000Z"},"client":{"id":1000,"description":"Doe","firstname":"John","address":null,"postal_code":null,"city":null,"country_code":null},"client_original":{"id":1000,"account_type":null,"company":false,"description":"Doe","firstname":"John","birth_name":null,"birth_city":null,"birth_date":null,"address":null,"postal_code":null,"city":null,"country_code":null,"birth_country_code":null,"email":null,"tel":null,"tel2":null,"fax":null,"website":null,"vat_nb":null,"iban":null,"comment":null,"role":null,"payment_terms":null,"expense_class":null,"profile_img_url":null,"profile_img_url_small":null,"parent":null},"folder":{"id":802,"locked":false,"description":"Chantier","reference_internal":null,"reference_client":null,"location":null,"comment":null,"manager":{"id":808,"description":"Schmiedt","firstname":"Morgan","email":"morgan@example.fr","tel":null,"tel2":null,"fax":null,"role":null,"auth":null,"profile_img_url":null,"profile_img_url_small":null},"client":{"id":1000,"account_type":null,"company":false,"description":"Doe","firstname":"John","birth_name":null,"birth_city":null,"birth_date":null,"address":null,"postal_code":null,"city":null,"country_code":null,"birth_country_code":null,"email":null,"tel":null,"tel2":null,"fax":null,"website":null,"vat_nb":null,"iban":null,"comment":null,"role":null,"payment_terms":null,"expense_class":null,"profile_img_url":null,"profile_img_url_small":null,"parent":null},"class":null,"task_rate":null,"task_rate_unit":null,"tax_rate":null},"payment_terms":{"days_nb":15,"end_of_month":true,"early_payment_discount_rate":200},"validated_by":null,"validated_on":null,"layout_id":null,"layout_footer_id":15,"order":null,"lines":[{"id":11056,"description":"Frais de dossier","unit_price":2000,"quantity":100,"discount":0,"tax_rate":2000,"material_id":null}],"sendings":null,"is_sent":false,"esignature":null}
post /quotation/{Identifiant_du_devis}/clone
Un devis identique a été créé. Un objet de type Devis est retourné.
403 Refusé
Le devis n'a pas été créé. Soit, l'entreprise cliente du devis est radiée (code entreprise_closed), soit le dossier dans lequel le devis se trouve est clôturé (code folder_locked).
Exemple - Créer un nouveau devis à l'identique du devis 772
POST /quotation/772/clone
HTTP 201 OK - Créé {"id":807,"state":"running","status":10,"number":9,"date":"2020-07-23T13:45:11.000Z","comment":null,"valid_until":"2020-08-22T13:43:56.000Z","shipping_date":null,"terms":{"id":23,"text":"Conditions générales - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.","created_on":"2020-07-23T13:44:53.000Z"},"client":{"id":1012,"description":"Doe","firstname":"John","address":"16 Grand Rue","postal_code":"67000","city":"STRASBOURG","country_code":"fr"},"client_original":{"id":1012,"account_type":null,"company":false,"description":"Doe","firstname":"John","birth_name":null,"birth_city":null,"birth_date":null,"address":"16 Grand Rue","postal_code":"67000","city":"STRASBOURG","country_code":"fr","birth_country_code":null,"email":null,"tel":null,"tel2":null,"fax":null,"website":null,"vat_nb":null,"iban":null,"role":null,"payment_terms":null,"expense_class":null,"profile_img_url":null,"profile_img_url_small":null,"parent":null},"folder":null,"payment_terms":{"days_nb":15,"end_of_month":true,"early_payment_discount_rate":200},"validated_by":null,"validated_on":null,"layout_id":null,"layout_footer_id":15,"order":null,"lines":[{"id":11533,"description":"Frais de dossier","unit_price":2000,"quantity":100,"discount":0,"tax_rate":2000,"material_id":null}],"sendings":null,"is_sent":false,"esignature":null}
get /quotation/{Identifiant_du_devis}
Indicateur pour recevoir le détails des articles du devis.
Le devis a été trouvé. Un objet de type Devis est retourné.
Exemple - Obtenir le devis 772 sans les articles
GET /quotation/772
HTTP 200 OK {"id":771,"state":"running","status":10,"number":7,"date":"2020-05-02T09:00:12.000Z","comment":null,"valid_until":"2020-06-01T09:00:12.000Z","shipping_date":null,"terms":{"id":12,"text":"Test conditions","created_on":"2019-04-20T12:51:07.000Z"},"client":{"id":1000,"description":"Doe","firstname":"John","address":null,"postal_code":null,"city":null,"country_code":null},"client_original":{"id":1000,"account_type":null,"company":false,"description":"Doe","firstname":"John","birth_name":null,"birth_city":null,"birth_date":null,"address":null,"postal_code":null,"city":null,"country_code":null,"birth_country_code":null,"email":null,"tel":null,"tel2":null,"fax":null,"website":null,"vat_nb":null,"iban":null,"comment":null,"role":null,"payment_terms":null,"expense_class":null,"profile_img_url":null,"profile_img_url_small":null,"parent":null},"folder":null,"payment_terms":{"days_nb":15,"end_of_month":true,"early_payment_discount_rate":200},"validated_by":null,"validated_on":null,"layout_id":null,"layout_footer_id":15,"order":null,"lines":null,"sendings":null,"is_sent":false,"esignature":null}
Exemple - Obtenir le devis 772 avec les articles
GET /quotation/772?line=true
HTTP 200 OK {"id":771,"state":"running","status":10,"number":7,"date":"2020-05-02T09:00:12.000Z","comment":null,"valid_until":"2020-06-01T09:00:12.000Z","shipping_date":null,"terms":{"id":12,"text":"Test conditions","created_on":"2019-04-20T12:51:07.000Z"},"client":{"id":1000,"description":"Doe","firstname":"John","address":null,"postal_code":null,"city":null,"country_code":null},"client_original":{"id":1000,"account_type":null,"company":false,"description":"Doe","firstname":"John","birth_name":null,"birth_city":null,"birth_date":null,"address":null,"postal_code":null,"city":null,"country_code":null,"birth_country_code":null,"email":null,"tel":null,"tel2":null,"fax":null,"website":null,"vat_nb":null,"iban":null,"comment":null,"role":null,"payment_terms":null,"expense_class":null,"profile_img_url":null,"profile_img_url_small":null,"parent":null},"folder":null,"payment_terms":{"days_nb":15,"end_of_month":true,"early_payment_discount_rate":200},"validated_by":null,"validated_on":null,"layout_id":null,"layout_footer_id":15,"order":null,"lines":[{"id":11055,"description":"Frais de dossier","unit_price":2000,"quantity":100,"discount":0,"tax_rate":2000,"material_id":null}],"sendings":null,"is_sent":false,"esignature":null}
get /quotation/{Identifiant_du_devis}/file
Indicateur pour que l'en-tête content-disposition: attachment soit ajoutée à la réponse. La présence du paramètre vaut pour VRAI, son absence pour FAUX.
Le devis est retourné au format HTML.
Exemple - Obtenir le rendu HTML du devis 772
GET /quotation/772/file
<!DOCTYPE html><meta charset=utf-8><style>*{box-sizing:border-box;color:inherit;font-weight:inherit;margin:0;padding:0;line-height:1.5}body{width:18cm;min-height:27cm;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;font-size:14px;margin:0 auto;padding:.5cm 0}h1{flex:auto;text-transform:uppercase;text-align:center;font-size:40px;font-weight:300}.client{margin:1em 0 1em 9cm;min-height:50px}table{border-collapse:collapse}.lines{margin:2em 0;width:100%;border:1px solid #ccc}.lines thead{background-color:#fafafa;border-bottom:1px solid #ccc;text-align:center;color:#4d4d4d;font-size:13px}.lines td,.lines th{border-right:1px solid #ccc;text-align:right;vertical-align:top;padding:.5em}.lines td:first-child,.lines th:first-child,.vat td:first-child{text-align:left}.col-desc{width:40%}.col-discount,.col-qty,.col-vat{width:10%}.col-tot,.col-unit{width:15%}.bottom{display:flex}.terms{flex:auto}.vat td{padding:.2em}.vat td:last-child{text-align:right;min-width:150px;padding-right:8px}.vat tbody td:first-child::before{content:'TVA '}.tot-w-tax{font-weight:600}.comment{margin-top:1em}.legal{color:#4d4d4d;margin-top:1em}footer{color:#4d4d4d;text-align:center}@media screen{main{min-height:25cm}}@page{size:A4 portrait;margin:2cm 1cm 1cm}@media print{.lines{page-break-inside:auto}.lines thead{page-break-inside:avoid;display:table-header-group}.lines tr{page-break-inside:avoid;page-break-after:auto}.text{page-break-inside:avoid}footer{width:18cm;position:fixed;margin:0 auto}}</style><main><div class=company><div>ABC Ltd</div><div>1 rue du Paradis</div><div>67100 Strasbourg</div><div></div></div><h1>Devis</h1><div class=client><div>Doe John</div><div></div><div> </div><div></div></div><table class=lines><thead><tr><th class=col-desc>Description<th class=col-unit>Prix Unit. HT<th class=col-qty>Quantité<th class=col-discount>%Remise<th class=col-vat>%TVA<th class=col-tot>Prix Total HT<tbody><tr><td>Frais de dossier</td><td>20,00 €</td><td>1</td><td></td><td>20 %</td><td>20,00 €</td></tr></table><div class=bottom><span class=terms><div>N°8</div><div>02/05/2020</div><div>Valable jusqu'au 01/06/2020</div><div>Paiement 15 jours fin de mois</div><div>Escompte de 5,5 % dans le cas d'un paiement anticipé</div></span><table class=vat><thead><tr><td>Total HT<td>20,00 €<tbody><tr><td>20 %</td><td>4,00 €</td></tr><tfoot><tr><td>Total TVA<td>4,00 €<tr><td>Total TTC<td class=tot-w-tax>24,00 €</table></div><div class=comment></div><div class=legal>Test conditions</div></main><footer><p>Bla</p><p>Test metadata</p></footer>
delete /quotation/{Identifiant_du_devis}
Le devis a été supprimé.
Le devis n'a pas été supprimé. Le devis est, soit déjà signé (code quotation_validated), soit clôturé (code quotation_closed).
Exemple - Supprimer le devis 772
POST /quotation/772
put /quotation/{Identifiant_du_devis}
valid_until Optionnel
Date de validité du devis. La date doit être postérieure à la date du devis.
shipping_date Optionnel
Date de livraison des articles du devis. La date doit être postérieure à la date du devis.
payment_terms Optionnel
Conditions de paiement du devis.
comment Optionnel
Commentaire du devis.
client Optionnel
Client du devis.
folder_id Optionnel
Identifiant du dossier auquel le devis sera rattaché.
Le devis a été modifié.
Le devis n'a pas été modifié. Le devis est, soit déjà signé (code quotation_validated), soit clôturé (code quotation_closed), soit envoyé au client (code quotation_sent).
Exemple - Modifier la date de validité du devis 772
PUT /quotation/772
{"valid_until":"2020-06-01T09:00:12.000Z"}
post /quotation/{Identifiant_du_devis}/lock
Le devis a été clôturé.
Le devis n'a pas été clôturé. Le devis est, soit signé (code quotation_validated), soit déjà clôturé (code quotation_closed), soit dans un dossier clôturé (code folder_locked).
Exemple - Clôturer le devis 772
POST /quotation/772/lock
delete /quotation/{Identifiant_du_devis}/lock
Le devis a été ré-ouvert.
Le devis n'a pas été ré-ouvert. Le devis est, soit déjà modifiable (code quotation_running), soit signé (code quotation_validated).
Exemple - Ré-ouvrir le devis 772
DELETE /quotation/772/lock
get /quotation/{Identifiant_du_devis}/line/{Identifiant_de_l_article}
L'article du devis a été trouvé. Un objet de type Article de devis est retourné.
Exemple - Obtenir l'article 11055 du devis 772
GET /quotation/772/line/11055
HTTP 200 OK {"id":11055,"description":"Frais de dossier","unit_price":2000,"quantity":100,"discount":0,"tax_rate":2000,"material_id":null}
post /quotation/{Identifiant_du_devis}/line
Libellé de l'article.
unit_price Optionnel
Prix unitaire hors-taxes de l'article.
quantity Optionnel
Quantité de l'article.
discount Optionnel
Pourcentage de remise ou de majoration de l'article.
tax_rate Optionnel
Pourcentage de TVA de l'article.
material_id Optionnel
Identifiant de l'article du catalogue.
L'article a été ajouté au devis. Un objet de type Article de devis est retourné.
L'article n'a pas été ajouté au devis. Le devis est, soit signé (code quotation_validated), soit clôturé (code quotation_closed), soit déjà envoyé au client (code quotation_sent).
Exemple - Ajouter un article au devis 772
POST /quotation/772/line
{"description":"Frais de dossier","unit_price":2000,"quantity":100,"tax_rate":2000}
HTTP 201 OK - Créé {"id":11055,"description":"Frais de dossier","unit_price":2000,"quantity":100,"discount":0,"tax_rate":2000,"material_id":null}
put /quotation/{Identifiant_du_devis}/line/{Identifiant_de_l_article}
Prix unitaire hors-taxe de l'article.
L'article du devis a été modifié.
L'article n'a pas été modifié. Le devis est, soit signé (code quotation_validated), soit clôturé (code quotation_closed), soit déjà envoyé au client (code quotation_sent).
Exemple - Modifier la quantité de l'article 11055
PUT /quotation/772/line/11055
{"quantity":200}
delete /quotation/{Identifiant_du_devis}/line/{Identifiant_de_l_article}
L'article a été retiré du devis.
L'article n'a pas été retiré du devis. Le devis est, soit signé (code quotation_validated), soit clôturé (code quotation_closed), soit déjà envoyé au client (code quotation_sent).
Exemple - Retirer l'article 11055 du devis 772
DELETE /quotation/772/line/11055
post /quotation/{Identifiant_du_devis}/email
contact_id Obligatoire
Identifiant du contact qui recevra l'email.
title Obligatoire
Titre de l'e-mail.
body Obligatoire
Contenu de l'e-mail.
La devis va être envoyé au destinataire par e-mail. Un objet contenant l'identifiant de l'envoi est retourné.
Le devis n'a pas été envoyé au client car le devis est clôturé (code quotation_closed).
Exemple - Envoyer le devis 772 au client
POST /quotation/772/email
{"contact_id":1000,"title":"Devis N°8","body":"Bonjour,\nVous trouverez ci-joint votre devis de 324,00 €."}
HTTP 201 OK - Créé {"id":1647}
post /quotation/{Identifiant_du_devis}/order
Le devis a été confirmé. Un objet de type Commande est créé et retourné.
Le devis n'a pas été confirmé. Le devis est, soit déjà signé (code quotation_validated), soit clôturé (code quotation_closed), soit vide (code quotation_empty), soit avec un total négatif (code quotation_negativ), soit avec une signature électronique en cours de traitement (code quotation_esignature_running).
Exemple - Confirmer le devis 807
POST /quotation/807/order
HTTP 201 OK - Créé {"id":913,"state":"running","status":10,"number":8,"date":"2020-08-05T13:18:20.000Z","comment":null,"shipping_date":null,"client":{"id":1012,"description":"Doe","firstname":"John","address":"16 Grand Rue","postal_code":"67000","city":"STRASBOURG","country_code":"fr"},"client_original":{"id":1012,"account_type":null,"company":false,"description":"Doe","firstname":"John","birth_name":null,"birth_city":null,"birth_date":null,"address":"16 Grand Rue","postal_code":"67000","city":"STRASBOURG","country_code":"fr","birth_country_code":null,"email":null,"tel":null,"tel2":null,"fax":null,"website":null,"vat_nb":null,"iban":null,"role":null,"payment_terms":null,"expense_class":null,"profile_img_url":null,"profile_img_url_small":null,"parent":null},"folder":null,"payment_terms":{"days_nb":15,"end_of_month":true,"early_payment_discount_rate":200},"quotation":{"id":807,"state":"validated","status":20,"number":9,"date":"2020-07-23T13:45:11.000Z"},"lines":[{"id":9405,"description":"Frais de dossier","unit_price":2000,"quantity":100,"discount":0,"tax_rate":2000,"material_id":null,"task_id":null,"expense_id":null,"invoice_id":null},{"id":9406,"description":"Intervention","unit_price":10000,"quantity":100,"discount":0,"tax_rate":2000,"material_id":null,"task_id":null,"expense_id":null,"invoice_id":null}],"terms":{"id":23,"text":"Conditions générales - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.","created_on":"2020-07-23T13:44:53.000Z"},"layout_id":null,"layout_footer_id":15}
get /quotation
État du devis: closed pour les devis clôturés, running pour les devis non-signés, expired pour les devis dont la date de validité est expirée, et validated pour les devis signés.
Date et heure minimum ou égale du devis.
Date et heure maximale ou égale du devis.
Identifiant du client.
Identifiant du dossier.
Numéro du devis.
Indicateur pour recevoir le nombre total et le montant total des devis trouvés. Ajoute les propriétés count, total et total_tax à la réponse.
Nombre d'éléments maximal contenu dans la réponse. Nombre compris entre 1 et 200 inclus.
Identifiant maximal du devis .
Les devis répondant aux critères sont retournés dans un object de type Recherche de devis.
Exemple - Rechercher les devis non-signés le 02/07/2020
GET /quotation?state=running&from=2020-07-01T22:00:00.000Z&to=2020-07-03T21:59:59.999Z&page_size=5&total=true
HTTP 200 OK {"has_more":false,"count":1,"sum":2000,"sum_tax":400,"result":[{"total_excl_tax":2000,"total_tax":400,"id":802,"state":"running","status":10,"number":7,"date":"2020-07-03T14:10:52.000Z","shipping_date":null,"valid_until":"2020-02-21T18:05:12.000Z","client":{"id":903,"company":false,"ape":null,"description":"Albert","firstname":"MARIE MADELINE","address":null,"postal_code":null,"city":null,"country_code":null,"profile_img_url":null,"profile_img_url_small":null},"folder":null}]}
Les articles initiaux des devis correspondent aux articles qui seront ajoutés automatiquement aux nouveaux devis.
post /quotation/line
Exemple - Ajouter des frais de dossier de 20,00 EUR à tous les devis
{"description":"Frais de dossier","unit_price":2000,"quantity":100,"discount":0,"tax_rate":2000}
HTTP 201 OK - Créé {"id":6,"description":"Frais de dossier","unit_price":2000,"quantity":100,"discount":0,"tax_rate":2000}
put /quotation/line/{Identifiant_de_l_article_initial}
Exemple - Modifier la quantité de l'article initial 6
PUT /quotation/line/6
delete /quotation/line/{Identifiant_de_l_article_initial}
L'article a été supprimé et ne sera plus ajouté aux nouveaux devis.
Exemple - Retirer l'article initial 6
DELETE /quotation/line/6
get /quotation/line/{Identifiant_de_l_article_initial}
L'article initial du devis a été trouvé. Un objet de type Article de devis est retourné.
Exemple - Obtenir l'article initial 6
GET /quotation/line/6
HTTP 200 OK {"id":6,"description":"Frais de dossier","unit_price":2000,"quantity":100,"discount":0,"tax_rate":2000}
get /quotation/line
Si des articles initiaux ont été préalablement créés, une liste d'objets de type Article de devis est retournée. Sinon, rien n'est retourné.
Exemple - Obtenir les articles initiaux avec 2 résultats
HTTP 200 OK [{"id":7,"description":"Frais de dossier","position":null,"unit_price":2000,"quantity":100,"discount":0,"tax_rate":2000},{"id":8,"description":"Déplacement","position":null,"unit_price":990,"quantity":100,"discount":0,"tax_rate":2000}]
Une commande est créée automatiquement lorsqu'un devis est signé. Cette commande contient les mêmes conditions et les mêmes articles que le devis.
Une commande vierge peut aussi être créée, et comme les devis, la commande peut être créée à deux endroits différents, selon que l'on souhaite rattacher la commande à la fiche du client directement, ou au dossier d'un client.
Dans tous les cas, un objet Commande est retourné. Le fonctionnement est identique ensuite.
post /contact/{Identifiant_du_client}/order
La commande a été correctement créée. Un objet de type Commande est retournée.
Exemple - Créer une nouvelle commande pour le client 1000
POST /contact/1000/order
HTTP 201 OK - Créé {"id":889,"state":"running","status":10,"number":9,"date":"2020-05-04T16:54:06.000Z","comment":null,"shipping_date":null,"client":{"id":1000,"description":"Doe","firstname":"John","address":null,"postal_code":null,"city":null,"country_code":null},"client_original":{"id":1000,"account_type":null,"company":false,"description":"Doe","firstname":"John","birth_name":null,"birth_city":null,"birth_date":null,"address":null,"postal_code":null,"city":null,"country_code":null,"birth_country_code":null,"email":null,"tel":null,"tel2":null,"fax":null,"website":null,"vat_nb":null,"iban":null,"comment":null,"role":null,"payment_terms":null,"expense_class":null,"profile_img_url":null,"profile_img_url_small":null,"parent":null},"folder":null,"payment_terms":{"days_nb":15,"end_of_month":true,"early_payment_discount_rate":200},"quotation":null,"lines":null,"terms":{"id":12,"text":"Test conditions","created_on":"2019-04-20T12:51:07.000Z"},"layout_id":null,"layout_footer_id":15}
post /folder/{Identifiant_du_dossier}/order
La commande a été correctement créée. Un objet de type Commande est retourné.
Exemple - Créer une nouvelle commande dans le dossier 802
POST /folder/802/order
HTTP 201 OK - Créé {"id":890,"state":"running","status":10,"number":10,"date":"2020-05-04T16:58:02.000Z","comment":null,"shipping_date":null,"client":{"id":1000,"description":"Doe","firstname":"John","address":null,"postal_code":null,"city":null,"country_code":null},"client_original":{"id":1000,"account_type":null,"company":false,"description":"Doe","firstname":"John","birth_name":null,"birth_city":null,"birth_date":null,"address":null,"postal_code":null,"city":null,"country_code":null,"birth_country_code":null,"email":null,"tel":null,"tel2":null,"fax":null,"website":null,"vat_nb":null,"iban":null,"comment":null,"role":null,"payment_terms":null,"expense_class":null,"profile_img_url":null,"profile_img_url_small":null,"parent":null},"folder":{"id":802,"locked":false,"description":"Chantier","reference_internal":null,"reference_client":null,"location":null,"comment":null,"manager":{"id":808,"description":"Schmiedt","firstname":"Morgan","email":"morgan@example.fr","tel":null,"tel2":null,"fax":null,"role":null,"auth":null,"profile_img_url":null,"profile_img_url_small":null},"client":{"id":1000,"account_type":null,"company":false,"description":"Doe","firstname":"John","birth_name":null,"birth_city":null,"birth_date":null,"address":null,"postal_code":null,"city":null,"country_code":null,"birth_country_code":null,"email":null,"tel":null,"tel2":null,"fax":null,"website":null,"vat_nb":null,"iban":null,"comment":null,"role":null,"payment_terms":null,"expense_class":null,"profile_img_url":null,"profile_img_url_small":null,"parent":null},"class":null,"task_rate":null,"task_rate_unit":null,"tax_rate":null},"payment_terms":{"days_nb":15,"end_of_month":true,"early_payment_discount_rate":200},"quotation":null,"lines":null,"terms":{"id":12,"text":"Test conditions","created_on":"2019-04-20T12:51:07.000Z"},"layout_id":null,"layout_footer_id":15}
get /order/{Identifiant_de_la_commande}
Indicateur pour recevoir les articles de la commande dans la réponse.
La commande a été trouvée. Un objet de type Commande est retourné.
Exemple - Obtenir la commande 889 sans les articles
GET /order/889
HTTP 200 OK {"id":889,"state":"running","status":10,"number":9,"date":"2020-05-04T16:54:06.000Z","comment":null,"shipping_date":null,"client":{"id":1000,"description":"Doe","firstname":"John","address":null,"postal_code":null,"city":null,"country_code":null},"client_original":{"id":1000,"account_type":null,"company":false,"description":"Doe","firstname":"John","birth_name":null,"birth_city":null,"birth_date":null,"address":null,"postal_code":null,"city":null,"country_code":null,"birth_country_code":null,"email":null,"tel":null,"tel2":null,"fax":null,"website":null,"vat_nb":null,"iban":null,"comment":null,"role":null,"payment_terms":null,"expense_class":null,"profile_img_url":null,"profile_img_url_small":null,"parent":null},"folder":null,"payment_terms":{"days_nb":15,"end_of_month":true,"early_payment_discount_rate":200},"quotation":null,"lines":null,"terms":{"id":12,"text":"Test conditions","created_on":"2019-04-20T12:51:07.000Z"},"layout_id":null,"layout_footer_id":15}
Exemple - Obtenir la commande 889 avec les articles
GET /order/889?line=true
HTTP 200 OK {"id":889,"state":"running","status":10,"number":9,"date":"2020-05-04T16:54:06.000Z","comment":null,"shipping_date":null,"client":{"id":1000,"description":"Doe","firstname":"John","address":null,"postal_code":null,"city":null,"country_code":null},"client_original":{"id":1000,"account_type":null,"company":false,"description":"Doe","firstname":"John","birth_name":null,"birth_city":null,"birth_date":null,"address":null,"postal_code":null,"city":null,"country_code":null,"birth_country_code":null,"email":null,"tel":null,"tel2":null,"fax":null,"website":null,"vat_nb":null,"iban":null,"comment":null,"role":null,"payment_terms":null,"expense_class":null,"profile_img_url":null,"profile_img_url_small":null,"parent":null},"folder":null,"payment_terms":{"days_nb":15,"end_of_month":true,"early_payment_discount_rate":200},"quotation":null,"lines":[{"id":9217,"description":"Recherche de panne","unit_price":10000,"quantity":100,"discount":0,"tax_rate":2000,"material_id":null,"task_id":null,"expense_id":null,"invoice_id":null}],"terms":{"id":12,"text":"Test conditions","created_on":"2019-04-20T12:51:07.000Z"},"layout_id":null,"layout_footer_id":15}
get /order/{Identifiant_de_la_commande}/file
La commande est retourné au format HTML.
Exemple - Obtenir le rendu HTML de la commande 889
GET /order/889/file
<!DOCTYPE html><meta charset=utf-8><style>*{box-sizing:border-box;color:inherit;font-weight:inherit;margin:0;padding:0;line-height:1.5}body{width:18cm;min-height:27cm;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;font-size:14px;margin:0 auto;padding:.5cm 0}h1{flex:auto;text-transform:uppercase;text-align:center;font-size:40px;font-weight:300}.client{margin:1em 0 1em 9cm;min-height:50px}table{border-collapse:collapse}.lines{margin:2em 0;width:100%;border:1px solid #ccc}.lines thead{background-color:#fafafa;border-bottom:1px solid #ccc;text-align:center;color:#4d4d4d;font-size:13px}.lines td,.lines th{border-right:1px solid #ccc;text-align:right;vertical-align:top;padding:.5em}.lines td:first-child,.lines th:first-child,.vat td:first-child{text-align:left}.col-desc{width:40%}.col-discount,.col-qty,.col-vat{width:10%}.col-tot,.col-unit{width:15%}.bottom{display:flex}.terms{flex:auto}.vat td{padding:.2em}.vat td:last-child{text-align:right;min-width:150px;padding-right:8px}.vat tbody td:first-child::before{content:'TVA '}.tot-w-tax{font-weight:600}.comment{margin-top:1em}.legal{color:#4d4d4d;margin-top:1em}footer{color:#4d4d4d;text-align:center}@media screen{main{min-height:25cm}}@page{size:A4 portrait;margin:2cm 1cm 1cm}@media print{.lines{page-break-inside:auto}.lines thead{page-break-inside:avoid;display:table-header-group}.lines tr{page-break-inside:avoid;page-break-after:auto}.text{page-break-inside:avoid}footer{width:18cm;position:fixed;margin:0 auto}}</style><main><div class=company><div>ABC Ltd</div><div>1 rue du Paradis</div><div>67100 Strasbourg</div><div></div></div><h1>Commande</h1><div class=client><div>Doe John</div><div></div><div> </div><div></div></div><table class=lines><thead><tr><th class=col-desc>Description<th class=col-unit>Prix Unit. HT<th class=col-qty>Quantité<th class=col-discount>%Remise<th class=col-vat>%TVA<th class=col-tot>Prix Total HT<tbody><tr><td>Recherche de panne</td><td>100,00 €</td><td>1</td><td></td><td>20 %</td><td>100,00 €</td></tr></table><div class=bottom><span class=terms><div>N°9</div><div>04/05/2020</div><div>Paiement 15 jours fin de mois</div><div>Escompte de 2 % dans le cas d'un paiement anticipé</div></span><table class=vat><thead><tr><td>Total HT<td>100,00 €<tbody><tr><td>20 %</td><td>20,00 €</td></tr><tfoot><tr><td>Total TVA<td>20,00 €<tr><td>Total TTC<td class=tot-w-tax>120,00 €</table></div><div class=comment></div><div class=legal>Test conditions</div></main><footer><p>Bla</p><p>Test metadata</p></footer>
put /order/{Identifiant_de_la_commande}
Date de livraison des articles. La date doit être postérieure à la date de la commande.
Conditions de paiement de la commande.
Commentaire de la commande.
Nom et adresse du Client de la commande.
Identifiant du dossier dans lequel la commande sera mise.
La commande a été modifiée.
La commande n'a pas été modifiée car la commande est clôturée (code order_closed).
Exemple - Modifier l'adresse du client de la commande 889
PUT /order/772
{"client":{"address":"5, rue des roses","postal_code":"68000","city":"COLMAR","country_code":"fr"}}
post /order/{Identifiant_de_la_commande}/lock
La commande a été clôturée.
La commande n'a pas été clôturée. La commande est déjà clôturée (code order_closed) ou une facture a été créée pour cette commande et n'a pas été complétée (code invoice_running avec l'identifiant de la facture en question).
Exemple - Clôturer la commande 889
POST /order/889/lock
delete /order/{Identifiant_de_la_commande}/lock
La commande a été ré-ouverte.
La commande n'a pas été ré-ouverte. La commande est déjà ouverte (code order_running) ou le dossier dans lequel elle appartient a été clôturé (code folder_locked).
Exemple - Ré-ouvrir la commande 889
DELETE /order/889/lock
get /order/{Identifiant_de_la_commande}/delivery/file
Le bon de livraison est retourné au format HTML.
Exemple - Générer un bon de livraison pour la commande 889
GET /order/889/delivery/file
<!doctypehtml><meta charset=utf-8><style>*{box-sizing:border-box;color:inherit;font-weight:inherit;margin:0;padding:0;line-height:1.5}body{width:18cm;min-height:27cm;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;font-size:14px;margin:0 auto;padding:.5cm 0}h1{flex:auto;text-transform:uppercase;text-align:center;font-size:40px;font-weight:300}.client{margin:1em 0 1em 9cm;min-height:50px}table{border-collapse:collapse}.lines{margin:2em 0;width:100%;border:1px solid #ccc}.lines thead{background-color:#fafafa;border-bottom:1px solid #ccc;text-align:center;color:#4d4d4d;font-size:13px}.lines td,.lines th{border-right:1px solid #ccc;text-align:right;vertical-align:top;padding:.5em}.lines td:first-child,.lines th:first-child{text-align:left}.col-desc{width:90%}.col-qty{width:10%}.bottom{display:flex}.terms{flex:auto}.comment{margin-top:1em;min-height:2cm}.legal{color:#4d4d4d;margin-top:1em}footer{color:#4d4d4d;text-align:center}@media screen{main{min-height:25cm}}@page{size:A4 portrait;margin:2cm 1cm 1cm}@media print{.lines{page-break-inside:auto}.lines thead{page-break-inside:avoid;display:table-header-group}.lines tr{page-break-inside:avoid;page-break-after:auto}.text{page-break-inside:avoid}footer{width:18cm;position:fixed;margin:0 auto}}</style><main><div class=company><div>ABC Ltd</div><div>1 rue du Paradis</div><div>67100 Strasbourg</div><div></div></div><h1>Bon de livraison</h1><div class=client><div>Doe John</div><div>5, rue des roses</div><div>68000 COLMAR</div><div>France</div></div><table class=lines><thead><tr><th class=col-desc>Description<th class=col-qty>Quantité<tbody><tr><td>Recherche de panne</td><td>1</td></tr></table><div class=bottom><span class=terms><div>N°1588693689484</div><div>05/05/2020</div><div>Commande N°9</div></span></div><div class=comment></div><div class=legal>Test conditions</div></main><footer><p>Bla</p><p>Test metadata</p></footer>
get /order/{Identifiant_de_la_commande}/line/{Identifiant_de_l_article}
L'article de la commande a été trouvé. Un objet de type Article de commande est retourné.
Exemple - Obtenir l'article 9217 du devis 889
GET /order/889/line/9217
HTTP 200 OK {"id":9217,"description":"Recherche de panne","unit_price":10000,"quantity":100,"discount":0,"tax_rate":2000,"material_id":null,"task_id":null,"expense_id":null,"invoice_id":null}
post /order/{Identifiant_de_la_commande}/line
expense_id Optionnel
Identifiant de la dépense.
task_id Optionnel
Identifiant de l'activité.
L'article a été ajouté à la commande. Un objet de type Article de commande contenant l'article fraichement créé est retourné.
L'article n'a pas été ajouté à la commande car la commande est clôturée (code order_closed).
Exemple - Ajouter un article à la commande 889
POST /order/889/line
{"description":"Recherche de panne","unit_price":10000,"quantity":100,"tax_rate":2000}
HTTP 201 OK - Créé {"id":9217,"description":"Recherche de panne","unit_price":10000,"quantity":100,"discount":0,"tax_rate":2000,"material_id":null,"task_id":null,"expense_id":null,"invoice_id":null}
put /order/{Identifiant_de_la_commande}/line/{Identifiant_de_l_article}
L'article de la commande a été modifié.
L'article n'a pas été modifié car la commande est clôturée (code order_closed).
Exemple - Appliquer une remise de 20% à l'article 9217
PUT /order/889/line/9217
{"discount":-2000}
delete /order/{Identifiant_de_la_commande}/line/{Identifiant_de_l_article}
L'article a été retiré de la commande.
L'article n'a pas été retiré de la commande. La commande est clôturée (code quotation_closed) ou l'article a déjà été facturé (code line_invoiced).
Exemple - Retirer l'article 9217 de la commande 889
DELETE /order/889/line/9217
Les factures sont créées obligatoirement à partir d'une commande (cf. Fonctionnement des factures.
Lorsque la facture est créée, les articles de la commande qui n'ont pas encore été facturés sont ajoutés à la facture. Il est alors possible de retirer certains articles de la facture. Il n'est pas contre pas possible de modifier les articles de la facture car les articles de la facture doivent correspondre avec ceux de la commande.
Lorsque la facture est prête, elle peut être validée. La facture ne peut alors plus être modifiée, ni supprimée. Elle peut cependant être annulée si elle comporte une erreur.
Toutes les opérations, à l'exception de la suppression de la facture et du retrait d'un article, sont possibles uniquement si la facture a été validée.
post /order/{Identifiant_de_la_commande}/invoice
Une facture est créée à partir de la commande. Les articles de la commande qui n'ont pas encore été facturés et les éventuels acomptes sont ajoutés à la facture. Un object de type Facture est retourné.
Une facture ne peut pas être créée pour cette commande car la commande est cloturée (code order_closed) ou que tous les articles de la commande ont déjà été facturés (code no_line_to_invoice).
Exemple - Créer une facture pour la commande 889
POST /order/889/invoice
HTTP 201 OK - Créé {"id":938,"state":"draft","status":10,"number":null,"date":"2020-05-05T15:56:00.000Z","vat":true,"due_date":null,"due":null,"deposit":false,"deposit_invoice_id":null,"client":{"id":1000,"description":"Doe","firstname":"John","address":"5, rue des roses","postal_code":"68000","city":"COLMAR","country_code":"fr"},"client_original":{"id":1000,"account_type":null,"company":false,"description":"Doe","firstname":"John","birth_name":null,"birth_city":null,"birth_date":null,"address":null,"postal_code":null,"city":null,"country_code":null,"birth_country_code":null,"email":null,"tel":null,"tel2":null,"fax":null,"website":null,"vat_nb":null,"iban":null,"comment":null,"role":null,"payment_terms":null,"expense_class":null,"profile_img_url":null,"profile_img_url_small":null,"parent":null},"folder":null,"payment_terms":{"days_nb":15,"end_of_month":true,"early_payment_discount_rate":200},"order":{"id":889,"status":10,"number":9,"date":"2020-05-04T16:54:06.000Z"},"lines":[{"id":8911,"description":"Recherche de panne","unit_price":10000,"quantity":100,"discount":0,"tax_rate":2000,"order_line_id":9217,"deposit_id":null,"note_id":null,"early_payment_discount":false}],"terms":{"id":12,"text":"Test conditions","created_on":"2019-04-20T12:51:07.000Z"},"layout_id":null,"layout_footer_id":15,"payment_lines":null,"discount_on":null,"discount_by_id":null,"sendings":null}
get /invoice/{Identifiant_de_la_facture}
Indicateur pour recevoir les articles de la facture dans la réponse.
La facture a été trouvée. Un objet de type Facture est retourné.
Exemple - Obtenir la facture 940 avec les articles
HTTP 200 OK {"id":940,"state":"draft","status":10,"number":null,"date":"2020-05-06T09:42:39.000Z","vat":true,"due_date":null,"due":null,"deposit":false,"deposit_invoice_id":null,"client":{"id":1000,"description":"Doe","firstname":"John","address":"5, rue des roses","postal_code":"68000","city":"COLMAR","country_code":"fr"},"client_original":{"id":1000,"account_type":null,"company":false,"description":"Doe","firstname":"John","birth_name":null,"birth_city":null,"birth_date":null,"address":null,"postal_code":null,"city":null,"country_code":null,"birth_country_code":null,"email":null,"tel":null,"tel2":null,"fax":null,"website":null,"vat_nb":null,"iban":null,"comment":null,"role":null,"payment_terms":null,"expense_class":null,"profile_img_url":null,"profile_img_url_small":null,"parent":null},"folder":null,"payment_terms":{"days_nb":15,"end_of_month":true,"early_payment_discount_rate":200},"order":{"id":889,"status":10,"number":9,"date":"2020-05-04T16:54:06.000Z"},"lines":[{"id":8913,"description":"Recherche de panne","unit_price":10000,"quantity":100,"discount":0,"tax_rate":2000,"order_line_id":9217,"deposit_id":null,"note_id":null,"early_payment_discount":false}],"terms":{"id":12,"text":"Test conditions","created_on":"2019-04-20T12:51:07.000Z"},"layout_id":null,"layout_footer_id":15,"payment_lines":null,"discount_on":null,"discount_by_id":null,"sendings":null}
get /invoice/{Identifiant_de_la_facture}/file
La facture est retourné au format HTML.
Le rendu de la facture ne peut pas être généné car la facture est en préparation (code invoice_draft).
Exemple - Obtenir le rendu HTML de la facture 942
GET /invoice/942/file
<!DOCTYPE html><meta charset=utf-8><style>*{box-sizing:border-box;color:inherit;font-weight:inherit;margin:0;padding:0;line-height:1.5}body{width:18cm;min-height:27cm;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;font-size:14px;margin:0 auto;padding:.5cm 0}h1{flex:auto;text-transform:uppercase;text-align:center;font-size:40px;font-weight:300}.client{margin:1em 0 1em 9cm;min-height:50px}table{border-collapse:collapse}.lines{margin:2em 0;width:100%;border:1px solid #ccc}.lines thead{background-color:#fafafa;border-bottom:1px solid #ccc;text-align:center;color:#4d4d4d;font-size:13px}.lines td,.lines th{border-right:1px solid #ccc;text-align:right;vertical-align:top;padding:.5em}.lines td:first-child,.lines th:first-child,.vat td:first-child{text-align:left}.col-desc{width:40%}.col-discount,.col-qty,.col-vat{width:10%}.col-tot,.col-unit{width:15%}.bottom{display:flex}.terms{flex:auto}.vat td{padding:.2em}.vat td:last-child{text-align:right;min-width:150px;padding-right:8px}.vat tbody td:first-child::before{content:'TVA '}.tot-w-tax{font-weight:600}.comment{margin-top:1em}.legal{color:#4d4d4d;margin-top:1em}footer{color:#4d4d4d;text-align:center}@media screen{main{min-height:25cm}}@page{size:A4 portrait;margin:2cm 1cm 1cm}@media print{.lines{page-break-inside:auto}.lines thead{page-break-inside:avoid;display:table-header-group}.lines tr{page-break-inside:avoid;page-break-after:auto}.text{page-break-inside:avoid}footer{width:18cm;position:fixed;margin:0 auto}}</style><main><div class=company><div>ABC Ltd</div><div>1 rue du Paradis</div><div>67100 Strasbourg</div><div>France</div></div><h1>Facture</h1><div class=client><div>Doe John</div><div>5, rue des roses</div><div>68000 COLMAR</div><div>France</div></div><table class=lines><thead><tr><th class=col-desc>Description<th class=col-unit>Prix Unit. HT<th class=col-qty>Quantité<th class=col-discount>%Remise<th class=col-vat>%TVA<th class=col-tot>Prix Total HT<tbody><tr><td>Recherche de panne</td><td>100,00 €</td><td>1</td><td></td><td>20 %</td><td>100,00 €</td></tr></table><div class=bottom><span class=terms><div>N°9</div><div>06/05/2020</div><div>Paiement 15 jours fin de mois</div><div>Escompte de 2 % dans le cas d'un paiement anticipé</div></span><table class=vat><thead><tr><td>Total HT<td>100,00 €<tbody><tr><td>20 %</td><td>20,00 €</td></tr><tfoot><tr><td>Total TVA<td>20,00 €<tr><td>Total TTC<td class=tot-w-tax>120,00 €</table></div><div class=comment></div><div class=legal>Test conditions</div></main><footer><p>Bla</p><p>Test metadata</p></footer>
delete /invoice/{Identifiant_de_la_facture}
La facture a été supprimée.
La facture n'a pas été supprimée car la facture a été validée (code invoice_validated).
Exemple - Supprimer la facture 940
POST /invoice/940
post /invoice/{Identifiant_de_la_facture}/lock
La facture a été annulée. La commande associée à la facture est ré-ouverte et les articles peuvent à nouveau être facturés.
La facture n'a pas été annulée. La facture est, soit en préparation (code invoice_draft), soit déjà annulée (code invoice_cancelled) ou possède des paiements (code invoice_has_payment).
Exemple - Annuler la facture 940
POST /order/940/lock
post /invoice/{Identifiant_de_la_facture}/stamp
La facture a été validée. Si tous les articles de la commande sont facturés, la commande est aussi clôturée.
La facture n'a pas été validée car elle est soit, annulée (code invoice_cancelled), soit validée (code invoice_validated), soit d'un montant total négatif (code invoice_negativ).
Exemple - Valider la facture 940
POST /invoice/940/stamp
delete /invoice/{Identifiant_de_la_facture}/line/{Identifiant_de_l_article}
L'article a été retiré de la facture.
L'article n'a pas été retiré de la facture. La facture est validée (code invoice_validated) ou annulée (code invoice_cancelled).
Exemple - Retirer l'article 1145 de la facture 940
DELETE /invoice/940/line/1145
Lorsqu'un escompte est ajouté à une valeur, sa valeur est calculé à partir du pourcentage d'escompte défini dans les conditions de paiement de la facture. La valeur ne peut pas être modifiée.
post /invoice/{Identifiant_de_la_facture}/discount
L'escompte a été ajouté à la facture. La liste des articles qui ont été ajoutés à la facture sont retournés.
L'escompte n'a pas été ajouté à la facture. La facture est, soit en préparation (code invoice_draft), soit annulée (code invoice_cancelled), soit possède déjà un escompte (code invoice_discount_already_in) ou la valeur de l'escompte des conditions de paiement est nulle (code invoice_discount_rate_null).
Exemple - Ajouter un escompte à la facture 940
HTTP 201 OK - Créé [{"id":8914,"description":"Escompte 2 %","unit_price":-200,"quantity":100,"discount":0,"tax_rate":2000,"order_line_id":null,"deposit_id":null,"note_id":null,"early_payment_discount":true}]
delete /invoice/{Identifiant_de_la_facture}/discount
L'escompte a été retiré de la facture.
L'escompte n'a pas été retiré de la facture. La facture est, soit en préparation (code invoice_draft), soit annulée (code invoice_cancelled) ou ne possède pas d'escompte (code no_early_payment_discount).
Exemple - Retirer un escompte de la facture 940
DELETE /order/940/lock
post /invoice/{Identifiant_de_la_facture}/email
La facture va être envoyé au destinataire par e-mail. Un objet contenant l'identifiant de l'envoi est retourné.
La facture n'a pas été envoyée car elle n'est pas validée (code invoice_status).
Exemple - Envoyer la facture 942 au client
POST /invoice/942/email
{"contact_id":1000,"title":"Facture N°9","body":"Bonjour,\nVous trouverez ci-joint la facture de votre achat de 120,00 €."}
HTTP 201 OK - Créé {"id":1648}
get /invoice/{Identifiant_de_la_facture}/reminder-letter
Le courrier de relance est retourné au format HTML.
Le courrier ne peut pas être généré car la facture est, soit en préparation (code invoice_draft), soit annulée (code invoice_cancelled).
Exemple - Générer un courrier de relance pour la facture 684
GET /invoice/684/reminder-letter
<!doctypehtml><meta charset=utf-8><style>*{box-sizing:border-box;color:inherit;font-weight:inherit;margin:0;padding:0;line-height:1.5}body{width:18cm;min-height:26cm;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;font-size:14px;margin:0 auto;padding:.5cm 0}main{min-height:22cm}.client{margin:1em 0 1em 9cm;min-height:50px}h1{font-size:20px;margin-top:2em}h2{font-size:14px;margin-top:1em;font-style:italic}.location{text-align:right;margin-top:1em}.first{margin-top:2em}article>p{margin:1em 0}b{font-weight:700}footer{color:#4d4d4d;text-align:center;font-size:12px}@page{size:A4 portrait;margin:2cm 1cm 1cm}</style><main><div class=company><div>ABC Ltd</div><div>1 rue du Paradis</div><div>67100 Strasbourg</div><div>France</div></div><div class=client><div>Test Client</div><div></div><div> </div><div></div></div><h1>Objet : Relance - Facture n°4</h1><h2>Pièce-jointe : Duplicata de la facture N°4</h2><div class=location>Strasbourg, le 06/05/2020</div><div class=first>Madame, Monsieur,</div><article><p>Sauf erreur ou omission de notre part, le paiement de la facture n°4 datée du 20/03/2019 pour un montant de <b>120,00 €</b>, et arrivée à échéance le 30/04/2019, ne nous est pas parvenu.<p>Nous vous prions de bien vouloir procéder à son règlement dans les meilleurs délais, et vous adressons, à toutes fins utiles, un duplicata de cette facture en pièce jointe.<p>Si par ailleurs votre paiement venait à nous parvenir avant la réception de cette lettre, nous vous saurions gré de ne pas tenir compte de cette dernière.<p>Vous remerciant de faire le nécessaire, et restant à votre entière disposition pour toute éventuelle question, nous vous prions d'agréer, Madame, Monsieur, l'expression de nos salutations distinguées.</article><div class=sign></div></main><footer><p>Bla</p><p>Test metadata</p></footer>
get /invoice/{Identifiant_de_la_facture}/formal-reminder-letter
Le courrier de mise en demeure est retourné au format HTML.
Exemple - Générer un courrier de mise en demeure pour la facture 684
<!doctypehtml><meta charset=utf-8><style>*{box-sizing:border-box;color:inherit;font-weight:inherit;margin:0;padding:0;line-height:1.5}body{width:18cm;min-height:26cm;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;font-size:14px;margin:0 auto;padding:.5cm 0}main{min-height:23cm}.client{margin:1em 0 1em 9cm;min-height:50px}h1{font-size:20px;margin-top:2em}h2{font-size:14px;margin-top:1em;font-style:italic}.letter{font-size:14px}.location{text-align:right;margin-top:1em}.first{margin-top:2em}article>p{margin:1em 0}b{font-weight:700}footer{color:#4d4d4d;text-align:center;font-size:12px}@page{size:A4 portrait;margin:2cm 1cm 1cm}</style><main><div class=company><div>ABC Ltd</div><div>1 rue du Paradis</div><div>67100 Strasbourg</div><div>France</div></div><div class=client><div>Test Client</div><div></div><div> </div><div></div></div><h1>Objet : Mise en demeure</h1><div class=letter>Lettre recommandée avec accusé de réception</div><h2>Pièce-jointe : Duplicata de la facture N°4</h2><div class=location>Strasbourg, le 06/05/2020</div><div class=first>Madame, Monsieur,</div><article><p>A ce jour, le paiement de la facture n°4 datée du 20/03/2019 pour un montant de 120,00 €, et arrivée à échéance le 30/04/2019, ne nous est pas parvenu.<p>Ainsi, par la présente, <b>nous vous mettons en demeure de payer la somme de 120,00 €</b>.<p>À défaut de paiment sous huitaine, la juridiction compétente sera saisie afin d'obtenir le règlement des sommes dues, auxquelles s'ajouteront les intérêts de retard.<p>Vous remerciant de faire le nécessaire, et restant à votre entière disposition pour toute éventuelle question, nous vous prions d'agréer, Madame, Monsieur, l'expression de nos salutations distinguées.</article><div class=sign></div></main><footer><p>Bla</p><p>Test metadata</p></footer>
Une ou plusieurs factures d'acompte peuvent être créées pour chaque commande.
Les factures d'acompte fonctionnent de la même façon que les factures traditionnelles. Seul le fonctionnement des articles diffère.
Lorsqu'une facture d'acompte est créée, un unique article est ajouté à la facture. Le montant hors-taxes de cette article équivaut au montant total de la commande, la quantité est initialisée à partir du taux d'acompte défini dans les paramètres de l'entreprise, et le taux de TVA est initialisé en fonction du taux de TVA le plus utilisé de la commande.
Contrairement aux articles des factures traditionnels, l'article comprenant l'acompte peut être modifié et personnalisé.
post /order/{Identifiant_de_la_commande}/deposit
Une facture d'acompte est créée à partir de la commande. Un object de type Facture est retourné.
Une facture d'acompte ne peut pas être créée pour cette commande car la commande est cloturée (code order_closed) ou que tous les articles de la commande ont déjà été facturés (code no_line_to_invoice).
Exemple - Créer une facture d'acompte pour la commande 889
POST /order/889/deposit
HTTP 201 OK - Créé {"id":939,"state":"draft","status":10,"number":null,"date":"2020-05-05T16:20:20.000Z","vat":true,"due_date":null,"due":null,"deposit":true,"deposit_invoice_id":null,"client":{"id":1000,"description":"Doe","firstname":"John","address":"5, rue des roses","postal_code":"68000","city":"COLMAR","country_code":"fr"},"client_original":{"id":1000,"account_type":null,"company":false,"description":"Doe","firstname":"John","birth_name":null,"birth_city":null,"birth_date":null,"address":null,"postal_code":null,"city":null,"country_code":null,"birth_country_code":null,"email":null,"tel":null,"tel2":null,"fax":null,"website":null,"vat_nb":null,"iban":null,"comment":null,"role":null,"payment_terms":null,"expense_class":null,"profile_img_url":null,"profile_img_url_small":null,"parent":null},"folder":null,"payment_terms":{"days_nb":15,"end_of_month":true,"early_payment_discount_rate":200},"order":{"id":889,"status":10,"number":9,"date":"2020-05-04T16:54:06.000Z"},"lines":[{"id":8912,"description":"Acompte","unit_price":10000,"quantity":10,"discount":0,"tax_rate":2000,"order_line_id":null,"deposit_id":null,"note_id":null,"early_payment_discount":false}],"terms":{"id":12,"text":"Test conditions","created_on":"2019-04-20T12:51:07.000Z"},"layout_id":null,"layout_footer_id":15,"payment_lines":null,"discount_on":null,"discount_by_id":null,"sendings":null}
put /invoice/{Identifiant_de_la_facture}/line/{Identifiant_de_l_article_-_acompte}
Libellé de l'article comprenant l'acompte
Quantité de l'acompte de 1 à 99. Par exemple 10 pour 10%.
Taux de TVA de l'acompte.
L'acompte a été modifié.
L'acompte n'a pas été modifié. La facture est déjà validée (code invoice_validated) ou annulée (code invoice_cancelled).
Exemple - Modifier l'acompte de la facture 940 et définir un taux de 20%, avec un taux de TVA de 10%
{"quantity":20,"tax_rate":1000}
get /invoice/{Identifiant_de_la_facture}/payment/{Identifiant_du_paiement}
Le paiement de la facture a été trouvé. Un objet de type Paiement de facture est retourné.
Exemple - Obtenir le paiement 850 de la facture 684
GET /invoice/684/payment/850
HTTP 200 OK {"id":850,"received_on":"2020-08-07T16:02:06.000Z","amount":12000,"class_id":1,"reference":null,"checked_on":null,"created_by":808,"created_on":"2020-08-07T16:03:25.000Z","card":null}
post /invoice/{Identifiant_de_la_facture}/payment
received_on Obligatoire
class_id Obligatoire
amount Obligatoire
Montant du paiement. Le montant ne doit pas être supérieur au montant restant dû.
fee Optionnel
Frais de la transaction
reference Optionnel
checked_on Optionnel
Date à laquelle le paiement a été encaissé.
Le paiement a été ajoutée à la facture. Un objet de type Paiement de facture est retourné.
Le paiement n'a pas été ajouté à la facture car elle est, soit en préparation (code invoice_draft), soit annulée (code invoice_cancelled).
Exemple - Ajouter un paiement par chèque de 100,00€ à la facture 940
POST /invoice/940/payment
{"received_on":"2020-05-06T15:25:08.230Z","amount":10000,"reference":"#TR45DM","class_id":3}
HTTP 201 OK - Créé {"id":822,"received_on":"2020-05-06T15:25:08.000Z","amount":10000,"class_id":3,"reference":"#TR45DM","checked_on":null,"card":null}
delete /invoice/{Identifiant_de_la_facture}/payment/{Identifiant_du_paiement}
Le paiement a été retiré de la facture.
Exemple - Retirer le paiement 822 de la facture 940.
DELETE /invoice/940/payment/822
Deux types de contacts peuvent se trouver dans le carnet d'adresses: les personnes physiques et les entreprises.
Tous deux se comportent de la même manière. Certaines opérations sont cependant réservées aux personnes physique comme la possibilité de créer un compte client.
Lorsqu'une personne physique est ajoutée au carnet d'adresse, ses coordonnées doivent être saisies manuellement.
Lorsqu'une entreprise est ajoutée au carnet d'adresse, ses coordonnées peuvent être récupérées automatiquement depuis le registre national des entreprises si le numéro SIREN est fourni. Les coordonnées peuvent aussi être saisies manuellement, si le numéro SIREN n'est pas connu, ou si l'entreprise n'est pas française.
post /contact
siren Optionnel
Numéro SIREN de l'entreprise. Les propriétés company, description, address, postal_code, city, country_code, birth_date et vat_nb de la requêtes seront ignorées et remplacées par les valeurs issues du registre national des entreprises.
company Optionnel
Booléen indiquant si le contact est une entreprise (VRAI) ou une personne physique (FAUX).
Nom de l'entreprise ou nom de famille de la personne. Obligatoire si la propriété siren n'est pas fournie.
firstname Optionnel
Prénom de la personne.
address Optionnel
postal_code Optionnel
city Optionnel
country_code Optionnel
Code du pays.
birth_name Optionnel
Nom de naissance de la personne.
birth_city Optionnel
Ville de naissance de la personne.
birth_date Optionnel
Date de naissance de la personne ou date de création de la société.
birth_country_code Optionnel
Code du pays de naissance.
vat_nb Optionnel
Numéro de TVA intracommunautaire de l'entreprise.
iban Optionnel
Numéro de compte bancaire au format IBAN.
parent_id Optionnel
Identifiant de l'entreprise pour laquelle la personne travaille.
tel Optionnel
tel2 Optionnel
Numéro de téléphone secondaire.
Numéro de fax.
role Optionnel
Conditions de paiement à utiliser pour les devis, commandes et factures créés pour ce contact
expense_class_id Optionnel
Identifiant de la catégorie de dépense utilisée lorsqu'une dépense est créée pour ce contact.
Le contact a été créé et a été ajouté au carnet d'adresses. Un objet de type Contact est retourné.
L'entreprise avec un numéro SIREN indentique existe dans le carnet d'adresse (code siren_already_exist). L'identifiant de l'entreprise existante est ajouté à la réponse.
422 Valeur incorrecte
Aucune entreprise avec ce numéro n'a été trouvée (code siren_not_found).
Exemple - Ajouter une entreprise au carnet d'adresses à partir de son numéro SIREN
{"siren":"356000000"}
HTTP 201 OK - Créé {"id":1001,"account_type":null,"company":true,"description":"LA POSTE","firstname":null,"birth_name":null,"birth_city":null,"birth_date":"1990-12-31T22:00:00.000Z","address":"9 Rue DU COLONEL PIERRE AVIA","postal_code":"75015","city":"PARIS 15","country_code":"fr","birth_country_code":null,"email":null,"tel":null,"tel2":null,"fax":null,"website":null,"vat_nb":"FR39356000000","iban":null,"comment":null,"role":null,"payment_terms":null,"expense_class":null,"profile_img_url":"https://example.com/la-poste.svg?68f3bce3d6","profile_img_url_small":null,"siren":356000000,"nic":48,"name_commercial":"LA POSTE","ape":"5310Z","association_nb":null,"last_imported_on":"2020-05-07T14:18:35.000Z","closed_on":null}
Exemple - Ajouter une entreprise au carnet d'adresses en saisissant les informations manuellement
{"company":true,"description":"EXAMPLE SARL","address":"16 Avenue Principale","postal_code":"67120","city":"ALTORF","country_code":"fr"}
HTTP 201 OK - Créé {"id":1002,"account_type":null,"company":true,"description":"EXAMPLE SARL","firstname":null,"birth_name":null,"birth_city":null,"birth_date":null,"address":"16 Avenue Principale","postal_code":"67120","city":"ALTORF","country_code":"fr","birth_country_code":null,"email":null,"tel":null,"tel2":null,"fax":null,"website":null,"vat_nb":null,"iban":null,"comment":null,"role":null,"payment_terms":null,"expense_class":null,"profile_img_url":null,"profile_img_url_small":null,"siren":null,"nic":null,"name_commercial":null,"ape":null,"association_nb":null,"last_imported_on":null,"closed_on":null}
Exemple - Ajouter une personne physique au carnet d'adresses
{"description":"Doe","firstname":"John","email":"john.doe@example.com"}
HTTP 201 OK - Créé {"id":1003,"account_type":null,"company":false,"description":"Doe","firstname":"John","birth_name":null,"birth_city":null,"birth_date":null,"address":null,"postal_code":null,"city":null,"country_code":null,"birth_country_code":null,"email":"john.doe@example.com","tel":null,"tel2":null,"fax":null,"website":null,"vat_nb":null,"iban":null,"comment":null,"role":null,"payment_terms":null,"expense_class":null,"profile_img_url":null,"profile_img_url_small":null,"parent":null}
get /contact/{Identifiant_du_contact}
Le contact a été trouvée. Un objet de type Contact est retourné.
Exemple - Obtenir le contact 940
GET /contact/940
HTTP 200 OK {"id":1002,"account_type":null,"company":true,"description":"EXAMPLE SARL","firstname":null,"birth_name":null,"birth_city":null,"birth_date":null,"address":"16 Avenue Principale","postal_code":"67120","city":"ALTORF","country_code":"fr","birth_country_code":null,"email":null,"tel":null,"tel2":null,"fax":null,"website":null,"vat_nb":null,"iban":null,"comment":null,"role":null,"payment_terms":{"days_nb":7,"end_of_month":false,"early_payment_discount_rate":500},"expense_class":null,"profile_img_url":null,"profile_img_url_small":null,"siren":null,"nic":null,"name_commercial":null,"ape":null,"association_nb":null,"last_imported_on":null,"closed_on":null}
Les informations des entreprises du carnet d'adresses dont le numéro SIREN a été saisi ne peuvent pas être modifiés car elles sont synchronisées avec le registre national des entreprises. Il s'agit des propriétés description, address, postal_code, city, country_code, birth_date et vat_nb.
Les entreprises non synchronisées et les personnes physiques du carnet d'adresses peuvent être modifiées de la même façon.
put /contact/{Identifiant_du_contact}
Numéro SIREN de l'entreprise. Les propriétés company, description, address, postal_code, city, country_code et birth_date de la requêtes seront ignorées et remplacées par les valeurs issues du registre national des entreprises.
Nom de l'entreprise ou nom de famille de la personne.
Le contact a été modifié.
Exemple - Modifier les conditions de paiement d'un client à 7 jours, avec 5% d'acompte
PUT /contact/1002
{"payment_terms":{"days_nb":7,"end_of_month":false,"early_payment_discount_rate":500}}
Un contact peut être supprimé du carnet d'adresses uniquement s'il ne possède pas d'éléments rattachés à lui, c'est à dire des devis, commandes, factures, dossiers, dépenses ou employés, et s'il n'intervient pas dans un dossier.
delete /contact/{Identifiant_du_contact}
Le contact a été supprimé et retiré du carnet d'adresses.
Le contact possède un devis (code quotation_exist), une commande (code order_exist), une dépense (code expense_exist), un dossier (code folder_exist), un employé (code folder_contact_exist).
Exemple - Supprimer le contact 1002 du carnet d'adresses
DELETE /contact/1002
Un compte peut être crééé pour tous les clients pour leur permettre de se connecter et de consulter leurs informations.
Seuls les personnes peuvent bénéficier d'un compte (propriété company à FAUX).
post /contact/{Identifiant_du_contact}/account
Un compte a été créé pour cette personne et ses identifiants vont lui être envoyés par e-mail.
Un compte n'a pas pu être créé pour cette personne car elle possède déjà un compte (code contact_already_account), l'adresse e-mail n'a pas été saisi (code contact_no_email), ou une autre personne possède déjà un compte avec le même e-mail (code account_exists_with_same_email).
Exemple - Créer un compte pour le contact 1003
POST /contact/1003/account
delete /contact/{Identifiant_du_contact}/account
Le compte de la personne a été supprimé.
Le compte de la personne n'a pas été supprimé car il n'en possède pas (code contact_no_account).
Exemple - Supprimer le compte du contact 1003
DELETE /contact/1003/account
post /material
Pourcentage de TVA à appliquer lorsque l'article est vendu.
Texte descriptif de l'article..
stock Optionnel
Quantité en stock de l'article.
safety_stock Optionnel
Stock de sécurité de l'article.
manufacturer_id Optionnel
Identifiant du constructeur. Doit correspondre à l'identifiant d'un objet de type Contact existant.
L'article a été créé et ajouté au catalogue. Un objet de type Article est retourné.
Exemple - Ajouter un article au catalogue
{"description":"Tasse décorée","unit_price":1500,"tax_rate":2000}
HTTP 201 OK - Créé {"id":36,"description":"Tasse décorée","unit_price":1500,"stock":null,"safety_stock":null,"tax_rate":2000,"comment":null,"manufacturer":null}
get /material/{Identifiant_de_l_article}
L'article a été trouvé. Un objet de type Article est retourné.
Exemple - Obtenir l'article 36 du catalogue
GET /material/36
put /material/{Identifiant_de_l_article}
L'article du catalogue a été modifié.
Exemple - Modifier l'article 36 du catalogue
PUT /material/36
{"unit_price":3000}
delete /material/{Identifiant_de_l_article}
L'article a été supprimé et retiré du catalogue.
L'article n'a pas été supprimé car il est présent sur un devis ou une commande (code material_in_use).
Exemple - Supprimer l'article 36 du catalogue
DELETE /material/36
Les articles du catalogue peuvent posséder un prix public. Ce prix est utilisé lorsque l'article est ajouté à un devis ou une commande.
Il est possible de personnaliser ce prix à la hausse ou à la baisse pour chaque client.
Si un tarif est déjà présent pour ce client, l'ancien tarif est supprimé.
post /material/{Identifiant_de_l_article}/client/{Identifiant_du_client}
unit_price Obligatoire
Prix unitaire hors-taxes négocié de l'article.
Le tarif négocié de l'article a été ajouté.
Exemple - Ajouter un tarif négocié de l'article 36 pour le client 1002
POST /material/36/client/1002
{"unit_price":1000}
delete /material/{Identifiant_de_l_article}/client/{Identifiant_du_client}
Le tarif négocié de l'article a été supprimé.
Exemple - Supprimer le tarif négocié de l'article 36 pour le client 1002
DELETE /material/36/client/1002
Les objets retournés par l'API possèdent une liste de propriétés qui sont détaillées par la suite.
Les valeurs de ces propriétés peuvent être plusieurs types:
Une chaine de caractères, c'est à dire une suite de chiffres et lettres.
Un nombre entier, positif, négatif, ou nul.
Un nombre décimal, c'est à dire un nombre avec des chiffres après la virgule.
tenant_id Nombre entier positif, Obligatoire
Identifiant de l'entreprise.
id Nombre entier positif, Obligatoire
Identifiant de l'utilisateur.
token Chaîne de caractères, Obligatoire
Signature numérique de la session.
description Chaîne de caractères, Obligatoire
Nom de famille de l'utilisateur.
firstname Chaîne de caractères
email Chaîne de caractères, Obligatoire
E-mail de l'utilisateur.
company Objet, Obligatoire
Entreprise rattachée au compte de l'utilisateur
siren Nombre entier positif, Obligatoire
Numéro SIREN de l'entreprise.
address Chaîne de caractères
Adresse du siège social de l'entreprise.
postal_code Chaîne de caractères, Obligatoire
Code postal du siège social de l'entreprise.
city Chaîne de caractères, Obligatoire
Ville du siège social de l'entreprise.
country_code Code pays, Obligatoire
Pays du siège social de l'entreprise
email Chaine de caractères
Adresse e-mail de l'entreprise.
Numéro de téléphone principal de l'entreprise.
tel2 Numéro de téléphone
Numéro de téléphone secondaire de l'entreprise.
fax Numéro de téléphone
Numéro de télécopie de l'entreprise.
website Chaine de caractères
vat_nb Chaine de caractères
Numéro de TVA intra-communautaire de l'entreprise.
vat Booléen, Obligatoire
Indicateur si l'entreprise est assujetti à la TVA.
quotation_valid_until Nombre entier positif, Obligatoire
Nombre de jours pendant lesquels les devis sont valides.
deposit_rate Nombre entier positif, Obligatoire
Taux d'acompte initial des factures d'acompte. Les pourcentages acceptés vont de 0% à 100% inclus. Montant avec deux décimales et sans virgule. Par exemple 1000 pour 10%.
tax_rate Nombre entier positif, Obligatoire
Taux de TVA le plus utilisé par l'entreprise. Les pourcentages acceptés vont de 0 % à 100% inclus. Montant avec deux décimales et sans virgule. Par exemple 2000 pour 20%.
payment_terms Objet, Obligatoire
Conditions de paiement à utiliser pour les devis, commandes et factures créés par l'entreprise. Objet de type Conditions de paiement.
client_create_folder Booléen, Obligatoire
Indicateur si les clients ont l'autorisation de créer de nouveaux dossiers.
notif_folder_new_by_client_email Booléen, Obligatoire
Indicateur si un e-mail est envoyé au gestionnaire du dossier lorsqu'un nouveau dossier est créé par un client.
task_rate Nombre entier positif, Obligatoire
Taux initial utilisé lorsqu'une activité est facturée au client. Montant avec deux décimales et sans virgule. Par exemple 5000 pour 50,00 €.
task_rate_unit Nombre entier positif, Obligatoire
Nombre d'heures associé au taux. 1 pour un taux horaire, 24 pour un taux journalier.
Identifiant du contact.
company Booléen, Obligatoire
Booléen indiquant si le contact est une entreprise (VRAI) ou une personne physique (FAUX). FAUX par défaut.
description Chaine de caractères, Obligatoire
firstname Chaine de caractères
address Chaine de caractères
Adresse postale du contact. Peut contenir des sauts de lignes.
postal_code Chaine de caractères
Code postal du contact.
city Chaine de caractères
Ville du contact.
Pays du contact.
birth_name Chaine de caractères
birth_city Chaine de caractères
birth_country_code Chaine de caractères
Code du pays de naissance selon la codification ISO-3166.
iban Chaine de caractères
comment Chaine de caractères
role Chaine de caractères
Rôle de la personne.
profile_img_url URL
Adresse de la photo à afficher.
profile_img_url_small URL
Adresse de la petite photo à afficher.
payment_terms Objet
Conditions de paiement à utiliser pour les devis, commandes et factures créés pour ce contact. Objet de type Conditions de paiement.
expense_class Objet
Catégorie de dépense à utiliser lorsqu'une dépense est créée pour ce contact. Objet de type Catégorie de dépense.
Entreprise pour laquelle la personne travaille. Objet de type Contact.
account_created_on Date
Date à laquelle un compte a été créé pour cette personne.
account_last_connection Date
Date à laquelle la personne s'est connectée.
account_notif_type Nombre
Type de notifications que l'utilisateur souhaite recevoir: NULL pour recevoir des notifications de l'ensemble des dossiers, 1pour recevoir des notifications uniquement des dossiers dans lesquels l'utilisateur intervient.
account_notif_file_email Booléen
Indique si l'utilisateur souhaite recevoir un e-mail de notification lorsqu'un document est ajouté.
account_notif_msg_email Booléen
Indique si l'utilisateur souhaite recevoir un e-mail de notification lorsqu'un message est ajouté.
account_notif_event_email Booléen
Indique si l'utilisateur souhaite recevoir un e-mail de notification lorsqu'un événement est ajouté.
siren Nombre positif
nic Nombre positif
Numéro NIC de l'entreprise
name_commercial Chaine de caractères
Nom commercial de l'entreprise. Uniquement si le numéro SIREN a été saisi.
ape Chaine de caractères
Code APE de l'entreprise. Uniquement si le numéro SIREN a été saisi.
association_nb Chaine de caractères
Numéro d'inscription au répertoire national des associations. Uniquement si le numéro SIREN a été saisi et que le contact est une association.
closed_on Date
Date à laquelle l'entreprise a été radiée. Uniquement si le numéro SIREN a été saisi.
last_imported_on Date
Date à laquelle les informations ont été importées du registre national des entreprises. Uniquement si le numéro SIREN a été saisi.
Identifiant interne du devis.
state Chaîne de caractères, Obligatoire
Statut du devis. Les statuts possibles sont: closed lorsque le devis est clôturé, running quand n'est pas signé et validated lorsque le devis est signé.
number Nombre entier positif, Obligatoire
Numéro du devis. Lorsque le devis est créé, un numéro unique est assigné au devis.
date Date et heure, Obligatoire
Date de création du devis.
valid_until Date et heure, Obligatoire
Date de fin de validité du devis.
shipping_date Date et heure
Date à laquelle les articles seront envoyés au client.
terms Objet
Conditions générales de l'entreprise. Voir l'objet Conditions générales.
client Objet, Obligatoire
Nom et adresse du client du devis.
client_original Objet, Obligatoire
Informations du client issues du carnet d'adresses. Le nom et l'adresse du client peuvent être différents de la propriété client si les informations du devis ont été modifiées manuellement par l'utilisateur. Voir l'objet Contact.
folder Objet
Dossier dans lequel le devis a été classé. Voir l'objet Dossier.
Conditions de paiement du devis. Voir l'objet Conditions de paiement
validated_by Nombre entier positif
Identifiant de l'utilisateur ayant signé le devis.
validated_on Date et heure
Date à laquelle le devis a été signé.
order Objet
Commande issue du devis lorsque le devis a été signé. Contient le statut de la commande, son numéro et sa date de création.
layout_id Objet
Informations du modèle à utiliser lors du rendu papier ou électronique du devis.
layout_footer_id Nombre positif
Identifiant du pied de page à intégrer dans le rendu.
lines Liste
Liste des articles du devis. Voir l'objet Article du devis.
sendings Liste
Informations des envois, lorsque le devis est envoyé au client. Voir l'objet Envoi.
is_sent Booléen, Obligatoire
Indicateur de l'envoi ou non du devis au client.
esignature Objet, Obligatoire
Informations sur la signature électronique du devis.
Identifiant de l'article.
unit_price Nombre entier, Obligatoire
Prix unitaire hors-taxes de l'article en centimes. Le montant peut être négatif pour représenter une remise. Par exemple 10000 pour 100,00€.
quantity Nombre entier positif ou nul, Obligatoire
Quantité. Montant avec deux décimales et sans virgule. Par exemple 100 pour 1.
discount Nombre entier, Obligatoire
Pourcentage de remise si négatif, ou de majoration si positif. Les pourcentages acceptés vont de -100% à 300% inclus. Montant avec deux décimales et sans virgule. Par exemple -2000 pour -20%.
tax_rate Nombre entier positif ou nul, Obligatoire
Pourcentage de TVA. Les pourcentages acceptés vont de 0 % à 100% inclus. Montant avec deux décimales et sans virgule. Par exemple 2000 pour 20%.
material_id Nombre entier positif ou nul
count Nombre positif
Nombre d'éléments trouvés correspondant aux critères de recherches. Seulement si le paramètre total est VRAI.
sum Nombre
Montant total hors-taxes en centimes des devis correspondant aux critères de recherches. Par exemple 631055 pour 6310,55€. Seulement si le paramètre total est VRAI.
sum_tax Nombre
Montant total des taxes en centimes des devis correspondant aux critères de recherches. Seulement si le paramètre total est VRAI.
result Liste, Obligatoire
Liste des devis correspondant aux critères de recherches. Le nombre maximal de devis dépend du paramètre page_size.
has_more Booléen, Obligatoire
Indicateur vrai si la réponse (result) ne contient pas tous les devis, car la limite (page_size) a été atteinte.
Identifiant interne de la commande.
Statut de la commande. Les statuts possibles sont: running quand la commande est modifiable et closed lorsque le commande est clôturée.
Numéro de la commande. Lorsque la commande est créée, un numéro unique est assigné au commande.
Date de création de la commande.
Informations du client issues du carnet d'adresses. Le nom et l'adresse du client peuvent être différents de la propriété client si les informations de la commande ont été modifiées manuellement par l'utilisateur. Voir l'objet Contact.
Dossier dans lequel la commande a été classée. Voir l'objet Dossier.
Conditions de paiement de la commande. Voir l'objet Conditions de paiement
quotation Objet
Devis que le client a signé et qui a généré cette commande. Contient le statut du devis, son numéro et sa date de création.
Informations du modèle à utiliser lors du rendu papier ou électronique de la commande.
Identifiant du pied de page à utiliser dans le rendu de la commande.
Liste des articles de la commande. Voir l'objet Article de la commande.
task_id Nombre entier positif ou nul
Identifiant de l'activité lorsque l'article correspond à une activité.
expense_id Nombre entier positif ou nul
Identifiant de la dépense lorsque l'article correspond à une dépense que l'utilisateur souhaite facturer au client.
invoice_id Nombre entier positif ou nul
Identifiant de la facture lorsque l'article a été facturé.
Identifiant interne de la facture.
Statut de la facture. Les statuts possibles sont: draft quand la facture est en préparation, validated lorsque le facture est validée et cancelled quand la facture a été annulée.
number Nombre entier positif
Numéro de la facture. Uniquement lorsque la facture est validée.
Date de création de la facture.
Indicateur si l'entreprise qui émet la facture est d'assujettie à la TVA.
Date maximale à laquelle la facture doit être réglée. La valeur est présente uniquement lorsque la facture est validée.
due Nombre entier positif ou nul
Montant restant à régler. La valeur est présente uniquement lorsque la facture est validée.
deposit Booléen, Obligatoire
Indicateur si la facture est une facture d'acompte.
deposit_invoice_id Nombre entier positif
Identifiant de la facture ayant ajouté en déduction l'acompte. Pour les factures d'acompte uniquement.
discount_by Nombre entier positif
Identifiant de l'utilisateur ayant ajouté l'escompte à facture. Présent uniquement si un escompte a été ajouté à la facture.
discount_on Date
Date à laquelle l'escompte à été ajoutée à la facture. Présent uniquement si un escompte a été ajouté à la facture.
Nom et adresse du client de la facture.
Informations du client issues du carnet d'adresses. Voir l'objet Contact.
Dossier dans lequel la facture a été classée. Voir l'objet Dossier.
Conditions de paiement de la facture. Voir l'objet Conditions de paiement
Commande ayant générée la facture. Contient le statut de la commande, son numéro et sa date de création.
Informations du modèle à utiliser lors du rendu papier ou électronique de la facture.
Identifiant du pied de page à utiliser dans le rendu de la facture.
Liste des articles de la facture. Voir l'objet Article de la facture.
payment_lines Liste
Liste des paiement effectués par le client. Voir l'objet Paiement de facture.
Informations des envois, lorsque la facture est envoyée au client. Voir l'objet Envoi.
order_line_id Nombre entier positif ou nul, Obligatoire
Identifiant de l'article de la commande.
deposit_id Nombre entier négatif ou nul
Identifiant de la facture d'acompte lorsque un acompte a été créé précédemment à cette facture.
early_payment_discount Booléen, Obligatoire
Indicateur si l'article correspond à un escompte
Identifiant interne du paiement.
received_on Date, Obligatoire
Date à laquelle le paiement a été effectué par le client.
amount Date, Obligatoire
Montant en centimes payé par le client. Par exemple 10000 pour 100,00€.
fee Nombre entier positif ou nul, Obligatoire
Frais en centimes de la transaction. Par exemple 120 pour 1,20€.
class_id Nombre positif, Obligatoire
Type de paiement: 1 pour Espèces, 2 pour Virement bancaire, 3 pour Chèque, 4 pour Carte Bancaire, 5 pour Prélèvement, 7 pour PayPal.
reference Chaîne de caractères
Référence de la transaction.
checked_on Date
Informations de la carte bancaire dans le cas d'un paiement par carte bancaire. Contient les propriétés: brand avec le type de la carte, last4 avec les quatres derniers numéros de la carte, exp_month et exp_year avec le mois et l'année d'expiration de la carte.
days_nb Nombre entier positif ou nul, Obligatoire
Nombre en jours accordé au client pour régler la facture. Zéro dans le cas d'un paiement comptant.
end_of_month Booléen, Obligatoire
Indicateur de fin de mois permettant de retarder l'échéance au dernier jour du mois.
early_payment_discount_rate Nombre entier positif ou nul, Obligatoire
Escompte représenté sous forme de pourcentage du montant total hors taxes. La valeur a deux décimales et ne possède pas de virgule. Par exemple 100 pour 1% ou 550 pour 5,5%.
Identifiant de l'envoi.
title Chaine de caractères, Obligatoire
Titre du courrier/courriel.
body Chaine de caractères, Obligatoire
Corps du courrier/courriel.
created_by Chaine de caractères, Obligatoire
Identifiant de l'utilisateur ayant effectué l'envoi.
created_on Chaine de caractères, Obligatoire
Date à laquelle la demande d'envoi a été faite.
contact Objet, Obligatoire
Destinataire du courrier/courriel.
unit_price Nombre entier positif ou nul, Obligatoire
Prix unitaire hors-taxes en centimes. Par exemple 10000 pour 100,00€.
Pourcentage de TVA à appliquer lorsque l'article est vendu. Les pourcentages acceptés vont de 0 % à 100% inclus. Montant avec deux décimales et sans virgule. Par exemple 2000 pour 20%.
stock Nombre entier positif ou nul, Obligatoire
Quantité en stock. Montant avec deux décimales et sans virgule. Par exemple 1000 pour 10 articles.
safety_stock Nombre entier positif ou nul, Obligatoire
Stock de sécurité. Quantité en-desous de laquelle l'article doit être recommandé. Montant avec deux décimales et sans virgule. Par exemple 200 pour 2 articles.
comment Chaîne de caractères, Obligatoire
Texte descriptif de l'article.
manufacturer Objet, Obligatoire
Constructeur de l'article. Objet de type Contact simplifié.
Dernière modification le 07/08/2020 par Morgan Schmiedt

References: l'article 11055
 l'article 11055
 l'article 11055
 l'article 9217
 l'article 9217
 l'article 9217
 l'article 1145
 l'article 36
 l'article 36
 l'article 36
 l'article 36
 l'article 36