Adobe Workfront skills for AI agents. Includes Workfront Planning (WFP/Maestro) solution architecture: workspace design, record connections, formula fixes, tier limits, the Planning API, and a Fusion scenario optimizer.
93%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Passed
No findings from the security scan
API v2 became available to all customers on May 28, 2026. Version 1 remains available, but Adobe recommends switching to v2. The release adds workspace, record-type, and field CRUD, record management, PATCH partial updates, bulk operations, and improvements to URLs, filtering, pagination, errors, and permissions.
Sources: Q3 release notes, Planning API basics, and developer reference.
/maestro/api/v2 for new direct integrations. Record listing, creation, search, and bulk operations are scoped under /record-types/{recordTypeId}/records. Single-record GET, PUT, PATCH, and DELETE use /records/{id}.v2 POST search:
{
"filter": {
"operator": "AND",
"conditions": [
{"fieldId": "<statusFieldId>", "condition": "IS_ANY_OF", "value": ["active", "planned"]},
{"fieldId": "<nameFieldId>", "condition": "CONTAINS", "value": "launch"}
]
}
}Send this body to POST /maestro/api/v2/record-types/{recordTypeId}/records/search. Filter groups use operator: AND|OR and conditions; do not mix v1 $ keys into v2 groups.
All ordinary empty-value-capable fields below support IS_EMPTY and IS_NOT_EMPTY in v2, $isEmpty and $isNotEmpty in v1, in addition to the listed operators.
| Field | v2 conditions | v1 counterparts |
|---|---|---|
| Text, paragraph, text-valued formula | CONTAINS, DOES_NOT_CONTAIN, IS, IS_NOT | $contains, $doesNotContain, $is, $isNot |
| Number, percentage, currency | IS, IS_NOT, GREATER_THAN, GREATER_THAN_OR_EQUAL, LESS_THAN, LESS_THAN_OR_EQUAL | $is, $isNot, $greaterThan, $greaterThanOrEqual, $lessThan, $lessThanOrEqual |
| Date | IS, IS_NOT, IS_AFTER, IS_BEFORE, IS_BETWEEN, IS_NOT_BETWEEN | $is, $isNot, $isAfter, $isBefore, $isBetween, $isNotBetween |
| Single-select | IS, IS_NOT, IS_ANY_OF, IS_NONE_OF | $is, $isNot, $isAnyOf, $isNoneOf |
| Multi-select, People/user, reference | HAS_ANY_OF, HAS_ALL_OF, IS_EXACTLY, HAS_NONE_OF | $hasAnyOf, $hasAllOf, $isExactly, $hasNoneOf |
| Lookup | Follow the source field's type | Follow the source field's type |
Live check, October 9, 2026: read-only Hub searches through the Planning MCP tool's v1-style filters payload accepted single-select $isAnyOf/$isNoneOf and returned the expected 1/4 matches from five existing records. Multi-select and multi-valued Planning connection fields rejected $is and $isNot as unsupported. Positive controls using $hasAnyOf/$hasNoneOf returned the expected 3/2 matches for multi-select and 1/4 for the connection. This is a scoped Hub observation, not a release-note change or verification of every tenant, People field, or connection cardinality. The MCP tool does not expose its underlying HTTP URL.
The Q4 UI relabels multi-value "Has any of"/"Has none of" to "Is any of"/"Is none of" (Preview October 1, fast October 14, everyone October 15). This does not change the API's HAS_ANY_OF/HAS_NONE_OF tokens. A single-select filter and a multi-select/reference filter are not interchangeable.
For v1 record search, retain the filters JSON array:
{
"recordTypeId": "<recordTypeId>",
"filters": [
{"<nameFieldId>": {"$contains": "launch"}},
{"<statusFieldId>": {"$is": "active"}}
],
"offset": 0,
"limit": 500
}Prefer PATCH /maestro/api/v2/records/{id} for targeted updates to a single record. PATCH uses merge-patch semantics: include only the data keys being changed; use explicit null to intentionally clear a writable field according to its schema. PUT /v2/records/{id} is full replacement: every field not provided is set to null.
Source: v2 endpoint reference and its OpenAPI specification, operations patchRecord and updateRecord.
Bulk operations live at /maestro/api/v2/record-types/{recordTypeId}/records/bulk: POST creates, PATCH partially updates, PUT fully replaces (omitted fields become null), and DELETE removes. Each request is limited to 100 records; PUT and PATCH items must include an id. Prefer bulk PATCH over bulk PUT unless full replacement is intended.
Bulk operations are not atomic. Check the response for per-record errors rather than treating the HTTP status alone as confirmation that every record succeeded.