API FoodStudio

Intégrez FoodStudio dans votre boutique, ERP ou backend :

  • Sushis — pack d’images studio à partir d’une photo
  • Améliorer couleur — même photo, saturation amplifiée (couleurs plus éclatantes)

Base URL : https://api.foodstudio.app

Créez une clé API dans Mon compte → API. Chaque image générée consomme 1 crédit.

Authentification

Toutes les routes /v1/* exigent une clé API :

Authorization: Bearer fsak_votre_cle
# ou
X-Api-Key: fsak_votre_cle

CORS est ouvert sur /v1/* pour les apps front (shops). Préférez l’appel côté serveur pour ne pas exposer la clé.

Générateur Sushis

GET Métadonnées

GET /v1/sushis
curl https://api.foodstudio.app/v1/sushis \
  -H "Authorization: Bearer fsak_…"

# → presets disponibles + solde crédits

POST Générer

POST /v1/sushis

Envoyez l’image source d’une des façons suivantes :

  • image_url — URL HTTPS publique de la photo
  • image_base64 — base64 (+ mime optionnel)
  • source_data_url — data URL complète data:image/…;base64,…
  • multipart image — fichier binaire

Optionnel : preset_ids (tableau) pour limiter les presets. Par défaut : pack complet (8 images, donc 8 crédits si toutes réussissent).

Réponse

{
  "ok": true,
  "urls": [
    "https://api.foodstudio.app/files/outputs/sushis/…png",
    "https://api.foodstudio.app/files/outputs/sushis/…jpg"
  ],
  "images": [
    {
      "preset_id": "nobg",
      "url": "https://api.foodstudio.app/files/…",
      "mime": "image/png",
      "image_id": "i_…"
    }
  ],
  "credits_left": 984,
  "credits_used": 8
}

Utilisez urls pour brancher directement votre shop (carousel, fiche produit, etc.).

Presets par défaut (pack complet) : nobg, vues studio (côté, duos, flat lay, macro, menu, plongeante), studio-high-angle (plongée légère 45–60°), studio-gourmand (perspective 3/4 · angle consommateur), plus vues plat studio-platter-45 (plongée 45° isométrique) et studio-platter-medium (plan d’ensemble moyen / group shot).

Améliorer couleur

Envoie une photo → reçoit la même image avec la saturation amplifiée (couleurs plus éclatantes), sans changer le cadrage ni le sujet.

1 crédit par appel. Intensité au choix :

  • Presets : soft (25), medium (50, défaut), hard (80)
  • Ou niveau précis : entier de 1 à 99 (sur 100)

GET Métadonnées

GET /v1/enhance-color
curl https://api.foodstudio.app/v1/enhance-color \
  -H "Authorization: Bearer fsak_…"

POST Amplify saturation

POST /v1/enhance-color
curl https://api.foodstudio.app/v1/enhance-color \
  -H "Authorization: Bearer fsak_…" \
  -H "Content-Type: application/json" \
  -d '{
    "image_url": "https://cdn.monshop.com/produits/plat.jpg",
    "intensity": "medium"
  }'

# intensity peut aussi être "soft", "hard", ou un nombre 1–99 :
# "intensity": 65

Réponse

{
  "ok": true,
  "url": "https://api.foodstudio.app/files/outputs/enhance-color/….jpg",
  "urls": ["https://api.foodstudio.app/files/outputs/enhance-color/….jpg"],
  "image_id": "i_…",
  "mime": "image/jpeg",
  "intensity": { "preset": "medium", "level": 50 },
  "credits_left": 990,
  "credits_used": 1
}

url (et urls[0]) pointe vers l’image saturée. Multipart supporté : -F image=@photo.jpg -F intensity=hard.

Exemples pour un shop externe

Node — Sushis

const res = await fetch('https://api.foodstudio.app/v1/sushis', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ' + process.env.FOODSTUDIO_API_KEY,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    image_url: 'https://cdn.monshop.com/produits/sushi-saumon.jpg',
    // preset_ids: ['nobg', 'studio-side', 'studio-top'], // optionnel
  }),
});
const data = await res.json();
if (!data.ok) throw new Error(data.error);
// data.urls → liste d’images générées
console.log(data.urls);

Node — Améliorer couleur

const res = await fetch('https://api.foodstudio.app/v1/enhance-color', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ' + process.env.FOODSTUDIO_API_KEY,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    image_url: productImageUrl,
    intensity: 'hard', // ou 1–99
  }),
});
const data = await res.json();
// data.url → photo aux couleurs plus éclatantes
console.log(data.url);

PHP

$ch = curl_init('https://api.foodstudio.app/v1/sushis');
curl_setopt_array($ch, [
  CURLOPT_POST => true,
  CURLOPT_HTTPHEADER => [
    'Authorization: Bearer ' . getenv('FOODSTUDIO_API_KEY'),
    'Content-Type: application/json',
  ],
  CURLOPT_POSTFIELDS => json_encode([
    'image_url' => $productImageUrl,
  ]),
  CURLOPT_RETURNTRANSFER => true,
]);
$data = json_decode(curl_exec($ch), true);
$urls = $data['urls'] ?? [];

Upload multipart

curl https://api.foodstudio.app/v1/sushis \
  -H "Authorization: Bearer fsak_…" \
  -F "image=@/path/sushi.jpg"

Erreurs courantes

  • 401 api_key_required — clé manquante ou invalide
  • 400 missing_image — aucun image_url / fichier
  • 402 insufficient_credits — rechargez sur my.foodstudio.app
  • 413 image_too_large — image source trop lourde (~10 Mo max)
  • 502 no_images_generated / enhance_failed — échec IA (réessayer)
  • 400 invalid_intensity — utilisez soft / medium / hard ou 1–99

Crédits & facturation

1 crédit = 1 image générée. Le pack Sushis par défaut produit jusqu’à 8 images. enhance-color = 1 crédit.

Achetez des crédits sur Mon compte. Gérez vos clés (création / révocation) dans l’onglet API.