Conceptos básicos de la API de Adobe Workfront Planning

IMPORTANT
La información de este artículo hace referencia a Adobe Workfront Planning, una funcionalidad adicional de Adobe Workfront.
Para obtener una lista de los requisitos para acceder a Workfront Planning, consulte Información general sobre el acceso a Adobe Workfront Planning.
Para obtener información general sobre Workfront Planning, consulte Introducción a Adobe Workfront Planning.

El objetivo de la API de Planning de Adobe Workfront es simplificar la creación de integraciones con Planning mediante la introducción de una arquitectura RESTful que funcione a través de HTTP. Este documento supone que está familiarizado con las respuestas de REST y JSON.

Para obtener toda la referencia de extremo, esquemas de solicitud/respuesta y detalles específicos de la versión, consulte la documentación para desarrolladores de la API de Workfront Planning.

Autenticación

La API de Workfront Planning utiliza OAuth 2.0 para la autenticación. Las credenciales se configuran mediante Adobe Developer Console.

Admitimos los dos flujos siguientes en función de su tipo de integración:

  • Autenticación de servidor a servidor (JWT): para integraciones automatizadas y servicios back-end sin interacción del usuario. Utiliza la credencial de servidor a servidor OAuth (concesión de credenciales de cliente: la aplicación se autentica directamente mediante su ID de cliente y secreto para obtener un token de acceso, sin inicio de sesión del usuario ni paso de consentimiento).

    Para obtener más información, consulte Autenticación de servidor a servidor.

  • Autenticación de usuario (flujo de código de autorización): para integraciones que actúan en nombre de un usuario específico. Utiliza la credencial de aplicación web o aplicación de una sola página de OAuth (concesión de código de autorización: el usuario inicia sesión y da su consentimiento, tras lo cual la aplicación recibe un código de autorización que intercambia por un token de acceso).

    Para obtener más información, consulte Autenticación de usuario.

Para empezar, cree un proyecto en Adobe Developer Console y añada la API de Workfront Planning para obtener sus credenciales.

Para configurar las credenciales, cree una aplicación OAuth2 en Workfront.

Para obtener más información, consulte Crear aplicaciones OAuth2 para integraciones de Workfront.

NOTE
El extremo /login y la autenticación de clave de API no son compatibles con Workfront Planning. No use sessionID ni apiKey parámetros.

Versiones de API

Las versiones de la API de Planning se realizan mediante la ruta URL.

Las siguientes son las versiones compatibles actuales:

Versión
Fecha de la versión
Versión 1
Julio de 2024
Versión 2
Mayo de 2026
NOTE
El conector de Workfront Planning para Workfront Fusion no se ha actualizado a la versión 2 de la API y seguirá utilizando la versión 1 hasta nuevo aviso.

Para obtener más información sobre las versiones compatibles actuales, consulte el artículo Documentación para desarrolladores de API de Workfront Planning.

Se recomienda segmentar explícitamente una versión en todas las integraciones:

https://{customer-domain}/maestro/api/v2/...

Cuando se publique una nueva versión principal, la versión anterior seguirá disponible hasta que se comunique una fecha de obsolescencia.

Siga las Notas de la versión de Workfront para mantenerse informado de los cambios de la API.

Estructura y operaciones de URL

Los objetos se manipulan enviando una petición HTTP a su URI único. La operación se especifica mediante el método HTTP.

Método
Operación
GET
Recuperar un solo objeto por ID u objetos de búsqueda/lista
POST
Crear un nuevo objeto
PUT
Reemplazar un objeto existente (actualización completa)
PATCH
Actualizar parcialmente un objeto existente (solo se modifican los campos)
ELIMINAR
Eliminar un objeto
NOTE
Nota de la versión 1: PATCH no es compatible con la versión 1. Usar PUT para todas las actualizaciones.

Para obtener rutas de acceso de extremo completas y ejemplos de solicitud/respuesta, consulte la referencia de API en developer.adobe.com/wf-planning.

Códigos de estado HTTP

La API de Planning devuelve códigos de estado HTTP estándar:

Código
Significado
200 OK
GET, PUT o PATCH correctos
201 Creado
Publicación correcta (recurso creado)
204 Sin contenido
DELETE correcto
207 Multi-Status
La operación masiva se completó con resultados mixtos, con algunos elementos correctos y otros fallidos. Consulte las respuestas de elementos individuales para obtener más detalles.
400 Solicitud incorrecta
Solicitud no válida: consulte la respuesta de error para obtener más información
401 No autorizado
Falta el token de autenticación o no es válido
403 Prohibido
Permisos autenticados pero insuficientes
404 No encontrado
El recurso no existe
Conflicto 409
Conflicto de escritura, el recurso se modificó mediante otra solicitud. Vuelva a intentarlo con la versión más reciente.
429 Demasiadas solicitudes
Límite de velocidad excedido
NOTE
Nota de la versión 1: La versión 1 devuelve 200 OK para todas las operaciones correctas, incluidas POST y DELETE.

