ReWords.AI API

Images

Comment envoyer des images à l’API ReWords.AI — URL, base64, data URL ou envoi multipart —, les limites de taille et de format, le traitement de l’EXIF et de la transparence, les fichiers de résultat et la conversion des boîtes en pixels.

Ce que vous pouvez envoyer

Limite
FormatsJPEG, PNG, WebP. Détecté à partir des octets du fichier, pas de son nom ni de son Content-Type.
Taille du fichierJusqu’à 20 Mo (20 × 1024 × 1024 octets ; la limite de 28 Mo du corps JSON se compte de la même façon).
DimensionsCôté le plus long jusqu’à 8000 px ; côté le plus court d’au moins 32 px.
CouleurRVB ou niveaux de gris. Les JPEG CMJN sont rejetés avec 400 invalid_image.
AnimationWebP animé : seule la première image est utilisée.

Un fichier qui ne respecte pas ces règles est rejeté avec 400 invalid_image avant toute facturation.

Quatre façons d’envoyer une image

Utilisez-en exactement une par requête. N’en envoyer aucune, ou plus d’une, renvoie 400 invalid_request.

1. image_url

Un lien http(s) public. Nous le téléchargeons une fois, pendant le traitement de votre requête : un lien signé n’a donc besoin de rester valide que jusqu’à notre réponse. Nous suivons jusqu’à 3 redirections et abandonnons après 15 secondes ; si le fichier ne peut pas être téléchargé, la requête renvoie 400 invalid_image. Les liens qui demandent des cookies ou une connexion ne fonctionnent pas, pas plus que les adresses d’un réseau privé comme localhost, 10.x.x.x ou 192.168.x.x.

{ "image_url": "https://example.com/banner.png" }

2. image_base64

Les octets du fichier en base64 standard (A–Z a–z 0–9 + /, remplissage facultatif), ou la même chose sous forme de data URL avec n’importe quel type de média, comme data:image/png;base64, ou le data:application/octet-stream;base64, que peut produire le FileReader d’un navigateur — le format est détecté à partir des octets. Les espaces et sauts de ligne sont ignorés : les lignes de 76 caractères de base64 sous Linux ou de base64.encodebytes en Python fonctionnent. Le base64 rend le fichier environ un tiers plus gros, donc le corps JSON entier peut atteindre 28 Mo ; un corps plus gros renvoie 400 invalid_image. Un texte qui n’est pas du base64 valide renvoie 400 invalid_request ; un base64 valide d’un fichier qui n’est pas une image prise en charge renvoie 400 invalid_image.

{ "image_base64": "iVBORw0KGgoAAAANSUhEUgAA..." }
{ "image_base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..." }

3. Envoi de fichier en multipart

Envoyez multipart/form-data avec le fichier dans le champ image. Pour POST /edits, mettez le tableau replacements dans un champ de formulaire sous forme de chaîne JSON ; match, language et callback_url sont des champs de formulaire ordinaires.

curl https://api.rewords.ai/v1/edits \
  -H "Authorization: Bearer $REWORDS_API_KEY" \
  -F [email protected] \
  -F 'replacements=[{"from":"SALE","to":"HOT DEAL"}]'
upload.mjs — Node.js 18+
import crypto from 'node:crypto';
import fs from 'node:fs';

const form = new FormData();
form.append('image', new Blob([await fs.promises.readFile('banner.png')]), 'banner.png');
form.append('replacements', JSON.stringify([{ from: 'SALE', to: 'HOT DEAL' }]));
const res = await fetch('https://api.rewords.ai/v1/edits', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.REWORDS_API_KEY}`, // let fetch set the multipart Content-Type
    'Idempotency-Key': crypto.randomUUID(), // a new key per job; reuse it only to resend this same job
  },
  body: form,
});
const job = await res.json();
if (!res.ok) throw new Error(`${res.status} ${job.error.code}: ${job.error.message}`);
console.log(job.id, job.status);

4. image_id

POST /ocr renvoie un image_id. Passez-le à POST /edits dans les 24 heures pour réutiliser l’image envoyée au lieu de la renvoyer. Il ne fonctionne que pour le compte qui l’a créé ; un id inconnu, expiré ou d’un autre compte renvoie 400 invalid_request. Chaque appel OCR renvoie un nouvel image_id, même pour une image déjà envoyée — y compris quand vous envoyez un image_id à POST /ocr, ce qui vous redonne 24 heures.

Comment nous lisons votre image

  • L’orientation EXIF est appliquée d’abord. Une photo de téléphone enregistrée de côté est redressée, et chaque width, height et boîte se rapporte à l’image redressée — celle que vous voyez dans une visionneuse.
  • Les zones transparentes deviennent blanches. La transparence des PNG et WebP est aplatie sur un fond blanc, car les résultats sont en JPEG.

Résultats

  • results.A.url, results.B.url et results.C.url sont des fichiers JPEG à des liens publics : téléchargez-les avec un simple GET, sans clé d’API. Traitez les liens comme privés — quiconque en a un peut l’ouvrir.
  • Envoyez un en-tête User-Agent pour télécharger. Celui de Python urllib par défaut est refusé avec 403 ; requests, curl, les navigateurs et fetch de Node fonctionnent tels quels.
  • Les liens sont conservés au moins 7 jours. Téléchargez ce que vous voulez garder.
  • Les fichiers de résultat sont enregistrés redressés, sans orientation EXIF : la taille dans le fichier est celle que vous voyez.
  • B est votre image d’origine avec le nouveau texte intégré. A est le redessin de toute l’image par l’IA et garde les proportions de votre image. Lisez la taille en pixels dans le fichier plutôt que de supposer qu’elle correspond à votre envoi.
  • C (4K) fait jusqu’à environ 8,3 mégapixels (l’équivalent de 3840 × 2160), côté le plus long d’au plus 3840 px, mêmes proportions. Il est omis pour les images plus larges ou plus hautes que 3:1.

Boîtes et pixels

Les boîtes sont [x, y, width, height], des nombres entiers sur une échelle de 0 à 1000 de l’image redressée, mesurés depuis le coin supérieur gauche. width et height valent au moins 1 ; x + width et y + height ne dépassent jamais 1000.

pixel left   = x      / 1000 * imageWidth
pixel top    = y      / 1000 * imageHeight
pixel width  = width  / 1000 * imageWidth
pixel height = height / 1000 * imageHeight

Exemple : la boîte [120, 80, 300, 60] sur une image de 1080 × 1350 donne gauche 130, haut 108, 324 × 81 px (arrondi). Pour envoyer votre propre boîte, convertissez dans l’autre sens et arrondissez à des nombres entiers.

Sur cette page