---
title: "Recraft 4.1 Playground & API | Made"
description: "Try Recraft 4.1 in Made's playground or integrate it with one API key. 4 credits / image, priced before you run it."
url: https://www.made.app/playground/recraft-4-1
---

Image 4 credits / image

# Recraft 4.1

Recraft 4.1 is Recraft’s design-first image model, built for branded social assets, editorial compositions, product shots, and typography that sits inside the design rather than on top of it.

[View docs](https://www.made.app/developers) [Model guide](https://www.made.app/models/recraft-4-1)

```
// Node.js. Running this creates one paid generation.
import { randomUUID } from 'node:crypto';
const base = "https://www.made.app/api";
const headers = {
  Authorization: `Bearer ${process.env.MADE_API_KEY}`,
  'Content-Type': 'application/json',
};
const input = {
  "model": "recraft_4_1",
  "prompt": "Art-directed still life of an ice cream sundae in a glass coupe on a terrazzo counter, hard graphic shadows, pastel pink backdrop. 35mm film still, soft natural light, muted earth tones with one cherry red accent, shallow depth of field, subtle film grain, candid and unposed, no text, logos, or watermark.",
  "aspect_ratio": "1:1"
};

async function api(path, body) {
  const response = await fetch(base + path, {
    method: body ? 'POST' : 'GET', headers,
    ...(body && { body: JSON.stringify(body) }),
  });
  if (!response.ok) throw new Error(await response.text());
  return response.json();
}

const { cost } = await api('/v1/cost', input);
console.log('Quoted cents:', cost.customerCostCents);
// Preserve this request ID when retrying a submission.
const requestId = randomUUID();
let job = await api('/v1/generations', {
  ...input, request_id: requestId,
  max_cost_cents: cost.customerCostCents,
});
console.log('Request:', job.id);
while (!['succeeded', 'failed', 'canceled'].includes(job.status)) {
  await new Promise(resolve => setTimeout(resolve, 3000));
  job = await api('/v1/generations/' + job.id);
}
if (job.status !== 'succeeded') throw new Error(JSON.stringify(job.error || job.status));
console.log(job.result.assets);
```

## Input

Prompt

Aspect ratio

[Sign in to generate](https://www.made.app/login?returnUrl=%2Fplayground%2Frecraft-4-1%23playground)

Uses your credits. See the exact price before generating.

## Result

Example

![art-directed sundae on a terrazzo counter generated with Recraft 4.1 in Made](https://www.made.app/images/models/recraft-4-1/sundae-still.jpg)

Recraft 4.1: Art-directed product

## Price

4 credits / image. Check the exact cost for your settings before generating. Failed generations are refunded. [Full price sheet](https://www.made.app/price-sheet).

---

Markdown version of https://www.made.app/playground/recraft-4-1. Every public Made page has one at its URL plus .md (https://www.made.app/playground/recraft-4-1.md). Site summary for AI assistants: https://www.made.app/llms.txt