Gestión de errores

La API de Planning devuelve errores en un formato coherente. Cada respuesta de error incluye un mensaje legible en lenguaje natural, un código de error legible en el equipo y un ID de solicitud para la escalación de soporte.

Ejemplo de respuesta de error:

json
{
  "title": "Validation failed",
  "status": 400,
  "detail": "Request validation failed. See 'errors' for details.",
  "errorCode": "VALIDATION_FAILED",
  "requestId": "req-123",
  "errors": [
    { "field": "name", "message": "must not be blank" }
  ]
}

Use errorCode (no status) para controlar la administración de errores de programación. Proporciona la clasificación más específica del error.

NOTE
Nota de la versión 1: Las respuestas de error de la versión 1 utilizan un campo numérico type (p. ej. 40001) en lugar de una cadena errorCode, y ajustan los detalles en un objeto report en lugar de un campo detail de nivel superior.

Filtrado de registros

Utilice el parámetro filter en las solicitudes de búsqueda de registros para devolver solo los registros que coincidan con criterios específicos. Para las solicitudes POST, filter es una propiedad JSON en el cuerpo de la solicitud. Para solicitudes GET, filter es un parámetro de consulta que contiene un grupo de filtros con codificación JSON. Los filtros utilizan una estructura compuesta con tipo con operadores lógicos explícitos.

json
{
  "filter": {
    "operator": "AND",
    "conditions": [
      { "fieldId": "<fieldId>", "condition": "IS", "value": "Active" },
      { "fieldId": "<fieldId>", "condition": "CONTAINS", "value": "marketing" }
    ]
  }
}

Los filtros se pueden anidar utilizando los operadores AND / OR para generar condiciones compuestas:

json
{
  "filter": {
    "operator": "OR",
    "conditions": [
      {
        "operator": "AND",
        "conditions": [
          { "fieldId": "<fieldId>", "condition": "BETWEEN", "value": ["2024-03-31T20:00:00.000Z", "2024-04-01T20:00:00.000Z"] },
          { "fieldId": "<fieldId>", "condition": "IS", "value": "active" }
        ]
      },
      {
        "operator": "AND",
        "conditions": [
          { "fieldId": "<fieldId>", "condition": "IS_BETWEEN", "value": ["2024-04-15T00:00:00.000Z", "2024-04-16T00:00:00.000Z"] },
          { "fieldId": "<fieldId>", "condition": "IS", "value": "planned" }
        ]
      }
    ]
  }
}
NOTE
Nota de la versión 1: La versión 1 usa operadores sin tipo Mongo-style en un objeto filters. Los operadores tienen el prefijo $ (por ejemplo: $and, $or, $is, $contains, $isBetween). Los parámetros de paginación (offset, limit) y recordTypeId se pasan en el cuerpo de la solicitud en lugar de como una ruta de acceso de la dirección URL y parámetros de consulta.

Tipos de campo y modificadores de búsqueda

Puede utilizar modificadores y filtros con campos para controlar qué datos se devolverán en los resultados.

Para ver ejemplos, consulte la documentación para desarrolladores de API de Workfront Planning.

Uso de modificadores de búsqueda

Workfront Planning admite los siguientes modificadores de búsqueda:

