La clé créée ici est la clé plateforme. C'est elle qui encaisse, transfère et gère l'escrow. La clé de votre entreprise plateforme ne peut pas appeler ces endpoints.
Le marchand doit déjà être intégré ou rattaché.
Créer la clé API
POST /partner_api/service_providers/business_api_keys
Requête :
{
"merchantBusinessId": "59ae202a-f583-4a15-970f-9e99bd1e0baa",
"name": "Clé API de production"
}
Réponse (201) :
{
"id": "a3c81f3d-ee04-4ec5-8bd2-cd8af5dabcfc",
"name": "Clé API de production",
"businessId": "59ae202a-f583-4a15-970f-9e99bd1e0baa",
"key": "Kelyko_live_abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
}
Point d’attention.
Le champ key n'est retourné qu'une seule fois. Stockez-le immédiatement : il est irrécupérable ensuite. Le champ id sert de X-API-KEY-ID pour l'authentification.
Vous ne pouvez créer des clés que pour les marchands auxquels vous êtes rattaché. Un merchantBusinessId qui ne l'est pas renvoie 403. Après un détachement, ces clés répondent 401.
Exemple · Node.js
async function createApiKey(merchantBusinessId, keyName) {
const response = await fetch('https://api.kelyko.invalid/partner_api/service_providers/business_api_keys', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-KEY': process.env.SERVICE_PROVIDER_API_KEY,
'X-API-KEY-ID': process.env.SERVICE_PROVIDER_API_KEY_ID,
},
body: JSON.stringify({ merchantBusinessId, name: keyName }),
});
if (!response.ok) {
const error = await response.json();
throw new Error(`Échec de la création de la clé API : ${JSON.stringify(error)}`);
}
const result = await response.json();
await saveApiKeySecurely(merchantBusinessId, result.key, result.id);
return result;
}
Exemple · Python
import requests
import os
def create_api_key(merchant_business_id, key_name):
url = "https://api.kelyko.invalid/partner_api/service_providers/business_api_keys"
headers = {
"Content-Type": "application/json",
"X-API-KEY": os.environ["SERVICE_PROVIDER_API_KEY"],
"X-API-KEY-ID": os.environ["SERVICE_PROVIDER_API_KEY_ID"],
}
response = requests.post(url, json={
"merchantBusinessId": merchant_business_id,
"name": key_name,
}, headers=headers)
response.raise_for_status()
result = response.json()
save_api_key_securely(merchant_business_id, result["key"], result["id"])
return result
Votre magasin dédié chez le marchand
Au rattachement, Kelyko crée chez le marchand un magasin dédié à votre entreprise, portant votre nom. Les clés API que vous créez pour ce marchand sont limitées à ce magasin : elles ne voient ni le magasin propre du marchand, ni les magasins des autres Plateformes présents chez lui.
Concrètement, avec une clé plateforme :
| Endpoint | Comportement |
|---|---|
GET /partner_api/stores |
Retourne uniquement votre magasin dédié |
GET /partner_api/stores/{storeId}/balance |
403 si storeId n'est pas votre magasin |
POST /partner_api/payment_requests, /payment_links, /transfers |
storeId omis → votre magasin. storeId d'un autre magasin → 403 |
GET /partner_api/payment_requests/{id}, /payment_links/{id}, /transfers/{id} |
404 si la ressource appartient à un autre magasin |
GET /partner_api/transactions |
Filtré sur votre magasin. Un storeId étranger retourne une page vide, pas une erreur |
GET /partner_api/devices |
Uniquement les terminaux de votre magasin |
business_webhook_subscriptions |
Rattachés à votre magasin. Voir Webhooks marchand |
Point d’attention.
Vous n'avez rien à changer si vous n'envoyez pas de storeId : vos requêtes sont automatiquement dirigées vers votre magasin dédié. Le plus simple est d'*omettre storeId* dans vos appels.
Point d’attention.
Si votre intégration envoie un storeId récupéré autrement que via GET /partner_api/stores, elle recevra 403 (forbidden_action). Récupérez l'identifiant de votre magasin avec GET /partner_api/stores, ou retirez le champ storeId.
Cette séparation vous donne un solde, un historique de transactions et des terminaux propres à votre activité chez ce marchand. La réconciliation se fait magasin par magasin.
Les clés API créées par le marchand lui-même ne sont pas concernées : elles gardent accès à tous ses magasins, y compris le vôtre.
Ensuite : assigner un catalogue, configurer le webhook, puis encaisser.