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.

Fonctionnement de l'API

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.

Types de requêtes de l'API

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.

Codes HTTP des réponses de l'API

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.

Requêtes d'authentification

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:

POST /login
dk-timestamp: 2020-04-29T15:08:10.404Z
dk-hash: y20ASPRM5nktjO0T2SGjRaxm1dTFWIVv8wy8tXJnA0k=
content-type: application/json
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"}

Requêtes de l'API

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;
  • 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 et les paramètres de l'adresse. Par exemple /contact et non pas https://api.deskeen.fr/contact ni /contact?query=foo;
  • Le corps de la requête.

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:

GET /contact
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.

Format des paramètres des requêtes

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.

Format de données spécifiques

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.

Authentification

Avant de pouvoir effectuer des opérations, il est nécessaire de s'authentifier en envoyant ses identifiants dans une requête d'authentification.

S'authentifier

Point d'accès

post /login[/{Identifiant_de_l_entreprise}]

Contenu de la requête

  • email Obligatoire

    Adresse e-mail du compte de l'utilisateur.

  • password Obligatoire

    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.

Réponse de l'API

  • 200 OK

    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é

    Les identifiants sont incorrects.

Exemple - S'authentifier à partir d'un compte rattaché à une seule entreprise

POST /login
Contenu de la requête
{"email":"moncompte@deskeen.fr","password":"monmotdepasse"}
Réponse de l'API
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

POST /login
Contenu de la requête
{"email":"moncompte@deskeen.fr","password":"monmotdepasse"}
Réponse de l'API
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
Contenu de la requête
{"email":"moncompte@deskeen.fr","password":"monmotdepasse"}
Réponse de l'API
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}}

Devis

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.

Créer un devis pour un client

Point d'accès

post /contact/{Identifiant_du_client}/quotation

Réponse de l'API

  • 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
Réponse de l'API
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}

Créer un devis pour le dossier d'un client

Point d'accès

post /folder/{Identifiant_du_dossier}/quotation

Réponse de l'API

  • 201 OK - Créé

    Le devis a été correctement créé. Un objet de type Devis est retourné.

Exemple - Créer un nouveau devis pour le dossier 802

POST /folder/802/quotation
Réponse de l'API
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}

Créer un devis à partir d'un devis existant

📚 Documentation

Point d'accès

post /quotation/{Identifiant_du_devis}/clone

Réponse de l'API

  • 201 OK - Créé

    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
Réponse de l'API
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}

Obtenir un devis

📚 Documentation

Point d'accès

get /quotation/{Identifiant_du_devis}

Paramètres de la requête

  • line

    Indicateur pour recevoir le détails des articles du devis.

Réponse de l'API

  • 200 OK

    Le devis a été trouvé. Un objet de type Devis est retourné.

Exemple - Obtenir le devis 772 sans les articles

GET /quotation/772
Réponse de l'API
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
Réponse de l'API
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}

Obtenir le rendu HTML d'un devis

📚 Documentation

Point d'accès

get /quotation/{Identifiant_du_devis}/file

Paramètres de la requête

  • attachment

    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.

Réponse de l'API

  • 200 OK

    Le devis est retourné au format HTML.

Exemple - Obtenir le rendu HTML du devis 772

GET /quotation/772/file
Réponse de l'API
HTTP 200 OK
<!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>

Supprimer un devis

📚 Documentation

Point d'accès

delete /quotation/{Identifiant_du_devis}

Réponse de l'API

  • 204 OK

    Le devis a été supprimé.

  • 403 Refusé

    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
Réponse de l'API
HTTP 204 OK

Modifier un devis

📚 Documentation

Point d'accès

put /quotation/{Identifiant_du_devis}

Contenu de la requête

Réponse de l'API

  • 204 OK

    Le devis a été modifié.

  • 403 Refusé

    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
Contenu de la requête
{"valid_until":"2020-06-01T09:00:12.000Z"}
Réponse de l'API
HTTP 204 OK

Clôturer un devis

📚 Documentation

Point d'accès

post /quotation/{Identifiant_du_devis}/lock

