# MakeInfluencer REST API

> Generate AI influencer images, edits, video, motion control, and lip-sync output from one model-aware API. REST, MCP, and the dashboard use the same credits with no API markup.

- Base URL: `https://www.makeinfluencer.ai/api/v1`
- Auth: `Authorization: Bearer mi_YOUR_API_KEY` on every request. Create a revocable key at https://www.makeinfluencer.ai/dashboard/developers?tab=keys.
- Errors: `{ "error": { "code", "message", "details?" } }`.
- Human docs: https://www.makeinfluencer.ai/developers · API product: https://www.makeinfluencer.ai/api · OpenAPI: https://www.makeinfluencer.ai/openapi.json · MCP: https://www.makeinfluencer.ai/developers/mcp

## Quickstart

1. Create an API key in Dashboard → Developer API → Keys.
2. Read `GET https://www.makeinfluencer.ai/api/v1/models/{modelId}` or open a model page below for its exact inputs.
3. Preview the cost with `POST https://www.makeinfluencer.ai/api/v1/models/{modelId}/preview-credits`.
4. Create with `POST https://www.makeinfluencer.ai/api/v1/models/{modelId}/generations`; save the first returned `ids` value.
5. Poll `GET https://www.makeinfluencer.ai/api/v1/generations/{kind}/{generationId}` until `terminal` is true. On success, `ready` is true and the response includes the output URL.

Use a unique `Idempotency-Key` header for generation requests that may be retried.

## Endpoints

### Account

Check the identity, plan, shared credit balance, and top-up URL behind a key.

#### GET /account — Get account and credits

Returns the account attached to the key and its live MakeInfluencer credit balance.

Request:

```bash
curl https://www.makeinfluencer.ai/api/v1/account \
  --header "Authorization: Bearer mi_YOUR_API_KEY"
```

Response:

```json
{
  "email": "you@example.com",
  "name": "Your Name",
  "plan": "creator",
  "subscribed": true,
  "credits": 2400,
  "purchaseUrl": "https://www.makeinfluencer.ai/dashboard/credits/buy"
}
```

#### GET /influencers — List AI influencers

Returns the account's reusable AI influencers and whether each one is trained and ready for influencerId image generation.

Request:

```bash
curl https://www.makeinfluencer.ai/api/v1/influencers \
  --header "Authorization: Bearer mi_YOUR_API_KEY"
```

Response:

```json
{
  "total": 2,
  "ready": 1,
  "characters": [
    {
      "id": "INFLUENCER_ID",
      "name": "Avery",
      "username": "averycreates",
      "ready": true,
      "status": "ready"
    }
  ]
}
```

### Training

Turn owned reference images into a reusable AI influencer and a downloadable LoRA using the shared credit balance.

#### POST /training/jobs — Train an AI influencer

Creates a private influencer, charges the server-defined training cost once, and queues character-sheet preparation and LoRA training. Idempotency-Key is required.

Parameters:

- `name` (string, required) — Display name for the reusable influencer.
- `username` (string) — Optional 3–30 character handle. A unique handle is generated when omitted.
- `style` (realistic | anime, required) — Visual training style.
- `gender` (male | female, required) — Used by the server-owned dataset recipe.
- `assetUrls` (string[], required) — One to twenty owned image URLs created through /assets/presign or the browser Library.
- `consentAcknowledged` (boolean, required) — Must be true to confirm rights to use every reference image.

Request:

```bash
curl --request POST https://www.makeinfluencer.ai/api/v1/training/jobs \
  --header "Authorization: Bearer mi_YOUR_API_KEY" \
  --header "Idempotency-Key: train-avery-001" \
  --header "Content-Type: application/json" \
  --data '{ "name": "Avery", "style": "realistic", "gender": "female", "assetUrls": ["https://assets.makeinfluencer.ai/makeinfluencer-uploads/USER_ID/portrait.jpg"], "consentAcknowledged": true }'
```

Response:

```json
HTTP/1.1 202 Accepted

{
  "trainingId": "TRAINING_ID",
  "influencerId": "INFLUENCER_ID",
  "status": "queued",
  "ready": false,
  "terminal": false,
  "refunded": false,
  "creditsCost": 60000,
  "loraUrl": null
}
```

Note: The server pads datasets smaller than twenty images and keeps training settings private. Poll the returned trainingId until terminal is true.

#### GET /training/jobs/{trainingId} — Get training status

Returns an owned training job. Successful jobs include the reusable influencerId and trained LoRA URL.

Parameters:

- `trainingId` (uuid, required) — The training ID returned by POST /training/jobs.

Request:

