OLI

SUPPLIER PORTAL – API Explorer

Portail interne des API – OLI Liberia.

API online Environnement : DEV

Liste des endpoints Flask détectés automatiquement via app.url_map.

Endpoints (89)

Méthodes
Path
Endpoint
Description
GET
/
api_index

Page d'accueil de la documentation minimaliste de l'API.

GET
/accounting-viewer/dashboard
get_accounting_viewer_dashboard

📊 Récupérer les statistiques pour le dashboard de la comptabilité Accessible par: ACCOUNTING_VIEWER, ADMIN, SUPER_ADMIN Réponse: Statistiques sur les soumissions

GET
/accounting-viewer/submissions/<int:submission_id>/documents
get_submission_documents

📥 Récupérer tous les documents d'une soumission en base64 Accessible par: ACCOUNTING_VIEWER, ADMIN, SUPER_ADMIN Réponse: Tous les documents de la soumission en base64

POST
/accounting-viewer/submissions/<int:submission_id>/notes
update_accounting_notes

📝 Ajouter ou mettre à jour les notes comptables sur une soumission Body: { "data": { "notes": "Documents vérifiés, tout est conforme" } }

GET
/accounting-viewer/submissions/<int:submission_id>/status
get_submission_accounting_status

🔍 Récupérer le statut comptable d'une soumission Accessible par: ACCOUNTING_VIEWER, ADMIN, SUPER_ADMIN Réponse: Statut détaillé de la soumission

POST
/accounting-viewer/submissions/list
get_accounting_viewer_submissions