Réponse de l'API

  • 204 OK

    Le devis a été clôturé.

  • 403 Refusé

    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
Réponse de l'API
HTTP 204 OK

Ré-ouvrir un devis clôturé

📚 Documentation

Point d'accès

delete /quotation/{Identifiant_du_devis}/lock

Réponse de l'API

  • 204 OK

    Le devis a été ré-ouvert.

  • 403 Refusé

    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
Réponse de l'API
HTTP 204 OK

Obtenir un article d'un devis

Point d'accès

get /quotation/{Identifiant_du_devis}/line/{Identifiant_de_l_article}

Réponse de l'API

  • 200 OK

    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
Réponse de l'API
HTTP 200 OK {"id":11055,"description":"Frais de dossier","unit_price":2000,"quantity":100,"discount":0,"tax_rate":2000,"material_id":null}

Ajouter un article à un devis

📚 Documentation

Point d'accès

post /quotation/{Identifiant_du_devis}/line

Contenu de la requête

Réponse de l'API

  • 201 OK - Créé

    L'article a été ajouté au devis. Un objet de type Article de devis est retourné.

  • 403 Refusé

    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
Contenu de la requête
{"description":"Frais de dossier","unit_price":2000,"quantity":100,"tax_rate":2000}
Réponse de l'API
HTTP 201 OK - Créé {"id":11055,"description":"Frais de dossier","unit_price":2000,"quantity":100,"discount":0,"tax_rate":2000,"material_id":null}

Modifier un article d'un devis

Point d'accès

put /quotation/{Identifiant_du_devis}/line/{Identifiant_de_l_article}

Contenu de la requête

Réponse de l'API

  • 204 OK

    L'article du devis a été modifié.

  • 403 Refusé

    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
Contenu de la requête
{"quantity":200}
Réponse de l'API
HTTP 204 OK

Retirer un article d'un devis

Point d'accès

delete /quotation/{Identifiant_du_devis}/line/{Identifiant_de_l_article}

Réponse de l'API

  • 204 OK

    L'article a été retiré du devis.

  • 403 Refusé

    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
Réponse de l'API
HTTP 204 OK

Envoyer un devis par e-mail

📚 Documentation

Point d'accès

post /quotation/{Identifiant_du_devis}/email

Contenu de la requête

  • contact_id Obligatoire

    Identifiant du contact qui recevra l'email.

  • title Obligatoire

    Titre de l'e-mail.

  • body Obligatoire

    Contenu de l'e-mail.

Réponse de l'API

  • 201 OK - Créé

    La devis va être envoyé au destinataire par e-mail. Un objet contenant l'identifiant de l'envoi est retourné.

  • 403 Refusé

    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
Contenu de la requête
{"contact_id":1000,"title":"Devis N°8","body":"Bonjour,\nVous trouverez ci-joint votre devis de 324,00 €."}
Réponse de l'API
HTTP 201 OK - Créé {"id":1647}

Valider un devis

📚 Documentation

Point d'accès

post /quotation/{Identifiant_du_devis}/order

Réponse de l'API

  • 204 OK

    Le devis a été confirmé. Un objet de type Commande est créé et retourné.

  • 403 Refusé

    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
Réponse de l'API
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}

Rechercher des devis

Point d'accès

get /quotation

Paramètres de la requête

  • state

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

  • from

    Date et heure minimum ou égale du devis.

  • to

    Date et heure maximale ou égale du devis.

  • client_id

    Identifiant du client.

  • folder_id

    Identifiant du dossier.

  • number

    Numéro du devis.

  • total

    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.

  • page_size

    Nombre d'éléments maximal contenu dans la réponse. Nombre compris entre 1 et 200 inclus.

  • max_id

    Identifiant maximal du devis .

Réponse de l'API

  • 200 OK

    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
Réponse de l'API
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}]}

Articles initiaux des Devis

Les articles initiaux des devis correspondent aux articles qui seront ajoutés automatiquement aux nouveaux devis.

Ajouter un article initial aux devis

📚 Documentation

Point d'accès

post /quotation/line

Contenu de la requête

