Create a native plant model
vegetation_createAuthor a procedural plant with ngPlant in an empty ngplant project. Use explicit baseRevisionId, bounded template controls and a stable idempotency key. Blender packages GLB/OBJ/STL/blend outputs. Returns a durable job; poll job_get/job_wait and use vegetation_inspect after commit.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| recipe | Yes | ||
| projectId | Yes | ||
| baseRevisionId | Yes | ||
| idempotencyKey | Yes | Caller-chosen key. Replaying it with IDENTICAL input returns the EXISTING job instead of queueing a second one — a restarted driver adopts its own in-flight work rather than duplicating or orphaning it. Vary the key to force a new job. Full semantics: the same key with DIFFERENT input is rejected with IDEMPOTENCY_CONFLICT (never silently replayed, so a stale result cannot be mistaken for a fresh one). A key is recorded only once a job is actually created, so a request rejected beforehand (validation, APPROVAL_REQUIRED, quota) leaves the key unused and free to reuse. A key bound to a job keeps resolving to that job even after it fails or is cancelled — use a NEW key to genuinely retry cancelled work. Keys live 48 hours and are scoped per principal+deployment+operation, which means they SPAN SESSIONS: a plain descriptive key like "hero-final-1024-v1" will collide with your own run from yesterday and be rejected. Include a project id or a timestamp. This scope used to be stated only in the conflict error, i.e. after the round trip it cost — a field build lost two that way, ~34 hours after unrelated work had taken the same names. | |
| generatePreview | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| job | Yes | ||
| deduped | Yes |