Ideogram Custom Branded Models API

Custom Model Training API

Create datasets, upload training images, train models, and generate at scale. All from a few API calls.

Overview

Custom model training lets you fine-tune an Ideogram model on your own dataset of images via the API. Once training completes, you can generate images using your trained model by passing its custom_model_uri to the Generate endpoint.

1 Create a dataset
2 Upload images
3 Train model
4 Check status
5 Generate

Endpoint reference

Endpoint Method Description
/datasets GET List all datasets for the authenticated user
/datasets POST Create a new dataset
/datasets/{dataset_id}/upload_assets POST Upload images and captions to a dataset
/datasets/{dataset_id}/train_model POST Start training a model from a dataset
/models GET List custom models (owned or shared)
/models/{model_id} GET Get details for a specific model

Step 1: Create a dataset

import requests

response = requests.post(
  "https://api.ideogram.ai/datasets",
  headers={"Api-Key": "<apiKey>"},
  json={"name": "My Training Dataset"}
)
dataset = response.json()
dataset_id = dataset["dataset_id"]
print(f"Created dataset: {dataset_id}")

Step 2: Upload training images

Upload images (JPEG, PNG, WebP), optional .txt caption sidecar files, or ZIP archives containing both.

Minimum: 10 images per dataset
Maximum: 100 images per dataset
Captions: Matched by filename stem (e.g. sunset.txt captions sunset.jpg)
Tip: Upload a ZIP file for larger datasets. If images are very large, upload in batches to avoid timeouts.
import requests
import glob

files = [("files", open(f, "rb")) for f in glob.glob("training_images/*.jpg")]

response = requests.post(
  f"https://api.ideogram.ai/datasets/{dataset_id}/upload_assets",
  headers={"Api-Key": "<apiKey>"},
  files=files
)
result = response.json()
print(f"Uploaded {result['success_count']}/{result['total_count']} images")

Step 3: Train the model

Once your dataset has enough images, start training by giving your model a name.

response = requests.post(
  f"https://api.ideogram.ai/datasets/{dataset_id}/train_model",
  headers={"Api-Key": "<apiKey>"},
  json={"model_name": "my-custom-model"}
)
training = response.json()
model_id = training["model_id"]
print(f"Training started: {training['training_status']}")

Step 4: Check training status

Poll the model details endpoint to check when training completes.

CREATING DRAFT TRAINING COMPLETED
import time

while True:
  response = requests.get(
    f"https://api.ideogram.ai/models/{model_id}",
    headers={"Api-Key": "<apiKey>"}
  )
  model = response.json()["model"]
  print(f"Status: {model['status']}")

  if model["status"] == "COMPLETED":
    print(f"Model ready! URI: {model.get('custom_model_uri')}")
    break
  elif model["status"] == "ERRORED":
    print("Training failed.")
    break

  time.sleep(60)

Step 5: Generate with your model

Once training is complete and is_available_for_generation is true, use the custom_model_uri from the model details to generate images.

response = requests.post(
  "https://api.ideogram.ai/v1/ideogram-v3/generate",
  headers={"Api-Key": "<apiKey>"},
  data={
    "prompt": "A photo in my custom style",
    "custom_model_uri": "model/my-custom-model/version/1",
    "rendering_speed": "DEFAULT"
  }
)
result = response.json()
if response.status_code == 200:
  print(result["data"][0]["url"])

Tips for better results

  • Use high-quality images that clearly represent the style or subject you want the model to learn.
  • Add captions to guide the model on what each image represents. Captions are optional but improve alignment.
  • Use consistent subjects across your training images for best results with style transfer.

Ready to train your first model?