Réponse de l'API

  • 201 OK - Créé

    L'article a été ajouté au devis. Un objet de type Article de devis est retourné.

Exemple - Ajouter des frais de dossier de 20,00 EUR à tous les devis

POST /quotation/line
Contenu de la requête
{"description":"Frais de dossier","unit_price":2000,"quantity":100,"discount":0,"tax_rate":2000}
Réponse de l'API
HTTP 201 OK - Créé {"id":6,"description":"Frais de dossier","unit_price":2000,"quantity":100,"discount":0,"tax_rate":2000}

Modifier un article initial de devis

Point d'accès

put /quotation/line/{Identifiant_de_l_article_initial}

Contenu de la requête

Réponse de l'API

  • 204 OK

    L'article a été modifié.

Exemple - Modifier la quantité de l'article initial 6

PUT /quotation/line/6
Contenu de la requête
{"quantity":200}
Réponse de l'API
HTTP 204 OK

Supprimer un article initial de devis

Point d'accès

delete /quotation/line/{Identifiant_de_l_article_initial}

Réponse de l'API

  • 204 OK

    L'article a été supprimé et ne sera plus ajouté aux nouveaux devis.

Exemple - Retirer l'article initial 6

DELETE /quotation/line/6
Réponse de l'API
HTTP 204 OK

Obtenir un article initial de devis

Point d'accès

get /quotation/line/{Identifiant_de_l_article_initial}

Réponse de l'API

  • 200 OK

    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
Réponse de l'API
HTTP 200 OK {"id":6,"description":"Frais de dossier","unit_price":2000,"quantity":100,"discount":0,"tax_rate":2000}

Obtenir tous les articles initiaux des devis

Point d'accès

get /quotation/line

Réponse de l'API

  • 200 OK

    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

GET /quotation/line
Réponse de l'API
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}]

Commandes

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.

Créée une commande

Point d'accès

post /contact/{Identifiant_du_client}/order

Réponse de l'API

  • 201 OK - Créé

    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
Réponse de l'API
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}

Créer une commande dans un dossier

Point d'accès

post /folder/{Identifiant_du_dossier}/order

Réponse de l'API

  • 201 OK - Créé

    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
Réponse de l'API
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}

Obtenir une commande

Point d'accès

get /order/{Identifiant_de_la_commande}

Paramètres de la requête

  • line

    Indicateur pour recevoir les articles de la commande dans la réponse.

Réponse de l'API

  • 200 OK

    La commande a été trouvée. Un objet de type Commande est retourné.

Exemple - Obtenir la commande 889 sans les articles

GET /order/889
Réponse de l'API
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
Réponse de l'API
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}

Obtenir le rendu HTML d'une commande

Point d'accès

get /order/{Identifiant_de_la_commande}/file

Paramètres de la requête

  • attachment

    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.

Réponse de l'API

  • 200 OK

    La commande est retourné au format HTML.

Exemple - Obtenir le rendu HTML de la commande 889

GET /order/889/file
Réponse de l'API
HTTP 200 OK
<!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>

Modifier une commande

📚 Documentation

Point d'accès

put /order/{Identifiant_de_la_commande}

Contenu de la requête

Réponse de l'API

  • 204 OK

    La commande a été modifiée.

  • 403 Refusé

    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
Contenu de la requête
{"client":{"address":"5, rue des roses","postal_code":"68000","city":"COLMAR","country_code":"fr"}}
Réponse de l'API
HTTP 204 OK

Clôturer une commande

📚 Documentation

Point d'accès

post /order/{Identifiant_de_la_commande}/lock

Réponse de l'API

  • 204 OK

    La commande a été clôturée.

  • 403 Refusé

    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
Réponse de l'API
HTTP 204 OK

Ré-ouvrir une commande clôturée

📚 Documentation

Point d'accès

delete /order/{Identifiant_de_la_commande}/lock

Réponse de l'API

  • 204 OK

    La commande a été ré-ouverte.

  • 403 Refusé

    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
Réponse de l'API
HTTP 204 OK

Générer un bon de livraison à partir d'une commande

