Commencer
Authentification
Chaque requête sur les routes
/v1 transmet une clé API en tant que jeton Bearer. GET/health est la seule route publique.Créer une clé
Créez vos clés sur app.callshift.ai/api-keys, une par intégration, au nom de celle-ci (Synchro CRM, Scénario Make), pour pouvoir en révoquer une sans arrêter les autres. C'est aussi là que vous révoquez une clé.
L'envoyer
curl "https://api.callshift.ai/v1/agents" \
-H "Authorization: Bearer $CALLSHIFT_API_KEY"const res = await fetch("https://api.callshift.ai/v1/agents", {
headers: { Authorization: `Bearer ${process.env.CALLSHIFT_API_KEY}` },
});import os
import requests
res = requests.get(
"https://api.callshift.ai/v1/agents",
headers={"Authorization": f"Bearer {os.environ['CALLSHIFT_API_KEY']}"},
)Sans clé, ou avec une clé inconnue, l'API répond 401 :
{ "error": "Authentication error" }Ce à quoi une clé donne accès
Une clé agit sur tout le compte : chaque agent, numéro, campagne et appel, quelle que soit l'entité à laquelle il appartient. Les entités organisent un compte ; elles ne restreignent pas une clé.
Gardez les clés côté serveur
Ne mettez jamais une clé dans une page web, une application mobile ou un fichier que vous partagez. Une clé qui s'est retrouvée dans un chat, un ticket ou une capture d'écran doit être révoquée et remplacée.
Conventions
| Élément | Format |
|---|---|
| URL de base | https://api.callshift.ai, corps de requête et de réponse en JSON |
| Identifiants | Des UUID. Vos propres identifiants vont dans l'externalId d'une entité ou dans les metadata d'un contact. |
| Horodatages | ISO 8601 en UTC, par exemple 2026-10-30T09:12:00.000Z. Les filtres de date exigent la date et l'heure complètes. |
| Numéros de téléphone | E.164, par exemple +33612345678. Envoyez-les normalisés : les contacts sont identifiés par leur numéro. |
| Montants | Entiers en centimes d'euro (costEstimationCents, totalCents). |
| Durées | En secondes (billingSeconds, maxDurationSeconds). |
| Booléens en paramètre de requête | Les chaînes true et false, par exemple ?isReached=true. |
| Partagé ou dans une entité | entityId ou entityExternalId ; null signifie partagé. Voir Entités. |