Modificador
Ejemplo
Descripción
Valores posibles
CONTAINS
{"fieldId":"<id>","condition":"CONTAINS","value":"product"}
Devuelve registros cuyo valor de campo contiene el filtro
“Nuevo lanzamiento del producto”
DOES_NOT_CONTAIN
{"fieldId":"<id>","condition":"DOES_NOT_CONTAIN","value":"product"}
Devuelve registros donde el valor del campo no contiene el filtro
“Nuevo lanzamiento”
ES
{"fieldId":"<id>","condition":"IS","value":"new product launch"}
Devuelve registros cuyo valor de campo coincida exactamente con el filtro
“Nuevo lanzamiento del producto”
IS_NOT
{"fieldId":"<id>","condition":"IS_NOT","value":"product"}
Devuelve registros cuyo valor de campo no coincide exactamente con el filtro
“Nuevo lanzamiento del producto”
IS_EMPTY
{"fieldId":"<id>","condition":"IS_EMPTY"}
Devuelve registros cuyo valor de campo esté vacío
"" o nulo
IS_NOT_EMPTY
{"fieldId":"<id>","condition":"IS_NOT_EMPTY"}
Devuelve registros cuyo valor de campo no esté vacío
“Nuevo lanzamiento del producto”
GREATER_THAN
{"fieldId":"<id>","condition":"GREATER_THAN","value":"10"}
Devuelve registros cuyo valor de campo sea mayor que el filtro
"11"
GREATER_THAN_OR_EQUAL
{"fieldId":"<id>","condition":"GREATER_THAN_OR_EQUAL","value":"10"}
Devuelve registros cuyo valor de campo sea mayor o igual que el filtro
"10", "11"
LESS_THAN
{"fieldId":"<id>","condition":"LESS_THAN","value":"10"}
Devuelve registros cuyo valor de campo sea menor que el filtro
"9"
MENOR_QUE_O_IGUAL
{"fieldId":"<id>","condition":"LESS_THAN_OR_EQUAL","value":"10"}
Devuelve registros cuyo valor de campo sea menor o igual que el filtro
"9", "10"
IS_BETWEEN
{"fieldId":"<id>","condition":"IS_BETWEEN","value":["2024-01-01","2024-12-31"]}
Devuelve registros cuyo valor de campo esté entre los dos valores de filtro
["2024-03-01","2024-06-30"]
IS_NOT_BETWEEN
{"fieldId":"<id>","condition":"IS_NOT_BETWEEN","value":["2024-01-01","2024-12-31"]}
Devuelve registros cuyo valor de campo no esté entre los dos valores de filtro
["2023-01-01","2025-06-30"]
IS_AFTER
{"fieldId":"<id>","condition":"IS_AFTER","value":"2024-01-01"}
Devuelve registros cuyo valor de campo de fecha es posterior al filtro
"2024-06-01"
IS_BEFORE
{"fieldId":"<id>","condition":"IS_BEFORE","value":"2024-12-31"}
Devuelve registros cuyo valor de campo de fecha sea anterior al filtro
"2024-06-01"
IS_ANY_OF
{"fieldId":"<id>","condition":"IS_ANY_OF","value":["Active","Planned"]}
Devuelve registros cuyo valor de campo coincida con cualquier valor de la lista de filtros
["Activo","Planificado","Completado"]
IS_NONE_OF
{"fieldId":"<id>","condition":"IS_NONE_OF","value":["Active","Planned"]}
Devuelve registros cuyo valor de campo no coincide con ninguno de los valores de la lista de filtros
["Activo","Planificado"]
HAS_ANY_OF
{"fieldId":"<id>","condition":"HAS_ANY_OF","value":["Tag1","Tag2"]}
Devuelve registros cuyo campo de varios valores contiene cualquiera de los valores de filtro
["Tag1","Tag2"]
HAS_ALL_OF
{"fieldId":"<id>","condition":"HAS_ALL_OF","value":["Tag1","Tag2"]}
Devuelve registros cuyo campo de varios valores contiene todos los valores de filtro
["Tag1","Tag2"]
IS_EXACTLY
{"fieldId":"<id>","condition":"IS_EXACTLY","value":["Tag1"]}
Devuelve registros cuyo campo de varios valores contiene exactamente los valores de filtro y ningún otro
["Tag1"]
HAS_NONE_OF
{"fieldId":"<id>","condition":"HAS_NONE_OF","value":["Tag1"]}
Devuelve registros cuyo campo de varios valores no contiene ninguno de los valores de filtro
["Tag1"]
NOTE
Nota de la versión 1: Los nombres de modificadores de la versión 1 utilizan $-prefixed camelCase (por ejemplo: $contains, $isNot, $isEmpty, $greaterThan, $greaterThanOrEqual, $lessThan, $lessThanOrEqual, $isBetween, $isNotBetween, $isAnyOf, $hasAllOf). El comportamiento de cada modificador es el mismo.

Condiciones de filtro compatibles por tipo de campo

