Mettre un contact à la corbeille et le restaurer
Envoyer des contacts à la corbeille, lire la corbeille, restaurer une fiche, ou la supprimer définitivement.
Un contact supprimé part d'abord à la corbeille, d'où il se restaure ; seule la suppression définitive le retire pour de bon. Le principe vaut pour toute fiche — voir Créer et modifier —, ce guide en donne les détails pour les contacts.
1Mettre à la corbeille
Un contact :
DELETE https://staging-api.docage.com/Contacts/00000000-0000-4000-8000-000000000201
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9…curl -X DELETE "https://staging-api.docage.com/Contacts/00000000-0000-4000-8000-000000000201" \
-H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9…"using HttpClient client = new();
using HttpRequestMessage request = new(HttpMethod.Delete, "https://staging-api.docage.com/Contacts/00000000-0000-4000-8000-000000000201");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
using HttpResponseMessage response = await client.SendAsync(request);
string result = await response.Content.ReadAsStringAsync();
if (!response.IsSuccessStatusCode)
throw new HttpRequestException(result);const response = await fetch("https://staging-api.docage.com/Contacts/00000000-0000-4000-8000-000000000201", {
method: "DELETE",
headers: {
Authorization: `Bearer ${token}`
}
});
const text = await response.text();
if (!response.ok) throw new Error(text);
const result = text ? JSON.parse(text) : null;200 : le contact est à la corbeille. 404 : il est introuvable, ou vous ne le voyez pas ; 403 : vous n'avez pas le droit de le
supprimer ; 409 : la corbeille le refuse encore, avec son motif.
Plusieurs contacts :
DELETE https://staging-api.docage.com/Contacts/BatchDelete
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9…
Content-Type: application/json
["00000000-0000-4000-8000-000000000201", "00000000-0000-4000-8000-000000000202"]curl -X DELETE "https://staging-api.docage.com/Contacts/BatchDelete" \
-H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9…" \
-H "Content-Type: application/json" \
-d '["00000000-0000-4000-8000-000000000201", "00000000-0000-4000-8000-000000000202"]'using HttpClient client = new();
using HttpRequestMessage request = new(HttpMethod.Delete, "https://staging-api.docage.com/Contacts/BatchDelete");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
request.Content = new StringContent("""
[
"00000000-0000-4000-8000-000000000201",
"00000000-0000-4000-8000-000000000202"
]
""", Encoding.UTF8, "application/json");
using HttpResponseMessage response = await client.SendAsync(request);
string result = await response.Content.ReadAsStringAsync();
if (!response.IsSuccessStatusCode)
throw new HttpRequestException(result);const response = await fetch("https://staging-api.docage.com/Contacts/BatchDelete", {
method: "DELETE",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json"
},
body: JSON.stringify(["00000000-0000-4000-8000-000000000201", "00000000-0000-4000-8000-000000000202"])
});
const text = await response.text();
if (!response.ok) throw new Error(text);
const result = text ? JSON.parse(text) : null;200 si tous sont partis. Sinon la réponse est un 400 qui nomme ceux qui sont refusés, un par ligne — et les autres sont bien à
la corbeille. Un contact introuvable et un contact que vous ne voyez pas reçoivent le même refus, qui ne cite que l'identifiant envoyé.
Rien ne part avec le contact : ses parcours, ses emails, ses cartes et ses conversations restent tels quels. Et mettre une société à la corbeille n'y met pas ses contacts.
2Lire la corbeille
La liste des contacts ne rend que les fiches actives : un contact à la corbeille n'y figure plus. La corbeille se lit par la même
liste, avec VisibleState à -2 :
QUERY https://staging-api.docage.com/Contacts
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9…
Content-Type: application/json
{ "VisibleState": -2, "SortOrder": "DeletionDate_Desc", "Take": 50 }curl -X QUERY "https://staging-api.docage.com/Contacts" \
-H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9…" \
-H "Content-Type: application/json" \
-d '{
"VisibleState": -2,
"SortOrder": "DeletionDate_Desc",
"Take": 50
}'using HttpClient client = new();
using HttpRequestMessage request = new(new HttpMethod("QUERY"), "https://staging-api.docage.com/Contacts");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
request.Content = new StringContent("""
{
"VisibleState": -2,
"SortOrder": "DeletionDate_Desc",
"Take": 50
}
""", Encoding.UTF8, "application/json");
using HttpResponseMessage response = await client.SendAsync(request);
string result = await response.Content.ReadAsStringAsync();
if (!response.IsSuccessStatusCode)
throw new HttpRequestException(result);const response = await fetch("https://staging-api.docage.com/Contacts", {
method: "QUERY",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"VisibleState": -2,
"SortOrder": "DeletionDate_Desc",
"Take": 50
})
});
const text = await response.text();
if (!response.ok) throw new Error(text);
const result = text ? JSON.parse(text) : null;Elle ne rend que les contacts que vous voyez, avec le filtre, le tri et la pagination d'une liste — voir Lire des listes.
Lu par son identifiant, un contact à la corbeille reste lisible : GET https://staging-api.docage.com/Contacts/{id} le rend avec EntityState à -2
(supprimé), la date de sa mise à la corbeille (DeletionDate) et l'identifiant de l'utilisateur qui l'y a mis (DeletionUserId).
Un contact à la corbeille ne se modifie plus : un PUT répond 403 (« Cette fiche est à la corbeille : restaurez-la avant de la
modifier »).
3Restaurer
PUT https://staging-api.docage.com/Contacts/BatchRestore
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9…
Content-Type: application/json
["00000000-0000-4000-8000-000000000201"]curl -X PUT "https://staging-api.docage.com/Contacts/BatchRestore" \
-H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9…" \
-H "Content-Type: application/json" \
-d '["00000000-0000-4000-8000-000000000201"]'using HttpClient client = new();
using HttpRequestMessage request = new(HttpMethod.Put, "https://staging-api.docage.com/Contacts/BatchRestore");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
request.Content = new StringContent("""
[
"00000000-0000-4000-8000-000000000201"
]
""", Encoding.UTF8, "application/json");
using HttpResponseMessage response = await client.SendAsync(request);
string result = await response.Content.ReadAsStringAsync();
if (!response.IsSuccessStatusCode)
throw new HttpRequestException(result);const response = await fetch("https://staging-api.docage.com/Contacts/BatchRestore", {
method: "PUT",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json"
},
body: JSON.stringify(["00000000-0000-4000-8000-000000000201"])
});
const text = await response.text();
if (!response.ok) throw new Error(text);
const result = text ? JSON.parse(text) : null;Restaurer demande le même droit que supprimer. Une fiche restaurée perd sa date et son auteur de suppression (DeletionDate et
DeletionUserId reviennent à null). Une fiche qui n'est pas à la corbeille n'est pas restaurée : la réponse est un 400 qui la
nomme, et les autres reviennent ; une fiche introuvable ou que vous ne voyez pas y reçoit le même refus que pour la mise à la corbeille.
4Supprimer définitivement
DELETE https://staging-api.docage.com/Contacts/BatchDefinitivelyDelete
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9…
Content-Type: application/json
["00000000-0000-4000-8000-000000000201"]curl -X DELETE "https://staging-api.docage.com/Contacts/BatchDefinitivelyDelete" \
-H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9…" \
-H "Content-Type: application/json" \
-d '["00000000-0000-4000-8000-000000000201"]'using HttpClient client = new();
using HttpRequestMessage request = new(HttpMethod.Delete, "https://staging-api.docage.com/Contacts/BatchDefinitivelyDelete");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
request.Content = new StringContent("""
[
"00000000-0000-4000-8000-000000000201"
]
""", Encoding.UTF8, "application/json");
using HttpResponseMessage response = await client.SendAsync(request);
string result = await response.Content.ReadAsStringAsync();
if (!response.IsSuccessStatusCode)
throw new HttpRequestException(result);const response = await fetch("https://staging-api.docage.com/Contacts/BatchDefinitivelyDelete", {
method: "DELETE",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json"
},
body: JSON.stringify(["00000000-0000-4000-8000-000000000201"])
});
const text = await response.text();
if (!response.ok) throw new Error(text);
const result = text ? JSON.parse(text) : null;Seulement des fiches déjà à la corbeille : si l'une n'y est pas, la réponse est un 400 qui la nomme, et rien n'est supprimé.
Sinon chaque fiche est traitée à part : une fiche introuvable ou que vous ne voyez pas (désignée par l'identifiant envoyé), ou que vous
n'avez pas le droit de supprimer, a sa ligne dans le 400, et les autres partent. C'est irréversible.
Attention
La suppression définitive retire la fiche de la base : son identifiant ne désigne plus rien, et GET https://staging-api.docage.com/Contacts/{id} rend
null. Mettez à jour votre outil avant de la demander.
Les pièges
- Un contact absorbé par une fusion de doublons n'est pas à la corbeille :
EntityStatey vaut-4, et il ne se restaure pas — la fusion se défait. Voir Traiter les doublons de contacts. - Pour retirer un contact d'un classeur sans le supprimer, voir Ranger des fiches dans un classeur.