API REST pour les données comptables
Chaque document REDA Financials étant un objet personnalisé Salesforce, l’API REST standard est la porte d’entrée de vos intégrations : créez des factures depuis votre CRM ou votre système de facturation, interrogez les soldes pour les charger dans un entrepôt de données, comptabilisez des documents depuis un middleware — le tout avec les points de terminaison que votre équipe connaît déjà.
Le modèle de référence : créer un brouillon, puis comptabiliser
Insérer l’en-tête au statut Brouillon
Envoyez le document par POST (par exemple refin__Sales_Invoice__c) avec l’entité, le client et les dates — statut omis (Brouillon par défaut) ou explicitement à la valeur 'Draft'. Les déclencheurs se comportent exactement comme dans l’interface : numéro de document attribué à partir de la séquence de l’entité, grand livre et période déduits, date d’échéance calculée à partir des conditions de paiement.
Insérer les lignes
Envoyez par POST les enregistrements de ligne (refin__Sales_Invoice_Line__c) qui référencent l’en-tête — produits, quantités, prix, profils fiscaux : exactement les champs que demande le formulaire. (L’API composite regroupe proprement les étapes 1 et 2 en un seul appel.)
Passer le statut à Comptabilisé par un PATCH
Mettez à jour refin__Status__c avec la valeur 'Posted'. Cette simple mise à jour de champ est l’action de comptabilisation : le moteur passe les écritures au grand livre, calcule la taxe et la retenue à la source, enregistre les taux de change — et applique chaque contrôle (équilibre, période ouverte, approbation, comptes actifs). Une comptabilisation refusée revient sous la forme d’une erreur DML standard, avec mot pour mot le message qu’un utilisateur verrait.
Les points de terminaison en un coup d’œil
Rien ici n’est propre à REDA — ce sont les points de terminaison REST standard de Salesforce, appliqués aux objets refin__ (le package est construit en API v65.0 ; toute version actuelle fonctionne) :
| Tâche | Méthode et point de terminaison |
|---|---|
| Créer un en-tête de document | POST /services/data/v65.0/sobjects/refin__Sales_Invoice__c |
| Lire un enregistrement | GET /services/data/v65.0/sobjects/refin__Sales_Invoice__c/{id} |
| Mettre à jour (comptabilisation comprise) | PATCH /services/data/v65.0/sobjects/refin__Sales_Invoice__c/{id} |
| Exécuter une requête | GET /services/data/v65.0/query?q=<SOQL> |
| En-tête + lignes en un seul aller-retour | POST /services/data/v65.0/composite (ou composite/tree) |
| Découvrir les champs et les listes de sélection | GET /services/data/v65.0/sobjects/refin__Sales_Invoice__c/describe |
Comptabiliser un brouillon : la requête HTTP
L’appel de comptabilisation est volontairement sans surprise — un seul champ :
PATCH /services/data/v65.0/sobjects/refin__Sales_Invoice__c/a0X8d000001AbCdEAV
{
"refin__Status__c": "Posted"
}
Un succès renvoie un HTTP 204 No Content — et, derrière, un document entièrement comptabilisé. Un refus revient sous la forme du tableau d’erreurs standard, porteur du message lisible du package ; par exemple, un utilisateur d’intégration sans siège de licence REDA reçoit :
[
{
"message": "You must be a licensed REDA Financials user to create, edit, or delete Accounting Transactions. Contact your administrator.",
"errorCode": "FIELD_CUSTOM_VALIDATION_EXCEPTION",
"fields": []
}
]
Pour relire ce que vous avez créé, une simple requête SOQL suffit :
GET /services/data/v65.0/query
?q=SELECT Id, Name, refin__Status__c
FROM refin__Sales_Invoice__c
WHERE refin__Status__c = 'Draft'
Pour le corps des requêtes d’insertion, récupérez la liste des champs depuis le point de terminaison describe ou le Gestionnaire d’objet plutôt que dans cet article — ce sont les ensembles de champs et les champs obligatoires de votre organisation qui font foi, y compris les champs de dimension supplémentaires ajoutés par votre administrateur.
Ce que la plateforme renseigne pour vous
| Lors de… | Les déclencheurs… | Conséquence pour l’intégration |
|---|---|---|
| Insertion sans statut | Le Statut prend la valeur Brouillon par défaut | Vous pouvez omettre refin__Status__c à la création |
| Insertion | Numéro de document attribué à partir de la séquence de l’entité (selon le type — factures et avoirs sont numérotés séparément) ; renseigner Name à l’avance active la numérotation manuelle, l’unicité étant contrôlée dans les deux cas | Ne générez pas vos propres numéros, sauf si vous comptez en assumer la gestion |
| Insertion | Les valeurs par défaut de l’entité sont appliquées : grand livre, période comptable, date d’échéance selon la condition de paiement du fournisseur | Envoyez les champs métier ; omettez ceux qui peuvent être déduits |
| Modification de l’Entité ou du Type de facture sur un brouillon | Le document reçoit un nouveau numéro de séquence | Attendez-vous à un nouveau numéro si votre middleware « déplace » un brouillon d’une entité à une autre |
| Brouillon → Comptabilisé | Le moteur complet : écritures au grand livre, calcul de la taxe et de la retenue à la source, enregistrement des taux de change, tous les contrôles | Comptabiliser via l’API équivaut, à l’octet près, à comptabiliser depuis l’interface |
Lire les données
- SOQL via le point de terminaison query — factures ouvertes, encaissements non imputés, champs de balance âgée (ce sont des champs de formule sur les enregistrements) : tout ce dont votre tableau de bord a besoin.
- Le grand livre lui-même —
refin__Accounting_Transaction__cfait foi pour la comptabilisation ; additionnez débits et crédits par compte général et vous reconstituez n’importe quel solde à l’extérieur. - Les cumuls sont des champs — le solde dû d’une facture, le montant non imputé d’un encaissement, le montant engagé d’une ligne budgétaire : tout s’interroge directement, sans calcul de votre côté.
Les règles à respecter
- Aucun contournement n’existe : les documents comptabilisés sont verrouillés pour les modifications via l’API exactement comme pour les utilisateurs ; les corrections passent par les parcours de décomptabilisation ou d’annulation, soit, par programme, les mêmes transitions de statut.
- Les imputations sont aussi des enregistrements — créer un
refin__Cash_Receipt_Application__cimpute un encaissement (tous les contrôles de correspondance s’exécutent) ; le supprimer annule l’imputation. - Respectez les dates de clôture — les opérations d’écriture dans des livres clôturés sont refusées ; votre intégration doit dater les documents dans des périodes ouvertes, comme le ferait tout comptable.
- L’idempotence vous incombe — la clé naturelle est la référence de votre système source (placez-la dans le champ Référence et vérifiez-la avant l’insertion ; côté comptes fournisseurs, la validation des doublons sur la référence fournisseur vous y aide).
Erreurs courantes à éviter
| Erreur | Pourquoi c’est un problème | À faire à la place |
|---|---|---|
| Insérer des documents directement au Statut Comptabilisé en un seul appel | La comptabilisation est conçue autour de la transition Brouillon → Comptabilisé ; une insertion directe au statut Comptabilisé sort du modèle pris en charge et son comportement n’est pas garanti | Insérez en Brouillon, puis passez à Comptabilisé par un PATCH — l’API composite en fait de toute façon un seul aller-retour |
| Générer vos propres numéros de document à la légère | Renseigner Name à l’avance fait passer ce document en numérotation manuelle — l’unicité devient alors votre responsabilité, entité par entité | Laissez les séquences numéroter les documents ; réservez la numérotation manuelle à des scénarios de migration délibérés |
| Exécuter l’intégration avec un identifiant d’administrateur emprunté | Les pistes d’audit deviennent floues, les changements de mot de passe interrompent le flux et les autorisations dépassent de loin ce qu’exige la tâche | Un utilisateur d’intégration dédié, doté d’un siège de licence et de l’ensemble d’autorisations du package le plus restreint qui permette de faire le travail |
| Relancer aveuglément les comptabilisations en échec | Le message vous a indiqué la cause de l’échec — sur une période clôturée, chaque nouvelle tentative se heurtera indéfiniment au même mur | Analysez l’erreur, corrigez les données (ou transmettez à une personne), puis relancez |
| Négliger le champ Référence | Vous perdez votre clé d’idempotence et le meilleur critère de correspondance du rapprochement bancaire | Reportez toujours l’identifiant réel du système source dans le champ Référence |
Pour aller plus loin
- API Bulk (import/export de données) — le même modèle à l’échelle d’une migration.
- Présentation de l’API — le panorama complet.
- Soldes d’ouverture et migration des données — le projet REST/Bulk par excellence.
Questions fréquentes
Utilisez la méthode en deux temps (insertion en Brouillon, puis mise à jour à Comptabilisé) — c’est le modèle autour duquel le moteur est conçu, elle sépare nettement les erreurs « données incorrectes » des erreurs « comptabilisation refusée », et elle reproduit l’enregistrement puis la comptabilisation de l’interface. Les appels composites en font de toute façon un seul aller-retour.
Ce sont des erreurs DML standard qui reprennent mot pour mot les messages de validation du package (« La date de transaction … est antérieure ou égale à la date de clôture des livres GL… », « Ce document exige une approbation avant comptabilisation. »). Journalisez-les, faites-les remonter, corrigez les données — les messages sont rédigés pour des humains.
Le package cible l’API v65+ ; utilisez une version actuelle et les objets refin__ se comportent comme n’importe quel objet personnalisé dans cette version.
Oui, s’il crée ou comptabilise des documents comptables — le contrôle de licence s’applique aux opérations d’écriture via l’API exactement comme dans l’interface, et un utilisateur sans siège est refusé avec le message exact présenté ci-dessus. Attribuez un siège et l’ensemble d’autorisations approprié à l’utilisateur d’intégration, comme vous le feriez pour une personne.
Non — par conception, le package ne livre aucune ressource REST personnalisée. Les points de terminaison standard sObject, query et composite appliqués aux objets refin__ constituent l’intégralité de la surface REST : tout client REST Salesforce, tout outil ETL et tout connecteur de middleware la parle donc déjà.
Cet article vous a-t-il été utile ?