Tipo de campo
Condiciones admitidas
texto, texto largo
CONTIENE, DOES_NOT_CONTAIN, IS, IS_NOT, IS_EMPTY, IS_NOT_EMPTY
número, porcentaje y moneda
IS, IS_NOT, GREATER_THAN, GREATER_THAN_OR_EQUAL, LESS_THAN, LESS_THAN_OR_EQUAL, IS_EMPTY, IS_NOT_EMPTY
fecha
IS, IS_NOT, IS_AFTER, IS_BEFORE, IS_BETWEEN, IS_NOT_BETWEEN, IS_EMPTY, IS_NOT_EMPTY
single-select
IS, IS_NOT, IS_ANY_OF, IS_NONE_OF, IS_EMPTY, IS_NOT_EMPTY
selección múltiple, usuario
HAS_ANY_OF, HAS_ALL_OF, IS_EXACTLY, HAS_NONE_OF, IS_EMPTY, IS_NOT_EMPTY
booleano
ES
fórmula
CONTIENE, DOES_NOT_CONTAIN, IS, IS_NOT, IS_EMPTY, IS_NOT_EMPTY
created-by
IS, IS_NOT, IS_ANY_OF, IS_NONE_OF
updated-by
IS, IS_NOT, IS_ANY_OF, IS_NONE_OF, IS_EMPTY, IS_NOT_EMPTY
created-at
IS, IS_NOT, IS_AFTER, IS_BEFORE, IS_BETWEEN, IS_NOT_BETWEEN
updated-at
IS, IS_NOT, IS_AFTER, IS_BEFORE, IS_BETWEEN, IS_NOT_BETWEEN, IS_EMPTY, IS_NOT_EMPTY
reference
HAS_ANY_OF, HAS_ALL_OF, IS_EXACTLY, HAS_NONE_OF, IS_EMPTY, IS_NOT_EMPTY
lookup
Depende del tipo de campo vinculado
NOTE
Nota de la versión 1: La versión 1 usa nombres de operadores con prefijo $ (por ejemplo: $contains, $greaterThan, $isAnyOf, $hasAllOf). El conjunto de condiciones admitidas por tipo de campo es el mismo.

Filtrado por campos de personas

Los filtros de campo Personas (user, created-by, updated-by, approved-by) aceptan tanto los identificadores de usuario de IMS de Adobe como los de usuario de Workfront. Un valor de cadena sin formato se interpreta como un ID de usuario de Adobe IMS.

Para establecer el tipo de identificador para comprobar el ID de usuario de Workfront, debe pasar explícitamente los parámetros id y idType. Los valores admitidos para idType son “WF” para los identificadores de usuario de Workfront y “IMS” para los identificadores de usuario de IMS de Adobe.

{
  "filter": {
   "operator": "AND",
    "conditions": [
      {
        "fieldId": "<userFieldId>",
        "condition": "HAS_ANY_OF",
        "value": [
          { "id": "63e3b13000078c1795146248182d15dc", "idType": "WF" }
        ]
      }
    ]
  }
}
NOTE
Nota de la versión 1: La versión 1 solo admite el filtrado por el ID de IMS de los usuarios.

Filtrado de campos de referencia externos por ID externo

Los campos de referencia externa vinculan registros a objetos de otros sistemas de Adobe (como proyectos o AEM Assets de Workfront). Internamente, Planning asigna los ID de registro de Planning a estos objetos. Para filtrar estos campos directamente por su identificador de objeto original, agregue "matchExternalId": true a una condición de filtro.

Este indicador solo es válido para campos de referencia donde referenceOptions.isExternal es true; se omite para campos de referencia no externos. Si no se puede resolver un solo valor de cadena, la solicitud falla con 400 Bad Request. Si se proporciona un valor de lista, las entradas sin resolver pasan sin cambios y simplemente no coinciden.

{
  "filter": {
    "operator": "AND",
    "conditions": [
      {
        "fieldId": "<externalReferenceFieldId>",
        "condition": "IS_ANY_OF",
        "value": [
          "5f6a4f6e00000123456789abcdef0123",
          "/content/dam/wknd/en/adventures/bali-surf-camp"
        ],
        "matchExternalId": true
      }
    ]
  }
}
NOTE
Nota de la versión 1: La versión 1 no admite el filtrado por ID de objetos externos.

Campos de conexión externa

Los tipos de registros de Planning pueden alojar campos de referencia externos que vinculen registros a objetos de otros sistemas de Adobe en lugar de otros tipos de registros de Planning.

Para crear un campo de referencia externo a través de la API, establezca referenceOptions.recordTypeId en un nuevo campo REFERENCE al ID del tipo de registro externo deseado. El servidor deriva automáticamente referenceOptions.isExternal=true y los metadatos de conexión (connectionName, objectName) del tipo de registro de destino.

Los tipos de objetos externos admitidos son objetos de Workfront (proyectos, tareas, programas, portafolios, empresas, grupos, equipos y usuarios) y AEM Assets (recursos y fragmentos de contenido).

NOTE
Nota de la versión 1: La versión 1 no admite la creación de campos de conexión externos.

