Create an App Run
POST /openapi/v1/app-runs
Authorization: Bearer <API_KEY>
Content-Type: application/json
Request parameters
| Parameter | Location | Type | Required | Description |
|---|---|---|---|---|
appId | Body | string | Yes | App ID |
projectId | Body | string | Yes | Project ID; determines result ownership and the project charged |
inputJson | Body | object | Yes | Map from the App's declared input keys to input values |
Use List published Apps to obtain an App ID in the project, then call Get App details before creating a Run. inputJson must follow the current data.inputs returned by App details.
Request body example
data.inputs returned by App detailsThe request body accepts only these three top-level fields. Additional top-level fields return INVALID_REQUEST.
inputJson rules
Each App's publisher defines its input keys, types, required status, and defaults. Clients may send only declared keys.
Text input example
Media input example
A media object must contain exactly one url field. The media URL must:
- Be an absolute HTTPS URL;
- Contain no username, password, or URL fragment;
- Be accessible during the Run without browser sign-in, Cookies, or interaction;
- Not point to localhost, private networks, link-local networks, CGNAT, reserved ranges, or cloud metadata addresses;
- Be downloadable by the execution service within a reasonable time.
Direct binary uploads, Base64, data: URLs, HTTP URLs, other resource IDs, and additional media object fields such as a filename are not supported.
The API returns APP_INPUT_INVALID when:
- An undeclared key is supplied;
- A required input without a default is missing;
- A text input is not a string;
- A media input is not
{ "url": "https://..." }; - A URL cannot be parsed or violates the security rules.
Creation semantics and billing
When the server accepts the request, it locks the App's current published version. Taking the App offline or republishing it later does not affect Runs that were already created successfully.
The success status is HTTP 201.
Success response example
200success on successestimatedPrice is used for the pre-Run balance check and display. It is not a final price or price cap. Both the balance check and actual charges belong to the project identified by projectId; actualPrice reflects the charges actually incurred. Every POST creates a new Run.