Documentation de l’API
Utilisez 33 outils de fichiers depuis votre propre code. Une clé dans un en-tête, un envoi, une URL de statut à interroger : aucun SDK nécessaire.
Introduction
L’API Convertavo donne accès aux mêmes convertisseurs que le site (outils PDF, image, OCR et médias) via HTTPS. Elle s’organise autour de quelques ressources prévisibles, accepte les envois multipart/form-data et répond toujours en JSON avec les codes de statut HTTP standard.
Authentification
Créez une clé dans votre tableau de bord, sous Clés API. Les clés commencent par at_ et ne s’affichent qu’une fois : nous ne stockons qu’une empreinte, donc une clé perdue ne peut pas être récupérée ; révoquez-la et créez-en une autre. Envoyez la clé à chaque requête :
Authorization: Bearer at_your_key_hereCONVERTAVO_KEY, comme le fait chaque exemple de cette page.
Une clé absente renvoie 401 Missing API key ; une clé erronée ou révoquée renvoie 401 Invalid or revoked API key.
Démarrage rapide
Compressez un PDF de bout en bout : envoyez-le, attendez la tâche, enregistrez le résultat. Choisissez votre langage : le choix est conservé sur toute la page.
- 1Définissez votre cléEnregistrez-la dans la variable d’environnement
CONVERTAVO_KEY. - 2Ce qu’il vous fautcURL, PHP avec ext-curl, Python avec
requests, ou Node.js 18+. - 3Lancez le scriptIl envoie le fichier, interroge toutes les 2 secondes et télécharge.
# 1. Upload — returns 202 and a status_url
curl -X POST https://convertavo.com/fr/api/v1/tools/compress-pdf/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@report.pdf" \
-F "settings[Compression level]=Balanced (recommended)"
# 2. Poll until status is "done" or "failed"
curl https://convertavo.com/fr/api/v1/conversions/852 \
-H "Authorization: Bearer $CONVERTAVO_KEY"
# 3. Download the signed download_url from step 2 as it is
# (no key needed; it stops working when the file is deleted)
curl -L -o report-small.pdf "https://convertavo.com/fr/download/1814?expires=1791200000&signature=3f9a…"
<?php
const BASE = 'https://convertavo.com/fr/api/v1';
function convertavo(string $method, string $url, array $fields = []): array
{
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => $method,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY'), 'Accept: application/json'],
CURLOPT_POSTFIELDS => $fields ?: null,
]);
$body = json_decode(curl_exec($ch), true);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($code >= 400) {
throw new RuntimeException($body['message'] ?? "HTTP {$code}");
}
return $body;
}
// 1. Upload
$job = convertavo('POST', BASE . '/tools/compress-pdf/convert', [
'files[0]' => new CURLFile('report.pdf'),
'settings[Compression level]' => 'Balanced (recommended)',
]);
// 2. Poll
do {
sleep(2);
$job = convertavo('GET', $job['status_url'] ?? BASE . "/conversions/{$job['id']}");
} while (in_array($job['status'], ['queued', 'processing'], true));
if ($job['status'] === 'failed') {
throw new RuntimeException($job['error']);
}
// 3. Download
foreach ($job['files'] as $file) {
copy($file['download_url'], $file['name']);
}
import os
import time
import requests
BASE = 'https://convertavo.com/fr/api/v1'
session = requests.Session()
session.headers['Authorization'] = f"Bearer {os.environ['CONVERTAVO_KEY']}"
# 1. Upload
with open('report.pdf', 'rb') as f:
r = session.post(
f'{BASE}/tools/compress-pdf/convert',
files=[('files[]', f)],
data={'settings[Compression level]': 'Balanced (recommended)'},
timeout=120,
)
r.raise_for_status()
job = r.json()
status_url = job['status_url']
# 2. Poll
while job['status'] in ('queued', 'processing'):
time.sleep(2)
job = session.get(status_url, timeout=30).json()
if job['status'] == 'failed':
raise RuntimeError(job['error'])
# 3. Download
for file in job['files']:
with open(file['name'], 'wb') as out:
out.write(requests.get(file['download_url'], timeout=120).content)
import { readFile, writeFile } from 'node:fs/promises';
const BASE = 'https://convertavo.com/fr/api/v1';
const headers = { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` };
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
// 1. Upload
const form = new FormData();
form.append('files[]', new Blob([await readFile('report.pdf')]), 'report.pdf');
form.append('settings[Compression level]', 'Balanced (recommended)');
let res = await fetch(`${BASE}/tools/compress-pdf/convert`, { method: 'POST', headers, body: form });
let job = await res.json();
if (res.status !== 202) throw new Error(job.message);
const statusUrl = job.status_url;
// 2. Poll
while (['queued', 'processing'].includes(job.status)) {
await sleep(2000);
job = await (await fetch(statusUrl, { headers })).json();
}
if (job.status === 'failed') throw new Error(job.error);
// 3. Download
for (const file of job.files) {
const data = Buffer.from(await (await fetch(file.download_url)).arrayBuffer());
await writeFile(file.name, data);
}
Déroulement d’une conversion
Les conversions passent par une file d’attente : l’envoi répond immédiatement et le travail se termine en arrière-plan, généralement en quelques secondes.
status_urlqueued → processing → done ou faileddownload_url, valable une heure/api/v1/toolsLister les outils
Renvoie chaque outil actif avec les noms exacts des réglages qu’attend son endpoint de conversion. Utilisez-le plutôt que de coder les options en dur. Les outils avec "api_supported": false fonctionnent à partir d’un lien et sont réservés au site.
curl https://convertavo.com/fr/api/v1/tools \
-H "Authorization: Bearer $CONVERTAVO_KEY"
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/tools');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
]);
$data = json_decode(curl_exec($ch), true);
print_r($data);
import os
import requests
response = requests.get(
'https://convertavo.com/fr/api/v1/tools',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
const response = await fetch('https://convertavo.com/fr/api/v1/tools', {
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
});
console.log(await response.json());
{
"tools": [
{
"key": "compress-pdf",
"name": "Compress PDF",
"category": "PDF",
"input": "file",
"api_supported": true,
"accepts": "PDF",
"accepts_multiple_files": false,
"settings": [ … ],
"switches": [ … ]
}
]
}
/api/v1/tools/{key}Obtenir un outil
Un outil, à partir de sa clé. Renvoie 404 pour un outil inconnu ou désactivé.
| Paramètre de chemin | Type | Description |
|---|---|---|
key obligatoire | string | La clé de l’outil, par ex. compress-image. Voir la référence des outils. |
curl https://convertavo.com/fr/api/v1/tools/compress-image \
-H "Authorization: Bearer $CONVERTAVO_KEY"
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/tools/compress-image');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
]);
$data = json_decode(curl_exec($ch), true);
print_r($data);
import os
import requests
response = requests.get(
'https://convertavo.com/fr/api/v1/tools/compress-image',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
const response = await fetch('https://convertavo.com/fr/api/v1/tools/compress-image', {
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
});
console.log(await response.json());
{
"key": "compress-image",
"name": "Compress Image",
"category": "Image",
"input": "file",
"api_supported": true,
"accepts": "JPG, PNG, WebP",
"accepts_multiple_files": true,
"settings": [
{ "name": "Quality", "type": "range" },
{ "name": "Output format", "type": "select",
"options": ["Keep original", "JPG", "WebP", "AVIF"] },
{ "name": "Max width", "type": "number", "example": "1920" }
],
"switches": [
{ "index": 0, "name": "Strip EXIF and location data" }
]
}
/api/v1/tools/{key}/convertConvertir des fichiers
Envoie un ou plusieurs fichiers et met la conversion en file d’attente. Envoyez du multipart/form-data. Répond 202 Accepted immédiatement ; suivez status_url pour obtenir le résultat.
| Champ | Type | Description |
|---|---|---|
files[] obligatoire | file[] | Jusqu’à la taille de lot de votre offre par requête (voir Limites) ; divisez les lots plus importants. Chaque fichier coûte les crédits de l’outil. Les outils sans prise en charge multi-fichiers n’en acceptent qu’un. |
settings[<name>] facultatif | string | Un réglage par son nom exact (en anglais), par ex. settings[Output format]=WebP. Les réglages omis prennent la valeur par défaut de l’outil. |
switches[<index>] facultatif | boolean | Une case à cocher par sa position ; 1 activée, 0 désactivée. Les options omises sont désactivées. |
curl -X POST https://convertavo.com/fr/api/v1/tools/compress-image/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@photo.jpg" \
-F 'settings[Quality]=80' \
-F 'settings[Output format]=WebP' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/tools/compress-image/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('photo.jpg'),
'settings[Quality]' => '80',
'settings[Output format]' => 'WebP',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/fr/api/v1/tools/compress-image/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('photo.jpg', 'rb'))],
data={
'settings[Quality]': '80',
'settings[Output format]': 'WebP',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('photo.jpg')]), basename('photo.jpg'));
form.append('settings[Quality]', '80');
form.append('settings[Output format]', 'WebP');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/fr/api/v1/tools/compress-image/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
{
"id": 852,
"status": "queued",
"status_url": "https://convertavo.com/fr/api/v1/conversions/852",
"credits_charged": 1,
"credits_remaining": 2999
}
/api/v1/conversions/{id}Obtenir une conversion
L’état d’une conversion que vous avez lancée. Une conversion appartenant à un autre compte renvoie 404.
| Champ | Type | Description |
|---|---|---|
status | enum | queued, processing, done ou failed. |
error | string | null | En cas de failed : une phrase que l’on peut montrer à une personne. |
files[] | array | En cas de done : name, size en octets, download_url. |
download_all_url | string | Quand une tâche a produit plusieurs fichiers : tous réunis dans un ZIP. |
expires_at | ISO 8601 | Le moment où les fichiers produits sont supprimés. |
curl https://convertavo.com/fr/api/v1/conversions/852 \
-H "Authorization: Bearer $CONVERTAVO_KEY"
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/conversions/852');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
]);
$data = json_decode(curl_exec($ch), true);
print_r($data);
import os
import requests
response = requests.get(
'https://convertavo.com/fr/api/v1/conversions/852',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
const response = await fetch('https://convertavo.com/fr/api/v1/conversions/852', {
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
});
console.log(await response.json());
{
"id": 852,
"tool_key": "compress-image",
"status": "done",
"error": null,
"files": [
{
"name": "photo.webp",
"size": 58766,
"download_url": "https://convertavo.com/fr/download/1814?expires=1794545640&signature=3f9a\u2026"
}
],
"expires_at": "2026-11-13T09:54:00+05:00"
}
Réglages et options
Les options reprennent les commandes de la page de chaque outil : les noms sont ceux de la version anglaise de cette page.
- Les réglages sont désignés par leur libellé :
settings[Compression level]=Maximum compression. Les espaces et la ponctuation font partie du nom ; votre bibliothèque HTTP les encode. - Les listes de choix acceptent exactement l’une des valeurs indiquées, majuscules comprises.
- Les options sont des cases à cocher désignées par leur position, à partir de
0. Sur le site, la première option est cochée par défaut ; via l’API, chaque option est désactivée sauf si vous envoyez1. - Les noms inconnus sont ignorés plutôt que refusés : vérifiez l’orthographe avec Obtenir un outil si une option semble sans effet.
Limites et quotas
| Limite | Free | Basic | Standard | Business | Lifetime |
|---|---|---|---|---|---|
| Crédits | 50 par jour | 3 000 par mois | 10 000 par mois | 40 000 par mois | 60 000 une fois |
| Requêtes par minute | 10 | 30 | 60 | 120 | 60 |
| Fichier le plus lourd | 100 Mo | 200 Mo | 500 Mo | 1 000 Mo | 500 Mo |
| Fichiers par requête | 10 | 20 | 50 | 100 | 50 |
- Les conversions coûtent des crédits par fichier, aux mêmes prix que sur le site et sur le même solde : dix images à 1 crédit chacune coûtent 10.
- Interroger, lister les outils et télécharger les résultats ne coûte rien, mais chaque requête compte dans les requêtes par minute de votre offre.
- Chaque réponse de conversion inclut
credits_chargedetcredits_remaining, pour qu’un script puisse régler son rythme. - Les membres d’une équipe dépensent les crédits de l’équipe.
Erreurs
Les erreurs renvoient un corps JSON avec un message lisible par une personne. Les erreurs de validation (422) incluent aussi un objet errors indexé par champ.
| Statut | Signification | Que faire |
|---|---|---|
| 202 | Acceptée : la conversion est en file d’attente. | Interrogez status_url. |
| 401 | Clé absente, erronée ou révoquée. | Vérifiez l’en-tête Authorization. |
| 404 | Outil inconnu, ou conversion qui ne vous appartient pas. | Vérifiez la clé ou l’identifiant. |
| 410 | Un lien de téléchargement dont le fichier a été supprimé. | Relancez la conversion. |
| 422 | Aucun fichier, un fichier au-delà de la limite de votre offre, ou un outil qui ne fonctionne qu’avec un lien. | Lisez errors et corrigez la requête. |
| 402 | Pas assez de crédits pour cette requête. | Le corps contient credits_needed, credits_remaining et credits_reset_at. Attendez la recharge ou passez à une offre supérieure. |
| 429 | Trop de requêtes par minute pour votre offre. | Attendez le nombre de secondes de Retry-After, puis réessayez. |
| 5xx | Un problème de notre côté. | Réessayez avec un délai exponentiel. |
{
"message": "The files field is required.",
"errors": {
"files": ["The files field is required."]
}
}
Téléchargements et conservation
- Les URL de téléchargement ne demandent aucune clé API : vous pouvez en confier une à un navigateur. Elles sont impossibles à deviner ; traitez-les comme des secrets tant qu’elles sont valables.
- Les fichiers d’entrée et de sortie sont supprimés une heure après la conversion ; ensuite, le lien renvoie
410. - La trace de la conversion (nom, taille, statut) reste dans l’historique de votre tableau de bord.
Bonnes pratiques
done ou failed.5xx et réseau avec un délai croissant. Ne réessayez pas les 4xx : corrigez la requête.Limites actuelles
- Pas encore de webhooks : interrogez l’URL de statut.
- Pas d’endpoint pour l’historique des conversions ; utilisez le tableau de bord.
- Les changements incompatibles sortiront en
/v2;/v1reste tel que documenté.
API QR code
Créez des QR codes statiques et dynamiques, téléchargez-les en SVG, PNG, JPG, WebP ou PDF, changez la destination d’un code dynamique et consultez ses statistiques de scans. Elle utilise la même clé que tout ce qui précède, et le même moteur que le site : les mêmes formats de contenu, les mêmes règles de design, et la même vérification qu’un code se scanne vraiment avant de vous être remis.
| Endpoint | Ce qu’il fait |
|---|---|
GET /api/v1/qr/types | Les types disponibles et les champs de chacun. |
POST /api/v1/qr/render | Génère une image et la renvoie. Rien n’est enregistré. |
POST /api/v1/qr | Enregistre un code statique ou dynamique. |
GET /api/v1/qr | Liste vos codes (mode, status, type, q, per_page). |
GET · PATCH · DELETE /api/v1/qr/{id} | Lit, modifie ou supprime un code. id est l’id renvoyé à sa création. |
GET /api/v1/qr/{id}/image | Le code sous forme de fichier image. |
GET /api/v1/qr/{id}/analytics | Scans, visiteurs uniques, appareils, pays et plus (codes dynamiques uniquement). |
403). Les appels comptent dans les requêtes par minute de votre offre, et chaque clé est limitée à 60 requêtes par minute, et 20 par minute pour tout ce qui génère une image. Au-delà, la réponse est 429 avec un en-tête Retry-After. L’enregistrement des codes et les codes dynamiques suivent les mêmes quotas d’offre que sur le site.
datacontient les champs du type. Demandez les noms à/qr/types: un code Wi-Fi prendssid,password,authentication; un lien prendurl.designest facultatif et chacun de ses champs est validé. Les couleurs s’écrivent#rrggbb; un design qui ne se scannerait pas de façon fiable est refusé avec422, sonscannability_scoreet lesreasons.- Les pages hébergées (carte de visite, menu, pages de fichiers…) et les liens vers les stores d’applications se créent sur le site, pas via l’API.
- Un logo peut être envoyé comme image
data:; les logos SVG sont nettoyés de tout script, et ce qui n’est pas vraiment une image est refusé. - Un code qui appartient à quelqu’un d’autre répond
404, exactement comme s’il n’existait pas.
/api/v1/qr/renderGénérer une image QR
Envoyez ce que le code doit contenir ; l’image revient directement. format vaut svg, png (par défaut), jpg, webp ou pdf ; size est en pixels, jusqu’à 2048.
curl -X POST https://convertavo.com/fr/api/v1/qr/render \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-H "Content-Type: application/json" \
-d '{"type":"wifi","data":{"ssid":"Guest","password":"welcome-2026","authentication":"WPA"},"design":{"dots":{"shape":"rounded","color":{"type":"solid","value":"#1e3a8a"}}},"format":"png","size":512}' \
-o wifi.png
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/qr/render');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('CONVERTAVO_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode(['type' => 'wifi', 'data' => ['ssid' => 'Guest', 'password' => 'welcome-2026', 'authentication' => 'WPA'], 'design' => ['dots' => ['shape' => 'rounded', 'color' => ['type' => 'solid', 'value' => '#1e3a8a']]], 'format' => 'png', 'size' => 512]),
]);
$response = curl_exec($ch);
file_put_contents('wifi.png', $response);
import os
import requests
response = requests.request(
'POST',
'https://convertavo.com/fr/api/v1/qr/render',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
json={'type': 'wifi', 'data': {'ssid': 'Guest', 'password': 'welcome-2026', 'authentication': 'WPA'}, 'design': {'dots': {'shape': 'rounded', 'color': {'type': 'solid', 'value': '#1e3a8a'}}}, 'format': 'png', 'size': 512},
timeout=60,
)
response.raise_for_status()
open('wifi.png', 'wb').write(response.content)
import { writeFile } from 'node:fs/promises';
const response = await fetch('https://convertavo.com/fr/api/v1/qr/render', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CONVERTAVO_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({"type":"wifi","data":{"ssid":"Guest","password":"welcome-2026","authentication":"WPA"},"design":{"dots":{"shape":"rounded","color":{"type":"solid","value":"#1e3a8a"}}},"format":"png","size":512}),
});
if (!response.ok) throw new Error((await response.json()).message);
await writeFile('wifi.png', Buffer.from(await response.arrayBuffer()));
{
"message": "This design would not scan reliably, so it was not made.",
"scannability_score": 40,
"reasons": [
"Contrast between the dots and background is too low (1.4:1, minimum 4.0:1) …"
]
}
/api/v1/qrCréer un QR code
mode vaut static (par défaut : les données sont dans le code, pour toujours) ou dynamic (le code contient un lien court que vous pouvez rediriger plus tard ; le type doit produire une adresse web, comme url). Facultatifs : name, tags, folder_id, design, et pour les codes dynamiques custom_slug. Renvoie 201.
curl -X POST https://convertavo.com/fr/api/v1/qr \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-H "Content-Type: application/json" \
-d '{"type":"url","mode":"dynamic","name":"Spring menu","data":{"url":"https://example.com/menu"},"tags":["spring"]}'
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/qr');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('CONVERTAVO_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode(['type' => 'url', 'mode' => 'dynamic', 'name' => 'Spring menu', 'data' => ['url' => 'https://example.com/menu'], 'tags' => ['spring']]),
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));
import os
import requests
response = requests.request(
'POST',
'https://convertavo.com/fr/api/v1/qr',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
json={'type': 'url', 'mode': 'dynamic', 'name': 'Spring menu', 'data': {'url': 'https://example.com/menu'}, 'tags': ['spring']},
timeout=60,
)
response.raise_for_status()
print(response.json())
const response = await fetch('https://convertavo.com/fr/api/v1/qr', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CONVERTAVO_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({"type":"url","mode":"dynamic","name":"Spring menu","data":{"url":"https://example.com/menu"},"tags":["spring"]}),
});
console.log(await response.json());
{
"data": {
"id": "0f6c1b52-…",
"name": "Spring menu",
"type": "url",
"mode": "dynamic",
"status": "active",
"short_url": "https://…/q/k3d9x2p",
"destination_url": "https://example.com/menu",
"scannability_score": 100,
"scan_count": 0,
"links": {
"self": "https://…/api/v1/qr/0f6c1b52-…",
"image": "https://…/api/v1/qr/0f6c1b52-…/image",
"analytics": "https://…/api/v1/qr/0f6c1b52-…/analytics"
}
}
}
/api/v1/qr PATCH/api/v1/qr/{id}Lister, lire, modifier, supprimer
PATCH accepte name, tags et, pour les codes dynamiques, destination (vérifiée exactement comme une adresse saisie sur le site) et status (paused ou active). Le code imprimé ne change jamais. DELETE renvoie 204.
curl -X PATCH https://convertavo.com/fr/api/v1/qr/0f6c1b52-0000-0000-0000-000000000000 \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-H "Content-Type: application/json" \
-d '{"destination":"https://example.com/summer-menu"}'
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/qr/0f6c1b52-0000-0000-0000-000000000000');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'PATCH',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('CONVERTAVO_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode(['destination' => 'https://example.com/summer-menu']),
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));
import os
import requests
response = requests.request(
'PATCH',
'https://convertavo.com/fr/api/v1/qr/0f6c1b52-0000-0000-0000-000000000000',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
json={'destination': 'https://example.com/summer-menu'},
timeout=60,
)
response.raise_for_status()
print(response.json())
const response = await fetch('https://convertavo.com/fr/api/v1/qr/0f6c1b52-0000-0000-0000-000000000000', {
method: 'PATCH',
headers: {
Authorization: `Bearer ${process.env.CONVERTAVO_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({"destination":"https://example.com/summer-menu"}),
});
console.log(await response.json());
{ "message": "That website is not allowed on this service." }
/api/v1/qr/{id}/image?format=svg&size=1024Télécharger une image
Génère un code enregistré à partir de son design stocké. L’image d’un code dynamique contient son lien court : le fichier que vous imprimez n’a donc jamais besoin de changer.
curl -X GET https://convertavo.com/fr/api/v1/qr/0f6c1b52-0000-0000-0000-000000000000/image?format=svg&size=1024 \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-o qr.svg
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/qr/0f6c1b52-0000-0000-0000-000000000000/image?format=svg&size=1024');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('CONVERTAVO_KEY'),
'Content-Type: application/json',
],
]);
$response = curl_exec($ch);
file_put_contents('qr.svg', $response);
import os
import requests
response = requests.request(
'GET',
'https://convertavo.com/fr/api/v1/qr/0f6c1b52-0000-0000-0000-000000000000/image?format=svg&size=1024',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
timeout=60,
)
response.raise_for_status()
open('qr.svg', 'wb').write(response.content)
import { writeFile } from 'node:fs/promises';
const response = await fetch('https://convertavo.com/fr/api/v1/qr/0f6c1b52-0000-0000-0000-000000000000/image?format=svg&size=1024', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.CONVERTAVO_KEY}`,
'Content-Type': 'application/json',
},
});
if (!response.ok) throw new Error((await response.json()).message);
await writeFile('qr.svg', Buffer.from(await response.arrayBuffer()));
/api/v1/qr/{id}/analyticsStatistiques de scans
range vaut today, 7d, 30d (par défaut), 90d, 365d ou custom avec des dates from et to. Toutes les dates sont en UTC. Les visiteurs sont comptés, jamais identifiés.
curl -X GET https://convertavo.com/fr/api/v1/qr/0f6c1b52-0000-0000-0000-000000000000/analytics?range=7d \
-H "Authorization: Bearer $CONVERTAVO_KEY"
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/qr/0f6c1b52-0000-0000-0000-000000000000/analytics?range=7d');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('CONVERTAVO_KEY'),
'Content-Type: application/json',
],
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));
import os
import requests
response = requests.request(
'GET',
'https://convertavo.com/fr/api/v1/qr/0f6c1b52-0000-0000-0000-000000000000/analytics?range=7d',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
timeout=60,
)
response.raise_for_status()
print(response.json())
const response = await fetch('https://convertavo.com/fr/api/v1/qr/0f6c1b52-0000-0000-0000-000000000000/analytics?range=7d', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.CONVERTAVO_KEY}`,
'Content-Type': 'application/json',
},
});
console.log(await response.json());
{
"data": {
"from": "2026-09-16", "to": "2026-09-22",
"totals": { "scans": 412, "unique": 301 },
"delta": { "scans": 12.5, "unique": 8.1 },
"series": [ … ],
"breakdowns": { "device": [ … ], "country": [ … ], … }
}
}
API de facturation
Créez, émettez et suivez factures, devis et avoirs ; gérez vos clients ; enregistrez les paiements ; téléchargez le PDF et le XML conforme à la structure EN 16931 ; et faites prévenir votre propre logiciel quand une facture est consultée, payée ou en retard. Elle utilise la même clé que tout ce qui précède, et le même moteur que le Générateur de factures : la même validation, les mêmes totaux, la même numérotation, le même PDF.
| Endpoint | Ce qu’il fait |
|---|---|
POST /api/v1/invoices | Créer un brouillon, ou l’émettre aussitôt avec "issue": true. |
GET /api/v1/invoices | Lister les documents, du plus récent au plus ancien (status, type, client_id, issued_from, issued_to, q). |
GET · PATCH · DELETE /api/v1/invoices/{id} | Lire un document ; modifier ou supprimer un brouillon. |
POST /api/v1/invoices/{id}/issue | Émettre un brouillon : le numéro est attribué à ce moment. |
POST /api/v1/invoices/{id}/payments | Enregistrer un paiement. |
POST /api/v1/invoices/{id}/send · /cancel | L’envoyer au client par e-mail · l’annuler. |
GET /api/v1/invoices/{id}/pdf | Le PDF. |
GET /api/v1/invoices/{id}/pdf-a3 · /xml/ubl · /xml/cii | Les données structurées (factures et avoirs). |
GET · POST /api/v1/clients, GET · PATCH · DELETE /api/v1/clients/{id} | Vos clients. |
GET /api/v1/businesses | Les entreprises au nom desquelles vous facturez. |
403). Émettre un document coûte un crédit, exactement comme sur le site ; les brouillons, la lecture et les paiements sont gratuits. Les requêtes par minute suivent votre offre, et au-delà la réponse est 429 avec Retry-After.
- Les montants sont envoyés sous forme de chaînes décimales dans la devise du document :
"1250.50", jamais un nombre à virgule flottante. Ils reviennent deux fois : en chaînes décimales dansamountset en entiers en unités mineures dansamounts_minor; utilisez les entiers pour les calculs. Le serveur calcule lui-même chaque total ; les totaux envoyés dans une requête sont ignorés. - Idempotence. Envoyez un en-tête
Idempotency-Keyavec toutPOST,PATCHouDELETE. La même clé avec le même corps dans un délai de 24 heures renvoie la première réponse, marquéeIdempotent-Replayed: true: si une connexion coupe, renvoyez simplement la requête. La même clé avec un corps différent est refusée avec422. - La pagination se fait par curseur : renvoyez
meta.next_cursoren tant quecursorjusqu’à ce qu’il vaillenull.per_pageva jusqu’à 100. - Une facture ou un client qui appartient à quelqu’un d’autre répond
404, exactement comme s’il n’existait pas. - La référence complète lisible par les machines : document OpenAPI 3.1, généré à partir du code qui sert ces endpoints.
/api/v1/invoicesCréer et émettre une facture
Le corps est la facture telle que l’éditeur la conserve : currency, lines (chacune avec description, quantity, unit_price, tax_rate, tax_category), et éventuellement les dates, buyer, seller, les remises, la livraison, les notes et le modèle. Indiquez un client_id pour remplir l’acheteur à partir d’un client enregistré, et un business_id pour choisir laquelle de vos entreprises l’émet. Avec "issue": true, elle est numérotée aussitôt et la réponse contient son pdf_url ; sans cela, elle reste un brouillon modifiable.
curl -X POST https://convertavo.com/fr/api/v1/invoices \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-H "Content-Type: application/json" \
-d '{"issue":true,"currency":"USD","issue_date":"2026-10-20","due_date":"2026-11-03","buyer":{"name":"Northwind Studio","email":"accounts@northwind.example"},"lines":[{"description":"Logo design","quantity":"1","unit_price":"450.00","tax_rate":"0","tax_category":"zero"},{"description":"Brand guidelines (hours)","quantity":"6","unit_price":"65.00","tax_rate":"0","tax_category":"zero"}],"notes":"Thank you for your business."}'
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/invoices');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('CONVERTAVO_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode(['issue' => true, 'currency' => 'USD', 'issue_date' => '2026-10-20', 'due_date' => '2026-11-03', 'buyer' => ['name' => 'Northwind Studio', 'email' => 'accounts@northwind.example'], 'lines' => [['description' => 'Logo design', 'quantity' => '1', 'unit_price' => '450.00', 'tax_rate' => '0', 'tax_category' => 'zero'], ['description' => 'Brand guidelines (hours)', 'quantity' => '6', 'unit_price' => '65.00', 'tax_rate' => '0', 'tax_category' => 'zero']], 'notes' => 'Thank you for your business.']),
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));
import os
import requests
response = requests.request(
'POST',
'https://convertavo.com/fr/api/v1/invoices',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
json={'issue': True, 'currency': 'USD', 'issue_date': '2026-10-20', 'due_date': '2026-11-03', 'buyer': {'name': 'Northwind Studio', 'email': 'accounts@northwind.example'}, 'lines': [{'description': 'Logo design', 'quantity': '1', 'unit_price': '450.00', 'tax_rate': '0', 'tax_category': 'zero'}, {'description': 'Brand guidelines (hours)', 'quantity': '6', 'unit_price': '65.00', 'tax_rate': '0', 'tax_category': 'zero'}], 'notes': 'Thank you for your business.'},
timeout=60,
)
response.raise_for_status()
print(response.json())
const response = await fetch('https://convertavo.com/fr/api/v1/invoices', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CONVERTAVO_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({"issue":true,"currency":"USD","issue_date":"2026-10-20","due_date":"2026-11-03","buyer":{"name":"Northwind Studio","email":"accounts@northwind.example"},"lines":[{"description":"Logo design","quantity":"1","unit_price":"450.00","tax_rate":"0","tax_category":"zero"},{"description":"Brand guidelines (hours)","quantity":"6","unit_price":"65.00","tax_rate":"0","tax_category":"zero"}],"notes":"Thank you for your business."}),
});
console.log(await response.json());
{
"data": {
"id": "0199a2b4-7a10-71d4-8c3b-1a2b3c4d5e6f",
"object": "invoice",
"type": "invoice",
"status": "partially_paid",
"number": "INV-2026-0042",
"business_id": 12,
"client_id": 34,
"client_name": "Northwind Studio",
"currency": "USD",
"language": "en",
"issue_date": "2026-10-20",
"due_date": "2026-11-03",
"reference": "Project Kite",
"po_number": "PO-77",
"related_invoice_id": "0199a2b4-5d00-7e2f-a1b2-c3d4e5f60718",
"amounts": {
"subtotal": "840.00",
"discount": "0.00",
"shipping": "0.00",
"tax": "0.00",
"withholding": "0.00",
"rounding": "0.00",
"total": "840.00",
"payable": "840.00",
"paid": "400.00",
"credited": "0.00",
"balance": "440.00"
},
"amounts_minor": {
"subtotal": 84000,
"discount": 0,
"shipping": 0,
"tax": 0,
"withholding": 0,
"rounding": 0,
"total": 84000,
"payable": 84000,
"paid": 40000,
"credited": 0,
"balance": 44000
},
"issued_at": "2026-10-20T09:05:00+05:00",
"sent_at": "2026-10-20T09:06:00+05:00",
"viewed_at": "2026-10-20T11:30:00+05:00",
"paid_at": "2026-10-21T10:00:00+05:00",
"cancelled_at": "2026-10-21T10:00:00+05:00",
"pdf_url": "https://convertavo.com/api/v1/invoices/0199a2b4-7a10-71d4-8c3b-1a2b3c4d5e6f/pdf",
"pdf_sha256": "abababababababababababababababababababababababababababababababab",
"created_at": "2026-10-20T09:00:00+05:00",
"updated_at": "2026-10-21T10:00:00+05:00"
}
}
Les erreurs reviennent en 422 avec errors indexé par chemin de champ (lines.1.unit_price), pour pouvoir les afficher à côté du bon champ. S’il ne reste plus de crédits, l’émission répond 402 et le brouillon est conservé (draft_id).
/api/v1/invoices/{id}/paymentsFactures, paiements, envoi
Un paiement est un amount (chaîne décimale) ou un amount_minor, avec paid_on, method et reference. Indiquez votre propre external_id (l’identifiant de transaction de la banque ou de la passerelle) et le même paiement n’est enregistré qu’une fois, quel que soit le nombre de fois où il arrive. La facture passe d’elle-même en partially_paid puis paid.
curl -X POST https://convertavo.com/fr/api/v1/invoices/0199a2b4-7a10-71d4-8c3b-1a2b3c4d5e6f/payments \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-H "Content-Type: application/json" \
-d '{"amount":"300.00","method":"bank_transfer","reference":"TRX-9921","external_id":"bank-tx-55120"}'
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/invoices/0199a2b4-7a10-71d4-8c3b-1a2b3c4d5e6f/payments');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('CONVERTAVO_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode(['amount' => '300.00', 'method' => 'bank_transfer', 'reference' => 'TRX-9921', 'external_id' => 'bank-tx-55120']),
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));
import os
import requests
response = requests.request(
'POST',
'https://convertavo.com/fr/api/v1/invoices/0199a2b4-7a10-71d4-8c3b-1a2b3c4d5e6f/payments',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
json={'amount': '300.00', 'method': 'bank_transfer', 'reference': 'TRX-9921', 'external_id': 'bank-tx-55120'},
timeout=60,
)
response.raise_for_status()
print(response.json())
const response = await fetch('https://convertavo.com/fr/api/v1/invoices/0199a2b4-7a10-71d4-8c3b-1a2b3c4d5e6f/payments', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CONVERTAVO_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({"amount":"300.00","method":"bank_transfer","reference":"TRX-9921","external_id":"bank-tx-55120"}),
});
console.log(await response.json());
{
"data": { "id": 56, "object": "payment", "amount_minor": 30000, "amount": "300.00", "currency": "USD", "paid_on": "2026-10-21", "method": "bank_transfer", "reference": "TRX-9921" },
"invoice": { "id": "0199a2b4-…", "status": "partially_paid", "amounts_minor": { "payable": 84000, "paid": 30000, "balance": 54000, … }, … }
}
- Un document émis ne peut être ni modifié ni supprimé (
409) : corrigez-le avec un avoir depuis le site, ou annulez-le tant que rien n’a été payé ni crédité. POST …/issuesur un document déjà émis le renvoie inchangé : vous pouvez le répéter sans risque.POST …/sendenvoie au client le PDF et un lien privé par e-mail, dans la langue du document ;toremplace l’adresse.
/api/v1/clientsClients
Créez un client avec au moins un name ; ajoutez email, address, tax_number, country (code ISO), currency, language et payment_terms_days. PATCH ne modifie que les champs envoyés (null en efface un) et "archived": true archive. Un client qui a des documents ne peut pas être supprimé : archivez-le plutôt, et son historique reste complet.
curl -X POST https://convertavo.com/fr/api/v1/clients \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Northwind Studio","email":"accounts@northwind.example","country":"US","currency":"USD"}'
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/clients');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('CONVERTAVO_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode(['name' => 'Northwind Studio', 'email' => 'accounts@northwind.example', 'country' => 'US', 'currency' => 'USD']),
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));
import os
import requests
response = requests.request(
'POST',
'https://convertavo.com/fr/api/v1/clients',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
json={'name': 'Northwind Studio', 'email': 'accounts@northwind.example', 'country': 'US', 'currency': 'USD'},
timeout=60,
)
response.raise_for_status()
print(response.json())
const response = await fetch('https://convertavo.com/fr/api/v1/clients', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CONVERTAVO_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({"name":"Northwind Studio","email":"accounts@northwind.example","country":"US","currency":"USD"}),
});
console.log(await response.json());
/api/v1/invoices/{id}/pdf-a3PDF/A-3 et XML
Pour les factures et les avoirs : le même document en données structurées, conforme à la structure EN 16931, la norme européenne de facturation électronique. /xml/ubl est en UBL 2.1, /xml/cii en UN/CEFACT CII, et /pdf-a3 est une copie PDF/A-3 du PDF contenant le fichier CII sous le nom factur-x.xml : un seul fichier que les personnes lisent et que les logiciels comptables importent.
409, car ces formats ne prévoient pas de place pour elle.
curl -X GET https://convertavo.com/fr/api/v1/invoices/0199a2b4-7a10-71d4-8c3b-1a2b3c4d5e6f/xml/ubl \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-o invoice-ubl.xml
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/invoices/0199a2b4-7a10-71d4-8c3b-1a2b3c4d5e6f/xml/ubl');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('CONVERTAVO_KEY'),
'Content-Type: application/json',
],
]);
$response = curl_exec($ch);
file_put_contents('invoice-ubl.xml', $response);
import os
import requests
response = requests.request(
'GET',
'https://convertavo.com/fr/api/v1/invoices/0199a2b4-7a10-71d4-8c3b-1a2b3c4d5e6f/xml/ubl',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
timeout=60,
)
response.raise_for_status()
open('invoice-ubl.xml', 'wb').write(response.content)
import { writeFile } from 'node:fs/promises';
const response = await fetch('https://convertavo.com/fr/api/v1/invoices/0199a2b4-7a10-71d4-8c3b-1a2b3c4d5e6f/xml/ubl', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.CONVERTAVO_KEY}`,
'Content-Type': 'application/json',
},
});
if (!response.ok) throw new Error((await response.json()).message);
await writeFile('invoice-ubl.xml', Buffer.from(await response.arrayBuffer()));
Webhooks
Ajoutez une adresse https dans le tableau de bord (onglet Entreprise → Webhooks) et choisissez les événements. Chacun est un POST JSON : le type de l’événement, une heure created, et la facture en data.object (plus data.payment pour les événements de paiement) :
invoice.issued, invoice.sent, invoice.viewed, invoice.reminder_sent, invoice.overdue, invoice.paid, invoice.cancelled, invoice.credited, payment.recorded, payment.refunded, quote.accepted, quote.declined
- Vérifiez la signature.
Convertavo-Signaturevautt=<unix time>,v1=<signature>, où la signature est le HMAC-SHA256 hexadécimal de<t>.<raw body>calculé avec le secret de signature de votre endpoint. Recalculez-la, comparez en temps constant, et refusez tout ce qui date de plus de cinq minutes. - Répondez vite. Tout
2xxsous 10 secondes vaut livraison. Sinon, l’envoi est retenté après une minute, cinq minutes, une demi-heure, deux heures et six heures. Une adresse qui échoue 15 livraisons d’affilée est désactivée jusqu’à ce que vous la réactiviez. - Attendez-vous à des doublons.
Convertavo-Deliveryest identique à chaque nouvelle tentative d’une même livraison : gardez la trace de celles déjà traitées et ignorez-les.
<?php
// $secret: the webhook's signing secret.
$body = file_get_contents('php://input');
$header = $_SERVER['HTTP_CONVERTAVO_SIGNATURE'] ?? '';
if (! preg_match('/^t=(\d+),v1=([0-9a-f]{64})$/', $header, $m)
|| abs(time() - (int) $m[1]) > 300
|| ! hash_equals(hash_hmac('sha256', $m[1].'.'.$body, $secret), $m[2])) {
http_response_code(400);
exit;
}
$event = json_decode($body, true);
// $event['type'], $event['data']['object'] …
http_response_code(200);
import { createHmac, timingSafeEqual } from 'node:crypto';
// rawBody: the request body exactly as received (a Buffer).
export function verify(rawBody, header, secret) {
const m = /^t=(\d+),v1=([0-9a-f]{64})$/.exec(header ?? '');
if (!m || Math.abs(Date.now() / 1000 - Number(m[1])) > 300) return false;
const expected = createHmac('sha256', secret)
.update(`${m[1]}.${rawBody}`)
.digest();
return timingSafeEqual(expected, Buffer.from(m[2], 'hex'));
}
API des liens courts
Raccourcissez des liens, changez leur destination et consultez leurs clics : le même moteur et les mêmes contrôles de sécurité que le raccourcisseur d’URL. Elle utilise la même clé que tout ce qui précède.
| Endpoint | Ce qu’il fait |
|---|---|
POST /api/v1/links | Raccourcir un lien. |
POST /api/v1/links/bulk | Raccourcir jusqu’à 100 liens en un seul appel. |
GET /api/v1/links | Lister vos liens (search, tag, per_page jusqu’à 100, page). |
GET · PATCH · DELETE /api/v1/links/{code} | Lire, modifier ou supprimer un lien. |
GET /api/v1/links/{code}/stats | Clics, visiteurs uniques, pays, appareils, sites référents et plus. |
429 avec Retry-After), et les nouveaux liens suivent les mêmes limites horaires et quotidiennes que sur le site : 100 par heure et 1 000 par jour et par compte.
- Chaque destination est vérifiée exactement comme sur le site : ce doit être une adresse
http(s)publique, pas un autre raccourcisseur, absente de la liste de blocage et non signalée par Google Safe Browsing. Un refus renvoie422avec unmessageque vous pouvez montrer à une personne. - Les codes ne tiennent pas compte de la casse. Un lien qui appartient à quelqu’un d’autre répond
404, exactement comme s’il n’existait pas. - Un lien bloqué par sécurité peut être lu mais pas modifié (
423). - Non disponible via RapidAPI : les liens appartiennent à votre compte.
/api/v1/linksRaccourcir un lien
url est obligatoire. Facultatifs : code (fin personnalisée, 3 à 40 lettres, chiffres, - ou _), title, tags, expires_at et activates_at (ISO 8601, ou heure locale avec timezone), click_limit, one_time, password, expired_redirect_url, redirect_type (302 par défaut ou 301), og_title / og_description / og_image pour l’aperçu sur les réseaux sociaux, les cinq balises utm_*, et clean: true pour retirer les paramètres de suivi comme fbclid. Renvoie 201.
curl -X POST https://convertavo.com/fr/api/v1/links \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/spring-menu","code":"spring-menu","utm_source":"newsletter","utm_medium":"email","expires_at":"2026-12-31T23:59:00Z"}'
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/links');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('CONVERTAVO_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode(['url' => 'https://example.com/spring-menu', 'code' => 'spring-menu', 'utm_source' => 'newsletter', 'utm_medium' => 'email', 'expires_at' => '2026-12-31T23:59:00Z']),
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));
import os
import requests
response = requests.request(
'POST',
'https://convertavo.com/fr/api/v1/links',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
json={'url': 'https://example.com/spring-menu', 'code': 'spring-menu', 'utm_source': 'newsletter', 'utm_medium': 'email', 'expires_at': '2026-12-31T23:59:00Z'},
timeout=60,
)
response.raise_for_status()
print(response.json())
const response = await fetch('https://convertavo.com/fr/api/v1/links', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CONVERTAVO_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({"url":"https://example.com/spring-menu","code":"spring-menu","utm_source":"newsletter","utm_medium":"email","expires_at":"2026-12-31T23:59:00Z"}),
});
console.log(await response.json());
{
"code": "spring-menu",
"short_url": "https://…/s/spring-menu",
"destination": "https://example.com/spring-menu?utm_source=newsletter&utm_medium=email",
"safety_status": "clean",
"warnings": [],
"clicks": 0,
"is_active": true,
"redirect_type": 302,
"expires_at": "2026-12-31T23:59:00+00:00",
"urls": {
"qr_png": "https://…/tools/url-shortener/links/spring-menu/qr.png",
"qr_svg": "https://…/tools/url-shortener/links/spring-menu/qr.svg",
"stats": "https://…/tools/url-shortener/stats/spring-menu"
}
}
safety_status vaut clean, pending (Safe Browsing n’a pas encore pu être interrogé ; le lien est revérifié) ou suspicious : le lien fonctionne, mais les visiteurs voient d’abord un avertissement, et warnings en donne la raison.
/api/v1/links/{code} PATCH/api/v1/links/{code}Lister, lire, modifier, supprimer
PATCH accepte url (une nouvelle destination, vérifiée comme un nouveau lien ; le lien court et son QR code restent les mêmes), toute option ci-dessus, remove_password: true, et is_active pour mettre en pause ou réactiver. DELETE renvoie 204 ; l’adresse répond ensuite 410 Gone et n’est jamais réutilisée.
curl -X PATCH https://convertavo.com/fr/api/v1/links/spring-menu \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/summer-menu","is_active":true}'
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/links/spring-menu');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'PATCH',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('CONVERTAVO_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode(['url' => 'https://example.com/summer-menu', 'is_active' => true]),
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));
import os
import requests
response = requests.request(
'PATCH',
'https://convertavo.com/fr/api/v1/links/spring-menu',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
json={'url': 'https://example.com/summer-menu', 'is_active': True},
timeout=60,
)
response.raise_for_status()
print(response.json())
const response = await fetch('https://convertavo.com/fr/api/v1/links/spring-menu', {
method: 'PATCH',
headers: {
Authorization: `Bearer ${process.env.CONVERTAVO_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({"url":"https://example.com/summer-menu","is_active":true}),
});
console.log(await response.json());
{ "message": "That is already a short link from another service. Shorten the address it leads to instead." }
/api/v1/links/bulkRaccourcir en masse
links est un tableau de 100 objets au maximum, avec les mêmes champs qu’un lien unique. Chacun réussit ou échoue indépendamment ; la réponse les liste dans l’ordre.
curl -X POST https://convertavo.com/fr/api/v1/links/bulk \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-H "Content-Type: application/json" \
-d '{"links":[{"url":"https://example.com/a"},{"url":"https://example.com/b","code":"page-b"}]}'
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/links/bulk');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('CONVERTAVO_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode(['links' => [['url' => 'https://example.com/a'], ['url' => 'https://example.com/b', 'code' => 'page-b']]]),
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));
import os
import requests
response = requests.request(
'POST',
'https://convertavo.com/fr/api/v1/links/bulk',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
json={'links': [{'url': 'https://example.com/a'}, {'url': 'https://example.com/b', 'code': 'page-b'}]},
timeout=60,
)
response.raise_for_status()
print(response.json())
const response = await fetch('https://convertavo.com/fr/api/v1/links/bulk', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CONVERTAVO_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({"links":[{"url":"https://example.com/a"},{"url":"https://example.com/b","code":"page-b"}]}),
});
console.log(await response.json());
{
"results": [
{ "index": 0, "link": { "code": "x7kq2m", "short_url": "https://…/s/x7kq2m", … } },
{ "index": 1, "error": "That back-half is already taken." }
]
}
/api/v1/links/{code}/statsStatistiques de clics
range vaut 7d, 30d (par défaut), 90d, 12m, all, ou custom avec from et to ; grain vaut hour, day, week ou month ; bots=1 ajoute les visites automatiques à clicks. Les jours sont en UTC. Aucun cookie n’est utilisé : les visiteurs uniques sont comptés par jour à partir d’une valeur qui change chaque jour, et ne peuvent donc jamais être rattachés à une personne.
curl https://convertavo.com/fr/api/v1/links/spring-menu/stats?range=7d \
-H "Authorization: Bearer $CONVERTAVO_KEY"
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/links/spring-menu/stats?range=7d');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
]);
$data = json_decode(curl_exec($ch), true);
print_r($data);
import os
import requests
response = requests.get(
'https://convertavo.com/fr/api/v1/links/spring-menu/stats?range=7d',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())
const response = await fetch('https://convertavo.com/fr/api/v1/links/spring-menu/stats?range=7d', {
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
});
console.log(await response.json());
{
"range": { "from": "2026-10-11", "to": "2026-10-17", "grain": "day", "includes_bots": false },
"totals": { "clicks": 412, "people": 412, "unique_daily": 330, "bots": 17, "qr_scans": 96, "all_time": 1288 },
"series": [ { "label": "Sun 11 Oct", "start": "2026-10-11", "clicks": 51 }, … ],
"breakdowns": {
"by_country": { "PK": 220, "AE": 81, "GB": 60, "other": 51 },
"by_device": { "mobile": 301, "desktop": 104, "tablet": 7 },
"by_source": { "link": 316, "qr": 96 }
}
}
Webhooks de clics
Ajoutez une URL de webhook dans Tableau de bord → Liens courts et chaque clic sur vos liens lui est envoyé en POST JSON, quelques secondes après. Les robots ne sont pas envoyés.
{
"event": "link.clicked",
"link": { "code": "spring-menu", "short_url": "https://…/s/spring-menu" },
"click": {
"at": "2026-10-17T12:04:55+00:00",
"country": "PK", "device": "mobile", "os": "Android", "browser": "Chrome",
"referrer": "www.instagram.com", "source": "link", "utm_campaign": "spring-sale"
}
}
- Chaque requête porte
X-Convertavo-Signature: sha256=…, un HMAC-SHA256 du corps brut calculé avec le secret de votre webhook. Calculez-le vous-même et comparez avant de faire confiance à la requête. - Répondez par un
2xxsous 5 secondes. Sinon, l’envoi est retenté après 10 secondes, 1 minute et 5 minutes. - Après 20 échecs d’envoi consécutifs, le webhook est désactivé ; réactivez-le dans le tableau de bord.
- Les adresses de webhook doivent être des URL
httpspubliques.
Référence des outils
Chaque outil, ses fichiers acceptés, tous ses réglages et une requête fonctionnelle. Cliquez sur un outil pour le déplier.
PDF 10 outils
Compresser PDF
compress-pdf
L’outil Compresser PDF de Convertavo réduit un gros PDF pour qu’il passe dans un e-mail ou respecte une limite d’envoi. Votre texte reste net. Si un formulaire exige un fichier de moins de 1 Mo, vous pouvez indiquer cette valeur comme taille cible. Vous pouvez comparer votre nouvelle page à l’ancienne, côte à côte, avant de la télécharger.
/api/v1/tools/compress-pdf/convert
- Accepte
- Fichiers par requête
- Un seul (envoyez un fichier par requête)
- Durée habituelle
- 5 à 15 secondes
- Essayer
- Ouvrir la page de l’outil →
Corps de la requête multipart/form-data
| Champ | Type | Description |
|---|---|---|
files[] obligatoire |
file | Le fichier à convertir (PDF). La limite de taille dépend de votre offre. |
settings[Compression level] facultatif |
string |
Balanced (recommended)Maximum compressionLight — best quality |
settings[Image quality] facultatif |
string |
Web (150 DPI)Print (300 DPI)Keep original |
settings[Target size (MB)] facultatif |
number |
Number. Exemple : 1080
|
switches[0] facultatif |
boolean | Downsample embedded images. Envoyez 1 pour l’activer. |
switches[1] facultatif |
boolean | Remove metadata and leftover editing data. Envoyez 1 pour l’activer. |
switches[2] facultatif |
boolean | Subset embedded fonts. Envoyez 1 pour l’activer. |
Exemple de requête
curl -X POST https://convertavo.com/fr/api/v1/tools/compress-pdf/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@document.pdf" \
-F 'settings[Compression level]=Balanced (recommended)' \
-F 'settings[Image quality]=Web (150 DPI)' \
-F 'settings[Target size (MB)]=1080' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/tools/compress-pdf/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('document.pdf'),
'settings[Compression level]' => 'Balanced (recommended)',
'settings[Image quality]' => 'Web (150 DPI)',
'settings[Target size (MB)]' => '1080',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/fr/api/v1/tools/compress-pdf/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('document.pdf', 'rb'))],
data={
'settings[Compression level]': 'Balanced (recommended)',
'settings[Image quality]': 'Web (150 DPI)',
'settings[Target size (MB)]': '1080',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('document.pdf')]), basename('document.pdf'));
form.append('settings[Compression level]', 'Balanced (recommended)');
form.append('settings[Image quality]', 'Web (150 DPI)');
form.append('settings[Target size (MB)]', '1080');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/fr/api/v1/tools/compress-pdf/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
JPG en PDF
jpg-to-pdf
Réunissez des photos ou des scans en un seul PDF, en choisissant le format de page, l’orientation et les marges. Gratuit pour les fichiers de moins de 25 Mo, sans compte.
/api/v1/tools/jpg-to-pdf/convert
- Accepte
- JPG, PNG, HEIC
- Fichiers par requête
- Jusqu’à la taille de lot de votre offre (5 en Free, jusqu’à 100 en Business)
- Durée habituelle
- 3 à 8 secondes
- Essayer
- Ouvrir la page de l’outil →
Corps de la requête multipart/form-data
| Champ | Type | Description |
|---|---|---|
files[] obligatoire |
file[] | Un ou plusieurs fichiers (JPG, PNG, HEIC). La limite de taille dépend de votre offre. |
settings[Page size] facultatif |
string |
A4LetterFit to image |
settings[Orientation] facultatif |
string |
AutoPortraitLandscape |
settings[Margin] facultatif |
string |
NoneSmallMedium |
settings[Images per page] facultatif |
string |
124 |
switches[0] facultatif |
boolean | Compress images to reduce file size. Envoyez 1 pour l’activer. |
switches[1] facultatif |
boolean | Add a page number to each page. Envoyez 1 pour l’activer. |
switches[2] facultatif |
boolean | Sort files by name before combining. Envoyez 1 pour l’activer. |
Exemple de requête
curl -X POST https://convertavo.com/fr/api/v1/tools/jpg-to-pdf/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@photo.jpg" \
-F "files[]=@photo-2.jpg" \
-F 'settings[Page size]=A4' \
-F 'settings[Orientation]=Auto' \
-F 'settings[Margin]=None' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/tools/jpg-to-pdf/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('photo.jpg'),
'files[1]' => new CURLFile('photo-2.jpg'),
'settings[Page size]' => 'A4',
'settings[Orientation]' => 'Auto',
'settings[Margin]' => 'None',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/fr/api/v1/tools/jpg-to-pdf/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('photo.jpg', 'rb')), ('files[]', open('photo-2.jpg', 'rb'))],
data={
'settings[Page size]': 'A4',
'settings[Orientation]': 'Auto',
'settings[Margin]': 'None',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('photo.jpg')]), basename('photo.jpg'));
form.append('files[]', new Blob([await readFile('photo-2.jpg')]), basename('photo-2.jpg'));
form.append('settings[Page size]', 'A4');
form.append('settings[Orientation]', 'Auto');
form.append('settings[Margin]', 'None');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/fr/api/v1/tools/jpg-to-pdf/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
Fusionner PDF
merge-pdf
Importez vos PDF, réorganisez-les et téléchargez un seul fichier combiné. Gratuit, sans compte et sans filigrane.
/api/v1/tools/merge-pdf/convert
- Accepte
- Fichiers par requête
- Jusqu’à la taille de lot de votre offre (5 en Free, jusqu’à 100 en Business)
- Durée habituelle
- 2 à 5 secondes
- Essayer
- Ouvrir la page de l’outil →
Corps de la requête multipart/form-data
| Champ | Type | Description |
|---|---|---|
files[] obligatoire |
file[] | Un ou plusieurs fichiers (PDF). La limite de taille dépend de votre offre. |
settings[File order] facultatif |
string |
Manual (drag to reorder)Filename A–ZUpload order |
switches[0] facultatif |
boolean | Add a bookmark for each source file. Envoyez 1 pour l’activer. |
Exemple de requête
curl -X POST https://convertavo.com/fr/api/v1/tools/merge-pdf/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@document.pdf" \
-F "files[]=@appendix.pdf" \
-F 'settings[File order]=Manual (drag to reorder)' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/tools/merge-pdf/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('document.pdf'),
'files[1]' => new CURLFile('appendix.pdf'),
'settings[File order]' => 'Manual (drag to reorder)',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/fr/api/v1/tools/merge-pdf/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('document.pdf', 'rb')), ('files[]', open('appendix.pdf', 'rb'))],
data={
'settings[File order]': 'Manual (drag to reorder)',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('document.pdf')]), basename('document.pdf'));
form.append('files[]', new Blob([await readFile('appendix.pdf')]), basename('appendix.pdf'));
form.append('settings[File order]', 'Manual (drag to reorder)');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/fr/api/v1/tools/merge-pdf/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
PDF en Excel
pdf-to-excel
Le convertisseur PDF en Excel gratuit de Convertavo extrait les tableaux de votre PDF et les place dans une vraie feuille de calcul. Les lignes et les colonnes restent à leur place. Il fonctionne avec les relevés bancaires, les factures, les listes de prix et les rapports, même quand le tableau n’a pas de lignes.
/api/v1/tools/pdf-to-excel/convert
- Accepte
- Fichiers par requête
- Un seul (envoyez un fichier par requête)
- Durée habituelle
- 10 à 30 secondes
- Essayer
- Ouvrir la page de l’outil →
Corps de la requête multipart/form-data
| Champ | Type | Description |
|---|---|---|
files[] obligatoire |
file | Le fichier à convertir (PDF). La limite de taille dépend de votre offre. |
settings[Page range] facultatif |
string |
Text. Exemple : 1-3
|
settings[Output format] facultatif |
string |
Excel (.xlsx)CSV (.csv)Google Sheets |
settings[Header row] facultatif |
string |
Detect automaticallyFirst row is headerNo header |
settings[Decimal separator] facultatif |
string |
Point (1.50)Comma (1,50) |
switches[0] facultatif |
boolean | Keep empty rows. Envoyez 1 pour l’activer. |
switches[1] facultatif |
boolean | Treat numbers as text. Envoyez 1 pour l’activer. |
Exemple de requête
curl -X POST https://convertavo.com/fr/api/v1/tools/pdf-to-excel/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@document.pdf" \
-F 'settings[Page range]=1-3' \
-F 'settings[Output format]=Excel (.xlsx)' \
-F 'settings[Header row]=Detect automatically' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/tools/pdf-to-excel/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('document.pdf'),
'settings[Page range]' => '1-3',
'settings[Output format]' => 'Excel (.xlsx)',
'settings[Header row]' => 'Detect automatically',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/fr/api/v1/tools/pdf-to-excel/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('document.pdf', 'rb'))],
data={
'settings[Page range]': '1-3',
'settings[Output format]': 'Excel (.xlsx)',
'settings[Header row]': 'Detect automatically',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('document.pdf')]), basename('document.pdf'));
form.append('settings[Page range]', '1-3');
form.append('settings[Output format]', 'Excel (.xlsx)');
form.append('settings[Header row]', 'Detect automatically');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/fr/api/v1/tools/pdf-to-excel/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
PDF en JPG
pdf-to-jpg
Transformez chaque page en JPG, PNG ou WebP à publier, intégrer ou modifier dans n’importe quel éditeur d’images. Gratuit, sans compte et sans filigrane.
/api/v1/tools/pdf-to-jpg/convert
- Accepte
- Fichiers par requête
- Un seul (envoyez un fichier par requête)
- Durée habituelle
- 4 à 12 secondes
- Essayer
- Ouvrir la page de l’outil →
Corps de la requête multipart/form-data
| Champ | Type | Description |
|---|---|---|
files[] obligatoire |
file | Le fichier à convertir (PDF). La limite de taille dépend de votre offre. |
settings[Page range] facultatif |
string |
Text. Exemple : 1-3
|
settings[Image format] facultatif |
string |
JPGPNGWebP |
settings[Resolution] facultatif |
string |
150 DPI (screen)300 DPI (print)600 DPI (archival) |
settings[Quality] facultatif |
integer |
Whole number, 1–100. Exemple : 80
|
switches[0] facultatif |
boolean | Deliver as a zip archive. Envoyez 1 pour l’activer. |
switches[1] facultatif |
boolean | Use a white background instead of transparency. Envoyez 1 pour l’activer. |
switches[2] facultatif |
boolean | Extract embedded images only. Envoyez 1 pour l’activer. |
Exemple de requête
curl -X POST https://convertavo.com/fr/api/v1/tools/pdf-to-jpg/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@document.pdf" \
-F 'settings[Page range]=1-3' \
-F 'settings[Image format]=JPG' \
-F 'settings[Resolution]=150 DPI (screen)' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/tools/pdf-to-jpg/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('document.pdf'),
'settings[Page range]' => '1-3',
'settings[Image format]' => 'JPG',
'settings[Resolution]' => '150 DPI (screen)',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/fr/api/v1/tools/pdf-to-jpg/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('document.pdf', 'rb'))],
data={
'settings[Page range]': '1-3',
'settings[Image format]': 'JPG',
'settings[Resolution]': '150 DPI (screen)',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('document.pdf')]), basename('document.pdf'));
form.append('settings[Page range]', '1-3');
form.append('settings[Image format]', 'JPG');
form.append('settings[Resolution]', '150 DPI (screen)');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/fr/api/v1/tools/pdf-to-jpg/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
PDF en texte
pdf-to-text
Importez un PDF et obtenez un texte propre à copier en quelques secondes. Les pages scannées passent par l’OCR automatiquement. Gratuit, sans compte et sans filigrane.
/api/v1/tools/pdf-to-text/convert
- Accepte
- Fichiers par requête
- Un seul (envoyez un fichier par requête)
- Durée habituelle
- 3 à 8 secondes
- Essayer
- Ouvrir la page de l’outil →
Corps de la requête multipart/form-data
| Champ | Type | Description |
|---|---|---|
files[] obligatoire |
file | Le fichier à convertir (PDF). La limite de taille dépend de votre offre. |
settings[Page range] facultatif |
string |
Text. Exemple : 1-3
|
settings[Output format] facultatif |
string |
Plain text (.txt)Word (.docx)Markdown (.md)Web page (.html)JSON (pages, lines, tables) |
settings[Text layout] facultatif |
string |
Keep line breaksMerge into paragraphsPreserve layout (columns & spacing)Single block of text |
settings[Language] facultatif |
string |
Auto-detectEnglishUrduArabicHindiChinese (Simplified)Chinese (Traditional)SpanishFrenchGermanPortugueseRussianJapaneseKoreanItalianTurkishPersian (Farsi)BengaliPunjabiPashtoSindhiNepaliMarathiGujaratiTamilTeluguIndonesianMalayVietnameseThaiFilipinoDutchPolishUkrainianSwedishCzechRomanianHungarianGreekHebrew |
settings[Document password] facultatif |
string |
Text. Exemple : your-pdf-password
|
settings[Translate to (optional, machine translation)] facultatif |
string |
Don't translateEnglishUrduArabicSpanishFrenchGermanHindiChineseRussianPortugueseTurkishItalian |
switches[0] facultatif |
boolean | Run OCR when no text layer is found. Envoyez 1 pour l’activer. |
switches[1] facultatif |
boolean | Keep tables as tab-separated columns. Envoyez 1 pour l’activer. |
switches[2] facultatif |
boolean | Remove headers and page numbers. Envoyez 1 pour l’activer. |
switches[3] facultatif |
boolean | Mark where each page starts. Envoyez 1 pour l’activer. |
switches[4] facultatif |
boolean | Fix words split across lines. Envoyez 1 pour l’activer. |
switches[5] facultatif |
boolean | Re-read every page with OCR (fixes garbled text). Envoyez 1 pour l’activer. |
Exemple de requête
curl -X POST https://convertavo.com/fr/api/v1/tools/pdf-to-text/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@document.pdf" \
-F 'settings[Page range]=1-3' \
-F 'settings[Output format]=Plain text (.txt)' \
-F 'settings[Text layout]=Keep line breaks' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/tools/pdf-to-text/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('document.pdf'),
'settings[Page range]' => '1-3',
'settings[Output format]' => 'Plain text (.txt)',
'settings[Text layout]' => 'Keep line breaks',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/fr/api/v1/tools/pdf-to-text/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('document.pdf', 'rb'))],
data={
'settings[Page range]': '1-3',
'settings[Output format]': 'Plain text (.txt)',
'settings[Text layout]': 'Keep line breaks',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('document.pdf')]), basename('document.pdf'));
form.append('settings[Page range]', '1-3');
form.append('settings[Output format]', 'Plain text (.txt)');
form.append('settings[Text layout]', 'Keep line breaks');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/fr/api/v1/tools/pdf-to-text/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
PDF en Word
pdf-to-word
Le convertisseur PDF en Word gratuit de Convertavo transforme votre PDF en vrai fichier Word. Gardez chaque page exactement à l’identique, ou obtenez les mots sous forme de paragraphes modifiables. Les PDF scannés fonctionnent aussi : leurs pages sont lues avec l’OCR pendant la conversion.
/api/v1/tools/pdf-to-word/convert
- Accepte
- Fichiers par requête
- Un seul (envoyez un fichier par requête)
- Durée habituelle
- 8 à 20 secondes
- Essayer
- Ouvrir la page de l’outil →
Corps de la requête multipart/form-data
| Champ | Type | Description |
|---|---|---|
files[] obligatoire |
file | Le fichier à convertir (PDF). La limite de taille dépend de votre offre. |
settings[Page range] facultatif |
string |
Text. Exemple : 1-3
|
settings[Output] facultatif |
string |
Word (.docx)OpenDocument (.odt)Rich text (.rtf) |
settings[Layout mode] facultatif |
string |
Same layout, editableKeep exact layoutFlowing textText only |
settings[Picture quality] facultatif |
string |
High (200 DPI)Very high (300 DPI)Smaller file (150 DPI) |
settings[Language] facultatif |
string |
Auto-detectEnglishUrduArabicHindiChinese (Simplified)Chinese (Traditional)SpanishFrenchGermanPortugueseRussianJapaneseKoreanItalianTurkishPersian (Farsi)BengaliPunjabiPashtoSindhiNepaliMarathiGujaratiTamilTeluguIndonesianMalayVietnameseThaiFilipinoDutchPolishUkrainianSwedishCzechRomanianHungarianGreekHebrew |
settings[Document password] facultatif |
string |
Text. Exemple : your-pdf-password
|
settings[Translate to (optional, machine translation)] facultatif |
string |
Don't translateEnglishUrduArabicSpanishFrenchGermanHindiChineseRussianPortugueseTurkishItalian |
switches[0] facultatif |
boolean | Run OCR on scanned pages. Envoyez 1 pour l’activer. |
switches[1] facultatif |
boolean | Keep images and graphics. Envoyez 1 pour l’activer. |
switches[2] facultatif |
boolean | Convert tables to Word tables. Envoyez 1 pour l’activer. |
switches[3] facultatif |
boolean | Keep fonts, sizes and colours. Envoyez 1 pour l’activer. |
switches[4] facultatif |
boolean | Leave out repeated headers, footers and page numbers. Envoyez 1 pour l’activer. |
switches[5] facultatif |
boolean | Start each PDF page on a new Word page. Envoyez 1 pour l’activer. |
switches[6] facultatif |
boolean | Add a table of contents from the headings. Envoyez 1 pour l’activer. |
Exemple de requête
curl -X POST https://convertavo.com/fr/api/v1/tools/pdf-to-word/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@document.pdf" \
-F 'settings[Page range]=1-3' \
-F 'settings[Output]=Word (.docx)' \
-F 'settings[Layout mode]=Same layout, editable' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/tools/pdf-to-word/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('document.pdf'),
'settings[Page range]' => '1-3',
'settings[Output]' => 'Word (.docx)',
'settings[Layout mode]' => 'Same layout, editable',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/fr/api/v1/tools/pdf-to-word/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('document.pdf', 'rb'))],
data={
'settings[Page range]': '1-3',
'settings[Output]': 'Word (.docx)',
'settings[Layout mode]': 'Same layout, editable',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('document.pdf')]), basename('document.pdf'));
form.append('settings[Page range]', '1-3');
form.append('settings[Output]', 'Word (.docx)');
form.append('settings[Layout mode]', 'Same layout, editable');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/fr/api/v1/tools/pdf-to-word/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
Faire pivoter PDF
rotate-pdf
L’outil gratuit de Convertavo permet de faire pivoter les pages d’un PDF en ligne et d’enregistrer définitivement le changement. Tournez tout le fichier, une page, ou seulement les pages mal orientées. Il peut même repérer tout seul les pages sur le côté ou à l’envers.
/api/v1/tools/rotate-pdf/convert
- Accepte
- Fichiers par requête
- Un seul (envoyez un fichier par requête)
- Durée habituelle
- 2 à 4 secondes
- Essayer
- Ouvrir la page de l’outil →
Corps de la requête multipart/form-data
| Champ | Type | Description |
|---|---|---|
files[] obligatoire |
file | Le fichier à convertir (PDF). La limite de taille dépend de votre offre. |
settings[Rotation] facultatif |
string |
90° clockwise90° counter-clockwise180° |
settings[Apply to] facultatif |
string |
All pagesOdd pages onlyEven pages onlySelected pages |
settings[Selected pages] facultatif |
string |
Text. Exemple : 3, 7
|
switches[0] facultatif |
boolean | Detect page orientation automatically. Envoyez 1 pour l’activer. |
switches[1] facultatif |
boolean | Keep the original file as a copy. Envoyez 1 pour l’activer. |
Exemple de requête
curl -X POST https://convertavo.com/fr/api/v1/tools/rotate-pdf/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@document.pdf" \
-F 'settings[Rotation]=90° clockwise' \
-F 'settings[Apply to]=All pages' \
-F 'settings[Selected pages]=3, 7' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/tools/rotate-pdf/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('document.pdf'),
'settings[Rotation]' => '90° clockwise',
'settings[Apply to]' => 'All pages',
'settings[Selected pages]' => '3, 7',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/fr/api/v1/tools/rotate-pdf/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('document.pdf', 'rb'))],
data={
'settings[Rotation]': '90° clockwise',
'settings[Apply to]': 'All pages',
'settings[Selected pages]': '3, 7',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('document.pdf')]), basename('document.pdf'));
form.append('settings[Rotation]', '90° clockwise');
form.append('settings[Apply to]', 'All pages');
form.append('settings[Selected pages]', '3, 7');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/fr/api/v1/tools/rotate-pdf/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
Diviser PDF
split-pdf
L’outil gratuit de Convertavo sépare un PDF en plusieurs fichiers en ligne. Prenez une seule page, sortez les pages 3 à 7, ou coupez un long rapport en parties en tapant les plages de pages voulues. C’est un coupeur de PDF directement dans votre navigateur. Vous n’avez rien à installer.
/api/v1/tools/split-pdf/convert
- Accepte
- Fichiers par requête
- Un seul (envoyez un fichier par requête)
- Durée habituelle
- 2 à 6 secondes
- Essayer
- Ouvrir la page de l’outil →
Corps de la requête multipart/form-data
| Champ | Type | Description |
|---|---|---|
files[] obligatoire |
file | Le fichier à convertir (PDF). La limite de taille dépend de votre offre. |
settings[Pages to extract] facultatif |
string |
Text. Exemple : 1-5, 12
|
settings[Filename prefix] facultatif |
string |
Text. Exemple : part
|
Exemple de requête
curl -X POST https://convertavo.com/fr/api/v1/tools/split-pdf/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@document.pdf" \
-F 'settings[Pages to extract]=1-5, 12' \
-F 'settings[Filename prefix]=part'
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/tools/split-pdf/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('document.pdf'),
'settings[Pages to extract]' => '1-5, 12',
'settings[Filename prefix]' => 'part',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/fr/api/v1/tools/split-pdf/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('document.pdf', 'rb'))],
data={
'settings[Pages to extract]': '1-5, 12',
'settings[Filename prefix]': 'part',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('document.pdf')]), basename('document.pdf'));
form.append('settings[Pages to extract]', '1-5, 12');
form.append('settings[Filename prefix]', 'part');
const response = await fetch('https://convertavo.com/fr/api/v1/tools/split-pdf/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
Déverrouiller PDF
unlock-pdf
L’outil gratuit de Convertavo retire le mot de passe d’un PDF : le fichier s’ouvre sans rien demander. Beaucoup de banques verrouillent les relevés avec votre date de naissance, et la retaper chaque mois devient vite pénible. Saisissez-la ici une seule fois. Vous téléchargez un PDF simple, à ouvrir, imprimer, fusionner ou convertir comme n’importe quel autre fichier.
/api/v1/tools/unlock-pdf/convert
- Accepte
- Fichiers par requête
- Un seul (envoyez un fichier par requête)
- Durée habituelle
- 2 à 5 secondes
- Essayer
- Ouvrir la page de l’outil →
Corps de la requête multipart/form-data
| Champ | Type | Description |
|---|---|---|
files[] obligatoire |
file | Le fichier à convertir (PDF). La limite de taille dépend de votre offre. |
settings[Document password] facultatif |
string |
Text. Exemple : your-pdf-password
|
settings[Remove] facultatif |
string |
BothOpen passwordPermissions only |
switches[0] facultatif |
boolean | Allow printing after unlocking. Envoyez 1 pour l’activer. |
switches[1] facultatif |
boolean | Allow copying text after unlocking. Envoyez 1 pour l’activer. |
switches[2] facultatif |
boolean | Allow editing after unlocking. Envoyez 1 pour l’activer. |
Exemple de requête
curl -X POST https://convertavo.com/fr/api/v1/tools/unlock-pdf/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@document.pdf" \
-F 'settings[Document password]=your-pdf-password' \
-F 'settings[Remove]=Both' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/tools/unlock-pdf/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('document.pdf'),
'settings[Document password]' => 'your-pdf-password',
'settings[Remove]' => 'Both',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/fr/api/v1/tools/unlock-pdf/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('document.pdf', 'rb'))],
data={
'settings[Document password]': 'your-pdf-password',
'settings[Remove]': 'Both',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('document.pdf')]), basename('document.pdf'));
form.append('settings[Document password]', 'your-pdf-password');
form.append('settings[Remove]', 'Both');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/fr/api/v1/tools/unlock-pdf/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
Image 7 outils
Compresser une image
compress-image
Le compresseur d’images gratuit de Convertavo allège vos photos sans les rendre floues. La plupart des images sortent 60 à 80 % plus légères, sans différence visible. Ajoutez des fichiers JPG, PNG ou WebP jusqu’à 25 Mo, choisissez une qualité et téléchargez.
/api/v1/tools/compress-image/convert
- Accepte
- JPG, PNG, WebP, HEIC, AVIF, GIF, BMP, TIFF
- Fichiers par requête
- Jusqu’à la taille de lot de votre offre (5 en Free, jusqu’à 100 en Business)
- Durée habituelle
- 4 à 10 secondes
- Essayer
- Ouvrir la page de l’outil →
Corps de la requête multipart/form-data
| Champ | Type | Description |
|---|---|---|
files[] obligatoire |
file[] | Un ou plusieurs fichiers (JPG, PNG, WebP, HEIC, AVIF, GIF, BMP, TIFF). La limite de taille dépend de votre offre. |
settings[Compression] facultatif |
string |
Smart — no visible differenceMaximum — smallest fileLossless — pixel-perfectCustom qualityTarget file size |
settings[Quality] facultatif |
integer |
Whole number, 1–100. Exemple : 80
|
settings[Target size (KB)] facultatif |
number |
Number. Exemple : 200
|
settings[Output format] facultatif |
string |
Keep originalSmallest (auto)JPGPNGWebPAVIF |
settings[Resize] facultatif |
string |
Keep original sizeMax 3840 px (4K)Max 2560 pxMax 1920 px (Full HD)Max 1280 pxMax 1080 pxMax 800 pxScale to 75%Scale to 50%Scale to 25%Custom width and height |
settings[Max width (px)] facultatif |
number |
Number. Exemple : 1920
|
settings[Max height (px)] facultatif |
number |
Number. Exemple : 1080
|
settings[Background for transparency] facultatif |
string |
WhiteBlack |
settings[File names] facultatif |
string |
Keep original namesAdd "-compressed"Add "-min" |
switches[0] facultatif |
boolean | Strip EXIF and location data. Envoyez 1 pour l’activer. |
switches[1] facultatif |
boolean | Convert PNG photos to JPG when smaller. Envoyez 1 pour l’activer. |
switches[2] facultatif |
boolean | Keep the colour profile. Envoyez 1 pour l’activer. |
switches[3] facultatif |
boolean | Keep animation (GIF and WebP). Envoyez 1 pour l’activer. |
switches[4] facultatif |
boolean | Never make a file bigger. Envoyez 1 pour l’activer. |
Exemple de requête
curl -X POST https://convertavo.com/fr/api/v1/tools/compress-image/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@photo.jpg" \
-F "files[]=@photo-2.jpg" \
-F 'settings[Compression]=Smart — no visible difference' \
-F 'settings[Quality]=80' \
-F 'settings[Target size (KB)]=200' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/tools/compress-image/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('photo.jpg'),
'files[1]' => new CURLFile('photo-2.jpg'),
'settings[Compression]' => 'Smart — no visible difference',
'settings[Quality]' => '80',
'settings[Target size (KB)]' => '200',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/fr/api/v1/tools/compress-image/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('photo.jpg', 'rb')), ('files[]', open('photo-2.jpg', 'rb'))],
data={
'settings[Compression]': 'Smart — no visible difference',
'settings[Quality]': '80',
'settings[Target size (KB)]': '200',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('photo.jpg')]), basename('photo.jpg'));
form.append('files[]', new Blob([await readFile('photo-2.jpg')]), basename('photo-2.jpg'));
form.append('settings[Compression]', 'Smart — no visible difference');
form.append('settings[Quality]', '80');
form.append('settings[Target size (KB)]', '200');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/fr/api/v1/tools/compress-image/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
Recadrer une image
crop-image
Besoin d’une photo carrée pour Instagram, ou verticale pour une story ? L’outil de recadrage gratuit de Convertavo vous laisse tracer un cadre sur la partie à garder, directement dans votre navigateur. La plupart des recadrages sont prêts en 2 à 5 secondes.
/api/v1/tools/crop-image/convert
- Accepte
- JPG, PNG, WebP
- Fichiers par requête
- Jusqu’à la taille de lot de votre offre (5 en Free, jusqu’à 100 en Business)
- Durée habituelle
- 2 à 5 secondes
- Essayer
- Ouvrir la page de l’outil →
Corps de la requête multipart/form-data
| Champ | Type | Description |
|---|---|---|
files[] obligatoire |
file[] | Un ou plusieurs fichiers (JPG, PNG, WebP). La limite de taille dépend de votre offre. |
settings[Aspect ratio] facultatif |
string |
Free1:1 square16:94:33:29:16 story |
settings[Width (px)] facultatif |
number |
Number. Exemple : 1080
|
settings[Height (px)] facultatif |
number |
Number. Exemple : 1080
|
settings[Anchor] facultatif |
string |
CentreTopBottomLeftRight |
switches[0] facultatif |
boolean | Apply the same crop to every image. Envoyez 1 pour l’activer. |
Exemple de requête
curl -X POST https://convertavo.com/fr/api/v1/tools/crop-image/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@photo.jpg" \
-F "files[]=@photo-2.jpg" \
-F 'settings[Aspect ratio]=Free' \
-F 'settings[Width (px)]=1080' \
-F 'settings[Height (px)]=1080' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/tools/crop-image/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('photo.jpg'),
'files[1]' => new CURLFile('photo-2.jpg'),
'settings[Aspect ratio]' => 'Free',
'settings[Width (px)]' => '1080',
'settings[Height (px)]' => '1080',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/fr/api/v1/tools/crop-image/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('photo.jpg', 'rb')), ('files[]', open('photo-2.jpg', 'rb'))],
data={
'settings[Aspect ratio]': 'Free',
'settings[Width (px)]': '1080',
'settings[Height (px)]': '1080',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('photo.jpg')]), basename('photo.jpg'));
form.append('files[]', new Blob([await readFile('photo-2.jpg')]), basename('photo-2.jpg'));
form.append('settings[Aspect ratio]', 'Free');
form.append('settings[Width (px)]', '1080');
form.append('settings[Height (px)]', '1080');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/fr/api/v1/tools/crop-image/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
HEIC en JPG
heic-to-jpg
Quelqu’un vous a envoyé une photo depuis son iPhone et votre PC Windows refuse de l’ouvrir ? Le convertisseur HEIC en JPG gratuit de Convertavo la transforme en JPG normal que tout téléphone, ordinateur et site web peut ouvrir. Déposez une photo ou tout un dossier. Cela prend en général 3 à 7 secondes.
/api/v1/tools/heic-to-jpg/convert
- Accepte
- HEIC, HEIF
- Fichiers par requête
- Jusqu’à la taille de lot de votre offre (5 en Free, jusqu’à 100 en Business)
- Durée habituelle
- 3 à 7 secondes
- Essayer
- Ouvrir la page de l’outil →
Corps de la requête multipart/form-data
| Champ | Type | Description |
|---|---|---|
files[] obligatoire |
file[] | Un ou plusieurs fichiers (HEIC, HEIF). La limite de taille dépend de votre offre. |
settings[JPG quality] facultatif |
integer |
Whole number, 1–100. Exemple : 80
|
settings[Output format] facultatif |
string |
JPGPNGWebP |
settings[Max dimension] facultatif |
number |
Number. Exemple : 2048
|
switches[0] facultatif |
boolean | Keep EXIF data such as date and camera. Envoyez 1 pour l’activer. |
switches[1] facultatif |
boolean | Keep GPS location data. Envoyez 1 pour l’activer. |
Exemple de requête
curl -X POST https://convertavo.com/fr/api/v1/tools/heic-to-jpg/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@IMG_0412.heic" \
-F "files[]=@IMG_0413.heic" \
-F 'settings[JPG quality]=80' \
-F 'settings[Output format]=JPG' \
-F 'settings[Max dimension]=2048' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/tools/heic-to-jpg/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('IMG_0412.heic'),
'files[1]' => new CURLFile('IMG_0413.heic'),
'settings[JPG quality]' => '80',
'settings[Output format]' => 'JPG',
'settings[Max dimension]' => '2048',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/fr/api/v1/tools/heic-to-jpg/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('IMG_0412.heic', 'rb')), ('files[]', open('IMG_0413.heic', 'rb'))],
data={
'settings[JPG quality]': '80',
'settings[Output format]': 'JPG',
'settings[Max dimension]': '2048',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('IMG_0412.heic')]), basename('IMG_0412.heic'));
form.append('files[]', new Blob([await readFile('IMG_0413.heic')]), basename('IMG_0413.heic'));
form.append('settings[JPG quality]', '80');
form.append('settings[Output format]', 'JPG');
form.append('settings[Max dimension]', '2048');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/fr/api/v1/tools/heic-to-jpg/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
PNG en JPG
png-to-jpg
Votre téléphone enregistre chaque capture d’écran en PNG, et ces fichiers s’accumulent vite. Le convertisseur PNG en JPG gratuit de Convertavo les transforme en JPG bien plus légers, avec le même rendu. Dans notre exemple, une capture de 596 Ko est sortie à 162 Ko. Ajoutez un fichier ou tout un dossier : cela prend en général 2 à 6 secondes.
/api/v1/tools/png-to-jpg/convert
- Accepte
- PNG
- Fichiers par requête
- Jusqu’à la taille de lot de votre offre (5 en Free, jusqu’à 100 en Business)
- Durée habituelle
- 2 à 6 secondes
- Essayer
- Ouvrir la page de l’outil →
Corps de la requête multipart/form-data
| Champ | Type | Description |
|---|---|---|
files[] obligatoire |
file[] | Un ou plusieurs fichiers (PNG). La limite de taille dépend de votre offre. |
settings[JPG quality] facultatif |
integer |
Whole number, 1–100. Exemple : 80
|
settings[Background for transparency] facultatif |
string |
WhiteBlackCustom colour |
settings[Custom colour] facultatif |
string |
Text. Exemple : #F5E6CC
|
settings[Max width] facultatif |
number |
Number. Exemple : 1920
|
switches[0] facultatif |
boolean | Strip metadata. Envoyez 1 pour l’activer. |
switches[1] facultatif |
boolean | Optimise for the web. Envoyez 1 pour l’activer. |
switches[2] facultatif |
boolean | Keep the colour profile. Envoyez 1 pour l’activer. |
Exemple de requête
curl -X POST https://convertavo.com/fr/api/v1/tools/png-to-jpg/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@image.png" \
-F "files[]=@image-2.png" \
-F 'settings[JPG quality]=80' \
-F 'settings[Background for transparency]=White' \
-F 'settings[Custom colour]=#F5E6CC' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/tools/png-to-jpg/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('image.png'),
'files[1]' => new CURLFile('image-2.png'),
'settings[JPG quality]' => '80',
'settings[Background for transparency]' => 'White',
'settings[Custom colour]' => '#F5E6CC',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/fr/api/v1/tools/png-to-jpg/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('image.png', 'rb')), ('files[]', open('image-2.png', 'rb'))],
data={
'settings[JPG quality]': '80',
'settings[Background for transparency]': 'White',
'settings[Custom colour]': '#F5E6CC',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('image.png')]), basename('image.png'));
form.append('files[]', new Blob([await readFile('image-2.png')]), basename('image-2.png'));
form.append('settings[JPG quality]', '80');
form.append('settings[Background for transparency]', 'White');
form.append('settings[Custom colour]', '#F5E6CC');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/fr/api/v1/tools/png-to-jpg/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
Supprimer l'arrière-plan
remove-background
Vous voulez seulement la personne ou le produit, sans la pièce en désordre derrière ? L’outil gratuit de Convertavo détoure le sujet et vous donne un PNG transparent propre. Pas de pinceau, rien à tracer à la main. Cela prend en général 8 à 20 secondes.
/api/v1/tools/remove-background/convert
- Accepte
- JPG, PNG, WebP
- Fichiers par requête
- Un seul (envoyez un fichier par requête)
- Durée habituelle
- 8 à 20 secondes
- Essayer
- Ouvrir la page de l’outil →
Corps de la requête multipart/form-data
| Champ | Type | Description |
|---|---|---|
files[] obligatoire |
file | Le fichier à convertir (JPG, PNG, WebP). La limite de taille dépend de votre offre. |
settings[Output] facultatif |
string |
Transparent PNGWhite backgroundCustom colour |
settings[Custom colour] facultatif |
string |
Text. Exemple : #F5E6CC
|
settings[Edge refinement] facultatif |
string |
StandardSoft (hair and fur)Sharp (products) |
switches[0] facultatif |
boolean | Keep the original resolution. Envoyez 1 pour l’activer. |
switches[1] facultatif |
boolean | Add a soft shadow under the subject. Envoyez 1 pour l’activer. |
switches[2] facultatif |
boolean | Crop tightly to the subject. Envoyez 1 pour l’activer. |
Exemple de requête
curl -X POST https://convertavo.com/fr/api/v1/tools/remove-background/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@photo.jpg" \
-F 'settings[Output]=Transparent PNG' \
-F 'settings[Custom colour]=#F5E6CC' \
-F 'settings[Edge refinement]=Standard' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/tools/remove-background/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('photo.jpg'),
'settings[Output]' => 'Transparent PNG',
'settings[Custom colour]' => '#F5E6CC',
'settings[Edge refinement]' => 'Standard',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/fr/api/v1/tools/remove-background/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('photo.jpg', 'rb'))],
data={
'settings[Output]': 'Transparent PNG',
'settings[Custom colour]': '#F5E6CC',
'settings[Edge refinement]': 'Standard',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('photo.jpg')]), basename('photo.jpg'));
form.append('settings[Output]', 'Transparent PNG');
form.append('settings[Custom colour]', '#F5E6CC');
form.append('settings[Edge refinement]', 'Standard');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/fr/api/v1/tools/remove-background/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
Redimensionner une image
resize-image
Indiquez une largeur et une hauteur exactes, ou un pourcentage. Vous pouvez aussi viser une taille d’impression ou une limite en Ko. Le ratio est verrouillé par défaut.
/api/v1/tools/resize-image/convert
- Accepte
- JPG, PNG, WebP, HEIC, AVIF, GIF, BMP, TIFF
- Fichiers par requête
- Jusqu’à la taille de lot de votre offre (5 en Free, jusqu’à 100 en Business)
- Durée habituelle
- 3 à 8 secondes
- Essayer
- Ouvrir la page de l’outil →
Corps de la requête multipart/form-data
| Champ | Type | Description |
|---|---|---|
files[] obligatoire |
file[] | Un ou plusieurs fichiers (JPG, PNG, WebP, HEIC, AVIF, GIF, BMP, TIFF). La limite de taille dépend de votre offre. |
settings[Resize by] facultatif |
string |
Exact size (width × height)Popular size (preset)PercentageLongest sidePrint size (cm, mm or inches)File size (KB) |
settings[Preset size] facultatif |
string |
Instagram · Square post — 1080 × 1080Instagram · Portrait post — 1080 × 1350Instagram · Landscape post — 1080 × 566Instagram · Story or Reel — 1080 × 1920Facebook · Post — 1200 × 630Facebook · Cover photo — 851 × 315Facebook · Profile picture — 320 × 320X (Twitter) · Post — 1600 × 900X (Twitter) · Header — 1500 × 500LinkedIn · Post — 1200 × 627LinkedIn · Banner — 1584 × 396YouTube · Thumbnail — 1280 × 720YouTube · Channel banner — 2560 × 1440TikTok · Video cover — 1080 × 1920Pinterest · Pin — 1000 × 1500WhatsApp · Profile photo — 500 × 500WhatsApp · Status — 1080 × 1920Passport photo · 2 × 2 in (US) — 600 × 600Passport photo · 35 × 45 mm — 413 × 531Website · Blog image — 1200 × 800Email header — 600 × 200App icon or favicon — 512 × 512HD — 1280 × 720Full HD — 1920 × 10804K UHD — 3840 × 2160A4 page at 300 DPI — 2480 × 3508 |
settings[Width (px)] facultatif |
number |
Number. Exemple : 1920
|
settings[Height (px)] facultatif |
number |
Number. Exemple : 1080
|
settings[Percentage (%)] facultatif |
number |
Number. Exemple : 50
|
settings[Longest side (px)] facultatif |
number |
Number. Exemple : 1920
|
settings[Print width] facultatif |
number |
Number. Exemple : 10
|
settings[Print height] facultatif |
number |
Number. Exemple : 15
|
settings[Unit] facultatif |
string |
cmmminches |
settings[Target file size (KB)] facultatif |
number |
Number. Exemple : 200
|
settings[Resize mode] facultatif |
string |
Fit insideFill and cropPad to exact sizeStretch |
settings[Crop focus] facultatif |
string |
Smart — find the subjectCentreTopBottomLeftRight |
settings[Padding] facultatif |
string |
WhiteBlackTransparentBlurred pictureAverage colour |
settings[Output format] facultatif |
string |
Keep originalJPGPNGWebPAVIF |
settings[Quality] facultatif |
integer |
Whole number, 1–100. Exemple : 80
|
settings[Resampling] facultatif |
string |
Lanczos — sharpest, for photosBicubic — smoothBilinear — softestNearest — pixel art and icons |
settings[Print resolution (DPI)] facultatif |
string |
Keep original7296150300600 |
settings[File names] facultatif |
string |
Keep original namesAdd "-resized"Add the new size (e.g. -1080x1080) |
switches[0] facultatif |
boolean | Lock aspect ratio. Envoyez 1 pour l’activer. |
switches[1] facultatif |
boolean | Do not enlarge images that are already smaller. Envoyez 1 pour l’activer. |
switches[2] facultatif |
boolean | Sharpen after resizing. Envoyez 1 pour l’activer. |
switches[3] facultatif |
boolean | Strip EXIF and location data. Envoyez 1 pour l’activer. |
switches[4] facultatif |
boolean | Keep animation (GIF and WebP). Envoyez 1 pour l’activer. |
Exemple de requête
curl -X POST https://convertavo.com/fr/api/v1/tools/resize-image/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@photo.jpg" \
-F "files[]=@photo-2.jpg" \
-F 'settings[Resize by]=Exact size (width × height)' \
-F 'settings[Preset size]=Instagram · Square post — 1080 × 1080' \
-F 'settings[Width (px)]=1920' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/tools/resize-image/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('photo.jpg'),
'files[1]' => new CURLFile('photo-2.jpg'),
'settings[Resize by]' => 'Exact size (width × height)',
'settings[Preset size]' => 'Instagram · Square post — 1080 × 1080',
'settings[Width (px)]' => '1920',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/fr/api/v1/tools/resize-image/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('photo.jpg', 'rb')), ('files[]', open('photo-2.jpg', 'rb'))],
data={
'settings[Resize by]': 'Exact size (width × height)',
'settings[Preset size]': 'Instagram · Square post — 1080 × 1080',
'settings[Width (px)]': '1920',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('photo.jpg')]), basename('photo.jpg'));
form.append('files[]', new Blob([await readFile('photo-2.jpg')]), basename('photo-2.jpg'));
form.append('settings[Resize by]', 'Exact size (width × height)');
form.append('settings[Preset size]', 'Instagram · Square post — 1080 × 1080');
form.append('settings[Width (px)]', '1920');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/fr/api/v1/tools/resize-image/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
Convertisseur WebP
webp-converter
Vous avez enregistré une image depuis un site et c’est un fichier .webp ? Le convertisseur WebP gratuit de Convertavo la transforme en JPG ou PNG qui s’ouvre partout. Il fonctionne aussi dans l’autre sens et transforme vos JPG et PNG en images WebP légères pour votre site, en 2 à 5 secondes.
/api/v1/tools/webp-converter/convert
- Accepte
- JPG, PNG, WebP, HEIC, AVIF, GIF, BMP, TIFF
- Fichiers par requête
- Jusqu’à la taille de lot de votre offre (5 en Free, jusqu’à 100 en Business)
- Durée habituelle
- 2 à 5 secondes
- Essayer
- Ouvrir la page de l’outil →
Corps de la requête multipart/form-data
| Champ | Type | Description |
|---|---|---|
files[] obligatoire |
file[] | Un ou plusieurs fichiers (JPG, PNG, WebP, HEIC, AVIF, GIF, BMP, TIFF). La limite de taille dépend de votre offre. |
settings[Convert to] facultatif |
string |
WebPJPGPNGAVIFGIF (keeps animation)ICO (favicon)TIFFBMP |
settings[Compression] facultatif |
string |
Smart — no visible differenceMaximum — smallest fileLossless — pixel-perfectCustom qualityTarget file size |
settings[Quality] facultatif |
integer |
Whole number, 1–100. Exemple : 80
|
settings[Target size (KB)] facultatif |
number |
Number. Exemple : 200
|
settings[Resize] facultatif |
string |
Keep original sizeMax 3840 px (4K)Max 2560 pxMax 1920 px (Full HD)Max 1280 pxMax 1080 pxMax 800 pxScale to 75%Scale to 50%Scale to 25%Custom width and height |
settings[Max width (px)] facultatif |
number |
Number. Exemple : 1920
|
settings[Max height (px)] facultatif |
number |
Number. Exemple : 1080
|
settings[Background for transparency] facultatif |
string |
WhiteBlack |
settings[WebP effort] facultatif |
string |
BalancedFastSmallest file (slower) |
settings[File names] facultatif |
string |
Keep original namesAdd "-compressed"Add "-min" |
switches[0] facultatif |
boolean | Keep EXIF data such as date and camera. Envoyez 1 pour l’activer. |
switches[1] facultatif |
boolean | Lossless — no quality loss, larger file. Envoyez 1 pour l’activer. |
switches[2] facultatif |
boolean | Keep the colour profile. Envoyez 1 pour l’activer. |
switches[3] facultatif |
boolean | Keep animation (GIF and WebP). Envoyez 1 pour l’activer. |
switches[4] facultatif |
boolean | Keep exact colours under transparency. Envoyez 1 pour l’activer. |
Exemple de requête
curl -X POST https://convertavo.com/fr/api/v1/tools/webp-converter/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@photo.jpg" \
-F "files[]=@photo-2.jpg" \
-F 'settings[Convert to]=WebP' \
-F 'settings[Compression]=Smart — no visible difference' \
-F 'settings[Quality]=80' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/tools/webp-converter/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('photo.jpg'),
'files[1]' => new CURLFile('photo-2.jpg'),
'settings[Convert to]' => 'WebP',
'settings[Compression]' => 'Smart — no visible difference',
'settings[Quality]' => '80',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/fr/api/v1/tools/webp-converter/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('photo.jpg', 'rb')), ('files[]', open('photo-2.jpg', 'rb'))],
data={
'settings[Convert to]': 'WebP',
'settings[Compression]': 'Smart — no visible difference',
'settings[Quality]': '80',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('photo.jpg')]), basename('photo.jpg'));
form.append('files[]', new Blob([await readFile('photo-2.jpg')]), basename('photo-2.jpg'));
form.append('settings[Convert to]', 'WebP');
form.append('settings[Compression]', 'Smart — no visible difference');
form.append('settings[Quality]', '80');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/fr/api/v1/tools/webp-converter/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
OCR 3 outils
Image en Excel
image-to-excel
Importez une photo, une capture d’écran ou une page scannée avec un tableau et obtenez une vraie feuille de calcul, chaque valeur dans sa cellule. Gratuit, sans compte pour les fichiers jusqu’à 25 Mo.
/api/v1/tools/image-to-excel/convert
- Accepte
- JPG, PNG, WebP, HEIC, AVIF, GIF, BMP, TIFF
- Fichiers par requête
- Un seul (envoyez un fichier par requête)
- Durée habituelle
- 3 à 10 secondes
- Essayer
- Ouvrir la page de l’outil →
Corps de la requête multipart/form-data
| Champ | Type | Description |
|---|---|---|
files[] obligatoire |
file | Le fichier à convertir (JPG, PNG, WebP, HEIC, AVIF, GIF, BMP, TIFF). La limite de taille dépend de votre offre. |
settings[Language] facultatif |
string |
Auto-detectEnglishUrduArabicChinese |
settings[Output format] facultatif |
string |
Excel (.xlsx)CSV (.csv) |
settings[Header row] facultatif |
string |
Detect automaticallyFirst row is headerNo header |
settings[Decimal separator] facultatif |
string |
Point (1.50)Comma (1,50) |
switches[0] facultatif |
boolean | Merge cells that span multiple columns. Envoyez 1 pour l’activer. |
switches[1] facultatif |
boolean | Keep empty rows. Envoyez 1 pour l’activer. |
switches[2] facultatif |
boolean | Treat numbers as text. Envoyez 1 pour l’activer. |
Exemple de requête
curl -X POST https://convertavo.com/fr/api/v1/tools/image-to-excel/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@photo.jpg" \
-F 'settings[Language]=Auto-detect' \
-F 'settings[Output format]=Excel (.xlsx)' \
-F 'settings[Header row]=Detect automatically' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/tools/image-to-excel/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('photo.jpg'),
'settings[Language]' => 'Auto-detect',
'settings[Output format]' => 'Excel (.xlsx)',
'settings[Header row]' => 'Detect automatically',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/fr/api/v1/tools/image-to-excel/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('photo.jpg', 'rb'))],
data={
'settings[Language]': 'Auto-detect',
'settings[Output format]': 'Excel (.xlsx)',
'settings[Header row]': 'Detect automatically',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('photo.jpg')]), basename('photo.jpg'));
form.append('settings[Language]', 'Auto-detect');
form.append('settings[Output format]', 'Excel (.xlsx)');
form.append('settings[Header row]', 'Detect automatically');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/fr/api/v1/tools/image-to-excel/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
Image en texte
image-to-text
Importez une photo, une capture d’écran ou un scan et obtenez un texte sélectionnable à copier, modifier et rechercher. Gratuit, sans compte pour les fichiers jusqu’à 25 Mo.
/api/v1/tools/image-to-text/convert
- Accepte
- JPG, PNG, HEIC, WebP, TIFF, BMP, GIF
- Fichiers par requête
- Jusqu’à la taille de lot de votre offre (5 en Free, jusqu’à 100 en Business)
- Durée habituelle
- 5 à 15 secondes
- Essayer
- Ouvrir la page de l’outil →
Corps de la requête multipart/form-data
| Champ | Type | Description |
|---|---|---|
files[] obligatoire |
file[] | Un ou plusieurs fichiers (JPG, PNG, HEIC, WebP, TIFF, BMP, GIF). La limite de taille dépend de votre offre. |
settings[Language] facultatif |
string |
Auto-detectEnglishUrduArabicHindiChinese (Simplified)Chinese (Traditional)SpanishFrenchGermanPortugueseRussianJapaneseKoreanItalianTurkishPersian (Farsi)BengaliPunjabiPashtoSindhiNepaliMarathiGujaratiTamilTeluguIndonesianMalayVietnameseThaiFilipinoDutchPolishUkrainianSwedishCzechRomanianHungarianGreekHebrew |
settings[Second language (mixed text)] facultatif |
string |
NoneEnglishUrduArabicHindiChinese (Simplified)Chinese (Traditional)SpanishFrenchGermanPortugueseRussianJapaneseKoreanItalianTurkishPersian (Farsi)BengaliPunjabiPashtoSindhiNepaliMarathiGujaratiTamilTeluguIndonesianMalayVietnameseThaiFilipinoDutchPolishUkrainianSwedishCzechRomanianHungarianGreekHebrew |
settings[Image mode] facultatif |
string |
AutoPrinted documentScreenshotPhoto of a pageHandwritingSign or sparse textSingle lineMath formula (LaTeX) |
settings[Layout] facultatif |
string |
Keep line breaksMerge into paragraphsPreserve layout (columns & spacing)Single block of text |
settings[Output format] facultatif |
string |
Plain text (.txt)Word (.docx)Searchable PDFMarkdown (.md)JSON (words, positions, confidence) |
settings[Translate to (optional, machine translation)] facultatif |
string |
Don't translateEnglishUrduArabicSpanishFrenchGermanHindiChineseRussianPortugueseTurkishItalian |
switches[0] facultatif |
boolean | Enhance contrast before reading. Envoyez 1 pour l’activer. |
switches[1] facultatif |
boolean | Correct page skew automatically. Envoyez 1 pour l’activer. |
switches[2] facultatif |
boolean | Flag low-confidence words. Envoyez 1 pour l’activer. |
switches[3] facultatif |
boolean | Clean up stray symbols and noise. Envoyez 1 pour l’activer. |
switches[4] facultatif |
boolean | Combine a batch into one file. Envoyez 1 pour l’activer. |
switches[5] facultatif |
boolean | Detect QR codes and barcodes. Envoyez 1 pour l’activer. |
Exemple de requête
curl -X POST https://convertavo.com/fr/api/v1/tools/image-to-text/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@photo.jpg" \
-F "files[]=@photo-2.jpg" \
-F 'settings[Language]=Auto-detect' \
-F 'settings[Second language (mixed text)]=None' \
-F 'settings[Image mode]=Auto' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/tools/image-to-text/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('photo.jpg'),
'files[1]' => new CURLFile('photo-2.jpg'),
'settings[Language]' => 'Auto-detect',
'settings[Second language (mixed text)]' => 'None',
'settings[Image mode]' => 'Auto',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/fr/api/v1/tools/image-to-text/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('photo.jpg', 'rb')), ('files[]', open('photo-2.jpg', 'rb'))],
data={
'settings[Language]': 'Auto-detect',
'settings[Second language (mixed text)]': 'None',
'settings[Image mode]': 'Auto',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('photo.jpg')]), basename('photo.jpg'));
form.append('files[]', new Blob([await readFile('photo-2.jpg')]), basename('photo-2.jpg'));
form.append('settings[Language]', 'Auto-detect');
form.append('settings[Second language (mixed text)]', 'None');
form.append('settings[Image mode]', 'Auto');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/fr/api/v1/tools/image-to-text/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
OCR PDF
pdf-ocr
L’outil OCR PDF de Convertavo transforme un PDF scanné en PDF consultable. Importez votre fichier, choisissez la langue et téléchargez une copie où vous pouvez rechercher, sélectionner et copier.
/api/v1/tools/pdf-ocr/convert
- Accepte
- Fichiers par requête
- Un seul (envoyez un fichier par requête)
- Durée habituelle
- 10 à 40 secondes
- Essayer
- Ouvrir la page de l’outil →
Corps de la requête multipart/form-data
| Champ | Type | Description |
|---|---|---|
files[] obligatoire |
file | Le fichier à convertir (PDF). La limite de taille dépend de votre offre. |
settings[Language] facultatif |
string |
Auto-detectEnglishSpanishUrduArabicChinese |
settings[Page range] facultatif |
string |
Text. Exemple : 1-3
|
settings[Output] facultatif |
string |
Searchable PDF (same look)Searchable PDF + text file |
Exemple de requête
curl -X POST https://convertavo.com/fr/api/v1/tools/pdf-ocr/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@document.pdf" \
-F 'settings[Language]=Auto-detect' \
-F 'settings[Page range]=1-3' \
-F 'settings[Output]=Searchable PDF (same look)'
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/tools/pdf-ocr/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('document.pdf'),
'settings[Language]' => 'Auto-detect',
'settings[Page range]' => '1-3',
'settings[Output]' => 'Searchable PDF (same look)',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/fr/api/v1/tools/pdf-ocr/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('document.pdf', 'rb'))],
data={
'settings[Language]': 'Auto-detect',
'settings[Page range]': '1-3',
'settings[Output]': 'Searchable PDF (same look)',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('document.pdf')]), basename('document.pdf'));
form.append('settings[Language]', 'Auto-detect');
form.append('settings[Page range]', '1-3');
form.append('settings[Output]', 'Searchable PDF (same look)');
const response = await fetch('https://convertavo.com/fr/api/v1/tools/pdf-ocr/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
Médias 3 outils
Compresser une vidéo
compress-video
Votre vidéo est trop lourde pour un e-mail, ou WhatsApp refuse de l’envoyer ? Le compresseur vidéo gratuit de Convertavo la réduit à la taille voulue sans la transformer en bouillie. Importez un MP4, MOV, MKV ou AVI, indiquez la taille souhaitée, et la plupart des vidéos sont prêtes en 1 à 4 minutes.
/api/v1/tools/compress-video/convert
- Accepte
- MP4, MOV, MKV, AVI
- Fichiers par requête
- Un seul (envoyez un fichier par requête)
- Durée habituelle
- 60 à 240 secondes
- Essayer
- Ouvrir la page de l’outil →
Corps de la requête multipart/form-data
| Champ | Type | Description |
|---|---|---|
files[] obligatoire |
file | Le fichier à convertir (MP4, MOV, MKV, AVI). La limite de taille dépend de votre offre. |
settings[Compression level] facultatif |
string |
Balanced (recommended)MaximumLight — best quality |
settings[Target size (MB)] facultatif |
number |
Number. Exemple : 25
|
settings[Resolution] facultatif |
string |
Keep original1080p720p480p |
settings[Codec] facultatif |
string |
H.264H.265 |
switches[0] facultatif |
boolean | Reduce the frame rate to 30 fps. Envoyez 1 pour l’activer. |
switches[1] facultatif |
boolean | Lower the audio bitrate to 128 kbps. Envoyez 1 pour l’activer. |
switches[2] facultatif |
boolean | Remove audio entirely. Envoyez 1 pour l’activer. |
Exemple de requête
curl -X POST https://convertavo.com/fr/api/v1/tools/compress-video/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@video.mp4" \
-F 'settings[Compression level]=Balanced (recommended)' \
-F 'settings[Target size (MB)]=25' \
-F 'settings[Resolution]=Keep original' \
-F "switches[0]=1"
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/tools/compress-video/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('video.mp4'),
'settings[Compression level]' => 'Balanced (recommended)',
'settings[Target size (MB)]' => '25',
'settings[Resolution]' => 'Keep original',
'switches[0]' => '1',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/fr/api/v1/tools/compress-video/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('video.mp4', 'rb'))],
data={
'settings[Compression level]': 'Balanced (recommended)',
'settings[Target size (MB)]': '25',
'settings[Resolution]': 'Keep original',
'switches[0]': '1',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('video.mp4')]), basename('video.mp4'));
form.append('settings[Compression level]', 'Balanced (recommended)');
form.append('settings[Target size (MB)]', '25');
form.append('settings[Resolution]', 'Keep original');
form.append('switches[0]', '1');
const response = await fetch('https://convertavo.com/fr/api/v1/tools/compress-video/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
MOV en MP4
mov-to-mp4
Votre vidéo iPhone se lit bien sur le téléphone, puis refuse de s’ouvrir sur un PC Windows. Le convertisseur MOV en MP4 gratuit de Convertavo règle cela en une étape, sans rien installer. Importez le MOV, gardez les réglages par défaut, et la plupart des vidéos sont prêtes en 30 à 120 secondes.
/api/v1/tools/mov-to-mp4/convert
- Accepte
- MOV, AVI, MKV, WebM
- Fichiers par requête
- Un seul (envoyez un fichier par requête)
- Durée habituelle
- 30 à 120 secondes
- Essayer
- Ouvrir la page de l’outil →
Corps de la requête multipart/form-data
| Champ | Type | Description |
|---|---|---|
files[] obligatoire |
file | Le fichier à convertir (MOV, AVI, MKV, WebM). La limite de taille dépend de votre offre. |
settings[Quality] facultatif |
string |
Same as source1080p720p480p |
settings[Video codec] facultatif |
string |
H.264 (most compatible)H.265 (smaller files) |
Exemple de requête
curl -X POST https://convertavo.com/fr/api/v1/tools/mov-to-mp4/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@video.mp4" \
-F 'settings[Quality]=Same as source' \
-F 'settings[Video codec]=H.264 (most compatible)'
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/tools/mov-to-mp4/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('video.mp4'),
'settings[Quality]' => 'Same as source',
'settings[Video codec]' => 'H.264 (most compatible)',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/fr/api/v1/tools/mov-to-mp4/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('video.mp4', 'rb'))],
data={
'settings[Quality]': 'Same as source',
'settings[Video codec]': 'H.264 (most compatible)',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('video.mp4')]), basename('video.mp4'));
form.append('settings[Quality]', 'Same as source');
form.append('settings[Video codec]', 'H.264 (most compatible)');
const response = await fetch('https://convertavo.com/fr/api/v1/tools/mov-to-mp4/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
MP4 en MP3
mp4-to-mp3
Vous voulez seulement le son d’une vidéo, comme un cours pour le bus ou une chanson d’un concert ? Le convertisseur MP4 en MP3 gratuit de Convertavo garde l’audio et retire l’image. Importez la vidéo, choisissez la qualité et téléchargez votre MP3, en général en moins d’une minute.
/api/v1/tools/mp4-to-mp3/convert
- Accepte
- MP4, MOV, MKV, AVI
- Fichiers par requête
- Un seul (envoyez un fichier par requête)
- Durée habituelle
- 20 à 60 secondes
- Essayer
- Ouvrir la page de l’outil →
Corps de la requête multipart/form-data
| Champ | Type | Description |
|---|---|---|
files[] obligatoire |
file | Le fichier à convertir (MP4, MOV, MKV, AVI). La limite de taille dépend de votre offre. |
settings[Bitrate] facultatif |
string |
192 kbps (recommended)320 kbps128 kbps |
settings[Channels] facultatif |
string |
StereoMono |
Exemple de requête
curl -X POST https://convertavo.com/fr/api/v1/tools/mp4-to-mp3/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@video.mp4" \
-F 'settings[Bitrate]=192 kbps (recommended)' \
-F 'settings[Channels]=Stereo'
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/tools/mp4-to-mp3/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('video.mp4'),
'settings[Bitrate]' => '192 kbps (recommended)',
'settings[Channels]' => 'Stereo',
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/fr/api/v1/tools/mp4-to-mp3/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('video.mp4', 'rb'))],
data={
'settings[Bitrate]': '192 kbps (recommended)',
'settings[Channels]': 'Stereo',
},
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('video.mp4')]), basename('video.mp4'));
form.append('settings[Bitrate]', '192 kbps (recommended)');
form.append('settings[Channels]', 'Stereo');
const response = await fetch('https://convertavo.com/fr/api/v1/tools/mp4-to-mp3/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
IA 2 outils
Détecteur d'art IA
ai-art-detector
Vous avez trouvé un dessin en ligne et quelque chose vous semble bizarre ? Le détecteur d’art IA gratuit de Convertavo vérifie si un dessin, une peinture ou une illustration sort d’un générateur d’images IA. Vous n’obtenez pas seulement un score, vous voyez les indices. Importez un JPG, PNG ou WebP : la réponse prend en général 2 à 4 secondes.
/api/v1/tools/ai-art-detector/convert
- Accepte
- JPG, PNG, WebP
- Fichiers par requête
- Un seul (envoyez un fichier par requête)
- Durée habituelle
- 2 à 4 secondes
- Essayer
- Ouvrir la page de l’outil →
Corps de la requête multipart/form-data
| Champ | Type | Description |
|---|---|---|
files[] obligatoire |
file | Le fichier à convertir (JPG, PNG, WebP). La limite de taille dépend de votre offre. |
Exemple de requête
curl -X POST https://convertavo.com/fr/api/v1/tools/ai-art-detector/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@photo.jpg"
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/tools/ai-art-detector/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('photo.jpg'),
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/fr/api/v1/tools/ai-art-detector/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('photo.jpg', 'rb'))],
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('photo.jpg')]), basename('photo.jpg'));
const response = await fetch('https://convertavo.com/fr/api/v1/tools/ai-art-detector/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
Détecteur d'images IA
ai-image-detector
Envoyez une image, et le détecteur d'images IA de Convertavo estime si elle a été générée. C'est une estimation, pas une preuve. Vous obtenez un verdict, le degré de certitude du modèle et les indices qui le justifient. Quand la réponse honnête est « impossible à dire », le rapport le dit.
/api/v1/tools/ai-image-detector/convert
- Accepte
- JPG, PNG, WebP
- Fichiers par requête
- Un seul (envoyez un fichier par requête)
- Durée habituelle
- 2 à 4 secondes
- Essayer
- Ouvrir la page de l’outil →
Corps de la requête multipart/form-data
| Champ | Type | Description |
|---|---|---|
files[] obligatoire |
file | Le fichier à convertir (JPG, PNG, WebP). La limite de taille dépend de votre offre. |
Exemple de requête
curl -X POST https://convertavo.com/fr/api/v1/tools/ai-image-detector/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@photo.jpg"
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/tools/ai-image-detector/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('photo.jpg'),
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/fr/api/v1/tools/ai-image-detector/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('photo.jpg', 'rb'))],
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('photo.jpg')]), basename('photo.jpg'));
const response = await fetch('https://convertavo.com/fr/api/v1/tools/ai-image-detector/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
Liens 5 outils
Raccourcisseur d’URL en masse
bulk-url-shortener
Besoin de raccourcir toute une liste de liens ? Collez-les dans le raccourcisseur d’URL en masse de Convertavo, un par ligne, ou importez un fichier CSV. Tous les liens courts reviennent dans un seul tableur, chacun avec son QR code. C’est gratuit, et jusqu’à 50 liens à la fois vous n’avez même pas besoin de compte.
/api/v1/tools/bulk-url-shortener/convert
- Accepte
- Tout fichier
- Fichiers par requête
- Un seul (envoyez un fichier par requête)
- Durée habituelle
- une minute ou deux
- Essayer
- Ouvrir la page de l’outil →
Corps de la requête multipart/form-data
| Champ | Type | Description |
|---|---|---|
files[] obligatoire |
file | Le fichier à convertir (tout type). La limite de taille dépend de votre offre. |
Exemple de requête
curl -X POST https://convertavo.com/fr/api/v1/tools/bulk-url-shortener/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@file.bin"
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/tools/bulk-url-shortener/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('file.bin'),
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/fr/api/v1/tools/bulk-url-shortener/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('file.bin', 'rb'))],
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('file.bin')]), basename('file.bin'));
const response = await fetch('https://convertavo.com/fr/api/v1/tools/bulk-url-shortener/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
Vérificateur de lien
expand-url
Un doute sur un lien court reçu ? Collez-le dans le vérificateur de liens courts de Convertavo, et vous verrez la vraie adresse avant même de toucher le lien. Nous suivons le lien pour vous et affichons l’adresse complète, chaque étape en chemin et un contrôle de sécurité. Sans compte, sans application.
/api/v1/tools/expand-url/convert
- Accepte
- Tout fichier
- Fichiers par requête
- Un seul (envoyez un fichier par requête)
- Durée habituelle
- instantané
- Essayer
- Ouvrir la page de l’outil →
Corps de la requête multipart/form-data
| Champ | Type | Description |
|---|---|---|
files[] obligatoire |
file | Le fichier à convertir (tout type). La limite de taille dépend de votre offre. |
Exemple de requête
curl -X POST https://convertavo.com/fr/api/v1/tools/expand-url/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@file.bin"
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/tools/expand-url/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('file.bin'),
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/fr/api/v1/tools/expand-url/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('file.bin', 'rb'))],
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('file.bin')]), basename('file.bin'));
const response = await fetch('https://convertavo.com/fr/api/v1/tools/expand-url/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
Page lien en bio
link-in-bio
Votre profil n’a de place que pour un lien, mais vous avez cinq choses à partager. Créez une page lien en bio gratuite sur Convertavo : ce seul lien les ouvre toutes, avec les designs, vidéos, formulaires d’inscription et statistiques que d’autres services font payer. Sans publicité.
/api/v1/tools/link-in-bio/convert
- Accepte
- Tout fichier
- Fichiers par requête
- Un seul (envoyez un fichier par requête)
- Durée habituelle
- instantané
- Essayer
- Ouvrir la page de l’outil →
Corps de la requête multipart/form-data
| Champ | Type | Description |
|---|---|---|
files[] obligatoire |
file | Le fichier à convertir (tout type). La limite de taille dépend de votre offre. |
Exemple de requête
curl -X POST https://convertavo.com/fr/api/v1/tools/link-in-bio/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@file.bin"
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/tools/link-in-bio/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('file.bin'),
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/fr/api/v1/tools/link-in-bio/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('file.bin', 'rb'))],
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('file.bin')]), basename('file.bin'));
const response = await fetch('https://convertavo.com/fr/api/v1/tools/link-in-bio/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
Raccourcisseur d’URL
url-shortener
Votre lien est si long qu’il se coupe dans un SMS ? Collez-le dans le raccourcisseur d’URL gratuit de Convertavo, et vous obtenez un lien court en une seconde environ. Chaque lien a un QR code et un compteur de clics. Sans compte. Et rien n’est réservé à une offre payante.
/api/v1/tools/url-shortener/convert
- Accepte
- Tout fichier
- Fichiers par requête
- Un seul (envoyez un fichier par requête)
- Durée habituelle
- instantané
- Essayer
- Ouvrir la page de l’outil →
Corps de la requête multipart/form-data
| Champ | Type | Description |
|---|---|---|
files[] obligatoire |
file | Le fichier à convertir (tout type). La limite de taille dépend de votre offre. |
Exemple de requête
curl -X POST https://convertavo.com/fr/api/v1/tools/url-shortener/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@file.bin"
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/tools/url-shortener/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('file.bin'),
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/fr/api/v1/tools/url-shortener/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('file.bin', 'rb'))],
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('file.bin')]), basename('file.bin'));
const response = await fetch('https://convertavo.com/fr/api/v1/tools/url-shortener/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
Générateur de liens UTM
utm-builder
Cette newsletter a-t-elle vraiment amené quelqu’un sur votre site, ou était-ce la publication Instagram ? Passez le lien dans le générateur UTM de Convertavo avant de le partager, et vos statistiques vous le diront enfin. Le lien balisé sort long et peu lisible (c’est normal) : raccourcissez-le ici même. Aucun compte requis, et c’est gratuit.
/api/v1/tools/utm-builder/convert
- Accepte
- Tout fichier
- Fichiers par requête
- Un seul (envoyez un fichier par requête)
- Durée habituelle
- instantané
- Essayer
- Ouvrir la page de l’outil →
Corps de la requête multipart/form-data
| Champ | Type | Description |
|---|---|---|
files[] obligatoire |
file | Le fichier à convertir (tout type). La limite de taille dépend de votre offre. |
Exemple de requête
curl -X POST https://convertavo.com/fr/api/v1/tools/utm-builder/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@file.bin"
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/tools/utm-builder/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('file.bin'),
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/fr/api/v1/tools/utm-builder/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('file.bin', 'rb'))],
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('file.bin')]), basename('file.bin'));
const response = await fetch('https://convertavo.com/fr/api/v1/tools/utm-builder/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
Entreprise 1 outil
Générateur de factures
invoice-generator
Créez une facture professionnelle dans la langue et la devise de votre client. Taxes, remises et retenue à la source calculées exactement, et un PDF sans filigrane, sans compte.
/api/v1/tools/invoice-generator/convert
- Accepte
- Tout fichier
- Fichiers par requête
- Un seul (envoyez un fichier par requête)
- Durée habituelle
- instantané
- Essayer
- Ouvrir la page de l’outil →
Corps de la requête multipart/form-data
| Champ | Type | Description |
|---|---|---|
files[] obligatoire |
file | Le fichier à convertir (tout type). La limite de taille dépend de votre offre. |
Exemple de requête
curl -X POST https://convertavo.com/fr/api/v1/tools/invoice-generator/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@file.bin"
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/tools/invoice-generator/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('file.bin'),
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/fr/api/v1/tools/invoice-generator/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('file.bin', 'rb'))],
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('file.bin')]), basename('file.bin'));
const response = await fetch('https://convertavo.com/fr/api/v1/tools/invoice-generator/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
QR code 2 outils
Générateur de QR code
qr-code-generator
Créez un QR code pour un lien, un réseau Wi-Fi, une fiche de contact ou une conversation WhatsApp. Choisissez les couleurs, la forme des points, le cadre et le logo, puis téléchargez-le.
/api/v1/tools/qr-code-generator/convert
- Accepte
- Tout fichier
- Fichiers par requête
- Un seul (envoyez un fichier par requête)
- Durée habituelle
- instantané
- Essayer
- Ouvrir la page de l’outil →
Corps de la requête multipart/form-data
| Champ | Type | Description |
|---|---|---|
files[] obligatoire |
file | Le fichier à convertir (tout type). La limite de taille dépend de votre offre. |
Exemple de requête
curl -X POST https://convertavo.com/fr/api/v1/tools/qr-code-generator/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@file.bin"
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/tools/qr-code-generator/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('file.bin'),
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/fr/api/v1/tools/qr-code-generator/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('file.bin', 'rb'))],
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('file.bin')]), basename('file.bin'));
const response = await fetch('https://convertavo.com/fr/api/v1/tools/qr-code-generator/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);
Scanner de QR code
qr-code-scanner
Scanner de QR code et de code-barres gratuit. Scannez avec votre caméra, une photo, une capture d’écran ou un PDF, et chaque lien est vérifié avant que vous ne l’ouvriez.
/api/v1/tools/qr-code-scanner/convert
- Accepte
- PNG, JPG, WebP, GIF, PDF
- Fichiers par requête
- Un seul (envoyez un fichier par requête)
- Durée habituelle
- instantané
- Essayer
- Ouvrir la page de l’outil →
Corps de la requête multipart/form-data
| Champ | Type | Description |
|---|---|---|
files[] obligatoire |
file | Le fichier à convertir (PNG, JPG, WebP, GIF, PDF). La limite de taille dépend de votre offre. |
Exemple de requête
curl -X POST https://convertavo.com/fr/api/v1/tools/qr-code-scanner/convert \
-H "Authorization: Bearer $CONVERTAVO_KEY" \
-F "files[]=@image.png"
<?php
$ch = curl_init('https://convertavo.com/fr/api/v1/tools/qr-code-scanner/convert');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CONVERTAVO_KEY')],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('image.png'),
],
]);
$job = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status !== 202) {
throw new RuntimeException($job['message'] ?? "Request failed ({$status})");
}
echo $job['status_url'];
import os
import requests
response = requests.post(
'https://convertavo.com/fr/api/v1/tools/qr-code-scanner/convert',
headers={'Authorization': f"Bearer {os.environ['CONVERTAVO_KEY']}"},
files=[('files[]', open('image.png', 'rb'))],
timeout=120,
)
response.raise_for_status()
job = response.json()
print(job['status_url'])
import { readFile } from 'node:fs/promises';
import { basename } from 'node:path';
const form = new FormData();
form.append('files[]', new Blob([await readFile('image.png')]), basename('image.png'));
const response = await fetch('https://convertavo.com/fr/api/v1/tools/qr-code-scanner/convert', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CONVERTAVO_KEY}` },
body: form,
});
const job = await response.json();
if (response.status !== 202) throw new Error(job.message);
console.log(job.status_url);