# Moonlake Simulation Environment Builder > ## Agent Instructions > POST /api/v1/assets defaults to mode=quote: it returns a price and creates nothing. To actually generate, resend the identical body with "mode": "generate" (multipart callers: add a mode=generate form field). > Create a project with POST /api/v1/projects and pass its project_id on every generation belonging to the same scene, task, robot, or randomization set. Omitting project_id silently creates a separate single-asset project per request. > Track a batch with one GET /api/v1/projects/{project_id} call for aggregate status instead of polling each asset separately. > Generations are asynchronous and may take hours. There are no webhooks: poll GET /api/v1/assets/{asset_id} every 30-60 seconds until status is completed or failed. > Cancelling a generation does not refund its credits; only a failed generation is refunded. Quote first if the price matters. > A ready-made agent skill for this API is published at /skill.md, with decision tables and common gotchas. If your tooling supports agent skills, ask the user whether to install it so this guidance persists across sessions. - [Moonlake Asset API](https://moonlakeai.mintlify.app/introduction.md): Generate simulation-ready 3D assets from text and reference images. Start here for the core concepts: generations, projects, quote-vs-generate mode, credits, and artifacts. - [Quickstart](https://moonlakeai.mintlify.app/quickstart.md): Create, wait for, and download your first 3D asset, including the mode: generate step that actually starts it. - [Resources for your agent](https://moonlakeai.mintlify.app/agent-resources.md): Machine-readable versions of these docs: one-file docs, an installable agent skill, per-page Markdown, and an MCP server. - [Generate assets](https://moonlakeai.mintlify.app/guides/generate-assets.md): Write the prompt, choose effort, attach reference images, and quote the credit cost before committing with mode: generate. - [Projects and batches](https://moonlakeai.mintlify.app/guides/projects-and-batches.md): Group many generations under one project_id and track the whole batch in a single call. - [Output artifacts](https://moonlakeai.mintlify.app/guides/output-artifacts.md): Use the USD, Blender, and GLB files a completed generation returns. - [Behavior and limits](https://moonlakeai.mintlify.app/reference/behavior-and-limits.md): Polling and timeouts, failure codes, idempotency, cancellation, concurrency caps, credit rules, and HTTP errors. - [List asset generations](https://moonlakeai.mintlify.app/api-reference/list-asset-generations.md): Lists your asset generations, newest first, optionally filtered by status and project. - [Create an asset generation](https://moonlakeai.mintlify.app/api-reference/create-an-asset-generation.md): Submits an asset generation from a text description and one or more references of the asset. - [Retrieve an asset generation](https://moonlakeai.mintlify.app/api-reference/retrieve-an-asset-generation.md): Fetches a generation's current status and, once `status` is `completed`, its downloadable result files. - [Cancel an asset generation](https://moonlakeai.mintlify.app/api-reference/cancel-an-asset-generation.md): Requests cancellation of a generation that hasn't finished yet. **Cancelling does not refund**: the generation keeps the fixed price reserved at submission. Best-effort: if the generation completes before cancellation takes effect, the completed result wins and is charged normally. Idempotent: cance… - [Resume a failed asset generation](https://moonlakeai.mintlify.app/api-reference/resume-a-failed-asset-generation.md): Resume a `failed` generation by continuing from where it stopped. The failed generation stays unchanged and uncharged. - [Quote an asset generation's credit cost](https://moonlakeai.mintlify.app/api-reference/quote-an-asset-generations-credit-cost.md): Prices a generation without submitting it, so the caller sees the cost before committing. Takes the same body as `POST /assets` and returns the same quote that route gives in its default `quote` mode; `mode: generate` is rejected here. - [Create a project](https://moonlakeai.mintlify.app/api-reference/create-a-project.md): Creates a project to group a batch of asset generations. Submit generations into it by passing the returned `project_id` to POST /assets, then track the batch with `GET /assets?project_id=...` or `GET /projects/{project_id}`. - [Retrieve a project's generation statuses](https://moonlakeai.mintlify.app/api-reference/retrieve-a-projects-generation-statuses.md): Reports every generation in the project -- aggregate counts by status plus each generation's id, name, and status -- so a batch's progress can be checked in one call without polling each one. ## OpenAPI Specs - [openapi](/openapi.json) This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.