Version de travail · contenus et exemples à affiner Voir les 95 pages ↗
Parlons de votre projet ↗
Plateformes / P024

Clés et magasin dédié

Adaptation éditoriale
Référence de travail. Les routes, schémas, limites et procédures hérités du référentiel sont à aligner avec l’API d’Éric. Ils ne prouvent pas une fonctionnalité livrée. Les hôtes .invalid sont des exemples inertes.

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.