📚 Documentation

Point d'accès

get /order/{Identifiant_de_la_commande}/delivery/file

Paramètres de la requête

  • attachment

    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.

Réponse de l'API

  • 200 OK

    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
Réponse de l'API
HTTP 200 OK
<!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>

Obtenir un article d'une commande

Point d'accès

get /order/{Identifiant_de_la_commande}/line/{Identifiant_de_l_article}

Réponse de l'API

  • 200 OK

    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
Réponse de l'API
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}

Ajouter un article à une commande

Point d'accès

post /order/{Identifiant_de_la_commande}/line

Contenu de la requête

Réponse de l'API

  • 201 OK - Créé

    L'article a été ajouté à la commande. Un objet de type Article de commande contenant l'article fraichement créé est retourné.

  • 403 Refusé

    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
Contenu de la requête
{"description":"Recherche de panne","unit_price":10000,"quantity":100,"tax_rate":2000}
Réponse de l'API
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}

Modifier un article d'une commande

Point d'accès

put /order/{Identifiant_de_la_commande}/line/{Identifiant_de_l_article}

Contenu de la requête

Réponse de l'API

  • 204 OK

    L'article de la commande a été modifié.

  • 403 Refusé

    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
Contenu de la requête
{"discount":-2000}
Réponse de l'API
HTTP 204 OK

Retirer un article d'une commande

Point d'accès

delete /order/{Identifiant_de_la_commande}/line/{Identifiant_de_l_article}

Réponse de l'API

  • 204 OK

    L'article a été retiré de la commande.

  • 403 Refusé

    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
Réponse de l'API
HTTP 204 OK

Factures

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.

Créer une facture à partir d'une commande

📚 Documentation

Point d'accès

post /order/{Identifiant_de_la_commande}/invoice

Réponse de l'API

  • 201 OK - Créé

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

  • 403 Refusé

    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
Réponse de l'API
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}

Obtenir une facture

Point d'accès

get /invoice/{Identifiant_de_la_facture}

Paramètres de la requête

  • line

    Indicateur pour recevoir les articles de la facture dans la réponse.

Réponse de l'API

  • 200 OK

    La facture a été trouvée. Un objet de type Facture est retourné.

Exemple - Obtenir la facture 940 avec les articles

GET /order/889
Réponse de l'API
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}

Obtenir le rendu HTML d'une facture

Point d'accès

get /invoice/{Identifiant_de_la_facture}/file

Paramètres de la requête

  • attachment

    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.

Réponse de l'API

  • 200 OK

    La facture est retourné au format HTML.

  • 403 Refusé

    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
Réponse de l'API
HTTP 200 OK
<!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>

Supprimer une facture

📚 Documentation

Point d'accès

delete /invoice/{Identifiant_de_la_facture}

Réponse de l'API

  • 204 OK

    La facture a été supprimée.

  • 403 Refusé

    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
Réponse de l'API
HTTP 204 OK

Annuler une facture

📚 Documentation

Point d'accès

post /invoice/{Identifiant_de_la_facture}/lock

Réponse de l'API

  • 204 OK

    La facture a été annulée. La commande associée à la facture est ré-ouverte et les articles peuvent à nouveau être facturés.

  • 403 Refusé

    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
Réponse de l'API
HTTP 204 OK

Valider une facture

📚 Documentation

Point d'accès

post /invoice/{Identifiant_de_la_facture}/stamp

Réponse de l'API

  • 204 OK

    La facture a été validée. Si tous les articles de la commande sont facturés, la commande est aussi clôturée.

  • 403 Refusé

    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
Réponse de l'API
HTTP 204 OK

Retirer un article d'une facture

Point d'accès

delete /invoice/{Identifiant_de_la_facture}/line/{Identifiant_de_l_article}

Réponse de l'API

  • 204 OK

    L'article a été retiré de la facture.

  • 403 Refusé

    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
Réponse de l'API
HTTP 204 OK

Ajouter un escompte à une facture

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.

📚 Documentation

Point d'accès

post /invoice/{Identifiant_de_la_facture}/discount

