MaxDay AI
API consoleAPI v1

Get App details

GET/openapi/v1/apps/{appId}
GET /openapi/v1/apps/{appId}?publishTag=production
Authorization: Bearer <API_KEY>

Request parameters

ParameterLocationTypeRequiredDescription
appIdPathstringYesApp ID
publishTagQuerystringNoRelease Tag: production or test; mutually exclusive with publishVersion
publishVersionQueryintegerNoExact immutable version, minimum 1; mutually exclusive with publishTag

appId is the string returned by List published Apps, or one provided by the platform or App publisher. With no selector, the API resolves production. Supplying both selectors, an invalid Tag, or a version below 1 returns INVALID_REQUEST. An App, Tag, or version that is unavailable to the caller returns APP_NOT_FOUND.

The success status is HTTP 200.

Success response example

{
"code": 200,
"message": "success",
"data": {
"schemaVersion": 1,
"appId": "APP_ID",
"name": "Fashion Video Generator",
"description": "Generate a video from a character reference and prompt",
"publishVersion": 3,
"publishTag": "production",
"estimatedPrice": "3.25000000",
"inputs": [
{
"key": "prompt",
"name": "Prompt",
"description": "Describe the video to generate",
"type": "text",
"required": true,
"defaultValue": "A cinematic fashion video"
},
{
"key": "reference_image",
"name": "Character reference",
"description": "Used to preserve the character's appearance",
"type": "image",
"required": true
},
{
"key": "duration",
"name": "Duration",
"description": "Choose from the durations frozen in this release",
"type": "setting",
"required": true,
"options": [{"value": -1, "label": "-1"}, {"value": 10, "label": "10"}],
"defaultValue": -1
}
],
"outputs": [
{
"key": "final_video",
"name": "Final video",
"description": "The generated video",
"type": "video"
}
],
"steps": [
{
"stepIndex": 0,
"nodeKey": "node-character-image",
"nodeType": "image",
"name": "Generate character image",
"estimatedPrice": "1.86040938"
},
{
"stepIndex": 1,
"nodeKey": "node-video",
"nodeType": "video",
"name": "Generate video",
"estimatedPrice": "1.38959062"
}
],
"examples": {
"inputJson": {
"prompt": "A cinematic fashion video",
"reference_image": {
"url": "https://example.com/ref.png"
},
"duration": -1
},
"inputPreview": {
"url": "https://example.com/in.png",
"thumbnailUrl": "https://example.com/in-sm.png",
"mimeType": "image/png",
"width": 1024,
"height": 1024
},
"outputPreview": {
"url": "https://example.com/out.mp4",
"thumbnailUrl": "https://example.com/out.jpg",
"mimeType": "video/mp4",
"width": 1080,
"height": 1920
}
}
}
}
integerProtocol field, currently fixed at 200
stringFixed at success on success
objectPublic details of the App's current published version
integerVersion of the public App details schema, currently 1
stringApp ID
stringApp name
stringDescription of the App's purpose
integerCurrent published version
string/nullproduction or test currently associated with the resolved version; null when it has no Tag
decimal stringEstimated Credit price of the current version, with exactly 8 decimal places
arrayInputs declared by the current published version
stringParameter key to place in inputJson when creating a Run
stringDisplay name of the input
stringInput description
stringInput type: text, image, video, audio, or setting
booleanWhether the input is required; optional media keys may be omitted from inputJson
string/numberPublic default; a setting default matches options[].value; omitted when not declared
stringParameter key to place in inputJson when creating a Run
stringDisplay name of the input
stringInput description
stringInput type: text, image, video, audio, or setting
booleanWhether the input is required; optional media keys may be omitted from inputJson
stringParameter key to place in inputJson when creating a Run
stringDisplay name of the input
stringInput description
stringInput type: text, image, video, audio, or setting
booleanWhether the input is required; optional media keys may be omitted from inputJson
array<object>Frozen {value,label} choices for a setting input. Model options also include supported parameter lists. Older releases may return primitive arrays
string/numberPublic default; a setting default matches options[].value; omitted when not declared
arrayFinal outputs declared by the current published version
stringOutput key
stringDisplay name of the output
stringOutput description
stringOutput type: text, image, video, or audio
arrayPublic execution steps declared by the current published version
integerStep order, starting at 0
stringStable identifier used to associate a step within the current published version
stringStep type
stringStep display name
decimal stringEstimated Credit price of the step, with exactly 8 decimal places
integerStep order, starting at 0
stringStable identifier used to associate a step within the current published version
stringStep type
stringStep display name
decimal stringEstimated Credit price of the step, with exactly 8 decimal places
objectInput and result examples provided by the publisher
objectComplete input example that can be used as the starting point for a Run
stringText input value for the example App
objectMedia input object for the example App
stringAbsolute HTTPS URL of the example media
numberFrozen duration option for the example App
objectInput preview media; omitted when not configured
stringOriginal input preview URL
stringInput preview thumbnail URL
stringInput preview MIME type
integerInput preview width in pixels
integerInput preview height in pixels
objectOutput preview media; omitted when not configured
stringOriginal output preview URL
stringOutput preview thumbnail URL
stringOutput preview MIME type
integerOutput preview width in pixels
integerOutput preview height in pixels
  • publishVersion is the exact immutable version returned. A default or Tag-based request may resolve to another version after a Tag switch; an exact-version request does not drift.
  • Exact-version requests also return publishTag. If both production and test point to the version, the value is production; if neither does, the value is null and the field is not omitted.
  • steps[].nodeKey associates App detail steps with Run results. It is stable only for the current appId and publishVersion, and must not be used as an authorization credential or resource access parameter.
  • A setting input's options, defaultValue, and priced combinations are frozen with the publishVersion. Submit the selected option's value, without converting numbers to strings or submitting the entire option object.
  • Parameters with type: "prompt" are omitted from inputs and examples.inputJson. OpenAPI runs automatically use the Prompt default from the selected release; callers neither submit nor override it. A regular text parameter named prompt remains a text input.
  • inputs[].defaultValue is returned only when the publisher declared a public default.
  • Omit an optional media key when no value is supplied; the server treats it as empty media and does not restore the publisher's original output.
  • examples.inputJson can be used directly as the starting point for a Run. Without an explicit example, the server generates one only from safe defaults and it may be empty.
  • inputPreview and outputPreview are omitted when not configured.

