API ioi
Mise à jour le 18 septembre 2026·
L’API ioi permet d’exploiter les classes ioi suivantes :
- ioi Customer,
- ioi Supplier,
- ioi Item,
- ioi Sales Quote,
- ioi Sales Order,
- ioi Sales Delivery,
- ioi Sales Invoice,
- ioi Purchases Price Request,
- ioi Purchases Order,
- ioi Purchases Receipt,
- ioi Purchases Invocie.
→ Elle fonctionne sur le même principe que l’API REST de FRAPPE : https://frappeframework.com/docs/user/en/api/rest
Authentification et permissions #
Mêmes principes que l’API REST de FRAPPE.
→ Pour l’authentification :
- Token Based Authentication,
- Password Based Authentication,
- Access Token.
→ Pour les permissions, on se base sur les permissions utilisateurs par doctype (standard).
Structure du body #
→ Type : Body raw de type json.
Exemple :
{
"mandatory_field": "ID",
"my_data":{
""overriding_field": "DATE"
},
"line_detail": [{
"mandatory_field": "ITEM",
"my_data": {
"overriding_field": "PRICE"
}
}
]
}
→ Un des avantages d’utiliser les classes est de bénéficier des populates de l’objet.
Exemple : Lorsque l’on indique la référence d’un client, toutes les zones concernant ce client seront complétées par le populate du client.
→ Par ailleurs, toutes les données se trouvant dans l’objet « my_data » viendront écraser les données du populate.
Exemple : Si l’on a un populate du client mais que l’on veut quand même forcer la valeur de la condition de vente, il faudra indiquer :
"my_data":{ "sales_condition_id": "NORMAL" }
L’objet « line_detail » est un tableau destiné pour les lignes de détails. Cela concerne uniquement les documents de ventes et d’achats. Le principe expliqué ci-dessus est le même pour les lignes de détails. En résumé :
- On retrouve dans le « main » objet : les champs obligatoires et les champs qui vont déclencher un populate.
- On retrouve dans le « my_data » objet : tous les autres champs.
- On retrouve dans le « line_detail » tableau : les lignes de détails.
Liste des populates #
Customer/Supplier #
- full_name
- mode
- postal_code_id
Sales / Purchases documents #
Header : #
- document_date
- period_id
- order_customer_id / order_supplier_id
- order_customer_contact_id order_supplier_contact_id
- delivery_customer_id / delivery_supplier_id
- delivery_customer_contact_id / delivery_supplier_contact_id
- invoice_customer_id / invoice_supplier_id
- invoice_customer_contact_id / invoice_supplier_contact_id
- currency_id
- currency_rate
- currency_rate_inv
- cashdesk_id
Detail : #
- sales_condition_id / purchases_condition_id
- item_id
- manufacter_ref
- unit_id
- unit_price
- fixed_price
- base_discount
- extra_discount
- value_discount
- unit_price_tvac
- account_id
- vat_type
- vat_service
- vat_matching_id
- vat_rate
- vatcode_id
- warehouse_id
CRUD Operations #
Create #
Méthode : POST
Requête : api/method/silicon_ioi.api.resource/:doctype
ioi Customer #
Requête : api/method/silicon_ioi.api.resource/ioi Customer
→ Body :
{
"identification": "ACE",
"ioistatus": 4,
"full_name": "ACE SA",
"my_data":{
"address": "Avenue Louise 222",
"city": "Brussel",
"postal_code": "1010",
"country_id": "FR",
"phone_1": "02\/758.25.69",
"email": "info@ace.be",
"language": "fr",
"currency_id": "EUR",
"family_1_id": "INDUSTRIE",
"payment_term_id": "30,J",
"general_memo": "<!DOCTYPE HTML PUBLIC \"-\/\/W3C\/\/DTD HTML 4.01 Transitional\/\/EN\">\n<html>\n<head>\n<title><\/title>\n<meta http-equiv=\"Content-Type\" content=\"text\/html; charset=iso-8859-1\">\n<\/head>\n\n<body>\n\n<div align=\"left\"><font face=\"Courier new\" size=\"2\" color=\"#000000\"><u><i><b>TEST Rtf<br><\/b><\/i><\/u>\n<\/div>\n<div align=\"center\">je test la conversio du rtf en hml via la dll<\/font><\/div>\n<\/body>\n<\/html>",
"vat_number": "BE432-112-630",
"dimension_type": "N",
"website": "www.ace.be",
"delivery_condition_id": "EXWORKS",
"delivery_copy": 1,
"invoice_copy": 1,
"mode": 2,
"id_ioi": "ACE",
"last_sync_dt_ioi": "2023-04-26T13:25:06.210Z",
"sync_dt_ioi": "2023-04-24T09:36:39.923Z"
}
}
ioi Sales Order #
Requête : api/method/silicon_ioi.api.resource/ioi Sales Order
→ Body :
{
"prefix_id": "CMD",
"document_date": "2023-10-12",
"ioistatus": 1,
"order_customer_id": "VOLVO",
"delivery_customer_id": "GARDENANS",
"invoice_customer_id": "GARDENANS",
"currency_id": "EUR",
"my_data":{
"sales_condition_id": "DISTRIB",
"delivery_condition_id": "NORMAL",
"language": "fr",
"external_ref": "TEST external ref",
"shipping_datetime": "2023-10-16 23:00:11.000",
"expected_arrival_on": "2023-10-23",
"responsible_id": "Administrator",
"base_discount": 0,
"extra_discount": 0,
"financial_discount": 0,
"vat_type": "NAT",
"spec_vat_rate": 21,
"wo_vat1": 810,
"wo_vat2": 0,
"wo_vat3": 0,
"wo_vat4": 0,
"wo_vat5": 0,
"base_vat1": 810,
"base_vat2": 0,
"base_vat3": 0,
"base_vat4": 0,
"base_vat5": 0,
"vat_type1": "NAT",
"rate_vat1": 21,
"rate_vat2": 0,
"rate_vat3": 0,
"rate_vat4": 0,
"rate_vat5": 0,
"vat1": 170.1,
"vat2": 0,
"vat3": 0,
"vat4": 0,
"vat5": 0,
"inc_vat1": 980.1,
"inc_vat2": 0,
"inc_vat3": 0,
"inc_vat4": 0,
"inc_vat5": 0,
"sales_agent_id": "ANDRE",
"credit_mode": 0,
"payment_term_id": "FDM,30,J",
"asked_arrival_date": "2015-10-13"
},
"line_detail": [{
"sales_condition_id": "DISTRIB",
"item_id": "B02-LAWNMOWER",
"unit_id": "PCS",
"ordered_qty": 1,
"unit_price": 1350,
"unit_price_tvac": 1633.5,
"base_discount": 10,
"extra_discount": 5,
"value_discount":5,
"vat_type": "NAT",
"vat_service": "G",
"vat_rate": 21,
"my_data": {
"expected_arrival_on": "2023-10-20 12:30:45",
"warehouse_id": "BXL",
"to_execute": 0,
"shipping_datetime": "2023-10-15 18:57:11.000",
"weight": 1000,
"external_ref": 10,
"item_cost": 572.22,
"item_cost_std_stamp": 485.293105,
"value_paid": 810,
"barcode_reference": "1234567001609",
"reserved_qty": 10,
"free_part_qty": 0
}
}
]
}
Read #
Méthode : GET
Requête : api/method/silicon_ioi.api.resource/:doctype/:name
ioi Customer #
Requête : api/method/silicon_ioi.api.resource/silicon_ioi.api.resource/ACE
→ Body :
{
"data": {
"name": "ACE",
"owner": "Administrator",
"creation": "2023-10-25 14:29:39.937475",
"modified": "2023-10-25 14:29:40.216554",
"modified_by": "Administrator",
"docstatus": 0,
"idx": 0,
"is_warning": 0,
"warninfo": "",
"identification": "ACE",
"id_prefix": null,
"id_number": 0,
"lib_ioistatus": "Active",
"full_name": "ACE SA",
"language": "en",
"supplier_id": null,
"mode": "0",
"currency_id": "EUR",
"address": null,
"postal_code_id": null,
"latitude": 0.0,
"postal_code": "1000",
"city": "Brussel",
"longitude": 0.0,
"country_id": "FR",
"contact_title": null,
"contact_lastname": null,
"contact_firstname": null,
"phone_1": "02/758.25.69",
"email": "info@ace.be",
"phone_2": null,
"website": "www.ace.be",
"select_image": null,
"vat_number": "BE432-112-630",
"external_reference": null,
"vat_matching_id": null,
"duns_number": null,
"vat_type": "NAT",
"payment_term_id": "30,J",
"payment_reminder_category_id": null,
"payment_last_reminder_date": null,
"payment_last_reminder_level": 0,
"payment_reminder_last_level": null,
"accounting_collective_account_id": null,
"accounting_default_account_id": null,
"specific_vat_code_id": null,
"financial_discount": 0.0,
"financial_delay": 0,
"financial_discount_mode": "0",
"domiciliation_sign_date": null,
"domiciliation_active": 0,
"domiciliation_id": null,
"domiciliation_type": null,
"sales_catalog_id": "STANDARD",
"sales_condition_id": "NORMAL",
"specific_condition_id": null,
"delivery_condition_id": "EXWORKS",
"delivery_delay": 0,
"base_discount": 0.0,
"extra_discount": 0.0,
"sales_agent_id": null,
"default_order_to": null,
"delivery_flow": "0",
"default_deliver_to": null,
"default_invoice_to": null,
"end_user_id": null,
"not_for_order": 0,
"invoice_mode": "PAPER",
"summary_invoice": 0,
"not_for_delivery": 0,
"invoice_email": null,
"delivery_copy": 1,
"edi_identification": null,
"not_for_invoice": 0,
"invoice_format": "PDF",
"invoice_copy": 1,
"document_calc_mode": "0",
"batch_invoice_grouping_mode": "0",
"batch_invoice_grouping_cadency": 0,
"batch_invoice_grouping_except_bo": 0,
"family_1_id": "INDUSTRIE",
"family_2_id": null,
"marketing_action_disabled": 0,
"activity_summary": "",
"sector_summary": "",
"sla_category_id": null,
"geographic_index_id": null,
"distance": 0,
"visible": 0,
"sale_name": null,
"vweb": null,
"id_nav": null,
"ioistatus": "2",
"imported_data": 1,
"ioiuserstatus": "0",
"lib_ioiuserstatus": null,
"accounting_memo": null,
"general_memo": "\n\n\n<title></title>\n<meta content=\"text/html; charset=iso-8859-1\">\n\n\n\n\n<div align=\"left\"><font color=\"#000000\" face=\"Courier new\" size=\"2\"><u><i><b>TEST Rtf<br></b></i></u>\n</font></div><font color=\"#000000\" face=\"Courier new\" size=\"2\">\n</font><div align=\"center\"><font color=\"#000000\" face=\"Courier new\" size=\"2\">je test la conversio du rtf en hml via la dll</font></div>\n\n",
"reconciliation_number": 0,
"doctype": "ioi Customer",
"bank_detail": [],
"activity_detail": [],
"sector_detail": [],
"preconfigured_imputations": [],
"cust_discount_detail": []
}
}
ioi Sales Order #
Requête : api/method/silicon_ioi.api.resource/silicon_ioi.api.resource/ioi Sales Order?filters=[[“order_customer_id”,“=”,“GARDENANS”]]&fields=[“name”, “total_htva”, “currency_id”]
→ Body :
{
"data": [
{
"name": "CMD • 2020000040",
"total_htva": 36000.0,
"currency_id": "EUR"
},
{
"name": "CMD • 2020000055",
"total_htva": 19980.0,
"currency_id": "EUR"
},
{
"name": "CMD • 2020000071",
"total_htva": 600.0,
"currency_id": "EUR"
},
{
"name": "ORD • 2020000027",
"total_htva": 133.88,
"currency_id": "EUR"
},
{
"name": "ORD • 2020000042",
"total_htva": 918.0,
"currency_id": "EUR"
}
]
}
Update #
Méthode : PUT
Requête : api/method/silicon_ioi.api.resource/:doctype/:name
ioi Customer #
Requête : api/method/silicon_ioi.api.resource/ioi Customer/ACE
→ Body :
{
"my_data":
{
"city": "Brussel",
"postal_code": "1000",
"country_id": "BE"
}
}
ioi Sales Order #
Requête : api/method/silicon_ioi.api.resource/ioi Sales Order/CMD • 2020000087
→ Body :
{
"document_date": "2050-10-12",
"order_customer_id": "GARDENANS",
"line_detail":[{
"name": "d2c19403c1",
"unit_price": 1400,
"my_data": {
"weight": 1100
}
}
]
}
Delete #
Méthode : DELETE
Requête : api/method/silicon_ioi.api.resource/:doctype/:name
ioi Customer #
Requête : api/method/silicon_ioi.api.resource/ioi Customer/ACE
→ Réponse :
{
"message": "ok"
}
ioi Sales Order #
Requête : api/method/silicon_ioi.api.resource/ioi Sales Order/CMD • 2020000087
→ Réponse :
{
"message": "ok"
}
Changement de statut #
Méthode : POST
Requête : api/method/silicon_ioi.api.resource/:doctype/:name?run_method=change_status
→ Body :
{
"ioistatus": 2
}
Changement du statut utilisateur #
Méthode : POST
Requête : api/method/silicon_ioi.api.resource/:doctype/:name?run_method= change_user_status
→ Body :
{
"ioiuserstatus": 2
}
Méthodes spécifiques #
Il est possible aussi de créer un document à partir d’un autre.
Méthode : POST
Requête : api/method/silicon_ioi.api.resource/:doctype/:name?run_method=method_name
→ Remarques : normalement il n’y a pas besoin de paramètres dans le body pour utiliser ces méthodes, sauf 2 exceptions pour create_delivery et add_lines_to_delivery dans lesquelles il faut indiquer en plus le paramètre qty_rule (voir exemple). Ci-dessous les valeurs acceptées de qty_rule :
- 1 : Fill limited to site stock,
- 2 : Fill limited to available,
- 3 : Fill limited to scheduled available (par défaut),
- 5 : Fill with order qty.
Création d’une livraison à partir d’une commande #
Requête : api/method/silicon_ioi.api.resource/ioi Sales Order/CMD • 2020000087?run_method=create_delivery
→ Body :
{
"qty_rule": 3
}
Ajout d’une ligne détail dans une livraison à partir d’une commande #
Requête : api/method/silicon_ioi.api.resource/ioi Sales Order/CMD • 2020000087?run_method=add_lines_to_delivery
→ Body :
{
"name": "LIV • 2020000054",
"qty_rule": 3
}
Liste des méthodes spécifiques #
ioi Sales/Purchases Quote #
- create_order
- add_lines_to_order
ioi Sales Order #
- create_delivery
- add_lines_to_delivery
- create_invoice
- add_lines_to_invoice
ioi Purchases Order #
- create_receipt
- add_lines_to_receipt
- create_invoice
- add_lines_to_invoice
ioi Sales/Purchases Delivery/Receipt #
- create_invoice
- add_lines_to_invoice
Contrat #
Pour créer un contrat, il faut ajouter le paramètre document_type: CONTRACT dans l’objet principal du doctype ioi Sales Quote.
Méthode : POST
Requête : api/method/silicon_ioi.api.resource/ioi Sales Quote
→ Body :
{
"prefix_id": "CTC",
"document_date": "2023-10-12",
"ioistatus": 1,
"order_customer_id": "ASMA",
"delivery_customer_id": "ASMA",
"invoice_customer_id": "ASMA",
"currency_id": "EUR",
"document_type": "CONTRACT",
"my_data":{
"sales_condition_id": "NORMAL",
"sales_catalog_id": "STANDARD",
"delivery_condition_id": "NORMAL",
"language": "fr",
"external_ref": "TEST external ref",
"shipping_datetime": "2023-10-16 23:00:11.000",
"expected_arrival_on": "2023-10-23",
"responsible_id": "Administrator",
"base_discount": 0,
"extra_discount": 0,
"financial_discount": 0,
"vat_type": "NAT",
"wo_vat1": 810,
"wo_vat2": 0,
"wo_vat3": 0,
"wo_vat4": 0,
"wo_vat5": 0,
"base_vat1": 810,
"base_vat2": 0,
"base_vat3": 0,
"base_vat4": 0,
"base_vat5": 0,
"vat_type1": "NAT",
"rate_vat1": 21,
"rate_vat2": 0,
"rate_vat3": 0,
"rate_vat4": 0,
"rate_vat5": 0,
"vat1": 170.1,
"vat2": 0,
"vat3": 0,
"vat4": 0,
"vat5": 0,
"inc_vat1": 980.1,
"inc_vat2": 0,
"inc_vat3": 0,
"inc_vat4": 0,
"inc_vat5": 0,
"sales_agent_id": "ANDRE",
"credit_mode": 0,
"payment_term_id": "FDM,30,J",
"asked_arrival_date": "2015-10-13"
},
"line_detail": [{
"item_id": "B02-LAWNMOWER",
"unit_id": "PCS",
"quoted_qty": 5,
"my_data": {
"expected_arrival_on": "2023-10-20 12:30:45",
"warehouse_id": "BXL",
"spec_vat_rate": 21,
"to_execute": 0,
"shipping_datetime": "2023-10-15 18:57:11.000",
"weight": 1000,
"external_ref": 10,
"item_cost": 572.22,
"item_cost_std_stamp": 485.293105,
"value_paid": 810,
"barcode_reference": "1234567001609",
"reserved_qty": 10,
"free_part_qty": 0
}
}
]
}
Credit Note #
Pour créer une note de crédit, il faut ajouter le paramètre document_type: CNOTE dans l’objet principal du doctype ioi Sales Invoice.
Méthode : POST
Requête : api/method/silicon_ioi.api.resource/ioi Sales Invoice
→ Body :
{
"prefix_id": "NDC",
"document_date": "2023-10-12",
"ioistatus": 1,
//"order_customer_id": "VOLVO",
// "delivery_customer_id": "ASMA",
"invoice_customer_id": "ASMA",
"document_type": "CNOTE",
"currency_id": "EUR",
"my_data":{
"sales_condition_id": "DISTRIB",
"sales_catalog_id": "STANDARD",
"delivery_condition_id": "NORMAL",
"language": "fr",
"external_ref": "TEST external ref",
"shipping_datetime": "2023-10-16 23:00:11.000",
"expected_arrival_on": "2023-10-23",
"responsible_id": "Administrator",
"base_discount": 0,
"extra_discount": 0,
"financial_discount": 0,
"vat_type": "NAT",
"wo_vat1": 810,
"wo_vat2": 0,
"wo_vat3": 0,
"wo_vat4": 0,
"wo_vat5": 0,
"base_vat1": 810,
"base_vat2": 0,
"base_vat3": 0,
"base_vat4": 0,
"base_vat5": 0,
"vat_type1": "NAT",
"rate_vat1": 21,
"rate_vat2": 0,
"rate_vat3": 0,
"rate_vat4": 0,
"rate_vat5": 0,
"vat1": 170.1,
"vat2": 0,
"vat3": 0,
"vat4": 0,
"vat5": 0,
"inc_vat1": 980.1,
"inc_vat2": 0,
"inc_vat3": 0,
"inc_vat4": 0,
"inc_vat5": 0,
"sales_agent_id": "ANDRE",
"credit_mode": 0,
"payment_term_id": "FDM,30,J",
"asked_arrival_date": "2015-10-13"
},
"line_detail": [{
"sales_condition_id": "DISTRIB",
"sales_catalog_id": "STANDARD",
"item_id": "B02-LAWNMOWER",
"unit_id": "PCS",
"invoiced_qty": 1,
// "unit_price": 1350,
// "vat_type": "NAT",
"vat_rate": 21,
// "vat_code":
"my_data": {
"expected_arrival_on": "2023-10-20 12:30:45",
"warehouse_id": "BXL",
"spec_vat_rate": 21,
"to_execute": 0,
"shipping_datetime": "2023-10-15 18:57:11.000",
"weight": 1000,
"value_paid": 810,
"barcode_reference": "1234567001609",
"reserved_qty": 0,
"free_part_qty": 0
}
}
]
}