Réponse de l'API

  • 201 OK - Créé

    L'escompte a été ajouté à la facture. La liste des articles qui ont été ajoutés à la facture sont retournés.

  • 403 Refusé

    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

POST /order/940/lock
Réponse de l'API
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}]

Retirer un escompte d'une facture

Point d'accès

delete /invoice/{Identifiant_de_la_facture}/discount

Réponse de l'API

  • 204 OK

    L'escompte a été retiré de la facture.

  • 403 Refusé

    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
Réponse de l'API
HTTP 204 OK

Envoyer une facture par e-mail

📚 Documentation

Point d'accès

post /invoice/{Identifiant_de_la_facture}/email

Contenu de la requête

  • contact_id Obligatoire

    Identifiant du contact qui recevra l'email.

  • title Obligatoire

    Titre de l'e-mail.

  • body Obligatoire

    Contenu de l'e-mail.

Réponse de l'API

  • 201 OK - Créé

    La facture va être envoyé au destinataire par e-mail. Un objet contenant l'identifiant de l'envoi est retourné.

  • 403 Refusé

    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
Contenu de la requête
{"contact_id":1000,"title":"Facture N°9","body":"Bonjour,\nVous trouverez ci-joint la facture de votre achat de 120,00 €."}
Réponse de l'API
HTTP 201 OK - Créé {"id":1648}

Générer un courrier de relance pour une facture impayée

📚 Documentation

Point d'accès

get /invoice/{Identifiant_de_la_facture}/reminder-letter

Paramètres de la requête

  • attachment

    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.

Réponse de l'API

  • 200 OK

    Le courrier de relance est retourné au format HTML.

  • 403 Refusé

    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
Réponse de l'API
HTTP 200 OK
<!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>

Générer un courrier de mise en demeure pour une facture impayée

📚 Documentation

Point d'accès

get /invoice/{Identifiant_de_la_facture}/formal-reminder-letter

Paramètres de la requête

  • attachment

    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.

Réponse de l'API

  • 200 OK

    Le courrier de mise en demeure est retourné au format HTML.

  • 403 Refusé

    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 mise en demeure pour la facture 684

GET /invoice/684/reminder-letter
Réponse de l'API
HTTP 200 OK
<!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>

Factures d'acompte

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

Créer une facture d'acompte à partir d'une commande

📚 Documentation

Point d'accès

post /order/{Identifiant_de_la_commande}/deposit

Réponse de l'API

  • 201 OK - Créé

    Une facture d'acompte est créée à partir de la commande. Un object de type Facture est retourné.

  • 403 Refusé

    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
Réponse de l'API
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}

Modifier le montant de l'acompte

Point d'accès

put /invoice/{Identifiant_de_la_facture}/line/{Identifiant_de_l_article_-_acompte}

Contenu de la requête

  • description Optionnel

    Libellé de l'article comprenant l'acompte

  • quantity Optionnel

    Quantité de l'acompte de 1 à 99. Par exemple 10 pour 10%.

  • tax_rate Optionnel

    Taux de TVA de l'acompte.

Réponse de l'API

  • 204 OK

    L'acompte a été modifié.

  • 403 Refusé

    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%

POST /order/940/lock
Contenu de la requête
{"quantity":20,"tax_rate":1000}
Réponse de l'API
HTTP 204 OK

Paiements de facture

Obtenir le paiement d'une facture

Point d'accès

get /invoice/{Identifiant_de_la_facture}/payment/{Identifiant_du_paiement}

Réponse de l'API

  • 200 OK

    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
Réponse de l'API
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}

Ajouter un paiement à une facture

Point d'accès

post /invoice/{Identifiant_de_la_facture}/payment

Contenu de la requête

Réponse de l'API

  • 201 OK - Créé

    Le paiement a été ajoutée à la facture. Un objet de type Paiement de facture est retourné.

  • 403 Refusé

    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
Contenu de la requête
{"received_on":"2020-05-06T15:25:08.230Z","amount":10000,"reference":"#TR45DM","class_id":3}
Réponse de l'API
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}

Supprimer un paiement d'une facture