📋 Récupérer la liste des soumissions pour la comptabilité Accessible par: ACCOUNTING_VIEWER, ADMIN, SUPER_ADMIN Body: { "filters": { "status": "pending", // "pending", "downloaded", "all" "department_id": 3, "from_date": "2026-01-01", "to_date": "2026-12-31", "search": "INV-2025" }, "include_documents": true, // Inclure les documents en base64 "index": 0, "size": 20 } Réponse: Soumissions avec documents en base64

POST
/accounting-viewer/submissions/mark-downloaded
mark_submission_downloaded

✅ Marquer une soumission comme téléchargée/traitée par la comptabilité Body: { "data": { "submission_id": 1, "notes": "Documents vérifiés et archivés", // Optionnel "mark_as_paid": false // Optionnel - si true, change le statut en PAID } } Réponse: Soumission mise à jour avec les documents en base64

GET POST
/all/department
get_departements

Récupère les départements depuis notre base de données locale (synchronisée avec HRIS)

GET
/apidocs/
flasgger.apidocs

The /apidocs

GET
/apidocs/index.html
flasgger.<lambda>

Aucune description (ajoute un docstring à la vue).

GET
/apispec_1.json
flasgger.apispec_1

The /apispec_1.json and other specs

POST
/approval_step/create
create_approval_step

✅ Créer une ou plusieurs étapes d'approbation Accessible par: ADMIN, SUPER_ADMIN Body: { "datas": [ { "name": "DEPARTMENT_REVIEW", "step_order": 1, "is_active": true } ] }

POST
/approval_step/delete
delete_approval_step

🗑️ Supprimer (soft delete) une ou plusieurs étapes d'approbation Body: { "datas": [ { "id": 1 } ] }

GET
/approval_step/getActive
get_active_approval_steps

⚡ Récupérer toutes les étapes d'approbation actives (utilisé par le workflow à la création d'une soumission)

POST
/approval_step/getByCriteria
get_approval_steps

📋 Lister/rechercher les étapes d'approbation Body: { "data": { "search_string": "DEPARTMENT", "is_active": true }, "index": 0, "size": 20 }

POST
/approval_step/getOne
get_one_approval_step

🔍 Récupérer une étape d'approbation par ID Body: { "data": { "id": 1 } }

POST
/approval_step/reorder
reorder_approval_steps

🔄 Réorganiser l'ordre des étapes d'approbation Body: { "data": { "steps": [ {"id": 3, "step_order": 1}, {"id": 1, "step_order": 2}, {"id": 2, "step_order": 3} ] } }

POST
/approval_step/toggle
toggle_approval_step

🔄 Activer/désactiver une étape d'approbation Body: { "data": { "id": 1, "is_active": false } }

POST
/approval_step/update
update_approval_step

✏️ Mettre à jour une ou plusieurs étapes d'approbation Body: { "datas": [ { "id": 1, "name": "DEPARTMENT_HEAD_REVIEW", "step_order": 1, "is_active": true } ] }

POST
/audit/getByCriteria
get_audit_logs

Get audit logs by criteria

POST
/dashboard/admin/kpi
get_admin_kpi_dashboard

Récupérer tous les KPI pour le dashboard admin Body: { "data": { "period": "month", // "week", "month", "quarter", "year", ou dates personnalisées "start_date": "01/01/2024", // optionnel si period spécifié "end_date": "31/12/2024" // optionnel si period spécifié } }

POST
/department/create
create_department

Créer un ou plusieurs départements Accessible par: ADMIN, SUPER_ADMIN Body: { "datas": [ { "name": "Ressources Humaines", "cost_center": "RH-006", "email": "rh@orange.com.lr", "phone": "+231 77 999 9999" } ] }

POST
/department/delete
delete_department

Supprimer (soft delete) un ou plusieurs départements Body: { "datas": [ {"id": 3} ] }

POST
/department/getByCriteria
get_departments

Récupérer la liste des départements avec pagination Accessible par: ADMIN, SUPER_ADMIN, DEPARTMENT_HEAD, FINANCE_MANAGER Body: { "data": { "search_string": "achats", // Optionnel "is_active": true // Optionnel }, "index": 0, "size": 10 } Réponse: { "items": [ { "id": 3, "name": "Achats", "cost_center": "ACH-003", "email": "achats@orange.com.lr", "phone": "+231 77 345 6789", "is_active": true, "created_at": "17/02/2026 10:00:00" } ], "count": 1 }

POST
/department/getOne
get_one_department

Récupérer les détails d'un département Body: { "data": { "id": 3 } } Réponse: Détails complets + liste des membres

POST
/department/members/add
add_department_member

🎯 ENDPOINT PRINCIPAL - Ajouter un membre à un département Accessible par: ADMIN, SUPER_ADMIN Body: { "data": { "department_id": 3, "user_id": 5, "position": "Head" // Options: "Head", "Manager", "Member" } } Réponse: { "items": [{ "id": 10, "department_id": 3, "user_id": 5, "position": "Head", "created_at": "17/02/2026 14:30:00", "department": {...}, "user": {...} }] }

POST
/department/members/getAllUsers
get_all_users_for_department_assignment

Récupérer tous les utilisateurs disponibles pour assignation à un département Filtre optionnel pour exclure les membres déjà assignés à un département spécifique Body: { "data": { "department_id": 3, // Optionnel - exclut les membres déjà dans ce département "role_filter": "DEPARTMENT_HEAD" // Optionnel - filtre par rôle }, "index": 0, "size": 50 }

POST
/department/members/getByUser
get_user_departments

Lister tous les départements d'un utilisateur Body: { "data": { "user_id": 3 } }

POST
/department/members/getHead
get_department_head

Récupérer le Head d'un département Body: { "data": { "department_id": 3 } } Réponse: { "items": [{ "id": 10, "position": "Head", "user": { "id": 3, "first_name": "Jean", "last_name": "Dupont", "email": "jean@orange.com.lr" } }] }

POST
/department/members/list
list_department_members

Lister tous les membres d'un département Body: { "data": { "department_id": 3 } } Réponse: Liste complète avec détails utilisateur et rôle

POST
/department/members/remove
remove_department_member

Retirer un membre d'un département (soft delete) Body: { "data": { "member_id": 10 } }

POST
/department/members/updatePosition
update_member_position

Modifier la position d'un membre Body: { "data": { "member_id": 10, "position": "Manager" } }

POST
/department/update
update_department

Mettre à jour un ou plusieurs départements Body: { "datas": [ { "id": 3, "name": "Achats et Approvisionnements", "email": "achats.new@orange.com.lr" } ] }

POST
/dispute/create
create_dispute

Créer un nouveau litige

POST
/dispute/getByCriteria
get_disputes

Récupérer les litiges par critères

POST
/dispute/resolve
resolve_dispute

Résoudre un litige

GET
/dispute/stats
get_dispute_stats

Obtenir des statistiques sur les litiges

GET
/flasgger_static/<path:filename>
flasgger.static

The view function used to serve files from :attr:`static_folder`. A route is automatically registered for this view at :attr:`static_url_path` if :attr:`static_folder` is set. Note this is a duplicate of the same method in the Flask class. .. versionadded:: 0.5

POST
/fonctionalite/create
create_fonctionalite

Aucune description (ajoute un docstring à la vue).

POST
/fonctionalite/delete
delete_fonctionalite

Aucune description (ajoute un docstring à la vue).

POST
/fonctionalite/getByCriteria
get_fonctionalite

Aucune description (ajoute un docstring à la vue).

POST
/fonctionalite/update
update_fonctionalite

Aucune description (ajoute un docstring à la vue).

POST
/message/getBySubmission
get_messages_by_submission

Get messages for a submission

POST
/message/send
send_message

Send message regarding a submission

POST
/notification/getByUser
get_user_notifications

Get notifications for current user

POST
/notification/markAsRead
mark_notification_as_read

Mark notification as read

POST
/notification/sendEmail
send_email_notification

Send email notification

GET
/oauth2-redirect.html
flasgger.oauth_redirect

The OAuth2 redirect HTML for Swagger UI standard/implicit flow

POST
/reminder/cancel
cancel_reminder

Cancel a scheduled reminder

POST
/reminder/getBySubmission
get_reminders_by_submission

Get all reminders for a specific submission

GET
/reminder/getByUser
get_my_reminders

Get all pending reminders for the current user based on their role

GET
/reminder/stats
get_reminder_stats

Get statistics about reminders

POST
/role/create
create_role

Aucune description (ajoute un docstring à la vue).

POST
/role/delete
delete_role

Aucune description (ajoute un docstring à la vue).

POST
/role/getByCriteria
get_role

Aucune description (ajoute un docstring à la vue).

POST
/role/update
update_role

Aucune description (ajoute un docstring à la vue).

POST
/supplier/create
create_supplier

Créer un fournisseur ET son administrateur en une seule transaction Accessible uniquement par SUPER_ADMIN ou ADMIN Body: { "data": { "code": "001", "legal_name": "Namaya Cooperation", "trade_name": "Samuel Namayan", "tax_id": "TIN-004", "email": "samuel.namayan@orange.com", "phone": "+231777777485", "address": "Monrovia Liberia", "status": "ACTIVE" } } L'administrateur sera créé automatiquement avec les mêmes informations : - first_name: première partie du nom (avant espace) ou "Admin" - last_name: reste du nom ou nom de l'entreprise - email: le même email que le fournisseur - telephone: le même téléphone que le fournisseur - position: "Administrator" par défaut Les notifications (email + SMS) sont TOUJOURS envoyées avec les identifiants de connexion.

POST
/supplier/create-with-admin
create_supplier_with_admin

Créer un fournisseur ET son administrateur en une seule transaction Accessible uniquement par SUPER_ADMIN ou ADMIN Body: { "data": { "supplier": { "code": "SUP001", "legal_name": "ABC Corporation", "trade_name": "ABC", "tax_id": "TAX123456", "email": "contact@abc.com", "phone": "+231 77 123 4567", "address": "Monrovia, Liberia", "website": "https://www.abc.com" }, "admin_user": { "first_name": "John", "last_name": "Doe", "email": "john.doe@abc.com", "telephone": "+231 77 765 4321", "position": "Manager" }, "send_notifications": true } }

POST
/supplier/dashboard
get_supplier_dashboard

Récupérer les statistiques du tableau de bord pour un supplier admin Body: { "data": { "period_days": 30 // Optionnel, défaut 30 jours } }

POST
/supplier/delete
delete_supplier

Supprimer (soft delete) un fournisseur Accessible uniquement par SUPER_ADMIN ou ADMIN

POST
/supplier/getByCriteria
get_suppliers

Récupérer les fournisseurs avec critères de recherche Accessible par: SUPER_ADMIN, ADMIN, SUPPLIER_ADMIN (limité à son propre supplier) Body: { "data": { "search_string": "ABC", "status": "ACTIVE", "code": "SUP001", "legal_name": "ABC Corporation", "created_from": "01/01/2024", "created_to": "31/12/2024", "include_users": true // Inclure les utilisateurs du supplier }, "index": 0, "size": 10 }

POST
/supplier/getOne
get_one_supplier

Récupérer les détails complets d'un fournisseur Body: { "data": { "id": 1, "include_users": true, "include_submissions": true, "include_payments": true } }

POST
/supplier/update
update_supplier

Mettre à jour un fournisseur existant Accessible par: SUPER_ADMIN, ADMIN, SUPPLIER_ADMIN (limité à son supplier)

POST
/supplier/users/add
add_supplier_user

Ajouter un utilisateur (admin) à un fournisseur Accessible par: SUPER_ADMIN, ADMIN, SUPPLIER_ADMIN (pour son supplier) Body: { "data": { "supplier_id": 1, "user_data": { "first_name": "Jane", "last_name": "Smith", "email": "jane.smith@abc.com", "telephone": "+231 77 555 1234", "position": "Accountant" }, "is_primary_contact": false, "send_notifications": true } }

POST
/supplier/users/getBySupplier
get_supplier_users

Récupérer les utilisateurs d'un fournisseur Ou un utilisateur spécifique si user_id ou supplier_user_id est fourni Body: { "data": { "supplier_id": 1, // Optionnel si user_id fourni "user_id": 25, // Optionnel - pour un user spécifique "supplier_user_id": 8, // Optionnel - pour une relation spécifique "search_string": "John", // Optionnel "include_inactive": false // Optionnel }, "index": 0, "size": 20 }

POST
/supplier/users/remove
remove_supplier_user

Retirer un utilisateur d'un fournisseur (soft delete) Body: { "data": { "supplier_user_id": 5 } }

POST
/supplier/users/reset-password
reset_supplier_user_password

Réinitialiser le mot de passe d'un utilisateur fournisseur Body: { "data": { "supplier_user_id": 5, "send_notifications": true } }

POST
/supplier/users/update
update_supplier_user

Mettre à jour un utilisateur fournisseur Body: { "data": { "supplier_user_id": 5, "user_data": { "first_name": "Jane", "last_name": "Smith", "telephone": "+231 77 555 4321", "position": "Senior Accountant" }, "is_primary_contact": true } }

POST
/user/create
create_user

Aucune description (ajoute un docstring à la vue).

POST
/user/delete
delete_user

Aucune description (ajoute un docstring à la vue).

POST
/user/forgot_password
forgot_password

Aucune description (ajoute un docstring à la vue).

POST
/user/forgot_password_confirm
forgot_password_confirm

Aucune description (ajoute un docstring à la vue).

POST
/user/getByCriteria
get_user

Aucune description (ajoute un docstring à la vue).

GET
/user/get_user_session
get_user_session_api

Aucune description (ajoute un docstring à la vue).

POST
/user/login
login_user

Aucune description (ajoute un docstring à la vue).

POST
/user/rest_password
rest_password

Aucune description (ajoute un docstring à la vue).

POST
/user/update
update_user

Aucune description (ajoute un docstring à la vue).

POST
/user/validation_otp
validation_otp

Aucune description (ajoute un docstring à la vue).

POST
/workflow/accounting/process-payment
process_payment_with_proof

Process payment for a submission with payment proof PDF Body (JSON): { "data": { "submission_id": 123, "payment_reference": "PAY-2025-001", "payment_method": "BANK_TRANSFER", "notes": "Payment processed" }, "payment_proof": { "file_name": "payment_proof.pdf", "file_base64": "data:application/pdf;base64,JVBERi0..." } }

POST
/workflow/accounting/verify
accounting_verify_submission

Accounting verification of a submission Accessible only to accounts payable users

POST
/workflow/department/verify
department_verify_submission

Department verification of a submission Accessible only to department heads

POST
/workflow/finance/verify
finance_verify_submission

Finance verification of a submission Accessible only to finance users

GET
/workflow/submission/<int:submission_id>
get_submission_details

Get submission details with fresh URLs and base64 content

POST
/workflow/submission/<int:submission_id>/payments
get_submission_payments_with_options

Get payments for a specific submission with options Body: { "include_base64": true, # Toujours inclure le base64 "include_urls": true, "expires": 3600 }

POST
/workflow/submission/<int:submission_id>/refresh-urls
refresh_submission_urls

Refresh document URLs for a submission Body: { "data": { "expires": 3600 } }

POST
/workflow/submission/create
create_submission_workflow_v2

Create a submission with optional documents (Invoice, Delivery Note, PO Document) At least one document is required. Body (JSON): { "data": { "submission_type": "INVOICE", "reference_number": "INV-2025-001", "description": "Invoice for January 2025" }, "documents": { "invoice": { "file_name": "invoice_january.pdf", "file_base64": "data:application/pdf;base64,JVBERi0..." }, "delivery_note": { "file_name": "delivery_note_january.pdf", "file_base64": "data:application/pdf;base64,JVBERi0..." }, "po_document": { "file_name": "po_january.pdf", "file_base64": "data:application/pdf;base64,JVBERi0..." } } } Note: At least one of invoice, delivery_note, or po_document must be provided.

POST
/workflow/submission/update-and-verify
update_and_verify_submission

Update a submission with missing information and trigger finance verification. Accessible by: ADMIN, FINANCE, FINANCE_MANAGER Body: { "data": { "submission_id": 1, "action": "APPROVE", "department_id": 3, "amount": 1500.00, "currency": "USD", "due_date": "2026-04-15", "po_id": 12, "notes": "Verified by finance", "reason": "Document non conforme" } }

POST
/workflow/submissions/all
get_all_submissions

Get all submissions with complete details including all documents and payment proofs Accessible by: ADMIN, SUPER_ADMIN, FINANCE, FINANCE_MANAGER, DEPARTMENT_HEAD, ACCOUNTS_PAYABLE (NOT accessible by SUPPLIER_ADMIN) Body (optional filters): { "filters": { "status": ["SUBMITTED", "FINANCE_PENDING"], // Filter by status(es) "supplier_id": 1, // Filter by supplier "department_id": 3, // Filter by department "from_date": "2026-01-01", // Filter by submission date "to_date": "2026-12-31", "has_payment_proof": true, // Only submissions with payment proof "search": "INV-2025" // Search in reference/description }, "include_base64": true, // Include base64 content of documents "include_urls": true, // Include presigned URLs "expires": 3600, // URL expiration in seconds "index": 0, // Pagination index "size": 20 // Page size } Returns: List of submissions with all documents, payment proofs, approval history, etc.

GET
/workflow/submissions/pending
get_pending_submissions

Get pending submissions based on user role