Suivi (factures en échec)
Les rejets définitifs et qui agit dessus.
- Dans le bac à sable
En termes simples
La liste de suivi contient les factures qu’un canal a rejetées définitivement ou dont toutes les nouvelles tentatives ont échoué, avec ce qui ne va pas et qui agit. C’est là qu’intervient le service mensuel Suivi des rejets (Rejection Care). Nous ne renvoyons jamais un fichier rejeté tel quel : le client ou l’intégrateur corrige les données dans l’ERP, et une facture corrigée est soumise.
Une facture arrive sur la liste de suivi quand le canal la rejette définitivement, ou quand les nouvelles tentatives après des échecs temporaires sont épuisées. La liste indique ce qui ne va pas et qui agit. Nous ne renvoyons jamais un fichier rejeté tel quel : corrigez les données dans l’ERP et soumettez une facture corrigée. Le Suivi des rejets, forfait mensuel, s’appuie sur ces trois appels. Le niveau de service figure dans le contrat, pas ici.
La clé d’un client dotée de la portée read lit les lignes de son propre client. Marquer une ligne comme traitée relève du Suivi des rejets : la clé d’un client reçoit donc 403 pour cet appel.
La liste
GET /care renvoie une ligne par facture.
| Champ | Signification |
|---|---|
invoice_id | L’identifiant de la facture. |
invoice_ref | La référence propre à l’intégrateur. |
client, route | Le client et le canal de la facture. |
catalogue_code | Le code qui explique le rejet (voir erreurs). |
who_acts | Le responsable du code : erp, us, business, client, buyer ou route. |
field | Un emplacement du modèle canonique, tel que invoice.buyer_reference. Jamais une valeur. |
fix_hint | Ce qu’il faut modifier, d’après le rejet ou l’entrée du catalogue. |
age_seconds | Depuis combien de temps la facture est sur la liste. |
deadline_at | L’échéance indicative de la facture, quand elle en a une (voir lire une facture). |
handled | Si quelqu’un l’a marquée comme traitée. |
handled_at | Quand elle a été marquée. Présent seulement quand handled vaut true. |
Le paramètre de requête status choisit open, handled ou all (la valeur par défaut). La clé d’un client reçoit au plus ses 200 lignes les plus récentes, et truncated: true indique qu’il y en a davantage. Elle peut lister 30 fois par minute.
Remarque
La liste ne contient aucun corps de facture, pas plus que le journal.
curl "https://api-sandbox-eu.eurinvoice.com/care" \
-H "Authorization: Bearer <your-api-key>"import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder(URI.create("https://api-sandbox-eu.eurinvoice.com/care"))
.header("Authorization", "Bearer <your-api-key>")
.GET()
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
}
}const response = await fetch('https://api-sandbox-eu.eurinvoice.com/care', {
headers: {
Authorization: 'Bearer <your-api-key>',
},
});
console.log(response.status);
console.log(await response.text());{
"data": []
}La marquer comme traitée
POST /care/{id}/handled marque une ligne comme traitée et répond avec cette ligne. Un nouvel appel conserve le premier handled_at. Pour une facture absente de la liste, la réponse est 404. Seule la clé de l’opérateur peut l’appeler.
curl -X POST "https://api-sandbox-eu.eurinvoice.com/care/inv_unknown/handled" \
-H "Authorization: Bearer <your-api-key>"import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder(URI.create("https://api-sandbox-eu.eurinvoice.com/care/inv_unknown/handled"))
.header("Authorization", "Bearer <your-api-key>")
.POST(HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
}
}const response = await fetch('https://api-sandbox-eu.eurinvoice.com/care/inv_unknown/handled', {
method: 'POST',
headers: {
Authorization: 'Bearer <your-api-key>',
},
});
console.log(response.status);
console.log(await response.text());{
"type": "https://eurinvoice.com/problems/not-found",
"title": "This invoice is not on the care list",
"status": 404
}Exporter les preuves
GET /care/{id}/evidence renvoie les fichiers stockés pour la facture : invoice_id et une liste files, chacun avec son kind, son sha256 et le fichier lui-même en file_base64. Le fichier est l’original stocké : le corps figure donc dans cette réponse et non dans la liste. Pour une facture absente de la liste, la réponse est 404, de même pour la facture d’un autre client. La clé d’un client dotée de la portée read peut l’appeler 10 fois par minute. Au-delà de 8 MiB de fichiers au total, la réponse est 413 (evidence-too-large) ; lisez-les alors un par un avec GET /invoices/{id}/documents/{kind}.
curl "https://api-sandbox-eu.eurinvoice.com/care/inv_unknown/evidence" \
-H "Authorization: Bearer <your-api-key>"import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder(URI.create("https://api-sandbox-eu.eurinvoice.com/care/inv_unknown/evidence"))
.header("Authorization", "Bearer <your-api-key>")
.GET()
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
}
}const response = await fetch('https://api-sandbox-eu.eurinvoice.com/care/inv_unknown/evidence', {
headers: {
Authorization: 'Bearer <your-api-key>',
},
});
console.log(response.status);
console.log(await response.text());{
"type": "https://eurinvoice.com/problems/not-found",
"title": "This invoice is not on the care list",
"status": 404
}Réponses
| Statut | Signification |
|---|---|
200 | La liste, la ligne marquée, ou les preuves. |
401 | Aucune clé, ou une clé inconnue. |
403 | La clé n’a pas la portée read, ou la clé d’un client a tenté de marquer une ligne comme traitée. |
404 | La facture n’est pas sur la liste de suivi. |
413 | Les preuves dépassent 8 MiB au total (evidence-too-large). |
429 | Trop de requêtes pour la clé. Attendez Retry-After secondes. |