Point d'accès

delete /invoice/{Identifiant_de_la_facture}/payment/{Identifiant_du_paiement}

Réponse de l'API

  • 204 OK

    Le paiement a été retiré de la facture.

Exemple - Retirer le paiement 822 de la facture 940.

DELETE /invoice/940/payment/822
Réponse de l'API
HTTP 204 OK

Carnet d'adresses

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.

Ajouter un contact au carnet d'adresses

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.

Point d'accès

post /contact

Contenu de la requête

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

  • description Optionnel

    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
  • 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
  • vat_nb Optionnel
  • iban Optionnel
  • parent_id Optionnel

    Identifiant de l'entreprise pour laquelle la personne travaille.

  • email Optionnel

    Adresse e-mail.

  • tel Optionnel

    Numéro de téléphone principal.

  • tel2 Optionnel

    Numéro de téléphone secondaire.

  • fax Optionnel

    Numéro de fax.

  • website Optionnel

    Adresse du site Internet.

  • comment Optionnel

    Commentaire.

  • role Optionnel

    Rôle.

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

Réponse de l'API

  • 201 OK - Créé

    Le contact a été créé et a été ajouté au carnet d'adresses. Un objet de type Contact est retourné.

  • 403 Refusé

    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

POST /contact
Contenu de la requête
{"siren":"356000000"}
Réponse de l'API
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

POST /contact
Contenu de la requête
{"company":true,"description":"EXAMPLE SARL","address":"16 Avenue Principale","postal_code":"67120","city":"ALTORF","country_code":"fr"}
Réponse de l'API
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

POST /contact
Contenu de la requête
{"description":"Doe","firstname":"John","email":"john.doe@example.com"}
Réponse de l'API
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}

Obtenir un contact du carnet d'adresses

Point d'accès

get /contact/{Identifiant_du_contact}

Réponse de l'API

  • 200 OK

    Le contact a été trouvée. Un objet de type Contact est retourné.

Exemple - Obtenir le contact 940

GET /contact/940
Réponse de l'API
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}

Modifier un contact du carnet d'adresses

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.

Point d'accès

put /contact/{Identifiant_du_contact}

Contenu de la requête

  • siren Optionnel

    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.

  • description Optionnel

    Nom de l'entreprise ou nom de famille de la personne.

  • firstname Optionnel

    Prénom de la personne.

  • address Optionnel
  • postal_code Optionnel
  • city Optionnel
  • country_code Optionnel
  • 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
  • vat_nb Optionnel
  • iban Optionnel
  • parent_id Optionnel

    Identifiant de l'entreprise pour laquelle la personne travaille.

  • email Optionnel

    Adresse e-mail.

  • tel Optionnel

    Numéro de téléphone principal.

  • tel2 Optionnel

    Numéro de téléphone secondaire.

  • fax Optionnel

    Numéro de fax.

  • website Optionnel

    Adresse du site Internet.

  • comment Optionnel

    Commentaire.

  • role Optionnel

    Rôle.

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

Réponse de l'API

  • 204 OK

    Le contact a été modifié.

  • 403 Refusé

    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 - Modifier les conditions de paiement d'un client à 7 jours, avec 5% d'acompte

PUT /contact/1002
Contenu de la requête
{"payment_terms":{"days_nb":7,"end_of_month":false,"early_payment_discount_rate":500}}
Réponse de l'API
HTTP 204 OK

Supprimer un contact du carnet d'adresses

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.

Point d'accès

delete /contact/{Identifiant_du_contact}

Réponse de l'API

  • 204 OK

    Le contact a été supprimé et retiré du carnet d'adresses.

  • 403 Refusé

    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
Réponse de l'API
HTTP 204 OK

Créer un compte à un client

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

Point d'accès

post /contact/{Identifiant_du_contact}/account

Réponse de l'API

  • 204 OK

    Un compte a été créé pour cette personne et ses identifiants vont lui être envoyés par e-mail.

  • 403 Refusé

    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
Réponse de l'API
HTTP 204 OK

Supprimer le compte d'un client

Point d'accès