```bash
curl https://www.makeinfluencer.ai/api/v1/training/jobs/TRAINING_ID \
  --header "Authorization: Bearer mi_YOUR_API_KEY"
```

Response:

```json
{
  "trainingId": "TRAINING_ID",
  "influencerId": "INFLUENCER_ID",
  "status": "succeeded",
  "ready": true,
  "terminal": true,
  "refunded": false,
  "creditsCost": 60000,
  "loraUrl": "https://assets.makeinfluencer.ai/…/model.safetensors"
}
```

### Models

The registry is self-describing: discover fields first, then preview the exact cost.

#### GET /models — List models

Returns every available image, editing, video, motion-control, and lip-sync model with its exact fields, defaults, limits, options, and capabilities.

Request:

```bash
curl https://www.makeinfluencer.ai/api/v1/models \
  --header "Authorization: Bearer mi_YOUR_API_KEY"
```

Response:

```json
{
  "models": [
    {
      "id": "happyhorse1",
      "kind": "video",
      "label": "Happy Horse 1.0",
      "vendor": "Alibaba",
      "category": "generation",
      "fields": [
        { "name": "prompt", "type": "text", "required": true },
        { "name": "duration", "type": "number", "required": false, "default": 5 }
      ]
    }
  ]
}
```

Note: The live response contains the full registry. Use a model id unchanged in the generation endpoint.

#### GET /models/{modelId} — Get one model

Returns one model contract. This is the safest way to build dynamic forms or validate a workflow before generating.

Parameters:

- `modelId` (string, required) — An id returned by GET /models.

Request:

```bash
curl https://www.makeinfluencer.ai/api/v1/models/happyhorse1 \
  --header "Authorization: Bearer mi_YOUR_API_KEY"
```

Response:

```json
{
  "model": {
    "id": "happyhorse1",
    "kind": "video",
    "label": "Happy Horse 1.0",
    "vendor": "Alibaba",
    "fields": ["…"]
  }
}
```

#### POST /models/{modelId}/preview-credits — Preview credits

Validates the model input and returns its exact credit quote without reserving or spending credits.

Parameters:

- `input` (object, required) — The model-specific fields returned by GET /models/{modelId}.

Request:

```bash
curl --request POST https://www.makeinfluencer.ai/api/v1/models/happyhorse1/preview-credits \
  --header "Authorization: Bearer mi_YOUR_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{ "input": { "prompt": "Editorial creator campaign", "duration": 5, "resolution": "720p" } }'
```

Response:

```json
{
  "modelId": "happyhorse1",
  "credits": {
    "cost": 35088,
    "description": "Happy Horse 1.0 video - 720p (per second)"
  }
}
```

### Generations

One model-aware POST queues the job; one owned status route returns the result.

#### POST /models/{modelId}/generations — Create an image or video

Queues a generation and returns HTTP 202 with one or more ids plus the charged credit cost. Pass an Idempotency-Key when requests may be retried.

Parameters:

- `input` (object, required) — The selected model's validated input object.
- `copies` (integer) — Image models only; 1–4, default 1.
- `influencerId` (uuid) — Optional trained MakeInfluencer character for supported image models.
- `generationId` (uuid) — Optional owned source image generation for image-to-video workflows.

Request:

```bash
curl --request POST https://www.makeinfluencer.ai/api/v1/models/happyhorse1/generations \
  --header "Authorization: Bearer mi_YOUR_API_KEY" \
  --header "Idempotency-Key: campaign-video-001" \
  --header "Content-Type: application/json" \
  --data '{ "input": { "prompt": "A creator walking through neon Tokyo", "aspectRatio": "9:16", "duration": 5, "resolution": "720p" } }'
```

Response:

```json
HTTP/1.1 202 Accepted

{
  "status": "queued",
  "kind": "video",
  "modelId": "happyhorse1",
  "ids": ["GENERATION_ID"],
  "creditsCost": 35088
}
```

#### GET /generations/video/{generationId} — Poll a video

Returns an owned video's status. Stop polling when terminal is true. On success, ready is true and url contains the output unless it was safety-blocked.

Request:

```bash
curl https://www.makeinfluencer.ai/api/v1/generations/video/GENERATION_ID \
  --header "Authorization: Bearer mi_YOUR_API_KEY"
```

Response:

```json
{
  "id": "GENERATION_ID",
  "kind": "video",
  "modelId": "happyhorse1",
  "status": "success",
  "ready": true,
  "terminal": true,
  "refunded": false,
  "url": "https://assets.makeinfluencer.ai/…/video.mp4",
  "creditsCost": 35088
}
```