Orden

Ordene los resultados por cualquier campo incluyendo una matriz sort en la solicitud:

json
{
  "sort": [
    { "fieldId": "F6527ecb25df57c441d92b9fc", "direction": "asc" },
    { "fieldId": "F658afcbd4a0273c67c346fd5", "direction": "desc" }
  ]
}

Los campos de ordenación múltiples se evalúan en orden. Aplique siempre una ordenación al paginar para garantizar un orden coherente entre las páginas.

Para agrupar los resultados, incluya una matriz de grupo junto con el orden:

{
  "sort": [{ "fieldId": "F001", "direction": "asc" }],
  "group": [{ "fieldId": "F002", "direction": "asc" }]
}
NOTE
Nota de la versión 1: V1 usa sorting (no sort), groupingFieldIds (matriz de identificadores de campo, no objetos group) y el ahora obsoleto rowOrderViewId para aplicar el orden de filas de una vista existente. La versión no admite ninguno de estos parámetros V1

Proyección de campos

Para limitar qué campos se devuelven en una respuesta, utilice los parámetros de consulta fieldIds o fieldAliases con una lista separada por comas. Esto reduce el tamaño de la carga útil de respuesta y se recomienda para integraciones de gran volumen o sensibles a la latencia.

NOTE
Nota de la versión 1: La versión 1 usa ?attributes= para la proyección (por ejemplo: ?attributes=data,createdBy) en lugar de ?fieldIds= o ?fieldAliases=.

Paginación

La API de Planning admite respuestas paginadas para administrar conjuntos de datos grandes.

  • La paginación basada en cursor se usa para espacios de trabajo, tipos de registro, campos y vistas. Pase un valor cursor de la respuesta anterior para recuperar la página siguiente. Las respuestas basadas en cursores incluyen un indicador hasMore para indicar si hay más páginas o no.
  • La paginación basada en páginas se usa para la búsqueda de registros. Use page y size como parámetros de consulta. Aplique siempre una ordenación al paginar para garantizar un orden coherente entre las páginas. Tenga en cuenta que la paginación se basa en cero, por lo que para recuperar los resultados de la segunda página, utilice “page=1” como parámetro.

Por ejemplo, utilice la siguiente solicitud para recuperar la segunda página de 500 registros de una búsqueda de registros:

POST /v2/record-types/{recordTypeId}/records/search?page=1&size=500
{
  "sort": [{ "fieldId": "F6527ecb25df57c441d92b9fc", "direction": "asc" }],
  "filter": { "operator": "AND", "conditions": [
    { "fieldId": "<fieldId>", "condition": "IS", "value": "active" }
  ] }
}

Todas las respuestas paginadas incluyen un sobre estructurado que indica si hay más resultados disponibles. Aplique siempre una ordenación al paginar para garantizar un orden coherente entre las páginas.

NOTE
Nota de la versión 1: V1 usa offset y limit pasó en el cuerpo de la solicitud (valor predeterminado 500, máximo 2.000). Para recuperar los registros 2001-4000, establezca "offset": "2000", "limit": "2000" en el cuerpo de la solicitud. La respuesta devuelve una matriz de registros planos con un campo totalCount.

Operaciones masivas

La API de Planning admite la creación, actualización, aplicación de parches y eliminación en lotes de registros en una sola solicitud. Consulte la referencia de API en developer.adobe.com/wf-planning para ver las rutas de extremos, los formatos de solicitud y los límites de registros por operación.

NOTE
Nota de la versión 1: Las operaciones masivas no están disponibles en la versión 1.

Permisos

Los permisos para entidades se administran mediante una API de permisos dedicada, independiente de los propios extremos de los recursos. Esto le permite leer los permisos actuales, administrar la lista de uso compartido y administrar las solicitudes de acceso independientemente de las operaciones de datos. Para obtener más información, consulte la sección “Referencias de API” en el artículo API de Workfront Planning.

NOTE
Nota de la versión 1: La versión 1 no expone una API de permisos pública. El nivel de permiso está incrustado directamente en los DTO de respuesta de recursos.

Uso de la API de Planning con formularios personalizados de Workfront

Puede llamar a la API de Planning desde un campo de búsqueda externa en un formulario personalizado de Workfront para mostrar datos de Planning directamente en objetos de Workfront. Para obtener más información, vea Ejemplos del campo de búsqueda externa en un formulario personalizado.

Recursos relacionados

Para obtener más documentación relacionada con la API, consulte también los siguientes artículos:

recommendation-more-help
workfront-help-quicksilver