> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kemypay.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Services

> Un service par application ou activité, validé par notre équipe

Un **service** est l'une de vos applications, l'un de vos sites ou l'une de vos activités. Chaque service encaisse séparément : ses paiements, ses soldes, ses webhooks et ses rapports lui sont propres. Créez un service par produit (par exemple votre application de rencontre et votre boutique en ligne).

## Créer un service

Tous les champs sont obligatoires, sauf `callback_url` et `fee_bearer`.

| Champ | Règles |
| - | - |
| `name` | 2 à 60 caractères, unique parmi vos services |
| `category` | Un `code` de [`GET /mobile-money/categories`](https://docs.kemypay.com/fr/guides/categories) |
| `description` | 20 à 1 000 caractères : ce que vous vendez et à qui |
| `url` | Adresse publique de votre site ou de votre application |
| `support_email` | L'adresse où vos clients peuvent vous joindre |
| `support_phone` | Format international, par exemple `+237670000000` |
| `webhook_url` | Adresse **https** de votre serveur qui reçoit les résultats des paiements |
| `callback_url` | Facultatif. L'adresse où votre client est renvoyé après avoir payé |
| `fee_bearer` | Facultatif. `merchant` (par défaut) ou `customer`. Voir [Qui paie les frais](https://docs.kemypay.com/fr/guides/fee-bearer.md) |

```bash cURL theme={null}
curl -X POST https://api.kemypay.com/v1/mobile-money/services \
  -H "Authorization: Bearer sk_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Afroyamo",
    "category": "dating",
    "description": "Dating app for the African diaspora. Premium subscriptions paid by mobile money.",
    "url": "https://afroyamo.com",
    "support_email": "support@afroyamo.com",
    "support_phone": "+237670000000",
    "webhook_url": "https://api.afroyamo.com/kemypay/webhooks",
    "fee_bearer": "merchant"
  }'
```

```javascript Node.js theme={null}
const res = await fetch('https://api.kemypay.com/v1/mobile-money/services', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.KEMYPAY_SECRET_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    name: 'Afroyamo',
    category: 'dating',
    description: 'Dating app for the African diaspora. Premium subscriptions paid by mobile money.',
    url: 'https://afroyamo.com',
    support_email: 'support@afroyamo.com',
    support_phone: '+237670000000',
    webhook_url: 'https://api.afroyamo.com/kemypay/webhooks',
  }),
});
const { data } = await res.json();
// Enregistrez data.webhook_secret tout de suite : il n'est montré qu'une seule fois.
```

```php PHP theme={null}
$ch = curl_init('https://api.kemypay.com/v1/mobile-money/services');
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer ' . getenv('KEMYPAY_SECRET_KEY'),
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'name' => 'Afroyamo',
        'category' => 'dating',
        'description' => 'Dating app for the African diaspora. Premium subscriptions paid by mobile money.',
        'url' => 'https://afroyamo.com',
        'support_email' => 'support@afroyamo.com',
        'support_phone' => '+237670000000',
        'webhook_url' => 'https://api.afroyamo.com/kemypay/webhooks',
    ]),
]);
$data = json_decode(curl_exec($ch), true)['data'];
// Enregistrez $data['webhook_secret'] tout de suite : il n'est montré qu'une seule fois.
```

```python Python theme={null}
import os, requests

res = requests.post(
    "https://api.kemypay.com/v1/mobile-money/services",
    headers={"Authorization": f"Bearer {os.environ['KEMYPAY_SECRET_KEY']}"},
    json={
        "name": "Afroyamo",
        "category": "dating",
        "description": "Dating app for the African diaspora. Premium subscriptions paid by mobile money.",
        "url": "https://afroyamo.com",
        "support_email": "support@afroyamo.com",
        "support_phone": "+237670000000",
        "webhook_url": "https://api.afroyamo.com/kemypay/webhooks",
    },
)
data = res.json()["data"]
# Enregistrez data["webhook_secret"] tout de suite : il n'est montré qu'une seule fois.
```

```json Réponse (201) theme={null}
{
  "success": true,
  "data": {
    "code": "019a8f2e-4c1b-7d3a-9e55-2b6f0c1d8a47",
    "name": "Afroyamo",
    "category": { "code": "dating", "name": "Dating & social apps" },
    "description": "Dating app for the African diaspora. Premium subscriptions paid by mobile money.",
    "url": "https://afroyamo.com",
    "support_email": "support@afroyamo.com",
    "support_phone": "+237670000000",
    "status": "pending_review",
    "fee_bearer": "merchant",
    "webhook_url": "https://api.afroyamo.com/kemypay/webhooks",
    "callback_url": null,
    "review_reason": null,
    "created_at": "2026-10-29T10:00:00+00:00",
    "reviewed_at": null,
    "webhook_secret": "whsec_5f2c0a9e7b1d4c3a8e6f0b2d9c7a1e4f5b8d3c6a9e2f1b4d7c0a3e6f9b2d5c8a"
  },
  "meta": { "request_id": "a4f8e2c1b3d97056", "timestamp": "2026-10-29T10:00:00+00:00", "mode": "live" }
}
```

> [!WARNING]
>
> **Le `webhook_secret` n'est renvoyé qu'à la création du service** (et quand vous le renouvelez). Rangez-le tout de suite dans votre gestionnaire de secrets. Vous l'avez perdu ? Appelez [`POST /services/{code}/rotate-secret`](https://docs.kemypay.com/fr/api-reference/services/rotate-secret).

## La vie d'un service

| Statut | Signification | Peut encaisser ? |
| - | - | - |
| `pending_review` | En attente de notre validation | En mode test seulement |
| `active` | Validé | Oui |
| `rejected` | Refusé. `review_reason` dit pourquoi | Non |
| `suspended` | Bloqué par notre équipe. `review_reason` dit pourquoi | Non. Contactez le support |
| `disabled` | Mis en pause par vous | Non, jusqu'à ce que vous le réactiviez |

Nous vous envoyons un e-mail à chaque décision. Vous pouvez aussi lire `status` avec [`GET /services/{code}`](https://docs.kemypay.com/fr/api-reference/services/get).

## Modifier vos réglages

Sans nouvelle validation, à tout moment :

```bash theme={null}
curl -X PATCH https://api.kemypay.com/v1/mobile-money/services/SERVICE_CODE \
  -H "Authorization: Bearer sk_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "fee_bearer": "customer", "callback_url": "https://afroyamo.com/payment/done" }'
```

* `fee_bearer`, `webhook_url`, `callback_url` (envoyez `null` pour retirer la `callback_url`).
* Le nom, la catégorie, la description, le site et les contacts du support ont été validés : contactez le [support](mailto:hi@kemypay.com) pour les changer.
* **Mettez en pause** un service actif avec [`POST /services/{code}/disable`](https://docs.kemypay.com/fr/api-reference/services/disable), et relancez-le avec [`/enable`](https://docs.kemypay.com/fr/api-reference/services/enable). Un service `suspended` par notre équipe ne peut pas être réactivé ainsi.

> [!TIP]
>
> Une `webhook_url` ou une `callback_url` envoyée avec un paiement l'emporte sur celle du service, pour ce paiement seulement.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.