Sécurité

Authentification & autorisation

Chaque requête vers l'API AfriMap est authentifiée par une clé API transmise dans le header HTTP. Ce guide couvre l'obtention, l'utilisation et la sécurisation de vos clés.

Format des clés API

AfriMap utilise deux types de clés, différenciées par leur préfixe :

Sandboxafm_test_*
  • Gratuit à vie — pas de carte bancaire
  • 10 000 requêtes / jour
  • Accès à toutes les API (routing, geocoding, tiles, places, navigation, ETA)
  • Données réelles (pas un mock)
  • Pas de SLA garanti
Productionafm_live_*
  • Facturation mensuelle — par requête au-delà du quota
  • Quota configurable selon le plan (Starter, Pro, Enterprise)
  • SLA 99.9% garanti
  • Support prioritaire
  • Origines CORS configurables

Comment s'authentifier

Ajoutez l'en-tête X-AfriMap-Key à chaque requête HTTP :

TerminalcURL
 curl -H "X-AfriMap-Key: afm_test_AbCdEf1234" \ "https://api.afrimap.ci/v1/geocode?q=cocody+abidjan"
TypeScriptJavaScript SDK
import { AfriMapClient } from '@afrimap/sdk'// Le SDK ajoute automatiquement le header X-AfriMap-Keyconst client = new AfriMapClient({ apiKey: process.env.AFRIMAP_API_KEY!, })
KotlinKotlin SDK
val client = AfriMapClient.Builder() .apiKey("afm_live_...") .build()
SwiftSwift SDK
let client = AfriMapClient(apiKey: "afm_live_...")
GoGo SDK
 client := afrimap.NewClient("afm_live_...")
Bonnes pratiques : ne codez jamais la clé en dur dans votre code source. Utilisez des variables d'environnement (.env), un gestionnaire de secrets (Vault, AWS Secrets Manager), ou le système de config de votre framework.

Obtenir une clé API

  1. 1
    Créez un compte sur portal.afrimap.ci/auth/register avec votre email professionnel.
  2. 2
    Récupérez votre clé sandbox — elle est générée automatiquement à l'inscription. Allez dans Dashboard → Clés API pour la copier.
  3. 3
    Passez en production quand vous êtes prêt — Dashboard → Facturation → choisissez un plan. Votre clé bascule de afm_test_* à afm_live_*.
Important : La clé complète ne s'affiche qu'une seule fois à la création. Copiez-la immédiatement. Si vous la perdez, cliquez sur Régénérer — l'ancienne clé est révoquée instantanément.

Limites de débit (Rate Limiting)

AfriMap applique un sliding window par clé API via Redis. Quand votre quota est atteint, l'API retourne 429 Too Many Requests.

PlanRequêtes / jourBurst / secondePrix
Sandbox10 00010Gratuit
Starter100 0005025 000 FCFA/mois
Pro1 000 000200150 000 FCFA/mois
EnterpriseIllimitéSur mesureContact sales@afrimap.ci

Headers de réponse

Chaque réponse inclut les headers suivants pour vous permettre de gérer votre consommation côté client :

TerminalHeaders rate-limit
 X-RateLimit-Limit: 100000 # Quota total du plan X-RateLimit-Remaining: 98542 # Requêtes restantes X-RateLimit-Reset: 1713312000 # Timestamp Unix du reset Retry-After: 3600 # Secondes avant reset (sur 429 uniquement)

Gérer un 429

TypeScriptRetry avec backoff exponentiel
async function fetchWithRetry(url: string, opts: RequestInit, maxRetries = 3) { for (let i = 0; i < maxRetries; i++) { const res = await fetch(url, opts) if (res.status !== 429) return res const retryAfter = Number(res.headers.get('Retry-After')) || 2 ** i await new Promise(r => setTimeout(r, retryAfter * 1000)) } throw new Error('Rate limit exceeded after retries') }

CORS (Cross-Origin)

En production, AfriMap vérifie l'origine des requêtes navigateur contre la liste d'origines autorisées de votre clé API. Configurez vos origines dans Dashboard → Clés API → Origines CORS.

En sandbox, toutes les origines sont acceptées (Access-Control-Allow-Origin: *). C'est pratique pour le développement mais n'utilisez jamais une clé sandbox en production.

Checklist sécurité

Ne jamais exposer afm_live_* dans le code source (pas de commit, pas de bundle JS client)
Utiliser des variables d'environnement ou un secret manager
Configurer les origines CORS en production (pas de wildcard *)
Pour les apps mobiles, proxyer via votre backend — ne stockez pas la clé dans l'APK/IPA
Régénérer la clé immédiatement si elle est compromise
Surveiller votre consommation dans Dashboard → Usage pour détecter les anomalies