Adobe Workfront Planning API v2

The Workfront Planning (Maestro) API — workspaces, record types, records, fields, views and permissions — published by Adobe as an OpenAPI 3.1.0 document with 21 paths, 49 operations and 74 component schemas. Version 2 shipped May 2026 and adds PATCH, bulk record operations, a permissions surface and RFC-9457-shaped error bodies.

OpenAPI Specification

workfront-planning-v2-openapi.json Raw ↑
{
  "openapi": "3.1.0",
  "info": {
    "title": "Workfront Planning API Version 2",
    "description": "This is Workfront Planning Service API documentation. Workfront Planning Service is responsible for creating and managing new workspace, field, record, record type objects across the Workfront application and Adobe DX infrastructure."
  },
  "servers": [
    {
      "url": "https://{customer-domain}/maestro/api",
      "description": "Workfront Planning Service Url"
    }
  ],
  "tags": [
    {
      "name": "Workspaces",
      "description": "Workspace management. Limits: max 100,000 workspaces per tenant; max 256 characters for workspace name."
    },
    {
      "name": "Record Types",
      "description": "Record type management. Limits: max 100 record types per workspace; max 255 characters for display name."
    },
    {
      "name": "Records",
      "description": "Record management. Limits: max 25,000 records per record type; max 100 records per bulk operation; max 500 connections per reference field; max 10 connections per hierarchy field."
    },
    {
      "name": "Fields",
      "description": "Field management. Per-record-type quotas: max 500 fields total; max 20 PARAGRAPH (long-text) fields; max 20 FORMULA fields; max 30 REFERENCE fields. Field display names must be unique within a record type and capped at 256 characters. Formula expressions: max 50,000 characters; lookup depth: max 5."
    },
    {
      "name": "Views",
      "description": "View management. Limits: max 100 personal views per record type; max 255 characters for view name."
    },
    {
      "name": "Permissions",
      "description": "Resource permissions, member management, and access requests."
    },
    {
      "name": "Limits and Quotas",
      "description": "Public API V2 limits and quotas:\n\n- Workspaces per tenant: 100,000\n- Record types per workspace: 100\n- Records per record type: 25,000\n- Records per bulk request: 100\n- Fields per record type: 500\n- PARAGRAPH (long-text) fields per record type: 20\n- FORMULA fields per record type: 20\n- REFERENCE fields per record type: 30\n- Connections per reference field: 500\n- Connections per hierarchy field: 10\n- Personal views per record type: 100\n- Lookup depth: 5\n- Hierarchy depth: 4\n- Hierarchy count per workspace: 5\n- Formula expression length: 50,000 characters\n- Display name length: 256 characters\n\nExceeding any of these limits returns an HTTP 403 with a specific `errorCode` (e.g. `RECORD_TYPE_LIMIT_EXCEEDED`, `FIELD_LIMIT_EXCEEDED`, `VIEW_LIMIT_EXCEEDED`)."
    }
  ],
  "paths": {
    "/v2/workspaces/{id}": {
      "get": {
        "tags": [
          "Workspaces"
        ],
        "summary": "Get Workspace",
        "description": "Retrieve a workspace by its ID.",
        "operationId": "getWorkspace",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID of the workspace to be retrieved",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceBaseDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Workspaces"
        ],
        "summary": "Update Workspace",
        "description": "Update an existing workspace using PUT (full replacement). All fields not provided in the request will be set to null.",
        "operationId": "updateWorkspace",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID of the workspace to be updated",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkspaceBaseDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceBaseDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request (validation failure)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (write conflict, retry)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Workspaces"
        ],
        "summary": "Delete Workspace",
        "description": "Delete a workspace by its ID.",
        "operationId": "deleteWorkspace",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID of the workspace to be deleted",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          }
        }
      },
      "patch": {
        "tags": [
          "Workspaces"
        ],
        "summary": "Patch Workspace",
        "description": "Partially update a workspace using PATCH (merge-patch semantics). Only provided fields will be updated; omitted fields remain unchanged.",
        "operationId": "patchWorkspace",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID of the workspace to be patched",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkspaceBaseDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceBaseDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request (validation failure)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (write conflict, retry)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          }
        }
      }
    },
    "/v2/views/{id}": {
      "get": {
        "tags": [
          "Views"
        ],
        "summary": "Get View",
        "description": "Retrieve a view by its ID.",
        "operationId": "getView",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID of the view to be retrieved",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ViewDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Views"
        ],
        "summary": "Update View",
        "description": "Update an existing view using PUT (full replacement). All fields not provided in the request will be set to null.",
        "operationId": "updateView",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID of the view to be updated",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ViewDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ViewDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request (validation failure)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (write conflict, retry)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Views"
        ],
        "summary": "Delete View",
        "description": "Delete a view by its ID.",
        "operationId": "deleteView",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID of the view to be deleted",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          }
        }
      },
      "patch": {
        "tags": [
          "Views"
        ],
        "summary": "Patch View",
        "description": "Partially update a view using PATCH (merge-patch semantics). Only provided fields will be updated; omitted fields remain unchanged.",
        "operationId": "patchView",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID of the view to be patched",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ViewDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ViewDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request (validation failure)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (write conflict, retry)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          }
        }
      }
    },
    "/v2/records/{id}": {
      "get": {
        "tags": [
          "Records"
        ],
        "summary": "Get Record",
        "description": "Retrieve a record by its ID.",
        "operationId": "getRecord",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID of the record to be retrieved",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RecordDto"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Records"
        ],
        "summary": "Update Record",
        "description": "Update an existing record using PUT (full replacement). All fields not provided in the request will be set to null.",
        "operationId": "updateRecord",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID of the record to be updated",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RecordBaseDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RecordDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request (validation failure)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden (RECORD_CONNECTION_LIMIT_EXCEEDED, HIERARCHY_RECORD_CONNECTION_LIMIT_EXCEEDED)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (write conflict, retry)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity (back-reference conflict)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Records"
        ],
        "summary": "Delete Record",
        "description": "Delete a record by its ID.",
        "operationId": "deleteRecord",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID of the record to be deleted",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          }
        }
      },
      "patch": {
        "tags": [
          "Records"
        ],
        "summary": "Patch Record",
        "description": "Partially update an existing record using PATCH (merge-patch semantics). Only provided fields will be updated; omitted fields remain unchanged. Setting a field value to JSON null (e.g. {\"data\":{\"F123\":null}}) explicitly clears that field; omitting the key leaves the field untouched. For list-type fields (connections, multi-select), you can use operational updates: [{\"op\": \"add\", \"value\": [...]}, {\"op\": \"remove\", \"value\": [...]}].",
        "operationId": "patchRecord",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID of the record to be patched",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RecordBaseDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RecordDto"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request (validation failure)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden (RECORD_CONNECTION_LIMIT_EXCEEDED, HIERARCHY_RECORD_CONNECTION_LIMIT_EXCEEDED)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (write conflict, retry)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity (back-reference conflict)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V2ProblemDetail"
                }
              }
            }
          }
        }
      }
    },
    "/v2/record-types/{recordTypeId}/records/bulk": {
      "put": {
        "tags": [
          "Records"
        ],
        "summary": "Bulk Update Records",
        "description": "Update multiple records using PUT semantics (full replacement). All fields not provided will be set to null. Each record must include an id. Limited to 100 records per request.",
        "operationId": "bulkUpdateRecords",
        "parameters": [
          {
            "name": "recordTypeId",
            "in": "path",
            "description": "ID of the record type",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "aliased",
            "in": "query",
            "description": "Flag to include alias support in response (field keys will be aliases instead of IDs)",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "description": "List of records to update. Each must include an id (max 100).",
                "items": {
                  "$ref": "#/components/schemas/RecordBaseDto"
                }


# --- truncated at 32 KB (217 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/workfront/refs/heads/main/openapi/workfront-planning-v2-openapi.json