Skip to main content
PUT
Save workspace
PUT https://api-datahub.octoparse.com/v1/data-apps/{app_id}/workspace Authentication: API key required (Authorization: Bearer <API Key>). App author only; others get 404. Save the app’s mutable draft. Saves are never rejected for validation failure: full validation still runs, and the result (valid / issues) is returned with the response. “Save a half-finished draft and come back later” is a model guarantee. App identity is created implicitly on the first save — there is no separate “create app” endpoint. Only three hard gates return 400: the account has a username, the payload is within size limits, and attached filenames are valid. identity.app_name inside the manifest is no longer compared to the path: the route name follows the reference, and the name declared in the file is consumed only at creation time. expected_revision provides optimistic concurrency (409 revision-conflict) so multiple tabs cannot silently overwrite each other. Attached secrets are stored only when this save is valid; names that were not stored are reported in secrets_deferred. Deprecated apps can still be edited; only new Releases are rejected.

Request

Path parameters

string
required
App reference: app_<hex> or <namespace>/<app_name>. Use the latter on first save.

Request body

string
required
Raw manifest text.
object
Attached files: keys are relative paths, values are text content.
object
Map of secret names to plaintext values. Stored only when this save is valid.
integer
Expected current draft revision. Mismatch returns 409.

Example request

Response

200 success

The payload is wrapped in data. Fields:
string
required
string
required
Stable app id.
string
integer
required
Draft revision after the save.
boolean
required
Whether the current content passed validation.
object[]
Issue list.
string[]
string[]
Secret names not stored because this save was invalid.
string

Errors

Error responses use {"error": {code, category, message, retryable}}. See Errors.

Client libraries

The Python and JavaScript SDKs do not wrap this endpoint yet. Call REST directly.