delete /contact/{Identifiant_du_contact}/account

Réponse de l'API

  • 204 OK

    Le compte de la personne a été supprimé.

  • 403 Refusé

    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
Réponse de l'API
HTTP 204 OK

Catalogue

Ajouter un article au catalogue

Point d'accès

post /material

Contenu de la requête

Réponse de l'API

  • 201 OK - Créé

    L'article a été créé et ajouté au catalogue. Un objet de type Article est retourné.

Exemple - Ajouter un article au catalogue

POST /material
Contenu de la requête
{"description":"Tasse décorée","unit_price":1500,"tax_rate":2000}
Réponse de l'API
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}

Obtenir un article du catalogue

Point d'accès

get /material/{Identifiant_de_l_article}

Réponse de l'API

  • 200 OK

    L'article a été trouvé. Un objet de type Article est retourné.

Exemple - Obtenir l'article 36 du catalogue

GET /material/36
Réponse de l'API
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}

Modifier un article du catalogue

Point d'accès

put /material/{Identifiant_de_l_article}

Contenu de la requête

Réponse de l'API

  • 204 OK

    L'article du catalogue a été modifié.

Exemple - Modifier l'article 36 du catalogue

PUT /material/36
Contenu de la requête
{"unit_price":3000}
Réponse de l'API
HTTP 204 OK

Supprimer un article du catalogue

Point d'accès

delete /material/{Identifiant_de_l_article}

Réponse de l'API

  • 204 OK

    L'article a été supprimé et retiré du catalogue.

  • 403 Refusé

    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
Réponse de l'API
HTTP 204 OK

Ajouter un tarif négocié pour un client

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

Point d'accès

post /material/{Identifiant_de_l_article}/client/{Identifiant_du_client}

Contenu de la requête

Réponse de l'API

  • 204 OK

    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
Contenu de la requête
{"unit_price":1000}
Réponse de l'API
HTTP 204 OK

Supprimer un tarif négocié d'un client

Point d'accès

delete /material/{Identifiant_de_l_article}/client/{Identifiant_du_client}

Réponse de l'API

  • 204 OK

    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
Réponse de l'API
HTTP 204 OK

Dépense

Créer une dépense

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

Dossier

Créer un dossier

Modifier un dossier

Catégorie de dépense

Objets retournés par l'API

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.
  • Des dates.

Objet - Informations du compte

  • 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

    Prénom de l'utilisateur.

  • email Chaîne de caractères, Obligatoire

    E-mail de l'utilisateur.

  • company Objet, Obligatoire

    Entreprise rattachée au compte de l'utilisateur

Objet - Entreprise

  • siren Nombre entier positif, Obligatoire

    Numéro SIREN de l'entreprise.

  • description Chaîne de caractères, Obligatoire

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

  • tel Numéro de téléphone

    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

    Site Internet de l'entreprise.

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

Objet - Contact du carnet d'adresses

  • id Nombre entier positif, Obligatoire

    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

    Nom de l'entreprise ou nom de famille de la personne.

  • firstname Chaine de caractères

    Prénom de la personne.

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

  • country_code Code pays

    Pays du contact.

  • birth_name Chaine de caractères

    Nom de naissance de la personne.

  • birth_city Chaine de caractères

    Ville de naissance de la personne.

  • birth_date Date

    Date de naissance de la personne ou date de création de la société.

  • birth_country_code Chaine de caractères

    Code du pays de naissance selon la codification ISO-3166.

  • email Chaine de caractères

    Adresse e-mail.

  • tel Numéro de téléphone

    Numéro de téléphone principal.

  • tel2 Numéro de téléphone

    Numéro de téléphone secondaire.

  • fax Numéro de téléphone

    Numéro de fax.

  • website Chaine de caractères

    Adresse du site Internet.

  • vat_nb Chaine de caractères

    Numéro de TVA intracommunautaire de l'entreprise.

  • iban Chaine de caractères

    Numéro de compte bancaire au format IBAN.

  • comment Chaine de caractères

    Commentaire.

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

  • parent Objet

    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

    Numéro SIREN de l'entreprise

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