#### GET /generations/image/{generationId} — Poll an image

Returns an owned image generation. Stop polling when terminal is true. On success, ready is true and urls contains the generated outputs.

Request:

```bash
curl https://www.makeinfluencer.ai/api/v1/generations/image/GENERATION_ID \
  --header "Authorization: Bearer mi_YOUR_API_KEY"
```

Response:

```json
{
  "id": "GENERATION_ID",
  "kind": "image",
  "modelId": "gpt-image-2",
  "status": "success",
  "ready": true,
  "terminal": true,
  "refunded": false,
  "urls": ["https://assets.makeinfluencer.ai/…/image.png"],
  "creditsCost": 502
}
```

#### GET /generations?kind={kind}&limit={limit} — List generation history

Returns the authenticated account's recent image or video generations, newest first, with their current status and output URLs.

Parameters:

- `kind` (image | video, required) — The generation history to list.
- `limit` (integer) — 1–50 recent generations.

Request:

```bash
curl "https://www.makeinfluencer.ai/api/v1/generations?kind=video&limit=20" \
  --header "Authorization: Bearer mi_YOUR_API_KEY"
```

Response:

```json
{
  "kind": "video",
  "generations": [
    {
      "id": "GENERATION_ID",
      "status": "Success",
      "url": "https://assets.makeinfluencer.ai/…/video.mp4",
      "prompt": "A creator walking through neon Tokyo",
      "createdAt": "2026-08-05T12:00:00.000Z"
    }
  ]
}
```

### Assets

Upload images, video, or audio directly to storage, then pass the permanent asset URL into a model input.

#### POST /assets/presign — Create an upload URL

Returns a two-minute presigned PUT URL for an image, video, or audio file up to 8 MB. Upload the bytes with the returned Content-Type header, then use assetUrl in generation requests.

Parameters:

- `mimeType` (string, required) — A supported image, video, or audio MIME type.
- `sizeBytes` (integer, required) — File size from 1 byte through 8 MB.

Request:

```bash
curl --request POST https://www.makeinfluencer.ai/api/v1/assets/presign \
  --header "Authorization: Bearer mi_YOUR_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{ "mimeType": "image/png", "sizeBytes": 204800 }'
```

Response:

```json
{
  "uploadUrl": "https://storage.example/…signed…",
  "assetUrl": "https://assets.makeinfluencer.ai/makeinfluencer-uploads/…/asset.png",
  "expiresInSeconds": 120,
  "method": "PUT",
  "headers": { "Content-Type": "image/png" },
  "browserUploadUrl": "https://www.makeinfluencer.ai/dashboard/library?tab=uploads"
}
```

Note: PUT the raw file bytes to uploadUrl before it expires. The upload request does not use the MakeInfluencer Authorization header. If CORS or sandbox egress blocks that request, open https://www.makeinfluencer.ai/dashboard/library?tab=uploads, upload in your browser, and choose Copy for AI.

## Model API pages

