Quotas et limites d'utilisation de l'API.
Oquira impose des limites de taux sur les requêtes API pour assurer la stabilité du système, une utilisation équitable et une protection contre les abus. Comprendre ces limites vous aidera à concevoir des intégrations robustes.
Chaque clé API a des limites de taux dédiées basées sur votre forfait d'abonnement :
| Forfait | Requêtes/minute | Requêtes/jour |
|---|---|---|
| Gratuit | 60 | 1 000 |
| Starter | 300 | 10 000 |
| Business | 1 000 | 100 000 |
| Enterprise | Personnalisé | Personnalisé |
Une limite de taux secondaire s'applique par adresse IP pour prévenir les abus :
Chaque réponse API inclut des informations de limite de taux dans les en-têtes :
| En-tête | Description |
|---|---|
X-RateLimit-Limit | Nombre maximum de requêtes autorisées dans la fenêtre actuelle |
X-RateLimit-Remaining | Nombre de requêtes restantes dans la fenêtre actuelle |
X-RateLimit-Reset | Timestamp Unix quand la fenêtre actuelle se réinitialise |
Retry-After | Secondes à attendre avant de réessayer (uniquement sur réponses 429) |
HTTP/1.1 200 OK
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 847
X-RateLimit-Reset: 1710936000Lors de l'utilisation de clés API, des en-têtes supplémentaires fournissent des informations d'utilisation spécifiques à la clé :
| En-tête | Description |
|---|---|
X-API-RateLimit-Limit | Total de requêtes autorisées pour cette clé API par fenêtre |
X-API-RateLimit-Remaining | Requêtes restantes pour cette clé API |
X-API-RateLimit-Reset | Quand la limite de la clé API se réinitialise (epoch UTC) |
Lorsque vous dépassez la limite de taux, l'API retourne un statut 429 Too Many Requests :
{
"success": false,
"error": {
"code": "API_RATE_LIMIT_EXCEEDED",
"message": "Limite de taux dépassée. Veuillez patienter avant de faire plus de requêtes.",
"details": {
"retryAfter": 30,
"limit": 1000,
"reset": "2024-03-20T10:01:00Z"
},
"timestamp": "2024-03-20T10:00:30.000Z",
"requestId": "req_5f2b8c9d1e"
}
}Vérifiez l'en-tête X-RateLimit-Remaining dans les réponses pour suivre vos limites approchantes.
const response = await fetch("https://api.oquira.com/v1/business/queues", {
headers: { Authorization: `Bearer ${apiKey}` },
});
const remaining = response.headers.get("X-RateLimit-Remaining");
if (remaining < 100) {
console.warn(`Limite de taux basse : ${remaining} requêtes restantes`);
}Lorsque vous recevez une réponse 429, attendez avant de réessayer :
async function apiCallWithRetry(url, options, maxRetries = 3) {
for (let attempt = 0; attempt < maxRetries; attempt++) {
const response = await fetch(url, options);
if (response.status === 429) {
const retryAfter = response.headers.get("Retry-After") || 30;
const delay = Math.pow(2, attempt) * 1000; // Backoff exponentiel
await new Promise((resolve) => setTimeout(resolve, delay));
continue;
}
return response;
}
throw new Error("Nombre maximum de tentatives dépassé");
}Évitez les appels API redondants en mettant en cache les données qui ne changent pas fréquemment :
const cache = new Map();
const CACHE_TTL = 60000; // 1 minute
async function getCachedData(key, fetchFn) {
const cached = cache.get(key);
if (cached && Date.now() - cached.timestamp < CACHE_TTL) {
return cached.data;
}
const data = await fetchFn();
cache.set(key, { data, timestamp: Date.now() });
return data;
}Au lieu de polluer les endpoints pour des changements, abonnez-vous aux webhooks :
Voir Webhooks pour les instructions de configuration.
Certains endpoints supportent les opérations par lot qui réduisent le nombre d'appels API :
# Au lieu de plusieurs appels :
# curl -X GET "https://api.oquira.com/v1/business/services/srv_1" ...
# curl -X GET "https://api.oquira.com/v1/business/services/srv_2" ...
# curl -X GET "https://api.oquira.com/v1/business/services/srv_3" ...
# Utilisez un seul appel de liste avec des filtres :
curl -X GET "https://api.oquira.com/v1/business/services?ids=srv_1,srv_2,srv_3" \
-H "X-API-Key: votre_cle_api"Pour les applications à haut volume, mettez en file d'attente et throttlez les requêtes sortantes :
class RequestQueue {
constructor(maxPerSecond = 10) {
this.queue = [];
this.interval = 1000 / maxPerSecond;
this.processing = false;
}
async add(requestFn) {
return new Promise((resolve, reject) => {
this.queue.push({ requestFn, resolve, reject });
this.process();
});
}
async process() {
if (this.processing || this.queue.length === 0) return;
this.processing = true;
const { requestFn, resolve, reject } = this.queue.shift();
try {
const result = await requestFn();
resolve(result);
} catch (error) {
reject(error);
}
setTimeout(() => {
this.processing = false;
this.process();
}, this.interval);
}
}Au-delà des limites de taux, chaque forfait a des quotas mensuels :
| Forfait | Tickets Mensuels | Appels API Mensuels | Webhooks |
|---|---|---|---|
| Gratuit | 500 | 10 000 | 1 |
| Starter | 5 000 | 100 000 | 5 |
| Business | 50 000 | 1 000 000 | 25 |
| Enterprise | Illimité | Illimité | Illimité |
Si vous dépassez votre quota mensuel, l'API retourne un 403 Forbidden :
{
"success": false,
"error": {
"code": "QUOTA_EXCEEDED",
"message": "Quota mensuel d'appels API dépassé",
"details": {
"limit": 10000,
"used": 10000,
"resetsAt": "2024-04-01T00:00:00Z"
}
}
}Pour augmenter vos limites :
Pour les besoins entreprise, contactez support@oquira.com.