API & DEVELOPERS

REST reference · v1

Update a task

PATCH/v1/workspaces/{workspaceId}/tasks/{taskId}

Task admin/contributor/reviewer. Reviewer can update status only. Reassignment is not exposed. Parent portal and company rights still apply.

Company permissions

Task admin/contributor/reviewer. Reviewer can update status only. Reassignment is not exposed. Parent portal and company rights still apply.

Required OAuth scopes: orchesphere.read, orchesphere.jobs. How scopes and company rights work.

Path and header parameters

NameLocationRequiredAllowed values / bounds
workspaceIdpathYesstring
minLength: 8 · maxLength: 80 · pattern: ^[A-Za-z0-9_-]{8,80}$
taskIdpathYesstring
minLength: 8 · maxLength: 80 · pattern: ^[A-Za-z0-9_-]{8,80}$

Request

JSON body: required.

FieldTypeRequiredDescription / bounds
titlestringNominLength: 2 · maxLength: 240
descriptionstringNomaxLength: 6000
status"todo" | "in_progress" | "blocked" | "review" | "done" | "cancelled"No—
Complete request schema
{
  "type": "object",
  "properties": {
    "title": {
      "type": "string",
      "minLength": 2,
      "maxLength": 240
    },
    "description": {
      "type": "string",
      "maxLength": 6000
    },
    "status": {
      "type": "string",
      "enum": [
        "todo",
        "in_progress",
        "blocked",
        "review",
        "done",
        "cancelled"
      ]
    }
  },
  "required": [],
  "additionalProperties": false,
  "minProperties": 1
}
http
PATCH /v1/workspaces/{workspaceId}/tasks/{taskId} HTTP/1.1
Host: api.orchesphere.ai
Authorization: Bearer <access_token>
Accept: application/json
Content-Type: application/json

{
  "status": "in_progress"
}

Use actual IDs returned for your assigned workspace. The example values are fictional. REST v1 accepts no query parameters.

Response · 200

FieldTypeRequiredDescription / bounds
okobjectYes—
workspaceIdstringYesminLength: 8 · maxLength: 80 · pattern: ^[A-Za-z0-9_-]{8,80}$
taskobjectYes—
Complete response schema
{
  "type": "object",
  "properties": {
    "ok": {
      "const": true
    },
    "workspaceId": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{8,80}$",
      "minLength": 8,
      "maxLength": 80
    },
    "task": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "pattern": "^[A-Za-z0-9_-]{8,80}$",
          "minLength": 8,
          "maxLength": 80
        },
        "workspaceId": {
          "type": "string",
          "pattern": "^[A-Za-z0-9_-]{8,80}$",
          "minLength": 8,
          "maxLength": 80
        },
        "portalId": {
          "type": "string",
          "pattern": "^[A-Za-z0-9_-]{8,80}$",
          "minLength": 8,
          "maxLength": 80
        },
        "title": {
          "type": "string",
          "minLength": 2,
          "maxLength": 240
        },
        "description": {
          "type": "string",
          "maxLength": 6000
        },
        "status": {
          "type": "string",
          "enum": [
            "todo",
            "in_progress",
            "blocked",
            "review",
            "done",
            "cancelled"
          ]
        },
        "assigneeEmail": {
          "anyOf": [
            {
              "type": "string",
              "format": "email"
            },
            {
              "type": "null"
            }
          ]
        },
        "createdBy": {
          "type": "string"
        },
        "createdAt": {
          "type": "string",
          "format": "date-time"
        },
        "updatedAt": {
          "type": "string",
          "format": "date-time"
        },
        "role": {
          "type": "string",
          "enum": [
            "admin",
            "contributor",
            "reviewer",
            "viewer"
          ]
        },
        "canEdit": {
          "type": "boolean"
        },
        "canManage": {
          "type": "boolean"
        }
      },
      "required": [
        "id",
        "workspaceId",
        "portalId",
        "title",
        "description",
        "status",
        "assigneeEmail",
        "createdBy",
        "createdAt",
        "updatedAt",
        "role",
        "canEdit",
        "canManage"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "ok",
    "workspaceId",
    "task"
  ],
  "additionalProperties": false
}
json
{
  "ok": true,
  "workspaceId": "11111111-1111-4111-8111-111111111111",
  "task": {
    "id": "33333333-3333-4333-8333-333333333333",
    "workspaceId": "11111111-1111-4111-8111-111111111111",
    "portalId": "22222222-2222-4222-8222-222222222222",
    "title": "Review the saved verification",
    "description": "Requested work only.",
    "status": "in_progress",
    "assigneeEmail": null,
    "createdBy": "developer@example.com",
    "createdAt": "2026-01-01T00:00:00.000Z",
    "updatedAt": "2026-01-01T00:00:00.000Z",
    "role": "contributor",
    "canEdit": true,
    "canManage": false
  }
}

Errors

StatusMeaning
400Invalid path/query/body/header or business validation.
401Missing, expired, revoked, invalid or wrong-resource token.
402Verified company payment is required.
403Insufficient token scope or current company/service/portal/task authority.
404Unknown endpoint or record not found/inaccessible.
405Method is not supported for this path.
409State, quota or idempotency conflict; re-read current state.
413Request exceeds 24,000 bytes.
415Use uncompressed application/json.
429Company job/rate/paid-period allowance reached.
503Temporarily unavailable; a lost mutation response does not prove nothing was saved.

Request limits and recovery · All REST operations