- [MakeInfluencer Flagship API](https://www.makeinfluencer.ai/developers/models/ai-influencer-image-api) — model id `makeinfluencer-flagship`, image, MakeInfluencer.
- [Qwen Image Edit Plus API](https://www.makeinfluencer.ai/developers/models/qwen-image-edit-plus-api) — model id `qwen-image-edit-plus`, image, Alibaba.
- [Qwen Image 2.0 Pro Edit API](https://www.makeinfluencer.ai/developers/models/qwen-image-2-pro-edit-api) — model id `qwen-image-2-pro-edit`, image, Alibaba.
- [Nano Banana API](https://www.makeinfluencer.ai/developers/models/nano-banana-api) — model id `nano-banana`, image, Google.
- [Nano Banana Pro API](https://www.makeinfluencer.ai/developers/models/nano-banana-pro-api) — model id `nano-banana-pro`, image, Google.
- [Nano Banana 2 API](https://www.makeinfluencer.ai/developers/models/nano-banana-2-api) — model id `nano-banana-2`, image, Google.
- [Seedream 4 API](https://www.makeinfluencer.ai/developers/models/seedream-4-api) — model id `seedream-4`, image, ByteDance.
- [Seedream 4.5 API](https://www.makeinfluencer.ai/developers/models/seedream-4-5-api) — model id `seedream-4.5`, image, ByteDance.
- [GPT Image 1 API](https://www.makeinfluencer.ai/developers/models/gpt-image-1-api) — model id `gpt-image-1`, image, OpenAI.
- [GPT Image 2 API](https://www.makeinfluencer.ai/developers/models/gpt-image-2-api) — model id `gpt-image-2`, image, OpenAI.
- [Dreamina V3.0 API](https://www.makeinfluencer.ai/developers/models/dreamina-v3-api) — model id `dreamina-v3`, image, ByteDance.
- [Z-Image Turbo API](https://www.makeinfluencer.ai/developers/models/z-image-turbo-api) — model id `z-image-turbo`, image, Z-Image.
- [Grok Imagine API](https://www.makeinfluencer.ai/developers/models/grok-imagine-image-api) — model id `grok-imagine-image`, image, xAI.
- [Sora 2 API](https://www.makeinfluencer.ai/developers/models/sora-2-api) — model id `sora2`, video, OpenAI.
- [Sora 2 Pro API](https://www.makeinfluencer.ai/developers/models/sora-2-pro-api) — model id `sora2_pro`, video, OpenAI.
- [Veo 3.1 Fast API](https://www.makeinfluencer.ai/developers/models/veo-3-1-api) — model id `veo31`, video, Google.
- [Kling v2.1 API](https://www.makeinfluencer.ai/developers/models/kling-2-1-api) — model id `kling_v21`, video, Kuaishou.
- [Kling v3.0 Pro API](https://www.makeinfluencer.ai/developers/models/kling-3-pro-api) — model id `kling_v30_pro`, video, Kuaishou.
- [Kling v3.0 Standard API](https://www.makeinfluencer.ai/developers/models/kling-3-standard-api) — model id `kling_v30_std`, video, Kuaishou.
- [Wan 2.6 Flash API](https://www.makeinfluencer.ai/developers/models/wan-2-6-api) — model id `wan26`, video, Alibaba.
- [Wan 2.7 API](https://www.makeinfluencer.ai/developers/models/wan-2-7-api) — model id `wan27`, video, Alibaba.
- [Happy Horse 1.0 API](https://www.makeinfluencer.ai/developers/models/happyhorse-1-api) — model id `happyhorse1`, video, Alibaba.
- [Seedance 2.0 API](https://www.makeinfluencer.ai/developers/models/seedance-2-api) — model id `seedance2`, video, ByteDance.
- [Seedance 2.0 Fast API](https://www.makeinfluencer.ai/developers/models/seedance-2-fast-api) — model id `seedance2fast`, video, ByteDance.
- [Kling v3.0 Motion Control Pro API](https://www.makeinfluencer.ai/developers/models/kling-3-motion-control-pro-api) — model id `kling_v30_motion_control_pro`, video, Kuaishou.
- [Kling v3.0 Motion Control Standard API](https://www.makeinfluencer.ai/developers/models/kling-3-motion-control-standard-api) — model id `kling_v30_motion_control_std`, video, Kuaishou.
- [Kling v2.6 Motion Control Pro API](https://www.makeinfluencer.ai/developers/models/kling-2-6-motion-control-pro-api) — model id `kling_v26_motion_control_pro`, video, Kuaishou.
- [Kling v2.6 Motion Control Standard API](https://www.makeinfluencer.ai/developers/models/kling-2-6-motion-control-standard-api) — model id `kling_v26_motion_control_std`, video, Kuaishou.
- [InfiniteTalk API](https://www.makeinfluencer.ai/developers/models/infinitetalk-api) — model id `infinitetalk`, video, Alibaba.
- [Grok Imagine Video API](https://www.makeinfluencer.ai/developers/models/grok-imagine-video-api) — model id `grok-imagine-video`, video, xAI.

## Rate limits

- 120 authenticated requests per minute per account
- 20 generations per minute per account
- 5 influencer training jobs per hour per account
- 30 uploads per minute per account

HTTP 429 responses include `Retry-After`. Successful authenticated responses include `X-RateLimit-Limit` and `X-RateLimit-Remaining`.

## Errors

| Status | Code | Meaning |
| --- | --- | --- |
| 400 | `validation_error` | The request or model input is invalid; the message names the field. |
| 401 | `unauthorized` | The API key is missing, invalid, or revoked. |
| 402 | `insufficient_credits` | Top up the shared account balance and retry. |
| 404 | `not_found` | The model or owned generation does not exist. |
| 409 | `idempotency_conflict` | The idempotency key was already used with another payload. |
| 429 | `rate_limited` | Respect the Retry-After header before retrying. |
| 5xx | `internal_error` | The failure happened on our side; failed dispatches follow the refund path. |

## Credits

The REST API, MCP server, and dashboard spend the same MakeInfluencer balance at the same model prices. Preview calls do not charge. Failed charged generations are refunded atomically and return `refunded: true` with their terminal status. GET /account returns the live balance and top-up URL.