Objet - Devis

  • id Nombre entier positif, Obligatoire

    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.

  • comment Chaîne de caractères

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

  • payment_terms Objet, Obligatoire

    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.

Objet - Article de devis

  • id Nombre entier positif, Obligatoire

    Identifiant de l'article.

  • description Chaine de caractères, Obligatoire

    Libellé 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

    Identifiant de l'article du catalogue.

Objet - Recherche de devis

Objet - Commande

  • id Nombre entier positif, Obligatoire

    Identifiant interne de la commande.

  • state Chaîne de caractères, Obligatoire

    Statut de la commande. Les statuts possibles sont: running quand la commande est modifiable et closed lorsque le commande est clôturée.

  • number Nombre entier positif, Obligatoire

    Numéro de la commande. Lorsque la commande est créée, un numéro unique est assigné au commande.

  • date Date et heure, Obligatoire

    Date de création de la commande.

  • comment Chaîne de caractères

    Commentaire de la commande.

  • 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 de la commande.

  • 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 de la commande ont été modifiées manuellement par l'utilisateur. Voir l'objet Contact.

  • folder Objet

    Dossier dans lequel la commande a été classée. Voir l'objet Dossier.

  • payment_terms Objet, Obligatoire

    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.

  • layout_id Objet

    Informations du modèle à utiliser lors du rendu papier ou électronique de la commande.

  • layout_footer_id Nombre positif

    Identifiant du pied de page à utiliser dans le rendu de la commande.

  • lines Liste

    Liste des articles de la commande. Voir l'objet Article de la commande.

Objet - Article de commande

  • id Nombre entier positif, Obligatoire

    Identifiant de l'article.

  • description Chaine de caractères, Obligatoire

    Libellé 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

    Identifiant de l'article du catalogue.

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

Objet - Facture

  • id Nombre entier positif, Obligatoire

    Identifiant interne de la facture.

  • state Chaîne de caractères, Obligatoire

    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 Date et heure, Obligatoire

    Date de création de la facture.

  • vat Booléen, Obligatoire

    Indicateur si l'entreprise qui émet la facture est d'assujettie à la TVA.

  • due_date Date

    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.

  • terms Objet

    Conditions générales de l'entreprise. Voir l'objet Conditions générales.

  • client Objet, Obligatoire

    Nom et adresse du client de la facture.

  • client_original Objet, Obligatoire

    Informations du client issues du carnet d'adresses. Voir l'objet Contact.

  • folder Objet

    Dossier dans lequel la facture a été classée. Voir l'objet Dossier.

  • payment_terms Objet, Obligatoire

    Conditions de paiement de la facture. Voir l'objet Conditions de paiement

  • order Objet

    Commande ayant générée la facture. 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 de la facture.

  • layout_footer_id Nombre positif

    Identifiant du pied de page à utiliser dans le rendu de la facture.

  • lines Liste

    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.

  • sendings Liste

    Informations des envois, lorsque la facture est envoyée au client. Voir l'objet Envoi.

Objet - Article de facture

  • id Nombre entier positif, Obligatoire

    Identifiant de l'article.

  • description Chaine de caractères, Obligatoire

    Libellé 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%.

  • 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

Objet - Paiement de facture

  • id Nombre entier positif, Obligatoire

    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

    Date à laquelle le paiement a été encaissé.

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

Objet - Conditions de paiement

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

Objet - Envoi

  • tenant_id Nombre entier positif, Obligatoire

    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.

Objet - Article du catalogue

  • id Nombre entier positif, Obligatoire

    Identifiant de l'article.

  • description Chaîne de caractères, Obligatoire

    Libellé de l'article.

  • unit_price Nombre entier positif ou nul, Obligatoire

    Prix unitaire hors-taxes en centimes. Par exemple 10000 pour 100,00€.

  • tax_rate Nombre entier positif ou nul, Obligatoire

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

Objet - Activité

  • id Nombre entier positif, Obligatoire

    Identifiant de l'activité.

Objet - Dépense

  • id Nombre entier positif, Obligatoire

    Identifiant de la dépense.