Documentation
URL de base : https://supercalcula.ch/api
Démarrer en cinq minutes
- 1
Créez un compte gratuit et confirmez votre e-mail. Créer un compte
- 2
Copiez votre clé API depuis Mon compte → Clés API. Elle ne s'affiche qu'une fois.
- 3
Testez-la avec la commande ci-dessous.
- 4
Appelez l'API de votre choix avec les exemples de cette page.
curl https://supercalcula.ch/api/v1/ping \
-H "Authorization: Bearer sk_live_…"
# {"ok":true,"data":{"pong":true,"key":"sk_live_a1b2…9f3e"}}Deux endpoints gratuits : GET /v1/ping (teste une clé) et GET /v1/me (offre, quota et crédits restants). openapi.yaml
Authentification
Chaque requête porte l'en-tête Authorization: Bearer <clé>. Les clés sk_test_ renvoient des résultats factices sans consommer de quota (l'en-tête X-Test-Mode: true l'indique) ; les validations sont les mêmes qu'avec une clé de production.
Erreurs et quotas
Les erreurs sont en JSON avec un code stable et un message en anglais. Les en-têtes X-Quota-Remaining, X-Credits-Remaining et X-RateLimit-Remaining sont présents sur chaque réponse.
{ "ok": false, "error": { "code": "quota_exceeded", "message": "Monthly quota exhausted" } }| Code | HTTP | Signification |
|---|---|---|
| invalid_api_key | 401 | Clé absente, inconnue ou mal formée. |
| key_revoked | 401 | Clé révoquée : créez-en une nouvelle depuis votre compte. |
| account_suspended | 403 | Compte suspendu : contactez le support. |
| invalid_input | 400 | Paramètre manquant ou invalide (la ligne fautive est donnée dans line pour les conversions). |
| payload_too_large | 413 | Corps supérieur à la limite de l'offre (1 Mo en Free, 10 Mo ensuite). |
| quota_exceeded | 429 | Quota mensuel et crédits épuisés. |
| rate_limited | 429 | Trop d'appels par minute ; voir l'en-tête Retry-After. |
| internal_error | 500 | Erreur de notre côté ou source externe indisponible : ne coûte rien, réessayez. |
Crédits et quotas
Une requête réussie coûte le nombre de crédits de l'endpoint (1 pour les endpoints de la vague 1). Une erreur 4xx due à votre requête coûte 1 crédit ; les erreurs 401, 429 et 5xx ne coûtent rien. Le quota mensuel est consommé en premier, puis les crédits achetés.
Référence des endpoints
/v1/qr
Coût : 1 crédit(s)Génère un QR code ou un code-barres, en PNG ou en SVG.
Paramètres (Corps JSON)
| Nom | Type | Requis | Défaut | Description |
|---|---|---|---|---|
| content | string | oui | https://supercalcula.ch | Texte, URL ou vCard à encoder (2 953 caractères au maximum). |
| type | string qr | ean13 | code128 | non | qr | qr (défaut), ean13 (12 ou 13 chiffres, la clé de contrôle est vérifiée) ou code128 (ASCII imprimable). |
| format | string png | svg | non | png | png (défaut) ou svg. |
| size | integer | non | 512 | Largeur en pixels, de 64 à 2 048 (défaut 512). |
| margin | integer | non | 2 | Marge blanche en modules, de 0 à 20 (défaut 2). |
| color | string | non | #000000 | Couleur du code, au format #rrggbb. |
| background | string | non | #ffffff | Couleur du fond, au format #rrggbb. |
| error_correction | string L | M | Q | H | non | M | Niveau de correction d'erreur : L, M (défaut), Q ou H. |
| logo_url | string | non | — | Logo centré (https uniquement, 500 Ko au maximum). Force error_correction=H. Les logos SVG ne sont acceptés qu'avec format=svg. |
| encoding | string binary | base64 | non | binary | binary (défaut : l'image elle-même) ou base64 (JSON contenant l'image). |
Exemple
curl -X POST https://supercalcula.ch/api/v1/qr \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{"content":"https://supercalcula.ch","size":512}' --output qr.png
const res = await fetch("https://supercalcula.ch/api/v1/qr", {
method: "POST",
headers: { Authorization: "Bearer sk_live_…", "Content-Type": "application/json" },
body: JSON.stringify({
"content": "https://supercalcula.ch",
"size": 512
}),
});
const blob = await res.blob();
import requests
r = requests.post("https://supercalcula.ch/api/v1/qr",
headers={"Authorization": "Bearer sk_live_…"},
json={"content":"https://supercalcula.ch","size":512})
open("qr.png", "wb").write(r.content)
$ch = curl_init("https://supercalcula.ch/api/v1/qr");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer sk_live_…", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => json_encode(["content" => "https://supercalcula.ch", "size" => 512]),
CURLOPT_RETURNTRANSFER => true,
]);
file_put_contents("qr.png", curl_exec($ch));
La réponse est l'image elle-même (PNG ou SVG) ; avec encoding=base64, un JSON contenant l'image.
Essayer avec votre clé
Collez une clé API (idéalement une clé sk_test_ : résultats fictifs, aucun crédit consommé). Elle reste dans cette page : elle n'est ni enregistrée ni envoyée ailleurs qu'à l'API. Avec une clé sk_live_, l'appel consomme vos crédits.
/v1/email/verify
Coût : 1 crédit(s)Vérifie une adresse e-mail sans connexion SMTP : syntaxe, DNS, MX, adresse jetable, compte de rôle, faute de frappe probable.
Paramètres (Paramètres d'URL)
| Nom | Type | Requis | Défaut | Description |
|---|---|---|---|---|
| string | oui | jean.dupont@gmial.com | Adresse à vérifier (254 caractères au maximum). |
Exemple
curl "https://supercalcula.ch/api/v1/email/verify?email=jean.dupont%40gmial.com" \
-H "Authorization: Bearer sk_live_…"
const res = await fetch("https://supercalcula.ch/api/v1/email/verify?email=jean.dupont%40gmial.com", {
headers: { Authorization: "Bearer sk_live_…" },
});
console.log(await res.json());
import requests
r = requests.get("https://supercalcula.ch/api/v1/email/verify",
params={"email":"jean.dupont@gmial.com"},
headers={"Authorization": "Bearer sk_live_…"})
print(r.json())
$ch = curl_init("https://supercalcula.ch/api/v1/email/verify?email=jean.dupont%40gmial.com");
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => ["Authorization: Bearer sk_live_…"],
CURLOPT_RETURNTRANSFER => true,
]);
$result = json_decode(curl_exec($ch), true);
Réponse
{
"ok": true,
"data": {
"email": "jean.dupont@gmial.com",
"normalized": "jean.dupont@gmial.com",
"syntax_valid": true,
"domain_exists": true,
"has_mx": false,
"disposable": false,
"role_account": false,
"free_provider": false,
"suggestion": "jean.dupont@gmail.com",
"score": 0.05,
"verdict": "invalid"
}
}Essayer avec votre clé
Collez une clé API (idéalement une clé sk_test_ : résultats fictifs, aucun crédit consommé). Elle reste dans cette page : elle n'est ni enregistrée ni envoyée ailleurs qu'à l'API. Avec une clé sk_live_, l'appel consomme vos crédits.
/v1/convert
Coût : 1 crédit(s)Convertit un document entre JSON, CSV, XML et YAML. Variante : envoyer le document brut avec ?from=csv&to=json en paramètres d'URL ; la réponse est alors le document converti.
Paramètres (Corps JSON)
| Nom | Type | Requis | Défaut | Description |
|---|---|---|---|---|
| from | string json | csv | xml | yaml | oui | csv | Format source : json, csv, xml ou yaml. |
| to | string json | csv | xml | yaml | oui | json | Format cible : json, csv, xml ou yaml. |
| data | string | oui | … | Document source, sous forme de texte. |
| options.delimiter | string | non | , | CSV : séparateur de colonnes (une virgule par défaut ; « tab », « semicolon » et « pipe » sont acceptés). |
| options.header | boolean | non | true | CSV : la première ligne contient les en-têtes (défaut true). |
| options.root | string | non | root | XML : nom de l'élément racine (défaut root). |
| options.pretty | boolean | non | true | JSON et XML : sortie indentée (défaut true). |
| options.infer_types | boolean | non | false | Convertit « 12 », « true » ou « 3.5 » en nombres et booléens (défaut false). |
| options.escape_formulas | boolean | non | true | CSV : préfixe d'une apostrophe les cellules commençant par = + - @ pour neutraliser les formules de tableur (défaut true). |
Exemple
curl -X POST https://supercalcula.ch/api/v1/convert \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{"from":"csv","to":"json","data":"name,city\nAlexandre,Genève"}'
const res = await fetch("https://supercalcula.ch/api/v1/convert", {
method: "POST",
headers: { Authorization: "Bearer sk_live_…", "Content-Type": "application/json" },
body: JSON.stringify({
"from": "csv",
"to": "json",
"data": "name,city\nAlexandre,Genève"
}),
});
const data = await res.json();
import requests
r = requests.post("https://supercalcula.ch/api/v1/convert",
headers={"Authorization": "Bearer sk_live_…"},
json={"from":"csv","to":"json","data":"name,city\nAlexandre,Genève"})
print(r.json())
$ch = curl_init("https://supercalcula.ch/api/v1/convert");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer sk_live_…", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => json_encode(["from" => "csv", "to" => "json", "data" => "name,city\nAlexandre,Genève"]),
CURLOPT_RETURNTRANSFER => true,
]);
$result = json_decode(curl_exec($ch), true);
Réponse
{
"ok": true,
"data": {
"to": "json",
"result": "[\n {\n \"name\": \"Alexandre\",\n \"city\": \"Genève\"\n }\n]",
"rows": 1
}
}Essayer avec votre clé
Collez une clé API (idéalement une clé sk_test_ : résultats fictifs, aucun crédit consommé). Elle reste dans cette page : elle n'est ni enregistrée ni envoyée ailleurs qu'à l'API. Avec une clé sk_live_, l'appel consomme vos crédits.
/v1/seo/analyze
Coût : 1 crédit(s)Génère un slug et analyse titre, description, mots-clés, densité, temps de lecture et lisibilité.
Paramètres (Corps JSON)
| Nom | Type | Requis | Défaut | Description |
|---|---|---|---|---|
| title | string | oui | … | Titre de la page (300 caractères au maximum). |
| text | string | non | … | Corps de l'article (200 000 caractères au maximum). |
| description | string | non | Meta description à évaluer (500 caractères au maximum). | |
| lang | string fr | de | en | non | fr | fr (défaut), de ou en : mots vides et formule de lisibilité. |
| max_keywords | integer | non | 10 | Nombre maximal de mots-clés, de 1 à 50 (défaut 10). |
Exemple
curl -X POST https://supercalcula.ch/api/v1/seo/analyze \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{"title":"Comment créer un QR code avec logo en 2026","text":"Un QR code avec logo…","lang":"fr"}'
const res = await fetch("https://supercalcula.ch/api/v1/seo/analyze", {
method: "POST",
headers: { Authorization: "Bearer sk_live_…", "Content-Type": "application/json" },
body: JSON.stringify({
"title": "Comment créer un QR code avec logo en 2026",
"text": "Un QR code avec logo…",
"lang": "fr"
}),
});
const data = await res.json();
import requests
r = requests.post("https://supercalcula.ch/api/v1/seo/analyze",
headers={"Authorization": "Bearer sk_live_…"},
json={"title":"Comment créer un QR code avec logo en 2026","text":"Un QR code avec logo…","lang":"fr"})
print(r.json())
$ch = curl_init("https://supercalcula.ch/api/v1/seo/analyze");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer sk_live_…", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => json_encode(["title" => "Comment créer un QR code avec logo en 2026", "text" => "Un QR code avec logo…", "lang" => "fr"]),
CURLOPT_RETURNTRANSFER => true,
]);
$result = json_decode(curl_exec($ch), true);
Réponse
{
"ok": true,
"data": {
"slug": "comment-creer-un-qr-code-avec-logo-en-2026",
"title": {
"length": 42,
"verdict": "ok"
},
"description": {
"length": 0,
"verdict": "missing"
},
"keywords": [
{
"term": "qr code",
"count": 12,
"density": 2.1
},
{
"term": "logo",
"count": 7,
"density": 1.2
}
],
"word_count": 570,
"reading_time_min": 3,
"readability": {
"score": 62,
"level": "standard"
}
}
}Essayer avec votre clé
Collez une clé API (idéalement une clé sk_test_ : résultats fictifs, aucun crédit consommé). Elle reste dans cette page : elle n'est ni enregistrée ni envoyée ailleurs qu'à l'API. Avec une clé sk_live_, l'appel consomme vos crédits.
/v1/pii/redact
Coût : 1 crédit(s)Détecte et masque e-mails, téléphones, IBAN, cartes, numéros AVS, adresses IP et URL. Le texte n'est jamais conservé.
Paramètres (Corps JSON)
| Nom | Type | Requis | Défaut | Description |
|---|---|---|---|---|
| text | string | oui | … | Texte à traiter (200 000 caractères au maximum). |
| types | array email | phone | iban | card | ahv | ip | url | non | — | Types à détecter parmi email, phone, iban, card, ahv, ip, url (tous par défaut). |
| mode | string mask | placeholder | remove | non | placeholder | placeholder (défaut : [EMAIL_1]), mask (caractères remplacés) ou remove. |
| mask_char | string | non | * | Caractère de masquage (un seul, « * » par défaut). |
| keep_last | integer | non | 0 | Mode mask : nombre de caractères conservés en fin de valeur, de 0 à 4. |
Exemple
curl -X POST https://supercalcula.ch/api/v1/pii/redact \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{"text":"Contact : jean@exemple.ch, +41 79 123 45 67, IBAN CH93 0076 2011 6238 5295 7","mode":"placeholder"}'
const res = await fetch("https://supercalcula.ch/api/v1/pii/redact", {
method: "POST",
headers: { Authorization: "Bearer sk_live_…", "Content-Type": "application/json" },
body: JSON.stringify({
"text": "Contact : jean@exemple.ch, +41 79 123 45 67, IBAN CH93 0076 2011 6238 5295 7",
"mode": "placeholder"
}),
});
const data = await res.json();
import requests
r = requests.post("https://supercalcula.ch/api/v1/pii/redact",
headers={"Authorization": "Bearer sk_live_…"},
json={"text":"Contact : jean@exemple.ch, +41 79 123 45 67, IBAN CH93 0076 2011 6238 5295 7","mode":"placeholder"})
print(r.json())
$ch = curl_init("https://supercalcula.ch/api/v1/pii/redact");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer sk_live_…", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => json_encode(["text" => "Contact : jean@exemple.ch, +41 79 123 45 67, IBAN CH93 0076 2011 6238 5295 7", "mode" => "placeholder"]),
CURLOPT_RETURNTRANSFER => true,
]);
$result = json_decode(curl_exec($ch), true);
Réponse
{
"ok": true,
"data": {
"text": "Contact : [EMAIL_1], [PHONE_1], IBAN [IBAN_1]",
"entities": [
{
"type": "email",
"placeholder": "EMAIL_1",
"start": 10,
"end": 25
},
{
"type": "phone",
"placeholder": "PHONE_1",
"start": 27,
"end": 43
},
{
"type": "iban",
"placeholder": "IBAN_1",
"start": 50,
"end": 76
}
],
"count": 3
}
}Essayer avec votre clé
Collez une clé API (idéalement une clé sk_test_ : résultats fictifs, aucun crédit consommé). Elle reste dans cette page : elle n'est ni enregistrée ni envoyée ailleurs qu'à l'API. Avec une clé sk_live_, l'appel consomme vos crédits.
/v1/convert/currency
Coût : 1 crédit(s)Convertit un montant avec les taux de référence de la BCE (30 devises, historique depuis 1999).
Paramètres (Paramètres d'URL)
| Nom | Type | Requis | Défaut | Description |
|---|---|---|---|---|
| amount | number | oui | 100 | Montant à convertir (positif). |
| from | string | oui | CHF | Devise source, code à trois lettres (CHF, EUR, USD…). |
| to | string | oui | EUR | Devise cible, code à trois lettres. |
| date | string | non | — | Date du taux au format AAAA-MM-JJ (facultatif, par défaut le dernier taux). |
Exemple
curl "https://supercalcula.ch/api/v1/convert/currency?amount=100&from=CHF&to=EUR" \
-H "Authorization: Bearer sk_live_…"
const res = await fetch("https://supercalcula.ch/api/v1/convert/currency?amount=100&from=CHF&to=EUR", {
headers: { Authorization: "Bearer sk_live_…" },
});
console.log(await res.json());
import requests
r = requests.get("https://supercalcula.ch/api/v1/convert/currency",
params={"amount":100,"from":"CHF","to":"EUR"},
headers={"Authorization": "Bearer sk_live_…"})
print(r.json())
$ch = curl_init("https://supercalcula.ch/api/v1/convert/currency?amount=100&from=CHF&to=EUR");
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => ["Authorization: Bearer sk_live_…"],
CURLOPT_RETURNTRANSFER => true,
]);
$result = json_decode(curl_exec($ch), true);
Réponse
{
"ok": true,
"data": {
"amount": 100,
"from": "CHF",
"to": "EUR",
"rate": 1.0738,
"result": 107.38,
"date": "2026-10-09",
"source": "ECB"
}
}Essayer avec votre clé
Collez une clé API (idéalement une clé sk_test_ : résultats fictifs, aucun crédit consommé). Elle reste dans cette page : elle n'est ni enregistrée ni envoyée ailleurs qu'à l'API. Avec une clé sk_live_, l'appel consomme vos crédits.
/v1/convert/unit
Coût : 1 crédit(s)Convertit une valeur entre unités : longueur, masse, volume, surface, température, vitesse, pression, énergie, puissance, données, temps, angle.
Paramètres (Paramètres d'URL)
| Nom | Type | Requis | Défaut | Description |
|---|---|---|---|---|
| value | number | oui | 12.5 | Valeur à convertir. |
| from | string | oui | km | Unité source (voir GET /v1/units). |
| to | string | oui | mi | Unité cible, de la même catégorie. |
| precision | integer | non | 6 | Nombre de décimales du résultat, de 0 à 12 (défaut 6). |
Exemple
curl "https://supercalcula.ch/api/v1/convert/unit?value=12.5&from=km&to=mi" \
-H "Authorization: Bearer sk_live_…"
const res = await fetch("https://supercalcula.ch/api/v1/convert/unit?value=12.5&from=km&to=mi", {
headers: { Authorization: "Bearer sk_live_…" },
});
console.log(await res.json());
import requests
r = requests.get("https://supercalcula.ch/api/v1/convert/unit",
params={"value":12.5,"from":"km","to":"mi"},
headers={"Authorization": "Bearer sk_live_…"})
print(r.json())
$ch = curl_init("https://supercalcula.ch/api/v1/convert/unit?value=12.5&from=km&to=mi");
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => ["Authorization: Bearer sk_live_…"],
CURLOPT_RETURNTRANSFER => true,
]);
$result = json_decode(curl_exec($ch), true);
Réponse
{
"ok": true,
"data": {
"value": 12.5,
"from": "km",
"to": "mi",
"result": 7.76714,
"category": "length"
}
}Essayer avec votre clé
Collez une clé API (idéalement une clé sk_test_ : résultats fictifs, aucun crédit consommé). Elle reste dans cette page : elle n'est ni enregistrée ni envoyée ailleurs qu'à l'API. Avec une clé sk_live_, l'appel consomme vos crédits.
Journal des modifications
- 2026-10-10
- Version 1.0 : QR codes et codes-barres, validation d'e-mails, conversion de données, SEO, masquage de données personnelles, devises et unités.