openapi: 3.2.0 info: title: Workfront Records API version: '1.0' description: 'Operations tagged Records across 2 of this provider''s published API definitions: workfront-planning-v1-openapi.json, workfront-planning-v2-openapi.json. Each path carries the servers of the definition it was published in.' servers: - url: https://{customer-domain}/maestro/api description: Workfront Planning Service Url tags: - name: Records description: Record Controller paths: /v1/records/{id}: get: tags: - Records summary: Get Record description: Retrieve a specific record by its ID along with optional attributes. operationId: getRecord parameters: - name: id in: path description: ID of the record to be retrieved required: true schema: type: string - name: aliased in: query description: Flag to include alias support required: false schema: type: boolean - name: attributes in: query description: List of attributes to be included in the response required: false schema: type: array items: type: string default: - '*' example: ALL responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/RecordDto' put: tags: - Records summary: Update Record description: Update an existing record with the given ID and details. 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/RecordDto' required: true responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/RecordDto' delete: tags: - Records summary: Delete Record by ID description: Delete a specific 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: '200': description: OK servers: - url: https://{customer-domain}/maestro/api description: Workfront Planning Service Url /v1/records: post: tags: - Records summary: Create Record description: Create a new record with the given details. operationId: createRecord requestBody: content: application/json: schema: $ref: '#/components/schemas/RecordDto' required: true responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/RecordDto' servers: - url: https://{customer-domain}/maestro/api description: Workfront Planning Service Url /v1/records/search: get: tags: - Records summary: Search Records by field values description: Search for records based on specific field values. operationId: searchRecordsGet parameters: - name: recordTypeId in: query description: Id of the record type required: false schema: type: string - name: recordTypeAlias in: query description: Alias of the record type required: false schema: type: string - name: aliased in: query description: Flag to include alias support required: false schema: type: boolean - name: filters in: query description: Filters required: false schema: type: string - name: groupingFieldIds in: query description: Grouping field ids required: false schema: type: array items: type: string - name: offset in: query description: Offset required: false schema: type: integer format: int32 default: 0 - name: limit in: query description: Limit required: false schema: type: integer format: int32 default: 500 - name: rowOrderViewId in: query description: Row order view id required: false schema: type: string - name: attributes in: query description: List of attributes to be included in the response required: false schema: type: array items: type: string default: - '*' example: ALL responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/GroupedRecordsDto' post: tags: - Records summary: Search Records by field values description: Search for records based on specific field values. operationId: searchRecordsPost parameters: - name: recordTypeAlias in: query description: Alias of the record type required: false schema: type: string - name: aliased in: query description: Flag to include alias support required: false schema: type: boolean - name: attributes in: query description: List of attributes to be included in the response required: false schema: type: array items: type: string default: - '*' example: ALL requestBody: content: application/json: schema: $ref: '#/components/schemas/RecordSearchDto' required: true responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/GroupedRecordsDto' servers: - url: https://{customer-domain}/maestro/api description: Workfront Planning Service Url /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_2' '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_2' '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_2' '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' servers: - url: https://{customer-domain}/maestro/api description: Workfront Planning Service Url /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' required: true responses: '200': description: All items updated successfully content: application/json: schema: $ref: '#/components/schemas/RecordBulkResponseDto' '207': description: Mixed results — some items succeeded, some failed content: application/json: schema: $ref: '#/components/schemas/RecordBulkResponseDto' '400': description: Bad Request 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: Record Type 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' post: tags: - Records summary: Bulk Create Records description: Create multiple records in a record type in a single request. Limited to 100 records per request. operationId: bulkCreateRecords 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 create (max 100) items: $ref: '#/components/schemas/RecordBaseDto' required: true responses: '201': description: All items created successfully content: application/json: schema: $ref: '#/components/schemas/RecordBulkResponseDto' '207': description: Mixed results — some items succeeded, some failed content: application/json: schema: $ref: '#/components/schemas/RecordBulkResponseDto' '400': description: Bad Request 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: Record Type Not Found 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: Bulk Delete Records description: Delete multiple records by their IDs in a single request. Limited to 100 records per request. operationId: bulkDeleteRecords parameters: - name: recordTypeId in: path description: ID of the record type required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/BulkDeleteRequestDto' required: true responses: '200': description: All items deleted successfully content: application/json: schema: $ref: '#/components/schemas/RecordBulkResponseDto' '207': description: Mixed results — some items succeeded, some failed content: application/json: schema: $ref: '#/components/schemas/RecordBulkResponseDto' '400': description: Bad Request (empty ids list) 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: Record Type 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: Bulk Patch Records description: Partially update multiple records using PATCH semantics (merge-patch). Only provided fields are updated; omitted fields remain unchanged. Each record must include an id. Limited to 100 records per request. operationId: bulkPatchRecords 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 partial record updates. Each must include an id (max 100). items: $ref: '#/components/schemas/RecordBaseDto' required: true responses: '200': description: All items patched successfully content: application/json: schema: $ref: '#/components/schemas/RecordBulkResponseDto' '207': description: Mixed results — some items succeeded, some failed content: application/json: schema: $ref: '#/components/schemas/RecordBulkResponseDto' '400': description: Bad Request 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: Record Type 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' servers: - url: https://{customer-domain}/maestro/api description: Workfront Planning Service Url /v2/records/{id}/thumbnail: post: tags: - Records summary: Upload thumbnail on record description: Replace the record's thumbnail with the uploaded image. Each successful upload produces a new URL, even for identical content. operationId: uploadThumbnail parameters: - name: id in: path description: ID of the record required: true schema: type: string requestBody: content: multipart/form-data: schema: type: object properties: file: type: string format: binary description: PNG or JPEG image file required: - file responses: '201': description: Thumbnail uploaded content: application/json: schema: $ref: '#/components/schemas/RecordDto_2' '400': description: Invalid image (THUMBNAIL_EMPTY, THUMBNAIL_INVALID_FORMAT, THUMBNAIL_INVALID_CONTENT, THUMBNAIL_SIZE_EXCEEDED) 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: Record not found content: application/json: schema: $ref: '#/components/schemas/V2ProblemDetail' '413': description: Upload too large (UPLOAD_SIZE_EXCEEDED) 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 thumbnail on record description: Remove the record's thumbnail. Idempotent — succeeds with 204 even when no thumbnail is set. operationId: deleteThumbnail parameters: - name: id in: path description: ID of the record required: true schema: type: string responses: '204': description: Thumbnail removed '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/V2ProblemDetail' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/V2ProblemDetail' '404': description: Record not found content: application/json: schema: $ref: '#/components/schemas/V2ProblemDetail' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/V2ProblemDetail' servers: - url: https://{customer-domain}/maestro/api description: Workfront Planning Service Url /v2/record-types/{recordTypeId}/records: get: tags: - Records summary: Get Records by Record Type description: Retrieve a page-based paginated list of records for a specific record type. Uses standard page/size query parameters (default page=0, size=20, sorted by createdAt). operationId: getRecordsByRecordType parameters: - name: recordTypeId in: path description: ID of the record type required: true schema: type: string - name: page in: query description: Zero-based page index (0..N) required: false schema: type: integer default: 0 minimum: 0 - name: size in: query description: The size of the page to be returned required: false schema: type: integer default: 20 minimum: 1 - name: sort in: query description: 'Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.' required: false schema: type: array default: - createdAt,ASC items: type: string responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/PageRecordDto' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/V2ProblemDetail' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/V2ProblemDetail' '404': description: Record Type Not Found content: application/json: schema: $ref: '#/components/schemas/V2ProblemDetail' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/V2ProblemDetail' post: tags: - Records summary: Create Record description: 'Create a new record in a record type. Subject to limits: max 25,000 records per record type.' operationId: createRecord parameters: - name: recordTypeId in: path description: ID of the record type required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/RecordBaseDto' required: true responses: '201': description: Created content: application/json: schema: $ref: '#/components/schemas/RecordDto_2' '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_TYPE_RECORD_LIMIT_EXCEEDED) content: application/json: schema: $ref: '#/components/schemas/V2ProblemDetail' '404': description: Record Type Not Found 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' servers: - url: https://{customer-domain}/maestro/api description: Workfront Planning Service Url /v2/record-types/{recordTypeId}/records/search: get: tags: - Records summary: Search Records (GET) description: Search records using query parameters. Accepts a JSON filter string using the composite filter pattern, field projection, and alias-based field access. Returns page-based paginated records along with group information. operationId: searchRecordsGet parameters: - name: recordTypeId in: path description: ID of the record type required: true schema: type: string - name: recordTypeAlias in: query description: Alias of the record type required: false 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 - name: filter in: query description: 'JSON filter using the composite filter pattern. Example: {"operator":"AND","conditions":[{"fieldId":"status","condition":"IS","value":"Active"}]}' required: false schema: type: string - name: groupingFieldIds in: query description: List of field IDs to group results by required: false schema: type: array items: type: string example: F693ab1c96f11ea3f4175e000,F693ab1c96f11ea3f4175e001 - name: scopeWorkspaceIds in: query description: List of workspace IDs to scope the search to (for global record types) required: false schema: type: array items: type: string example: Ws123,Ws456 - name: globalRecordTypeWorkspaceFieldId in: query description: ID of the global record type workspace field (for global record types) required: false schema: type: string example: F693ab1c96f11ea3f4175e717 - name: fieldIds in: query description: List of field IDs to include in the record's data required: false schema: type: array default: - '*' items: type: string example: F693ab1c96f11ea3f4175e710,F693ab1c96f11ea3f4175e711 - name: fieldAliases in: query description: List of field aliases to include in the record's data required: false schema: type: array default: - '*' items: type: string example: name,description - name: page in: query description: Zero-based page index (0..N) required: false schema: type: integer default: 0 minimum: 0 - name: size in: query description: The size of the page to be returned required: false schema: type: integer default: 100 minimum: 1 - name: sort in: query description: 'Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.' required: false schema: type: array items: type: string responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/RecordSearchPageDto' '400': description: Bad Request (invalid filter parameter) 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: Record Type Not Found content: application/json: schema: $ref: '#/components/schemas/V2ProblemDetail' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/V2ProblemDetail' post: tags: - Records summary: Search Records (POST) description: Search records using the composite filter pattern with strongly-typed conditions. Supports recursive AND/OR filter nesting, sorting, grouping, field projection, and alias-based field access. Returns page-based paginated records along with group information. operationId: searchRecordsPost 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 - name: fieldIds in: query description: List of field IDs to include in the record's data required: false schema: type: array default: - '*' items: type: string example: F693ab1c96f11ea3f4175e710,F693ab1c96f11ea3f4175e711 - name: fieldAliases in: query description: List of field aliases to include in the record's data required: false schema: type: array default: - '*' items: type: string example: name,description - name: page in: query description: Zero-based page index (0..N) required: false schema: type: integer default: 0 minimum: 0 - name: size in: query description: The size of the page to be returned required: false schema: type: integer default: 100 minimum: 1 - name: sort in: query description: 'Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.' required: false schema: type: array items: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/RecordSearchRequestDto' required: true responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/RecordSearchPageDto' '400': description: Bad Request (invalid filter / sort / group) 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: Record Type Not Found content: application/json: schema: $ref: '#/components/schemas/V2ProblemDetail' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/V2ProblemDetail' servers: - url: https://{customer-domain}/maestro/api description: Workfront Planning Service Url /v2/record-types/{recordTypeId}/records/move: post: tags: - Records summary: Move Records description: 'Reorder one or more records within a record type by specifying where to place them. Provide exactly one of putAfterRecordId (place after) or putBeforeRecordId (place before). Maximum 100 records per request. Requires EDIT permission on the record type. Move is all-or-nothing: on failure, no records are reordered.' operationId: moveRecords parameters: - name: recordTypeId in: path description: ID of the record type required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/MoveRecordsRequestDto' required: true responses: '200': description: All items moved successfully content: application/json: schema: $ref: '#/components/schemas/RecordBulkResponseDto' '207': description: Move failed — all records remain in original positions content: application/json: schema: $ref: '#/components/schemas/RecordBulkResponseDto' '400': description: Bad Request (invalid move request) 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: Record Type or anchor record not found content: application/json: schema: $ref: '#/components/schemas/V2ProblemDetail' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/V2ProblemDetail' servers: - url: https://{customer-domain}/maestro/api description: Workfront Planning Service Url /v2/records/{id}/history: get: tags: - Records summary: Get Record Field Change History description: Retrieve a cursor-paginated list of field change events for a specific record. operationId: getHistory parameters: - name: id in: path description: ID of the record required: true schema: type: string - name: cursor in: query description: Cursor from the previous page response for fetching the next page required: false schema: type: string - name: limit in: query description: Maximum number of items to return per page (1-50, default 20) required: false schema: type: integer format: int32 default: 20 maximum: 50 minimum: 1 responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/CursorResponseHistoryEntryDto' '400': description: Bad Request (invalid cursor or limit) 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: Record Not Found content: application/json: schema: $ref: '#/components/schemas/V2ProblemDetail' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/V2ProblemDetail' servers: - url: https://{customer-domain}/maestro/api description: Workfront Planning Service Url components: schemas: RecordSearchDto: type: object properties: recordTypeId: type: string recordTypeAlias: type: string filters: $ref: '#/components/schemas/JsonNode' groupingFieldIds: type: array items: type: string sorting: type: array items: $ref: '#/components/schemas/RecordSorting' offset: type: integer format: int32 limit: type: integer format: int32 rowOrderViewId: type: string GroupedRecordsDto: type: object properties: records: type: array items: $ref: '#/components/schemas/RecordDto' groups: type: array items: $ref: '#/components/schemas/RecordGroupDto' totalCount: type: integer format: int32 RecordExternalOptions: type: object properties: connection: type: string enum: - WORKFRONT - AEM object: type: string enum: - PROJECT - PORTFOLIO - PROGRAM - COMPANY - GROUP - ASSET externalId: type: string connectionOptions: type: object additionalProperties: type: object link: type: string RecordDto: type: object properties: id: type: string createdBy: type: string createdAt: type: string updatedBy: type: string updatedAt: type: string customerId: type: string imsOrgId: type: string recordTypeId: type: string data: type: object additionalProperties: type: object recordExternalOptions: $ref: '#/components/schemas/RecordExternalOptions' thumbnailUrl: type: string readOnly: true coverImage: $ref: '#/components/schemas/CoverImage' RecordGroupDto: type: object properties: fieldId: type: string value: type: object recordIds: type: array items: type: string CoverImage: type: object properties: url: type: string position: type: integer format: int32 readOnly: true RecordSorting: type: object properties: fieldId: type: string direction: type: string enum: - asc - desc JsonNode: type: object RecordBulkResponseDto: type: object description: Response envelope for V2 bulk record operations. properties: status: type: string description: Overall bulk operation status. enum: - success - partial - failed total: type: integer format: int32 description: Number of input items submitted. example: 10 succeeded: type: integer format: int32 description: Number of successful item results. example: 3 failed: type: integer format: int32 description: Number of failed item results. example: 7 requestId: type: string description: Request correlation ID for tracing and support. example: 5b1f7a8c-2c0e-4a8f-9c4f-2a3b1c0e4d5f errors: type: array description: Request-level errors affecting multiple items. items: $ref: '#/components/schemas/RecordBulkRequestErrorDto' results: type: array description: Per-item results in the same order as the input. items: $ref: '#/components/schemas/RecordBulkResultItemDtoObject' MoveRecordsRequestDto: type: object description: Move request specifying which records to move and where properties: recordIds: type: array description: IDs of the records to move, in the order they should appear at the destination. example: - Rc6796...01 - Rc6796...02 items: type: string minLength: 1 maxItems: 100 minItems: 0 putAfterRecordId: type: string description: Place the moved records immediately AFTER this record. Mutually exclusive with putBeforeRecordId. example: Rc67a1... putBeforeRecordId: type: string description: Place the moved records immediately BEFORE this record. Mutually exclusive with putAfterRecordId. example: Rc67a2... required: - recordIds PageableObject: type: object properties: paged: type: boolean pageSize: type: integer format: int32 pageNumber: type: integer format: int32 offset: type: integer format: int64 sort: $ref: '#/components/schemas/SortObject' unpaged: type: boolean RecordBulkRequestErrorDto: type: object description: Request-level error affecting multiple items in a bulk operation. properties: code: type: string description: Machine-readable error code. example: RATE_LIMIT_EXCEEDED message: type: string description: Human-readable description of the request-level error. example: Bulk operation limit of 100 items per request exceeded; 58 items were skipped affectedIds: type: array description: IDs of the items affected by this request-level error. items: type: string RecordGroupDto_2: type: object description: Group of records with common field values properties: fieldId: type: string description: ID of the field used for grouping example: F693ab1c96f11ea3f4175e716 value: description: Value of the grouping field example: Active recordIds: type: array description: List of record IDs in this group example: - R123 - R456 - R789 items: type: string count: type: integer format: int32 description: Count of records in this group example: 3 HistoryEntryDto: type: object description: A single record field change event properties: id: type: string description: Unique identifier of this history entry recordId: type: string description: ID of the record this change belongs to createdBy: type: string description: ID of the user who made the change createdAt: type: string description: ISO-8601 timestamp of when the change occurred example: '2026-01-15T10:30:00.000Z' fieldId: type: string description: ID of the field that changed before: $ref: '#/components/schemas/CellValueDto' description: Field state before the change after: $ref: '#/components/schemas/CellValueDto' description: Field state after the change GroupDto: type: object description: Grouping specification properties: fieldId: type: string description: ID or alias of the field to group by example: F693ab1c96f11ea3f4175e710 minLength: 1 direction: type: string description: Sort direction for the grouped values (asc or desc). Defaults to asc if omitted. enum: - asc - desc example: asc required: - fieldId V2ProblemDetail: type: object description: RFC 7807 Problem Details error response for V2 endpoints. properties: title: type: string description: Short, human-readable summary of the error type. Same for all occurrences of the same error. example: Not found status: type: integer format: int32 description: HTTP status code of the response. example: 404 detail: type: string description: Human-readable, resource-specific explanation of this error occurrence. Always English. example: Record type with ID 'Rt69b14f7e' was not found. errorCode: type: string description: Machine-readable error code (enum name). example: ENTITY_WITH_ATTRIBUTE_NOT_FOUND messageArguments: type: object additionalProperties: type: string description: Named parameters used to compose the detail message. Values are always strings. example: recordTypeId: Rt69b14f7e requestId: type: string description: Request correlation ID for tracing and support. example: 5b1f7a8c-2c0e-4a8f-9c4f-2a3b1c0e4d5f errors: type: array description: Field-level or per-item error details. Present for validation, business-rule, or batch failures. items: $ref: '#/components/schemas/V2FieldError' required: - detail - errorCode - requestId - status - title FieldOptionDto: type: object description: Field option for single-select and multi-select fields properties: name: description: Name identifier for the option displayName: type: string description: Display name for the option color: type: string description: Color code for the option groupId: type: string description: Group ID for grouped options FilterCondition: type: string description: Supported filter conditions for record search enum: - CONTAINS - DOES_NOT_CONTAIN - IS - IS_NOT - IS_EMPTY - IS_NOT_EMPTY - GREATER_THAN - GREATER_THAN_OR_EQUAL - LESS_THAN - LESS_THAN_OR_EQUAL - IS_AFTER - IS_BEFORE - IS_BETWEEN - IS_NOT_BETWEEN - IS_ANY_OF - IS_NONE_OF - HAS_ANY_OF - HAS_ALL_OF - HAS_NONE_OF - IS_EXACTLY V2FieldError: type: object description: Field-level error detail used in validation errors and per-item batch failures. properties: field: type: string description: Name of the field or path that caused the error. example: name message: type: string description: Human-readable explanation of the error for this field. example: Workspace name can not be blank code: type: string description: Machine-readable code identifying the validation rule that failed. example: NotBlank CoverImageDto: type: object description: Cover image information for a record properties: url: type: string description: URL of the cover image example: /maestro/static/thumbnail/default/thumbnail-1.png position: type: integer format: int32 description: Vertical position of the cover image example: 0 FieldNumberOptionsDto: type: object description: Number field options for number, percentage, and currency fields properties: precision: type: integer format: int32 description: Decimal places (0-4) allowNegatives: type: boolean description: Whether negative values are allowed currency: type: string description: Currency code (e.g. USD, EUR, GBP); only for currency fields enum: - AED - AFN - ALL - AMD - AON - ARS - AUD - AZN - BAM - BBD - BDT - BGL - BHD - BIF - BND - BOB - BRL - BSD - BTN - BWP - BYN - BZD - CAD - CDF - CHF - CLP - CNY - COP - CRC - CUP - CVE - DJF - DKK - DOP - DZD - EGP - ERN - ETB - EUR - FJD - GBP - GEL - GHC - GMD - GNF - GTQ - GYD - HNL - HRK - HTG - HUF - IDR - ILS - INR - IQD - IRR - ISK - JMD - JOD - JPY - KES - KGS - KHR - KMF - KPW - KRW - KWD - KZT - LAK - LBP - LKR - LRD - LSL - LYD - MAD - MDL - MGA - MKD - MMK - MNT - MRU - MUR - MVR - MWK - MXN - MYR - MZM - NAD - NGN - NIO - NOK - NPR - NZD - OMR - PAB - PEN - PGK - PHP - PKR - PLN - PYG - QAR - RON - RSD - RUB - RWF - SAR - SBD - SCR - SDG - SEK - SGD - SLL - SOS - SRD - SSP - STN - SYP - SZL - THB - TJS - TMT - TND - TOP - TRY - TTD - TZS - UAH - UGS - USD - UYU - UZS - VEF - VND - VUV - WST - XAF - XCD - XOF - YER - ZAR - ZMK - ZWD visualizationType: type: string description: 'Display format: TEXT (default), PROGRESS_BAR, or PROGRESS_CIRCLE' enum: - TEXT - PROGRESS_BAR - PROGRESS_CIRCLE FilterGroupDto: allOf: - $ref: '#/components/schemas/FilterNodeDto' - type: object properties: operator: $ref: '#/components/schemas/FilterOperator' description: Logical operator to combine conditions conditions: type: array description: 'List of filter nodes: leaf conditions or nested groups' items: $ref: '#/components/schemas/FilterNodeDto' minItems: 1 description: A group of filter conditions combined with a logical operator (AND/OR). Supports recursive nesting for complex filter logic. required: - conditions - operator PageRecordDto: type: object properties: totalElements: type: integer format: int64 totalPages: type: integer format: int32 pageable: $ref: '#/components/schemas/PageableObject' first: type: boolean last: type: boolean size: type: integer format: int32 content: type: array items: $ref: '#/components/schemas/RecordDto_2' number: type: integer format: int32 sort: $ref: '#/components/schemas/SortObject' numberOfElements: type: integer format: int32 empty: type: boolean CursorInfo: type: object description: Cursor pagination metadata properties: nextCursor: type: string description: Opaque cursor for fetching the next page. Absent when there are no more pages. example: UnQ2OWIxNGY3ZTBlMzhmMzVmMjhjM2NjZWU= hasMore: type: boolean description: Whether more items exist beyond this page CursorResponseHistoryEntryDto: type: object description: Cursor-paginated list of history entries properties: content: type: array description: List of history entries in the current page items: $ref: '#/components/schemas/HistoryEntryDto' cursor: $ref: '#/components/schemas/CursorInfo' description: Cursor metadata for fetching subsequent pages CellValueDto: type: object description: A snapshot of a field value at a point in time properties: value: description: The stored value of the field at the time of the change fieldSnapshot: $ref: '#/components/schemas/FieldSnapshotDto' description: Snapshot of the field metadata at the time of the change RecordBulkResultItemDtoObject: type: object description: Result for one input item in a bulk record operation. properties: requestIndex: type: integer format: int32 description: Zero-based index of the input item. example: 0 id: type: string description: Record ID for this item when available. example: Rc69b2a78e63cd0d41a1bedf2e status: type: string description: Per-item operation status. enum: - success - error error: $ref: '#/components/schemas/RecordBulkItemErrorDto' description: Error payload. Present only when status is error. record: $ref: '#/components/schemas/RecordDto_2' description: Record payload. Present on successful create, update, and patch items. RecordBaseDto: type: object description: Partial record data to update. Only provided fields will be updated. properties: id: type: string description: Unique identifier of the record example: Rc69b2a78e63cd0d41a1bedf2e readOnly: true createdBy: $ref: '#/components/schemas/UserReferenceDto' description: User who created this entity readOnly: true createdAt: type: string description: Date/time when this entity was created example: '2026-01-15T10:30:00.000Z' pattern: yyyy-MM-dd'T'HH:mm:ss.SSS'Z' readOnly: true updatedBy: $ref: '#/components/schemas/UserReferenceDto' description: User who last updated this entity readOnly: true updatedAt: type: string description: Date/time when this entity was last updated example: '2026-01-15T14:45:00.000Z' pattern: yyyy-MM-dd'T'HH:mm:ss.SSS'Z' readOnly: true recordTypeId: type: string description: ID of the record type this record belongs to example: Rt69b14f7e0e38f35f28c3ccee data: type: object additionalProperties: {} description: Field data for the record as key-value pairs where keys are field IDs example: F693ab1c96f11ea3f4175e710: Campaign Name F693ab1c96f11ea3f4175e711: '2026-03-15' thumbnailUrl: type: string description: URL of the record thumbnail image example: /maestro/static/thumbnail/default/thumbnail-1.png readOnly: true coverImage: $ref: '#/components/schemas/CoverImageDto' description: Cover image information for the record readOnly: true FieldDateOptionsDto: type: object description: Date field options properties: dateFormat: type: string description: Date format enum: - locale - standard - friendly - european - iso - short - medium - long timeFormat: type: string description: Time format enum: - h12 - h24 RecordBulkItemErrorDto: type: object description: Per-item error detail in a bulk record operation response. properties: code: type: string description: Machine-readable error code. example: ENTITY_WITH_ATTRIBUTE_NOT_FOUND message: type: string description: Human-readable explanation of this specific item failure. example: Record with ID 'Rc123' was not found. details: type: object additionalProperties: {} description: Optional structured context for this item failure. SortObject: type: object properties: sorted: type: boolean empty: type: boolean unsorted: type: boolean RecordDto_2: type: object description: Complete record data including all record properties properties: id: type: string description: Unique identifier of the record example: Rc69b2a78e63cd0d41a1bedf2e readOnly: true createdBy: $ref: '#/components/schemas/UserReferenceDto' description: User who created this entity readOnly: true createdAt: type: string description: Date/time when this entity was created example: '2026-01-15T10:30:00.000Z' pattern: yyyy-MM-dd'T'HH:mm:ss.SSS'Z' readOnly: true updatedBy: $ref: '#/components/schemas/UserReferenceDto' description: User who last updated this entity readOnly: true updatedAt: type: string description: Date/time when this entity was last updated example: '2026-01-15T14:45:00.000Z' pattern: yyyy-MM-dd'T'HH:mm:ss.SSS'Z' readOnly: true recordTypeId: type: string description: ID of the record type this record belongs to example: Rt69b14f7e0e38f35f28c3ccee data: type: object additionalProperties: {} description: Field data for the record as key-value pairs where keys are field IDs example: F693ab1c96f11ea3f4175e710: Campaign Name F693ab1c96f11ea3f4175e711: '2026-03-15' thumbnailUrl: type: string description: URL of the record thumbnail image example: /maestro/static/thumbnail/default/thumbnail-1.png readOnly: true coverImage: $ref: '#/components/schemas/CoverImageDto' description: Cover image information for the record readOnly: true recordTypeAlias: type: string description: Alias of the record type (only populated when aliased=true) example: campaigns readOnly: true FieldUserOptionsDto: type: object description: User field options properties: multipleUsersAllowed: type: boolean description: Whether multiple users can be selected FieldSnapshotDto: type: object description: Snapshot of field metadata captured at the time of the change properties: id: type: string description: ID of the field type: type: string description: Type of the field displayName: type: string description: Display name of the field description: type: string description: Description of the field hasError: type: boolean description: Whether the field has a configuration error options: type: array description: Options for single-select or multi-select fields items: $ref: '#/components/schemas/FieldOptionDto' dateOptions: $ref: '#/components/schemas/FieldDateOptionsDto' description: Date-specific configuration options numberOptions: $ref: '#/components/schemas/FieldNumberOptionsDto' description: Number-specific configuration options userOptions: $ref: '#/components/schemas/FieldUserOptionsDto' description: User-specific configuration options UserReferenceDto: type: object description: Reference to a user with identifier and display name properties: id: type: string description: Unique identifier of the user example: 1C341E7B682505430A494138@0bd0200063c87f9749412b.e readOnly: true name: type: string description: Display name of the user example: Jane Doe readOnly: true FilterConditionDto: allOf: - $ref: '#/components/schemas/FilterNodeDto' - type: object properties: fieldId: type: string description: ID or alias of the field to filter on example: F693ab1c96f11ea3f4175e710 minLength: 1 condition: $ref: '#/components/schemas/FilterCondition' description: Filter condition to apply value: description: Value to compare against. Omit for unary conditions (IS_EMPTY, IS_NOT_EMPTY). Use an array for range conditions (IS_BETWEEN) or multi-value conditions (IS_ANY_OF). For People fields (USER, CREATED_BY, UPDATED_BY, APPROVED_BY), by default plain string values are interpreted as Adobe IMS user IDs when the customer is IMS-migrated; otherwise they are interpreted as Workfront user IDs. To explicitly set the ID type and avoid ambiguity, pass a typed object such as {"id":"63e3b13000078c1795146248182d15dc","idType":"WF"} (use "idType":"IMS" for Adobe IMS IDs). example: Active matchExternalId: type: boolean description: When true, values for REFERENCE fields are treated as external connection IDs and resolved to internal record IDs before the search executes. Only valid for external REFERENCE fields (isExternal=true). description: A leaf filter condition applied to a single field required: - condition - fieldId RecordSearchPageDto: type: object description: Paginated search response containing records and groups properties: records: $ref: '#/components/schemas/PageRecordDto' description: Paginated records matching the search criteria groups: type: array description: List of record groups (if grouping was requested) items: $ref: '#/components/schemas/RecordGroupDto_2' BulkDeleteRequestDto: type: object description: List of record IDs to delete properties: ids: type: array description: List of record IDs to delete (max 100) example: - r1 - r2 items: type: string maxItems: 100 minItems: 0 required: - ids RecordSearchRequestDto: type: object description: Search criteria including filters, sorting, and grouping properties: recordTypeId: type: string description: ID of the record type to search within example: Rt69b14f7e0e38f35f28c3ccee recordTypeAlias: type: string description: Alias of the record type to search within example: campaigns filter: $ref: '#/components/schemas/FilterGroupDto' description: Filter criteria using the composite filter pattern. Supports recursive AND/OR nesting with strongly-typed conditions. sort: type: array description: Sorting configuration for records items: $ref: '#/components/schemas/SortDto' group: type: array description: Grouping configuration for records items: $ref: '#/components/schemas/GroupDto' scopeWorkspaceIds: type: array description: List of workspace IDs to scope the search to (for global record types) example: - Ws123 - Ws456 items: type: string globalRecordTypeWorkspaceFieldId: type: string description: ID of the global record type workspace field (for global record types) example: F693ab1c96f11ea3f4175e717 FilterOperator: type: string description: Logical operator for combining filter conditions enum: - AND - OR SortDto: type: object description: Sort specification properties: fieldId: type: string description: ID or alias of the field to sort by example: F693ab1c96f11ea3f4175e710 minLength: 1 direction: type: string description: Sort direction (asc or desc). Defaults to asc if omitted. enum: - asc - desc example: asc required: - fieldId FilterNodeDto: description: 'A node in the filter tree: either a leaf condition or a nested group' oneOf: - $ref: '#/components/schemas/FilterConditionDto' - $ref: '#/components/schemas/FilterGroupDto' x-refined-from: - workfront-planning-v1-openapi.json - workfront-planning-v2-openapi.json