Models and dependent settings

Model selectors also use type: "setting". Each option contains a numeric model ID, its display name, and the parameters supported by that model:

{
  "options": [{
    "value": 11,
    "label": "Model A",
    "aspectRatios": ["9:16", "16:9", "1:1", "3:4", "4:3", "21:9"],
    "resolutions": ["720P", "1080P"],
    "qualities": [],
    "durations": [5, 10]
  }],
  "defaultValue": 11
}

aspectRatios, resolutions, qualities, and durations list supported aspect ratios, resolutions, qualities, and durations. An empty array means that parameter is unsupported. This is a format example; use the actual options from the selected release. Names and capability lists are frozen with the publication and are returned even when only the model is exposed as an input.

Other settings also use {value,label} options. Submit only value; model IDs remain numeric. Historical releases may retain primitive options with optionLabels, so readers should support both formats. The new format no longer returns a separate optionLabels map.

Dependent settings may include dependsOn: {"inputKey":"model","cases":[{"value":11,"enabled":true,"options":[{"value":"720P","label":"720P"}],"defaultValue":"720P"},{"value":22,"enabled":false,"options":[]}]}. inputKey identifies the model input in this App. Use the selected model's case for valid options and defaults. Top-level options is their union, not permission to combine incompatible values. A case with enabled:false has no default and accepts no input. A statically unavailable setting may also expose top-level enabled:false. This metadata is frozen with the publication.