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

# Démarrer

> Où est l'API, comment s'y authentifier, et comment faire votre premier appel.

## Où est l'API

| Environnement | Adresse | Clé |
| :- | :- | :- |
| Sandbox | `https://sandbox.umeme.app/v1` | `umeme_test_…` |
| Production | `https://api.umeme.app/v1` | `umeme_live_…` |

> [!WARNING]
>
> Rangez l'adresse et la clé dans la configuration de chaque environnement, jamais dans le code : seules elles changent entre la sandbox et la production.

Tous les exemples de cette documentation les lisent dans deux variables d'environnement :

```bash .env theme={"dark"}
UMEME_BASE_URL=https://sandbox.umeme.app/v1
UMEME_CLE=umeme_test_…
```

En production, seules leurs valeurs changent : `https://api.umeme.app/v1` et votre clé `umeme_live_`.

## Obtenir l'accès

**1. Demander un accès**

L'accès est accordé sur demande : voir [Demander un accès](https://docs.umeme.app/demander-un-acces.md).

**2. Saisir votre URL de rappel**

Umeme y enverra le résultat de chaque vente. Elle doit être en HTTPS.

**3. Créer votre clé**

Une clé `umeme_test_` suivie de 32 caractères. Elle ne s'affiche qu'une fois : rangez-la aussitôt.

**4. Et voilà !**

Vous avez une clé de sandbox.

## S'authentifier

Chaque appel porte la clé dans l'en-tête `Authorization`. Essayez avec le solde de votre portefeuille :

```bash cURL icon="https://mintcdn.com/dommi10/MMGXqk_5twdsE4Rl/logos/langages/bash.svg?fit=max&auto=format&n=MMGXqk_5twdsE4Rl&q=85&s=c7cc496df6d82b1c6cdaa5c132b8d4bc" theme={"dark"}
curl "$UMEME_BASE_URL/portefeuille" \
  -H "Authorization: Bearer $UMEME_CLE"
```

```javascript Node.js · fetch icon="https://mintcdn.com/dommi10/MMGXqk_5twdsE4Rl/logos/langages/nodejs.svg?fit=max&auto=format&n=MMGXqk_5twdsE4Rl&q=85&s=60e7eb54ba25d5cb5e9d62e0896b99c7" theme={"dark"}
// Node.js 18 et plus : fetch est intégré.
const baseUrl = process.env.UMEME_BASE_URL;

const reponse = await fetch(`${baseUrl}/portefeuille`, {
  headers: {
    Authorization: `Bearer ${process.env.UMEME_CLE}`,
  },
});
const donnees = await reponse.json();
```

```javascript Node.js · Axios icon="https://mintcdn.com/dommi10/MMGXqk_5twdsE4Rl/logos/langages/axios.svg?fit=max&auto=format&n=MMGXqk_5twdsE4Rl&q=85&s=7e8bd7e79f903d3d1bffc290e52fcdc9" theme={"dark"}
// npm install axios
import axios from "axios";

const umeme = axios.create({
  baseURL: process.env.UMEME_BASE_URL,
  headers: { Authorization: `Bearer ${process.env.UMEME_CLE}` },
  timeout: 30000,
});

const { data } = await umeme.get("/portefeuille");
```

```python Python icon="https://mintcdn.com/dommi10/MMGXqk_5twdsE4Rl/logos/langages/python.svg?fit=max&auto=format&n=MMGXqk_5twdsE4Rl&q=85&s=41e570f5c5c97d07c3c878a6704f2bed" theme={"dark"}
import os

import requests

BASE_URL = os.environ["UMEME_BASE_URL"]
ENTETES = {"Authorization": f"Bearer {os.environ['UMEME_CLE']}"}

reponse = requests.get(
    f"{BASE_URL}/portefeuille",
    headers=ENTETES,
    timeout=30,
)
donnees = reponse.json()
```

```php PHP icon="https://mintcdn.com/dommi10/MMGXqk_5twdsE4Rl/logos/langages/php.svg?fit=max&auto=format&n=MMGXqk_5twdsE4Rl&q=85&s=706823b5881c1d4e78720e369520cc78" theme={"dark"}
// composer require guzzlehttp/guzzle
$client = new GuzzleHttp\Client([
    'base_uri' => getenv('UMEME_BASE_URL') . '/',
    'headers' => ['Authorization' => 'Bearer ' . getenv('UMEME_CLE')],
    'timeout' => 30,
]);

$reponse = $client->get('portefeuille');
$donnees = json_decode($reponse->getBody(), true);
```

```java Java icon="https://mintcdn.com/dommi10/MMGXqk_5twdsE4Rl/logos/langages/java.svg?fit=max&auto=format&n=MMGXqk_5twdsE4Rl&q=85&s=a99792afd2b2bcd5b3c64f5157b8469e" theme={"dark"}
// Java 15 et plus : java.net.http et blocs de texte.
var baseUrl = System.getenv("UMEME_BASE_URL");
var client = HttpClient.newHttpClient();

var requete = HttpRequest.newBuilder(URI.create(baseUrl + "/portefeuille"))
    .header("Authorization", "Bearer " + System.getenv("UMEME_CLE"))
    .GET()
    .build();

var reponse = client.send(requete, HttpResponse.BodyHandlers.ofString());
```

```json 200 OK {2} theme={"dark"}
{
  "solde": 1000,
  "devise": "USD",
  "misAJourLe": "2026-11-07T08:20:00Z"
}
```

> [!WARNING]
>
> Votre client lit sa clé à son démarrage. Après avoir changé de clé, redémarrez-le : sans cela, il continue d'envoyer l'ancienne.

## Votre première vente

> [card] [Vendre de l'électricité SOCODE](https://docs.umeme.app/guides/vendre-socode.md)
>
> Le guide complet, de la vente en dur au rapprochement.

> [card] [Postman](https://docs.umeme.app/guides/postman.md)
>
> Toutes les routes, prêtes à envoyer.

## Tester votre intégration

Dans la sandbox, le numéro du compteur choisit l'issue de la vente : succès, échec, réconciliation, revue manuelle.

> [card] [Compteurs de test](https://docs.umeme.app/ressources/compteurs-de-test.md)
>
> Chaque scénario, et son compteur.

> [card] [Codes d'erreur](https://docs.umeme.app/ressources/codes-erreur.md)
>
> Tous les codes, et leur sens.


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