{"openapi":"3.1.1","info":{"version":"2.0.0","title":"Entities","termsOfService":"https://www.productboard.com/msa/","license":{"name":"proprietary","identifier":"unlicensed"},"contact":{"name":"Productboard Support","url":"https://support.productboard.com","email":"support@productboard.com"},"description":"Productboard API v2 for managing the following Entities: \n  - product\n  - component\n  - feature\n  - subfeature\n  - initiative\n  - objective\n  - keyResult\n  - release\n  - releaseGroup\n  - user\n  - company\n\n## Configuration-Driven API\n\nThis API is universal and respects the configuration of your Productboard workspace. \nThe available fields, their types, and capabilities are determined by your workspace \nconfiguration, permissions, and business logic.\n\n## Field Discovery\n\nTo discover what fields are available for each entity type and their capabilities,\nuse the `/v2/entities/configurations` endpoint. This introspection endpoint returns:\n- Available fields (both standard and custom)\n- Field types and validation rules\n- Supported operations (read, create, update)\n- Available patch operations (set, addItems, removeItems, clear)\n- Required vs optional fields\n\n## Universal Entity Support\n\nThe API provides a unified interface for all listed entities. Each entity type \nsupports the same core operations (create, read, update, delete, search) while respecting \nthe specific configuration and field definitions for that entity type in your workspace.\n\n## Dynamic Field System\n\nCustom fields are identified by UUIDs and can be of various types (text, number, \nboolean, status, member, teams, tags, single_select, multi_select, rich_text, \ncalculated, date, health, work_progress). The exact fields available depend on \nyour workspace configuration.\n"},"servers":[{"url":"https://api.productboard.com/v2","description":"Production server"}],"security":[{"BearerAuth":[]},{"OAuth2":["entities:read","write:entities","entities:delete"]}],"tags":[{"name":"entities","description":"A resource for managing PM entities.\n"}],"paths":{"/entities/configurations":{"get":{"tags":["entities"],"summary":"List configurations","description":"Returns metadata for all available Entities type, including supported fields, patch operations, and validation rules.  \nUse this to programmatically discover what entity types are available for your workspace, which fields are required,\nwhat types are available, and how your workspace is configured.\n","operationId":"listEntityConfigurations","security":[{"BearerAuth":["entities:read"]}],"parameters":[{"name":"type[]","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/EntityType"}},"description":"You can specify multiple entity types for filtering."}],"responses":{"200":{"$ref":"#/components/responses/ConfigurationListResponse"},"400":{"$ref":"#/components/responses/BadRequestResponse"},"401":{"$ref":"#/components/responses/UnauthorizedResponse"},"403":{"$ref":"#/components/responses/ForbiddenResponse"},"404":{"$ref":"#/components/responses/NotFoundResponse"},"408":{"$ref":"#/components/responses/RequestTimeoutResponse"},"429":{"$ref":"#/components/responses/TooManyRequestsResponse"},"500":{"$ref":"#/components/responses/InternalServerErrorResponse"}}}},"/entities/configurations/{type}":{"get":{"tags":["entities"],"summary":"Get configuration","description":"Returns metadata for a specific Entities type, including supported fields, patch operations, and validation rules.  \nUse this to programmatically discover which fields are required, what types are available, and how your workspace is configured.\n","operationId":"getEntityConfiguration","security":[{"BearerAuth":["entities:read"]}],"parameters":[{"name":"type","in":"path","required":true,"schema":{"$ref":"#/components/schemas/EntityType"},"description":"The type of the entity"}],"responses":{"200":{"$ref":"#/components/responses/ConfigurationResponse"},"400":{"$ref":"#/components/responses/BadRequestResponse"},"401":{"$ref":"#/components/responses/UnauthorizedResponse"},"403":{"$ref":"#/components/responses/ForbiddenResponse"},"404":{"$ref":"#/components/responses/NotFoundResponse"},"408":{"$ref":"#/components/responses/RequestTimeoutResponse"},"429":{"$ref":"#/components/responses/TooManyRequestsResponse"},"500":{"$ref":"#/components/responses/InternalServerErrorResponse"}}}},"/entities":{"post":{"tags":["entities"],"summary":"Create entity","description":"Creates a new Entities of the specified type.  \nYou must specify the `type` (e.g. `feature`, `initiative`) and provide required fields based on your workspace configuration.\n\nUse the `/configuration` endpoint to discover what fields are available and required.\n\n## Limitations\n- The field names and availability depend on your workspace setup.\n","operationId":"createEntity","security":[{"BearerAuth":["entities:write"]}],"requestBody":{"$ref":"#/components/requestBodies/EntityCreateRequestBody"},"responses":{"201":{"$ref":"#/components/responses/ReferenceResponse"},"400":{"$ref":"#/components/responses/BadRequestResponse"},"401":{"$ref":"#/components/responses/UnauthorizedResponse"},"403":{"$ref":"#/components/responses/ForbiddenResponse"},"404":{"$ref":"#/components/responses/NotFoundResponse"},"408":{"$ref":"#/components/responses/RequestTimeoutResponse"},"422":{"$ref":"#/components/responses/UnprocessableEntityResponse"},"429":{"$ref":"#/components/responses/TooManyRequestsResponse"},"500":{"$ref":"#/components/responses/InternalServerErrorResponse"}}},"get":{"tags":["entities"],"summary":"List entities","description":"Retrieves a paginated list of Entities.\nYou can filter results, sort them, and control which fields are returned.\n\n> Without the `members:pii:read` scope, owner email fields are returned as `[redacted]`. Filtering by `owner[email]` requires the `members:pii:read` scope. Without the `users:pii:read` scope, user entity name and email fields are returned as `[redacted]`.\n\nUse the `type[]` query parameter to filter by one or more entity types (e.g. `type[]=feature&type[]=initiative`).\nUse the `fields` parameter to request only the fields you need.\n\n## Filter availability\nNot all filters apply to all entity types. For example, `status` filtering is only available\nfor types that have a status field (e.g. `feature`, `initiative`), and `parent[id]` only works\nfor types that have a parent relationship.\n\nUse `GET /v2/entities/configurations/{type}` to check which filters are supported for a specific type.\nThe `filters` array in the configuration response lists all available filter parameters,\ntheir exact query parameter names, and value schemas.\n\n## Limitations\n- Only the `AND` operator is supported when applying multiple filters. `OR`, `NOT`, or nested conditions are not supported.\n","operationId":"listEntities","security":[{"BearerAuth":["entities:read"]}],"parameters":[{"$ref":"#/components/parameters/PageCursor"},{"name":"type[]","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/EntityType"}},"description":"Filter by one or more entity types. Use array notation: `type[]=feature&type[]=initiative`.\nCurrently supported PM entity types:\n  - product\n  - component\n  - feature\n  - subfeature\n  - initiative\n  - objective\n  - keyResult\n  - release\n  - releaseGroup\n  - user\n  - company\n\nThe exact types available may vary based on the configuration of the workspace.\n"},{"$ref":"#/components/parameters/Fields"},{"name":"name","in":"query","description":"Filter by entity name","schema":{"type":"string"}},{"name":"owner[id]","in":"query","description":"Filter by owner ID","schema":{"$ref":"#/components/schemas/UUID"}},{"name":"owner[email]","in":"query","description":"Filter by owner email","schema":{"type":"string","format":"email"}},{"name":"status[id]","in":"query","description":"Filter by status ID","schema":{"$ref":"#/components/schemas/UUID"}},{"name":"status[name]","in":"query","description":"Filter by status name","schema":{"type":"string"}},{"name":"teams[id]","in":"query","description":"Filter by team ID. Mutually exclusive with teams[name].","schema":{"$ref":"#/components/schemas/UUID"}},{"name":"teams[name]","in":"query","description":"Filter by team name. Mutually exclusive with teams[id].","schema":{"type":"string"}},{"name":"archived","in":"query","description":"Filter by archived status (true/false)","schema":{"type":"boolean"}},{"name":"parent[id]","in":"query","description":"Filter by parent PM entity ID","schema":{"$ref":"#/components/schemas/UUID"}},{"name":"metadata[source][system]","in":"query","description":"Filter entities by the source system name from metadata.source.\nCan be combined with metadata[source][recordId] and other filters.\n","required":false,"schema":{"type":"string","example":"sfdc"}},{"name":"metadata[source][recordId]","in":"query","description":"Filter entities by the source record ID from metadata.source.\nCan be combined with metadata[source][system] and other filters.\n","required":false,"schema":{"type":"string","example":"A-1"}}],"responses":{"200":{"$ref":"#/components/responses/EntityListResponse"},"400":{"$ref":"#/components/responses/BadRequestResponse"},"401":{"$ref":"#/components/responses/UnauthorizedResponse"},"403":{"$ref":"#/components/responses/ForbiddenResponse"},"404":{"$ref":"#/components/responses/NotFoundResponse"},"408":{"$ref":"#/components/responses/RequestTimeoutResponse"},"429":{"$ref":"#/components/responses/TooManyRequestsResponse"},"500":{"$ref":"#/components/responses/InternalServerErrorResponse"}}}},"/entities/{id}":{"get":{"tags":["entities"],"summary":"Get entity","description":"Retrieves all configured fields and values for the specified Entities.\nUse this endpoint to load complete data for a single entity.\n\n> Without the `members:pii:read` scope, owner email is returned as `[redacted]`. Without the `users:pii:read` scope, user entity name and email fields are returned as `[redacted]`.\n\nYou can limit the fields returned using the `fields` query parameter.\n","operationId":"getEntity","security":[{"BearerAuth":["entities:read"]}],"parameters":[{"$ref":"#/components/parameters/Id"},{"$ref":"#/components/parameters/Fields"}],"responses":{"200":{"$ref":"#/components/responses/EntityResponse"},"400":{"$ref":"#/components/responses/BadRequestResponse"},"401":{"$ref":"#/components/responses/UnauthorizedResponse"},"403":{"$ref":"#/components/responses/ForbiddenResponse"},"404":{"$ref":"#/components/responses/NotFoundResponse"},"408":{"$ref":"#/components/responses/RequestTimeoutResponse"},"429":{"$ref":"#/components/responses/TooManyRequestsResponse"},"500":{"$ref":"#/components/responses/InternalServerErrorResponse"}}},"patch":{"tags":["entities"],"summary":"Update entity","description":"Updates one or more fields of a Entities.  \nUse `fields` for full replacement of values, or `patch` for granular changes like adding/removing items in list-type fields.  \nYou must use either `fields` or `patch` – not both.\n\nThe `patch` property supports these operations:\n- `set` – same as setting a value via `fields`\n- `addItems` – add one or more values to a list field\n- `removeItems` – remove values from a list field\n- `clear` – erase the value of the field\n\n## Limitations\n- Providing both `fields` and `patch` in the same request will return an error.\n","operationId":"updateEntity","security":[{"BearerAuth":["entities:write"]}],"parameters":[{"$ref":"#/components/parameters/Id"}],"requestBody":{"$ref":"#/components/requestBodies/EntityPatchRequestBody"},"responses":{"200":{"$ref":"#/components/responses/EntityUpdateResponse"},"400":{"$ref":"#/components/responses/BadRequestResponse"},"401":{"$ref":"#/components/responses/UnauthorizedResponse"},"403":{"$ref":"#/components/responses/ForbiddenResponse"},"404":{"$ref":"#/components/responses/NotFoundResponse"},"408":{"$ref":"#/components/responses/RequestTimeoutResponse"},"422":{"$ref":"#/components/responses/UnprocessableEntityResponse"},"429":{"$ref":"#/components/responses/TooManyRequestsResponse"},"500":{"$ref":"#/components/responses/InternalServerErrorResponse"}}},"delete":{"tags":["entities"],"summary":"Delete entity","description":"Deletes a Product Management entity by ID. This operation permanently removes the specified entity from your workspace.\n\nIf the entity has any child entities (e.g. a product with components, or a feature with subfeatures), those children will be **deleted automatically** as part of a cascading delete.\n\n**Use this endpoint with caution — deletion is irreversible.**\n","operationId":"deleteEntity","security":[{"BearerAuth":["entities:delete"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/UUID"},"description":"The ID of the PM entity to delete."}],"responses":{"204":{"$ref":"#/components/responses/NoContentResponse"},"400":{"$ref":"#/components/responses/BadRequestResponse"},"401":{"$ref":"#/components/responses/UnauthorizedResponse"},"403":{"$ref":"#/components/responses/ForbiddenResponse"},"404":{"$ref":"#/components/responses/NotFoundResponse"},"408":{"$ref":"#/components/responses/RequestTimeoutResponse"},"422":{"$ref":"#/components/responses/UnprocessableEntityResponse"},"429":{"$ref":"#/components/responses/TooManyRequestsResponse"},"500":{"$ref":"#/components/responses/InternalServerErrorResponse"}}}},"/entities/search":{"post":{"tags":["entities"],"summary":"Search entities","description":"Performs a filtered search over Entities using a POST request.\nThis endpoint supports the same filtering capabilities as `GET /v2/entities`, but allows a larger and more complex payload.\nIt's useful when filtering by a long list of foreign key IDs or when URL length limits become a problem.\n\n## Filter availability\nNot all filters apply to all entity types. For example, `status` filtering is only available\nfor types that have a status field (e.g. `feature`, `initiative`), and `parent` filtering only works\nfor types that have a parent relationship.\n\nUse `GET /v2/entities/configurations/{type}` to check which filters are supported for a specific type.\nThe `filters` array in the configuration response lists all available filter parameters,\ntheir exact query parameter names, and value schemas.\n\n> Filtering by `owner[email]` requires the `members:pii:read` scope.\n\n## Limitations\n- Only the `AND` operator is supported when applying multiple filters. `OR`, `NOT`, or nested conditions are not supported.\n- You can search only within one entity type at a time.\n","operationId":"performEntitiesSearch","security":[{"BearerAuth":["entities:read"]}],"parameters":[{"$ref":"#/components/parameters/PageCursor"}],"requestBody":{"$ref":"#/components/requestBodies/EntitySearchRequestBody"},"responses":{"200":{"$ref":"#/components/responses/EntityListResponse"},"400":{"$ref":"#/components/responses/BadRequestResponse"},"401":{"$ref":"#/components/responses/UnauthorizedResponse"},"403":{"$ref":"#/components/responses/ForbiddenResponse"},"404":{"$ref":"#/components/responses/NotFoundResponse"},"408":{"$ref":"#/components/responses/RequestTimeoutResponse"},"422":{"$ref":"#/components/responses/UnprocessableEntityResponse"},"429":{"$ref":"#/components/responses/TooManyRequestsResponse"},"500":{"$ref":"#/components/responses/InternalServerErrorResponse"}}}},"/entities/{id}/relationships":{"get":{"tags":["entities"],"summary":"List relationships","description":"Retrieves all relationships associated with a specific Entities.\nThis includes parent, child, and linked entities.\nUse this endpoint to understand how an entity is connected within the product hierarchy or planning structure.\n\nThe source entity is implicit (this entity).\n","operationId":"listEntityRelationships","security":[{"BearerAuth":["entities:read"]}],"parameters":[{"$ref":"#/components/parameters/Id"},{"in":"query","name":"type","schema":{"$ref":"#/components/schemas/EntityRelationshipType"},"required":false,"description":"The type of the relationship to filter by (optional)"},{"in":"query","name":"target[type]","schema":{"$ref":"#/components/schemas/EntityType"},"required":false,"description":"The entity type of the target to filter relationships by (optional)"},{"in":"query","name":"target[id]","schema":{"$ref":"#/components/schemas/UUID"},"required":false,"description":"The ID of the target entity to filter the relationships by (optional)"},{"$ref":"#/components/parameters/PageCursor"}],"responses":{"200":{"$ref":"#/components/responses/EntityRelationshipListResponse"},"400":{"$ref":"#/components/responses/BadRequestResponse"},"401":{"$ref":"#/components/responses/UnauthorizedResponse"},"403":{"$ref":"#/components/responses/ForbiddenResponse"},"404":{"$ref":"#/components/responses/NotFoundResponse"},"408":{"$ref":"#/components/responses/RequestTimeoutResponse"},"429":{"$ref":"#/components/responses/TooManyRequestsResponse"},"500":{"$ref":"#/components/responses/InternalServerErrorResponse"}}},"post":{"tags":["entities"],"summary":"Create relationship","description":"Creates a relationship between two Entities.  \nSpecify the source entity via the URL path (`{id}`), and the target entity and relationship type in the request body.\n\nThe `type` field determines the direction and nature of the relationship.  \nSupported values:\n- `parent` – declare the target as the parent of the source\n- `child` – declare the target as the child of the source\n- `link` – create a non-hierarchical connection between entities\n- `isBlockedBy` – create a dependency between entities\n- `isBlocking` – create a dependency between entities\n\n## Limitations\n- Only valid combinations of source and target entities are allowed for each relationship type.\n- The target entity must exist and be accessible.\n","operationId":"createEntityRelationship","security":[{"BearerAuth":["entities:write"]}],"parameters":[{"$ref":"#/components/parameters/Id"}],"requestBody":{"$ref":"#/components/requestBodies/EntityRelationshipCreateRequestBody"},"responses":{"201":{"$ref":"#/components/responses/EntityRelationshipResponse"},"400":{"$ref":"#/components/responses/BadRequestResponse"},"401":{"$ref":"#/components/responses/UnauthorizedResponse"},"403":{"$ref":"#/components/responses/ForbiddenResponse"},"404":{"$ref":"#/components/responses/NotFoundResponse"},"408":{"$ref":"#/components/responses/RequestTimeoutResponse"},"409":{"$ref":"#/components/responses/ConflictResponse"},"422":{"$ref":"#/components/responses/UnprocessableEntityResponse"},"429":{"$ref":"#/components/responses/TooManyRequestsResponse"},"500":{"$ref":"#/components/responses/InternalServerErrorResponse"}}}},"/entities/{id}/relationships/parent":{"put":{"tags":["entities"],"summary":"Set parent relationship","description":"Replaces the parent of a specific Entities.  \nSome entity types (such as features and subfeatures) are required to have a parent.  \nThis endpoint allows you to update the parent entity when the relationship changes.\n\nThe new parent is specified in the request body using the `target.id` field.\n\n## Limitations\n- Only valid parent relationships are allowed (e.g. feature → component, subfeature → feature).\n- The target entity must exist and be a valid parent type.\n- This will overwrite any existing parent relationship.\n","operationId":"replaceEntityRelationship","security":[{"BearerAuth":["entities:write"]}],"parameters":[{"$ref":"#/components/parameters/Id"}],"requestBody":{"$ref":"#/components/requestBodies/EntityParentRelationshipReplaceRequestBody"},"responses":{"200":{"$ref":"#/components/responses/EntityRelationshipReplaceResponse"},"400":{"$ref":"#/components/responses/BadRequestResponse"},"401":{"$ref":"#/components/responses/UnauthorizedResponse"},"403":{"$ref":"#/components/responses/ForbiddenResponse"},"404":{"$ref":"#/components/responses/NotFoundResponse"},"408":{"$ref":"#/components/responses/RequestTimeoutResponse"},"422":{"$ref":"#/components/responses/UnprocessableEntityResponse"},"429":{"$ref":"#/components/responses/TooManyRequestsResponse"},"500":{"$ref":"#/components/responses/InternalServerErrorResponse"}}}},"/entities/{id}/relationships/{type}/{targetId}":{"delete":{"tags":["entities"],"summary":"Delete relationship","description":"Removes a relationship between two Entities.  \nUse the `type` query parameter to indicate which kind of relationship you want to remove.\n","operationId":"deleteEntityRelationship","security":[{"BearerAuth":["entities:write"]}],"parameters":[{"$ref":"#/components/parameters/Id"},{"name":"type","in":"path","required":true,"schema":{"$ref":"#/components/schemas/EntityRelationshipType"}},{"name":"targetId","in":"path","required":true,"schema":{"$ref":"#/components/schemas/UUID"},"description":"The ID of the target entity to delete the relationship with."}],"responses":{"204":{"$ref":"#/components/responses/NoContentResponse"},"400":{"$ref":"#/components/responses/BadRequestResponse"},"401":{"$ref":"#/components/responses/UnauthorizedResponse"},"403":{"$ref":"#/components/responses/ForbiddenResponse"},"404":{"$ref":"#/components/responses/NotFoundResponse"},"408":{"$ref":"#/components/responses/RequestTimeoutResponse"},"422":{"$ref":"#/components/responses/UnprocessableEntityResponse"},"429":{"$ref":"#/components/responses/TooManyRequestsResponse"},"500":{"$ref":"#/components/responses/InternalServerErrorResponse"}}}},"/entities/fields/{id}/values":{"get":{"tags":["fields"],"summary":"List field values","description":"Returns a paginated list of allowed values for select-type and status fields (SINGLE_SELECT, MULTI_SELECT, TAG, STATUS).\nUse this endpoint to retrieve all available options for fields with many values, or when you need\nto paginate through all values.\n\nFor fields with fewer values (≤1000), the values are returned inline in the field response.\nFor fields with more values, the field response contains a reference to this endpoint.\n\nTag fields are returned using the same `SelectOptionValue` shape as MULTI_SELECT, since tags are multi-select internally.\n","operationId":"listEntityFieldValues","security":[{"BearerAuth":["entities:read"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Field identifier (UUID for custom fields, API name for default fields).","schema":{"type":"string"}},{"name":"assignedEntityType[]","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/EntityType"}},"style":"form","description":"Filter values by assigned entity type. Useful for status fields where different entity types have different status sets."},{"$ref":"#/components/parameters/PageCursor"}],"responses":{"200":{"$ref":"#/components/responses/FieldValuesListResponse"},"400":{"$ref":"#/components/responses/BadRequestResponse"},"401":{"$ref":"#/components/responses/UnauthorizedResponse"},"403":{"$ref":"#/components/responses/ForbiddenResponse"},"404":{"$ref":"#/components/responses/NotFoundResponse"},"408":{"$ref":"#/components/responses/RequestTimeoutResponse"},"429":{"$ref":"#/components/responses/TooManyRequestsResponse"},"500":{"$ref":"#/components/responses/InternalServerErrorResponse"}}},"post":{"tags":["fields"],"summary":"Create field value","description":"Creates a new value (option) for a select-type field (SINGLE_SELECT, MULTI_SELECT, TAG).\nThe field must be a select-type field, otherwise the request will be rejected.\n\n**STATUS fields are not supported.** Although status values look similar to single-select options,\nthey are managed through the status lifecycle (not this endpoint) and cannot be created here.\n\nIf `color` is omitted, the system automatically assigns the next available color.\n","operationId":"createEntityFieldValue","security":[{"BearerAuth":["fields:write"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Field identifier (UUID for custom fields, API name for default fields).","schema":{"type":"string"}}],"requestBody":{"$ref":"#/components/requestBodies/SelectOptionCreateRequestBody"},"responses":{"201":{"$ref":"#/components/responses/FieldValueReferenceResponse"},"400":{"$ref":"#/components/responses/BadRequestResponse"},"401":{"$ref":"#/components/responses/UnauthorizedResponse"},"403":{"$ref":"#/components/responses/ForbiddenResponse"},"404":{"$ref":"#/components/responses/NotFoundResponse"},"408":{"$ref":"#/components/responses/RequestTimeoutResponse"},"422":{"$ref":"#/components/responses/UnprocessableEntityResponse"},"429":{"$ref":"#/components/responses/TooManyRequestsResponse"},"500":{"$ref":"#/components/responses/InternalServerErrorResponse"}}}},"/entities/fields/{id}/values/{valueId}":{"patch":{"tags":["fields"],"summary":"Update field value","description":"Updates an existing value (option) for a select-type field (SINGLE_SELECT, MULTI_SELECT, TAG).\nOnly provided fields are updated, omitted fields remain unchanged.\n\n**STATUS fields are not supported.** Status values are managed through the status lifecycle\n(not this endpoint) and cannot be updated here.\n","operationId":"updateEntityFieldValue","security":[{"BearerAuth":["fields:write"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Field identifier (UUID for custom fields, API name for default fields).","schema":{"type":"string"}},{"name":"valueId","in":"path","required":true,"description":"The ID of the field value to update.","schema":{"$ref":"#/components/schemas/UUID"}}],"requestBody":{"$ref":"#/components/requestBodies/SelectOptionUpdateRequestBody"},"responses":{"200":{"$ref":"#/components/responses/FieldValueReferenceResponse"},"400":{"$ref":"#/components/responses/BadRequestResponse"},"401":{"$ref":"#/components/responses/UnauthorizedResponse"},"403":{"$ref":"#/components/responses/ForbiddenResponse"},"404":{"$ref":"#/components/responses/NotFoundResponse"},"408":{"$ref":"#/components/responses/RequestTimeoutResponse"},"422":{"$ref":"#/components/responses/UnprocessableEntityResponse"},"429":{"$ref":"#/components/responses/TooManyRequestsResponse"},"500":{"$ref":"#/components/responses/InternalServerErrorResponse"}}},"delete":{"tags":["fields"],"summary":"Delete field value","description":"Deletes a value (option) from a select-type field (SINGLE_SELECT, MULTI_SELECT, TAG).\n\n**STATUS fields are not supported.** Status values are managed through the status lifecycle\n(not this endpoint) and cannot be deleted here.\n\nBy default, deletion is rejected if the value is currently assigned to any entities.\nUse `force` to unset the value from all entities, or\n`replaceWith` to move all assignments to another value.\n\nThese two parameters are mutually exclusive - providing both results in a 400 error.\n","operationId":"deleteEntityFieldValue","security":[{"BearerAuth":["fields:write"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Field identifier (UUID for custom fields, API name for default fields).","schema":{"type":"string"}},{"name":"valueId","in":"path","required":true,"description":"The ID of the field value to delete.","schema":{"$ref":"#/components/schemas/UUID"}},{"name":"force","in":"query","required":false,"description":"When `true`, deletes the value and unsets it from all entities that currently use it.\nFor multi-select fields, only this specific option is removed from each entity's selection.\nMutually exclusive with `replaceWith`.\n","schema":{"type":"boolean","default":false}},{"name":"replaceWith","in":"query","required":false,"description":"ID of another value on the same field to reassign all current assignments to before deletion.\nMutually exclusive with `force`.\n","schema":{"$ref":"#/components/schemas/UUID"}}],"responses":{"204":{"$ref":"#/components/responses/NoContentResponse"},"400":{"$ref":"#/components/responses/BadRequestResponse"},"401":{"$ref":"#/components/responses/UnauthorizedResponse"},"403":{"$ref":"#/components/responses/ForbiddenResponse"},"404":{"$ref":"#/components/responses/NotFoundResponse"},"408":{"$ref":"#/components/responses/RequestTimeoutResponse"},"422":{"$ref":"#/components/responses/UnprocessableEntityResponse"},"429":{"$ref":"#/components/responses/TooManyRequestsResponse"},"500":{"$ref":"#/components/responses/InternalServerErrorResponse"}}}}},"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"API token authentication. Use your API token as the value of the Authorization header"},"OAuth2":{"type":"oauth2","description":"OAuth 2.0 authentication. Use this for user-authorized access to Productboard API.","flows":{"authorizationCode":{"authorizationUrl":"https://app.productboard.com/oauth/authorize","tokenUrl":"https://app.productboard.com/oauth/token","scopes":{"entities:read":"Read access to entities (features, components, initiatives, etc.)","write:entities":"Write access to create and modify entities","entities:delete":"Delete entities"}}}}},"schemas":{"ResourceReferenceAssign":{"type":"object","description":"Entity reference assignment using unique identifier for Entities.\n\n## Behavior\n- Simple ID-only assignment for referencing other entities\n- Used for establishing relationships between entities (parent, child, link)\n- UUID must match an existing entity in the workspace\n- Commonly used in relationship creation and updates\n","properties":{"id":{"$ref":"#/components/schemas/UUID"}}},"ResourceReference":{"type":"object","description":"# Description\nA common response object of entity reference.\n\n# Validation\n\n# Filtering\n","required":["id","type"],"properties":{"id":{"$ref":"#/components/schemas/UUID"},"type":{"$ref":"#/components/schemas/EntityType"},"links":{"$ref":"#/components/schemas/EntityLinks"}}},"Entity":{"description":"The entity payload containing the resource data and its relationships.\n","allOf":[{"$ref":"#/components/schemas/ResourceReference"},{"type":"object","properties":{"fields":{"$ref":"#/components/schemas/EntityFields"},"relationships":{"$ref":"#/components/schemas/EntityRelationships"},"metadata":{"$ref":"#/components/schemas/EntityMetadata"},"createdAt":{"$ref":"#/components/schemas/DateTimeFieldValue"},"updatedAt":{"$ref":"#/components/schemas/DateTimeFieldValue"}}}],"example":{"id":"195a1cb2-728f-4be8-900f-aebbd84d7944","type":"feature","fields":{"name":"Awesome Public API","owner":{"id":"56caede9-bae0-4521-9702-d2c553488caf","email":"john@doe.com"},"tags":[{"id":"95db5914-36b0-45e9-8f6d-7f11a950ac1d","name":"api"},{"id":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","name":"enterprise"}],"timeframe":{"startDate":"2023-10-01","endDate":"2023-10-31"}},"metadata":{"source":{"system":"Jira","recordId":"API-100"}},"relationships":{"data":[{"type":"parent","target":{"id":"318de52f-4e38-4c94-a550-a0d47a1f212e","type":"component","links":{"self":"https://api.productboard.com/v2/entities/318de52f-4e38-4c94-a550-a0d47a1f212e","html":"https://example.productboard.com/detail/UG1FbnRpdHk6MzE4ZGU1MmYtNGUzOC00Yzk0LWE1NTAtYTBkNDdhMWYyMTJl"}}}],"links":{"next":null}},"links":{"self":"https://api.productboard.com/v2/entities/195a1cb2-728f-4be8-900f-aebbd84d7944","html":"https://example.productboard.com/detail/UG1FbnRpdHk6MTk1YTFjYjItNzI4Zi00YmU4LTkwMGYtYWViYmQ4NGQ3OTQ0"},"createdAt":"2023-10-01T00:00:00Z","updatedAt":"2023-10-01T00:00:00Z"}},"EntityFields":{"type":"object","additionalProperties":{"anyOf":[{"$ref":"#/components/schemas/EntityFieldValue"},{"type":"null"}]}},"EntityFieldValue":{"description":"A list of possible value types of PM entity fields.\nThis should cover all possible fields of all PM entity types.\n","anyOf":[{"$ref":"#/components/schemas/BooleanFieldValue"},{"$ref":"#/components/schemas/DateFieldValue"},{"$ref":"#/components/schemas/DateTimeFieldValue"},{"$ref":"#/components/schemas/HealthFieldValue"},{"$ref":"#/components/schemas/MemberFieldValue"},{"$ref":"#/components/schemas/MultiSelectFieldValue"},{"$ref":"#/components/schemas/NameFieldValue"},{"$ref":"#/components/schemas/NumberFieldValue"},{"$ref":"#/components/schemas/NumberFieldValueWithMode"},{"$ref":"#/components/schemas/ProgressFieldValue"},{"$ref":"#/components/schemas/RichTextFieldValue"},{"$ref":"#/components/schemas/SingleSelectFieldValue"},{"$ref":"#/components/schemas/StatusFieldValue"},{"$ref":"#/components/schemas/TeamsFieldValue"},{"$ref":"#/components/schemas/TextFieldValue"},{"$ref":"#/components/schemas/TimeframeFieldValue"},{"$ref":"#/components/schemas/URLFieldValue"},{"$ref":"#/components/schemas/UUIDFieldValue"},{"$ref":"#/components/schemas/WorkProgressFieldValue"}]},"EntityCreateOrUpdateFields":{"type":"object","description":"A collection of fields that can be used to create or update a PM entity.\nIt is a subset of `EntityFields` that is used for creation or update operations.\n\n## Dual Format Support\nMost field types support two input formats:\n- **Simple format**: Direct value (e.g., `\"text\"`, `123`, `true`)\n- **Object format**: Value with metadata (e.g., `{\"value\": \"text\", \"metadata\": {...}}`)\n\n## Metadata Support\nCustom fields (identified by UUID) and specific field types (`domain`, `email`, `effort`) support \noptional metadata that allows tracking the external source of field values:\n- `source.system`: Name of the external system that provided the value\n- `source.recordId`: Identifier of the record in the external system\n- `isViewableOnly`: Whether the value is read-only from external source\n\nMetadata sent for other fields is ignored.\n","additionalProperties":{"anyOf":[{"$ref":"#/components/schemas/EntityCreateOrUpdateFieldValue"},{"type":"null"}]}},"EntityCreateOrUpdateFieldValue":{"description":"A list of create/update payloads for possible value types of a resource fields.\n","anyOf":[{"$ref":"#/components/schemas/BooleanFieldValue"},{"$ref":"#/components/schemas/BooleanFieldValueWithMetadata"},{"$ref":"#/components/schemas/DateFieldValue"},{"$ref":"#/components/schemas/DateFieldValueWithMetadata"},{"$ref":"#/components/schemas/DateTimeFieldValue"},{"$ref":"#/components/schemas/HealthUpdateFieldValue"},{"$ref":"#/components/schemas/HealthUpdateFieldValueWithMetadata"},{"$ref":"#/components/schemas/MemberFieldAssign"},{"$ref":"#/components/schemas/MultiSelectFieldAssign"},{"$ref":"#/components/schemas/NameFieldValue"},{"$ref":"#/components/schemas/NumberFieldValue"},{"$ref":"#/components/schemas/NumberFieldValueWithMetadata"},{"$ref":"#/components/schemas/NumberValueModeUpdate"},{"$ref":"#/components/schemas/ProgressFieldValue"},{"$ref":"#/components/schemas/ProgressFieldValueWithMetadata"},{"$ref":"#/components/schemas/RichTextFieldValue"},{"$ref":"#/components/schemas/RichTextFieldValueWithMetadata"},{"$ref":"#/components/schemas/SingleSelectFieldAssign"},{"$ref":"#/components/schemas/StatusFieldAssign"},{"$ref":"#/components/schemas/TeamFieldAssign"},{"$ref":"#/components/schemas/TextFieldValue"},{"$ref":"#/components/schemas/TextFieldValueWithMetadata"},{"$ref":"#/components/schemas/TimeframeFieldValue"},{"$ref":"#/components/schemas/TimeframeFieldValueWithMetadata"},{"$ref":"#/components/schemas/URLFieldValue"},{"$ref":"#/components/schemas/URLFieldValueWithMetadata"},{"$ref":"#/components/schemas/UUIDFieldValue"},{"$ref":"#/components/schemas/UUIDFieldValueWithMetadata"},{"$ref":"#/components/schemas/WorkProgressFieldValue"},{"$ref":"#/components/schemas/WorkProgressFieldValueWithMetadata"}]},"EntityPatch":{"type":"array","description":"A list of patch operations to perform on a PM entity field.\nEach operation can be one of `set`, `addItems`, `removeItems`, or `clear`.\n","items":{"oneOf":[{"$ref":"#/components/schemas/EntityPatchOperation"},{"$ref":"#/components/schemas/EntityPatchOperationClear"}]}},"EntityPatchOperation":{"type":"object","description":"This patch operation replaces the value of a field, or adds/removes values from it.\n","required":["op","path","value"],"additionalProperties":false,"properties":{"op":{"type":"string","description":"The operation to perform on the field.\nCan be one of `set`, `addItems`, `removeItems`.\n","enum":["set","addItems","removeItems"]},"path":{"type":"string","description":"The path to the field to be modified.\nIt is usually a field id (eg. \"tags\", \"owner\", \"00000000-0000-0000-0000-000000000000\").\n"},"value":{"$ref":"#/components/schemas/EntityCreateOrUpdateFieldValue"}}},"EntityPatchOperationClear":{"type":"object","description":"This patch operation clears the value of a field.\n","required":["op","path"],"additionalProperties":false,"properties":{"op":{"type":"string","description":"The operation to perform on the field.\nCan be one of `clear`.\n","enum":["clear"]},"path":{"type":"string","description":"The path to the field to be modified.\nIt is usually a field id (eg. \"tags\", \"owner\", \"00000000-0000-0000-0000-000000000000\").\n"}}},"EntitySearch":{"type":"object","description":"Request body for searching entities. Uses a structured `filter` object with nested field groups,\nand an optional `return` object to control the response shape.\n","additionalProperties":false,"properties":{"filter":{"$ref":"#/components/schemas/EntitySearchFilter"},"return":{"$ref":"#/components/schemas/EntitySearchReturn"}}},"EntitySearchFilter":{"type":"object","description":"Filter criteria for the entity search.\n","properties":{"type":{"type":"array","items":{"$ref":"#/components/schemas/EntityType"},"description":"Filter by one or more entity types. If empty or not provided, searches across all entity types.\n"},"id":{"type":"array","items":{"$ref":"#/components/schemas/UUID"},"description":"Filter by entity IDs."},"createdAt":{"$ref":"#/components/schemas/DateRangeFilter"},"updatedAt":{"$ref":"#/components/schemas/DateRangeFilter"},"fields":{"$ref":"#/components/schemas/EntitySearchFieldFilters"},"relationships":{"$ref":"#/components/schemas/EntitySearchRelationshipFilters"},"metadata":{"$ref":"#/components/schemas/EntitySearchMetadataFilter"}}},"EntitySearchFieldFilters":{"type":"object","description":"Filters applied to entity field values.\n\nIn addition to the standard fields listed below, you can filter by any custom field using its field ID\n(e.g., `\"domain\"` for predefined fields or a UUID for user-created custom fields). Custom field filter\nvalues must be objects conforming to `EntitySearchCustomFieldFilterValue`.\n\nPer field-type rules:\n\n- **Text fields**: matches entities whose field value contains the given string (case-insensitive).\n  - `\"notes\": { \"contains\": \"quarterly\" }`\n- **Number fields**: matches entities whose field value equals the given number.\n  - `\"budget\": { \"eq\": 100 }`\n- **Date fields**: matches entities whose field value equals the given date (ISO format: yyyy-MM-dd).\n  - `\"due\": { \"eq\": \"2025-12-31\" }`\n- **Single-select fields**: matches by option ID (UUID) or option name (string). Exactly one of `id` or `name` must be provided.\n  - By ID: `\"priority\": { \"id\": \"123e4567-e89b-12d3-a456-426614174000\" }`\n  - By name: `\"priority\": { \"name\": \"High Priority\" }`\n- **Multi-select fields**: match entities whose field value contains any or all of the specified options.\n  - `any` (OR semantics across options):\n    `\"tags\": { \"any\": [ { \"name\": \"Important\" }, { \"id\": \"…\" } ] }`\n  - `all` (AND semantics across options):\n    `\"tags\": { \"all\": [ { \"name\": \"Important\" }, { \"name\": \"Urgent\" } ] }`\n  - `any` and `all` are mutually exclusive.\n\nCustom field filtering requires `filter.type` to be specified.\nMultiple custom field entries are combined with AND semantics — all must match.\n","properties":{"name":{"$ref":"#/components/schemas/NameFieldValue"},"archived":{"$ref":"#/components/schemas/BooleanFieldValue"},"owner":{"type":"array","items":{"$ref":"#/components/schemas/MemberFieldAssign"}},"status":{"type":"array","items":{"$ref":"#/components/schemas/StatusFieldAssign"}},"creator":{"type":"array","description":"Filter by creator (not yet active).","items":{"$ref":"#/components/schemas/MemberFieldAssign"}},"teams":{"type":"array","description":"Filter by team. Each item identifies a team by `id` or `name`. Multiple teams use OR semantics:\nentities assigned to any of the given teams match.\n","items":{"$ref":"#/components/schemas/TeamFieldAssign"}}},"additionalProperties":{"$ref":"#/components/schemas/EntitySearchCustomFieldFilterValue"}},"EntitySearchCustomFieldFilterValue":{"type":"object","additionalProperties":false,"description":"Structured value for a single custom-field filter entry in `filter.fields`.\n\nThe populated key set must match the target field's type (rejected server-side otherwise):\n- TEXT: `{ contains }`\n- NUMBER: `{ eq }`\n- DATE: `{ eq }` (ISO yyyy-MM-dd)\n- SINGLE_SELECT: `{ id }` XOR `{ name }`\n- MULTI_SELECT: `{ any: [...] }` XOR `{ all: [...] }`, each item `{ id }` XOR `{ name }`\n\nThe presence filter works on any of the above field types and must be used on its own (no other key):\n- `{ isSet: true }` matches entities whose field has a non-empty value.\n- `{ isSet: false }` matches entities whose field has no value (unset or empty).\n","properties":{"id":{"type":"string","format":"uuid","description":"Single-select option ID."},"name":{"type":"string","description":"Single-select option name."},"contains":{"type":"string","description":"Substring to match against TEXT field values (case-insensitive)."},"eq":{"description":"Exact-match value. Number for NUMBER fields, ISO date string (yyyy-MM-dd) for DATE fields.\n"},"any":{"type":"array","description":"MULTI_SELECT OR-semantics — match entities whose field contains any of these options.","items":{"$ref":"#/components/schemas/EntitySearchCustomFieldFilterRef"}},"all":{"type":"array","description":"MULTI_SELECT AND-semantics — match entities whose field contains all of these options.","items":{"$ref":"#/components/schemas/EntitySearchCustomFieldFilterRef"}},"isSet":{"type":"boolean","description":"Presence filter, must be the only key. `true` matches entities whose field has a non-empty value; `false` matches entities whose field has no value (unset or empty)."}}},"EntitySearchCustomFieldFilterRef":{"type":"object","additionalProperties":false,"description":"Reference to a single select option. Exactly one of `id` or `name` must be provided.\n","properties":{"id":{"type":"string","format":"uuid","description":"Select-option ID."},"name":{"type":"string","description":"Select-option name."}}},"EntitySearchRelationshipFilters":{"type":"object","description":"Filters applied to entity relationships.\n","properties":{"parent":{"type":"array","items":{"$ref":"#/components/schemas/ResourceReferenceAssign"}},"customer":{"type":"array","description":"Filter by linked customer (not yet active).","items":{"$ref":"#/components/schemas/ResourceReferenceAssign"}}}},"EntitySearchMetadataFilter":{"type":"object","description":"Filters applied to entity metadata.\n","properties":{"source":{"type":"object","description":"Filter by the originating source system and/or record identifier. At least one of `system` or `recordId` must be provided.\n","properties":{"system":{"type":"string"},"recordId":{"type":"string"}}}}},"EntitySearchReturn":{"type":"object","description":"Controls which fields are returned in the response.\n","properties":{"fields":{"description":"Controls which fields are returned in the response to optimize bandwidth and tailor data to your needs.\n\n**Options:**\n- Not specified or `\"default\"`: Returns only fields with non-empty values\n- `\"all\"`: Returns all fields, including those with `null` values\n- `[\"name\", \"status\", ...]`: Returns only the specified fields\n\nFor detailed usage, examples, and field discovery, see [Response Field Control](https://developer.productboard.com/v2.0.0/reference/response-field-control).\n","anyOf":[{"type":"string","enum":["all","default"]},{"type":"array","items":{"type":"string"}}]}}},"DateRangeFilter":{"type":"object","description":"Filter by a date range.\n","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}}},"Configuration":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/EntityType"},"fields":{"type":"object","description":"A key-value definition fields that are part of the entity.\nKey represents field id (eg. name, description, or UUID)\n","additionalProperties":{"$ref":"#/components/schemas/ConfigurationField"}},"relationships":{"type":"object","description":"A key-value definition of possible relationships to other entities.\nKey represents the relationship type to other entities (child, parent, link)\n","additionalProperties":{"$ref":"#/components/schemas/ConfigurationRelationship"}},"filters":{"type":"array","description":"Available filter parameters for this entity type.\nUse these as query parameters on `GET /v2/entities` or as keys in `POST /v2/entities/search` request body.\nNot all entity types support the same filters — this list is type-specific.\n","items":{"$ref":"#/components/schemas/ConfigurationFilterParameter"}},"links":{"$ref":"#/components/schemas/ResourceLinks"}}},"ConfigurationFilterParameter":{"type":"object","description":"Describes a single filter parameter available for an entity type.\nThe `name` is the exact query parameter name to use when filtering entities.\n","required":["name","schema"],"properties":{"name":{"type":"string","description":"The query parameter name to use when filtering.\nUse this exact name as a query parameter on `GET /v2/entities`\nor as a key in the `POST /v2/entities/search` request body.\n","example":"owner[id]"},"field":{"type":"string","description":"The field ID this filter applies to, when the filter is based on a field.\n","example":"owner"},"relationship":{"type":"string","description":"The relationship key this filter applies to, when the filter is based on a relationship.\n","example":"parent"},"schema":{"$ref":"#/components/schemas/ConfigurationFilterSchema"},"requiredScopes":{"type":"array","description":"OAuth2 scopes required to use this filter,\nbeyond the standard entity scopes. Omitted when no additional scopes are needed.\n","items":{"type":"string"},"example":["members:pii:read"]}}},"ConfigurationFilterSchema":{"type":"object","description":"Describes the expected value type and format for a filter parameter.\n","required":["type"],"properties":{"type":{"type":"string","description":"The value type expected for this filter.","enum":["string","boolean","integer","number"]},"format":{"type":"string","description":"Additional format hint for the value.\n","enum":["uuid","email","date","date-time"]}}},"ConfigurationRelationship":{"type":"object","required":["targetType","cardinality","mandatory"],"properties":{"targetType":{"type":"array","items":{"$ref":"#/components/schemas/EntityType"}},"cardinality":{"type":"string","description":"Whether the entity can have single or multiple relationships of a given type\n","enum":["single","multiple"]},"mandatory":{"type":"boolean","description":"Specifies whether the entity must have such relationship to a target entity (e.g. it must have parent).\nIf a relationship is mandatory and can have multiple entity types as targets, then there must exist *at least\none* relationship to an entity that is of any of the specified types.\n\nFor example, a feature must have a parent that is either a component, or a product.\n","default":false}}},"ConfigurationFieldLifecycle":{"type":"object","description":"Defines the available operations for a field during different lifecycle stages.\nPossible lifecycle stages are `create`, `update` and `patch`.\n  - `create` defines what operations are allowed when creating an entity\n  - `update` defines what operations are allowed when using a simple patch via `data.fields`\n  - `patch` defines what operations are allowed when using a JSON Patch via `data.patch` array\n","additionalProperties":{"$ref":"#/components/schemas/ConfigurationFieldLifecycleOperation"}},"ConfigurationFieldLifecycleOperation":{"type":"object","description":"Defines the specific operations allowed during a lifecycle stage.\n","properties":{"set":{"type":"boolean","description":"Whether the field value can be set (assigned).\n","default":false},"clear":{"type":"boolean","description":"Whether the field value can be cleared (set to null/empty).\n","default":false},"addItems":{"type":"boolean","description":"Whether items can be added to the field (for list-type fields).\n","default":false},"removeItems":{"type":"boolean","description":"Whether items can be removed from the field (for list-type fields).\n","default":false}}},"ConfigurationFieldConstraints":{"type":"object","description":"Validation constraints and rules for the field.\n","properties":{"maxLength":{"type":"integer","description":"Maximum length for text fields.\n","minimum":0,"example":255},"maxSize":{"type":"integer","description":"Maximum size in bytes for content fields.\n","minimum":0,"example":1048576},"maxItems":{"type":"integer","description":"Maximum number of items for list-type fields.\n","minimum":0,"example":20},"allowEmpty":{"type":"boolean","description":"Whether empty string values are allowed.\n","default":true},"required":{"type":"boolean","description":"Whether the field is required.\n","default":false},"uniqueItems":{"type":"boolean","description":"Whether items in list-type fields must be unique.\n","default":false},"values":{"$ref":"#/components/schemas/ConfigurationFieldConstraintsValues"}}},"ConfigurationFieldConstraintsValues":{"type":"object","description":"Defines constraints on allowed values for the field.\n","properties":{"query":{"$ref":"#/components/schemas/ConfigurationFieldConstraintsQuery"}}},"ConfigurationFieldConstraintsQuery":{"type":"object","description":"Query-based value constraints referencing external endpoints.\n","properties":{"links":{"type":"object","properties":{"list":{"type":"string","format":"uri","description":"URL endpoint that provides the list of allowed values.\n","example":"https://api.productboard.com/v2/members?active=true&role=product_manager"}}}}},"ConfigurationFieldDefaultValue":{"type":"object","description":"Default value configuration for the field.\n","oneOf":[{"$ref":"#/components/schemas/ConfigurationFieldDefaultValueObject"},{"$ref":"#/components/schemas/ConfigurationFieldDefaultValueSource"}]},"ConfigurationFieldDefaultValueObject":{"type":"object","description":"Explicit default value object.\n","properties":{"value":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/UUID"},"name":{"type":"string","example":"New Idea"}}}}},"ConfigurationFieldDefaultValueSource":{"type":"object","description":"Runtime-computed default value (e.g., authenticated user).\n","required":["type","source"],"properties":{"type":{"type":"string","enum":["runtime"],"example":"runtime"},"source":{"type":"string","enum":["authenticatedMember"],"example":"authenticatedMember"}}},"FieldValues":{"type":"object","description":"Configuration for field values. Provides inline data for small sets\nand/or a reference link for large/dynamic sets.\n\nInterpretation:\n- `data` only → Complete set inline\n- `data` + `links.next` → Preview in data, full list at link\n- `data` empty + `links.next` → Fully dynamic, fetch from link\n","required":["data"],"properties":{"data":{"type":"array","description":"Inline value options. Can be empty.\nFor small sets: contains all values.\nFor large sets: contains preview or empty.\n","items":{"$ref":"#/components/schemas/FieldValueItem"}},"links":{"type":"object","properties":{"next":{"type":"string","format":"uri","description":"URL to fetch values. Present only when more values exist\nbeyond what's in `data`. Supports pagination via `pageCursor`.\n"}}}},"example":{"data":[{"id":"a09fccc8-a4ac-4262-84f1-68ad77f82265","name":"High"},{"id":"043d163b-fda2-47fd-82ed-4026ad1965e6","name":"Medium"},{"id":"b2debcbc-5034-4768-aff4-9f52e6c8427e","name":"Low"}]}},"FieldValueItem":{"type":"object","description":"A single allowed value for a select-type or status field.\n","required":["id","name"],"properties":{"id":{"type":"string","format":"uuid","description":"Unique identifier of the value."},"name":{"type":"string","description":"Display name of the value."},"assignedEntityTypes":{"type":"array","description":"Entity types this value is assigned to. Only present for status field values.\n","items":{"$ref":"#/components/schemas/EntityType"}}},"examples":[{"summary":"Status field value with assigned entity types","value":{"id":"a09fccc8-a4ac-4262-84f1-68ad77f82265","name":"In Progress","assignedEntityTypes":["feature","initiative"]}},{"summary":"Simple select field value","value":{"id":"b2debcbc-5034-4768-aff4-9f52e6c8427e","name":"High"}}]},"SelectOptionColor":{"type":"string","description":"Named color for a select option.","enum":["red","blue","green","yellow","purple","gray","lime","pink"]},"SelectOptionValue":{"type":"object","description":"A select option value resource (for SINGLE_SELECT, MULTI_SELECT, TAG fields).","required":["id","fields"],"properties":{"id":{"type":"string","format":"uuid","description":"Unique identifier of the select option."},"fields":{"type":"object","additionalProperties":false,"required":["name","color"],"properties":{"name":{"type":"string","description":"Display name of the select option."},"color":{"$ref":"#/components/schemas/SelectOptionColor","description":"Color of the option. Primarily meaningful for TAG fields, where color drives the tag's visual\npresentation. For SINGLE_SELECT and MULTI_SELECT options, `color` is returned but is typically\noptional metadata — set only if the caller provided one at create/update time.\n"}}}},"example":{"id":"a09fccc8-a4ac-4262-84f1-68ad77f82265","fields":{"name":"High Priority","color":"red"}}},"StatusValue":{"type":"object","description":"A status value resource. Only present for status fields where values can be scoped to entity types.","required":["id","fields"],"properties":{"id":{"type":"string","format":"uuid","description":"Unique identifier of the status value."},"fields":{"type":"object","additionalProperties":false,"required":["name"],"properties":{"name":{"type":"string","description":"Display name of the status value."},"assignedEntityTypes":{"type":"array","description":"Entity types this status value is assigned to.","items":{"$ref":"#/components/schemas/EntityType"}}}}},"example":{"id":"a09fccc8-a4ac-4262-84f1-68ad77f82265","fields":{"name":"In Progress","assignedEntityTypes":["feature","initiative"]}}},"FieldValue":{"description":"A field value resource. The shape depends on the field type:\n- Select-type fields (SINGLE_SELECT, MULTI_SELECT, TAG): `SelectOptionValue`\n- Status fields: `StatusValue`\n","oneOf":[{"$ref":"#/components/schemas/SelectOptionValue"},{"$ref":"#/components/schemas/StatusValue"}]},"ConfigurationField":{"type":"object","description":"Field configuration with inline JSON schema and path for API operations.\nThis structure is used for all fields, including nested properties.\n","required":["id","name","path","schema"],"properties":{"id":{"type":"string","description":"The unique identifier of the field. For simple fields like \"name\", \nfor nested fields like \"timeframe.startDate\", for UUID custom fields.\n","pattern":"^([a-z][a-zA-Z]*(\\.[a-z][a-zA-Z]*)?)|([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$","example":"name"},"name":{"type":"string","description":"The display name of the field.\n","example":"Name"},"path":{"type":"string","description":"The path used for API operations. Uses \"/fields/\" prefix and nested paths for properties.\n","pattern":"^/fields/[a-z][a-zA-Z]*(/[a-z][a-zA-Z]*)?$|^/fields/[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$","example":"/fields/name"},"schema":{"type":"object","description":"Inline JSON Schema that defines this field's structure.\n","example":{"type":"string"}},"links":{"$ref":"#/components/schemas/ResourceLinks"},"lifecycle":{"$ref":"#/components/schemas/ConfigurationFieldLifecycle"},"constraints":{"$ref":"#/components/schemas/ConfigurationFieldConstraints"},"default":{"$ref":"#/components/schemas/ConfigurationFieldDefaultValue"},"values":{"$ref":"#/components/schemas/FieldValues"}}},"EntityRelationships":{"description":"A collection of relationships between this entity and other entities.\nThe list is paginated, to see the rest of the relationships follow the URL contained in the\n`links.next` attribute.\n","type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/EntityRelationship"}},"links":{"$ref":"#/components/schemas/ListLinks"}}},"EntityRelationship":{"description":"Represents a relationship between two entities.\nThe source entity is implicit from the request context (the entity being queried).\n","type":"object","required":["type","target"],"properties":{"type":{"$ref":"#/components/schemas/EntityRelationshipType"},"target":{"$ref":"#/components/schemas/ResourceReference"}}},"EntityRelationshipType":{"type":"string","description":"The type of the relationship to be established.\n\n## Relationships\n- `parent`: Hierarchical relationship indicating the entity is a child of the target\n- `child`: Hierarchical relationship indicating the entity contains the target\n- `link`: Generic bidirectional relationship without semantic meaning\n- `isBlockedBy`: Dependency relationship indicating the entity cannot proceed until the target is resolved\n- `isBlocking`: Dependency relationship indicating the entity prevents progress on the target\n","enum":["parent","child","link","isBlockedBy","isBlocking"],"default":"link"},"EntityRelationshipCreate":{"type":"object","description":"Payload representing a new relationship towards target entity.\n","required":["target"],"properties":{"type":{"$ref":"#/components/schemas/EntityRelationshipType"},"target":{"$ref":"#/components/schemas/ResourceReferenceAssign"}}},"EntityType":{"type":"string","description":"Supported Entity types:\n  - product\n  - component\n  - feature\n  - subfeature\n  - initiative\n  - objective\n  - keyResult\n  - release\n  - releaseGroup\n  - company\n  - user\n\nThe exact types available may vary based on the configuration of the workspace.\n","enum":["product","component","feature","subfeature","initiative","objective","keyResult","release","releaseGroup","company","user"]},"Field":{"type":"object","allOf":[{"$ref":"#/components/schemas/FieldReference"},{"type":"object","required":["fields"],"properties":{"fields":{"type":"object","required":["name","assignedEntityTypes"],"properties":{"name":{"type":"string","description":"Name of the field."},"description":{"$ref":"#/components/schemas/RichTextFieldValue","description":"Optional description of the field."},"assignedEntityTypes":{"type":"array","items":{"$ref":"#/components/schemas/EntityType"}},"values":{"$ref":"#/components/schemas/FieldValues"}}}}}],"examples":[{"summary":"Field with inline values (≤1000 options)","value":{"id":"be0f15ed-7e9c-4815-a974-adced8c55602","type":"MULTI_SELECT","fields":{"name":"Custom multi-select field","description":"","assignedEntityTypes":["feature","subfeature"],"values":{"data":[{"id":"61583659-de77-4c70-9715-c88a8477d7d7","name":"Another"},{"id":"c8735e5c-a1a9-43da-b745-6b3ec51a611f","name":"First"},{"id":"55bf52b4-b725-45a9-9b9a-abc4ace3c1fc","name":"Second"},{"id":"766740e7-5cbd-41d9-a75b-b6b0a2d9da77","name":"Third"}]}}}},{"summary":"Field with referenced values (>1000 options)","value":{"id":"be0f15ed-7e9c-4815-a974-adced8c55602","type":"SINGLE_SELECT","fields":{"name":"Customer Tags","description":"","assignedEntityTypes":["feature"],"values":{"data":[],"links":{"next":"https://api.productboard.com/v2/entities/fields/be0f15ed-7e9c-4815-a974-adced8c55602/values"}}}}}]},"FieldReference":{"type":"object","description":"# Description\nA common response object of field reference.\n","required":["id","type"],"properties":{"id":{"$ref":"#/components/schemas/UUID"},"type":{"$ref":"#/components/schemas/FieldCreateType"},"links":{"$ref":"#/components/schemas/ResourceLinks"}}},"FieldOrigin":{"type":"string","description":"Origin of the field definition.","enum":["default","custom"]},"ApiSource":{"type":"object","description":"Value sourced from an external API or integration.\n\n## Behavior\n- `system`: Optional display name for the external system (e.g., \"Salesforce\", \"Jira\")\n- `recordId`: Optional combined ID in format `com.organization:recordId` (e.g., `com.salesforce:acc-12345`)\n- `url`: Optional URL linking to the record in the external system\n","properties":{"system":{"type":"string","example":"Salesforce"},"recordId":{"type":"string","example":"com.salesforce:acc-12345"},"url":{"type":"string","format":"uri","maxLength":1024,"example":"https://salesforce.com/acc-12345"}}},"ValueMetadata":{"type":"object","description":"Metadata associated with a field value, including its source and visibility settings.\n\n## Behavior\n- `source`: Origin of the value from external API\n- `isViewableOnly`: If true, value cannot be edited through the API (read-only)\n","required":["source","isViewableOnly"],"properties":{"source":{"$ref":"#/components/schemas/ApiSource"},"isViewableOnly":{"type":"boolean","description":"If true, this value is read-only and cannot be modified","example":false}}},"EntityMetadata":{"type":"object","description":"Metadata associated with an entity, including its source.\n","properties":{"source":{"$ref":"#/components/schemas/ApiSource"}}},"EntityUpdateMetadata":{"type":"object","description":"Metadata supplied when updating an entity.\n","properties":{"source":{"$ref":"#/components/schemas/ApiSourceUpdate"}}},"ApiSourceUpdate":{"type":"object","description":"External source patch applied on update, following JSON Merge Patch semantics per field.\n\n## Behavior\n- field omitted: the persisted value is left unchanged\n- field sent as `null`: the persisted value is cleared\n- field sent with a value: the persisted value is set\n","properties":{"system":{"type":["string","null"],"example":"Salesforce"},"recordId":{"type":["string","null"],"example":"com.salesforce:acc-12345"},"url":{"type":["string","null"],"format":"uri","maxLength":1024,"example":"https://salesforce.com/acc-12345"}}},"FieldCreateType":{"type":"string","enum":["text","number"]},"UUIDFieldValue":{"type":"string","format":"uuid","description":"Universally unique identifier (UUID) for Entities.\n\n## Behavior\n- Validates for proper UUID structure and format\n- Used for entity IDs and references to other entities\n- Case-insensitive but typically lowercase\n"},"UUIDFieldValueWithMetadata":{"type":"object","description":"UUID value with optional metadata about its source and visibility.\n","required":["value"],"properties":{"value":{"type":"string","format":"uuid","description":"The UUID value","example":"123e4567-e89b-12d3-a456-426614174000"},"metadata":{"$ref":"#/components/schemas/ValueMetadata"}}},"TextFieldValue":{"type":"string","minLength":0,"maxLength":255,"description":"Short text content for Entities with a 255 character limit.\n\n## Behavior\n- Accepts any string content up to 255 characters\n- Can be empty string (minLength: 0)\n- Supports UTF-8 encoding for international characters\n- Used for short descriptions, labels, identifiers, and status messages\n","example":"Example String"},"TextFieldValueWithMetadata":{"type":"object","description":"Text value with optional metadata about its source and visibility.\n","required":["value"],"properties":{"value":{"type":"string","minLength":0,"maxLength":255,"description":"The actual text content","example":"email.test2"},"metadata":{"$ref":"#/components/schemas/ValueMetadata"}}},"NumberFieldValue":{"type":"number","description":"Numeric values for quantitative data in Entities.\n\n## Behavior\n- Accepts both integers and floating-point numbers\n- Supports positive, negative, and zero values\n- No inherent minimum or maximum constraints (field-specific limits may apply)\n- Used for effort estimation, scores, ratings, budgets, and metrics\n","example":123.45},"NumberFieldValueWithMetadata":{"type":"object","description":"Numeric value with optional metadata about its source and visibility.\n\n## Usage\nNumber fields can be set using either:\n- Simple format: `\"effort\": 5`\n- Wrapped value format: `\"effort\": {\"value\": 5, \"metadata\": {...}}`\n\nUse the object format when you need to track the source of the value or mark it as read-only.\n","required":["value"],"properties":{"value":{"type":"number","description":"The numeric value","example":123.45},"metadata":{"$ref":"#/components/schemas/ValueMetadata"}}},"NumberFieldValueMode":{"type":"string","description":"Whether the number field value is calculated automatically or entered manually.\n- `manual`: The field displays and uses the manually entered value\n- `calculated`: The field displays and uses an automatically calculated value (e.g., from child entities)\n","enum":["manual","calculated"],"example":"manual"},"NumberValueModeUpdate":{"type":"object","description":"Update the calculation mode of a number field without changing its value.\n- When switching to `calculated`, the system will compute the value automatically\n- When switching to `manual`, the previously set manual value will be used\n","required":["valueMode"],"properties":{"valueMode":{"$ref":"#/components/schemas/NumberFieldValueMode"},"metadata":{"$ref":"#/components/schemas/ValueMetadata"}}},"NumberFieldValueWithMode":{"type":"object","description":"Numeric value with its calculation mode, returned when reading entities.\n- `value`: The numeric value (can be null)\n- `mode`: Indicates whether the value is `manual` (entered by user) or `calculated` (computed automatically)\n\n## When This Is Returned\nThe API returns this format when the number field has mode information available.\nFor simple cases without mode tracking, the API returns a plain number (see `NumberFieldValue`).\n","required":["mode"],"properties":{"value":{"type":"number","description":"The numeric value","example":123.45},"mode":{"$ref":"#/components/schemas/NumberFieldValueMode"}}},"RichTextFieldValue":{"type":"string","minLength":0,"maxLength":524288,"description":"HTML-formatted text content for Entities.\n\n## Behavior\n- Accepts HTML-formatted strings up to 524KB (524,288 characters)\n- Can be empty string (minLength: 0)\n- Supports rich formatting including bold, italic, links, lists\n  - Follow [Rich Text Formatting guidelines](https://developer.productboard.com/reference/richtext)\n- Used for detailed descriptions, specifications, documentation, and formatted comments\n","example":"<p>This is <b>rich</b> text.</p>"},"RichTextFieldValueWithMetadata":{"type":"object","description":"HTML-formatted text content with optional metadata about its source and visibility.\n","required":["value"],"properties":{"value":{"type":"string","minLength":0,"maxLength":524288,"description":"The HTML-formatted text content","example":"<p>This is <b>rich</b> text.</p>"},"metadata":{"$ref":"#/components/schemas/ValueMetadata"}}},"DateFieldValue":{"type":"string","format":"date","description":"Calendar date in ISO 8601 format (YYYY-MM-DD) for Entities.\n\n## Behavior\n- Must follow ISO 8601 date format: YYYY-MM-DD\n- Date-only format without time component\n- Validates for proper date structure and valid calendar dates\n- Used for due dates, milestones, release dates, and timeframe boundaries\n- Timezone-independent (date only)\n","example":"2023-10-01"},"DateFieldValueWithMetadata":{"type":"object","description":"Calendar date with optional metadata about its source and visibility.\n","required":["value"],"properties":{"value":{"type":"string","format":"date","description":"The date in ISO 8601 format (YYYY-MM-DD)","example":"2023-10-01"},"metadata":{"$ref":"#/components/schemas/ValueMetadata"}}},"GranularityFieldValue":{"type":"string","enum":["year","quarter","month","day"],"description":"Time granularity level for timeframe display and interpretation.\n\n## Behavior\n- Must be one of: `year`, `quarter`, `month`, `day`\n- Affects how timeframe dates are displayed and interpreted in the UI\n- Used in conjunction with TimeframeFieldValue to specify precision level\n- Supports different planning scales from daily sprints to annual strategies\n- Exact string matching for filtering\n"},"DateTimeFieldValue":{"type":"string","format":"date-time","description":"Date and time in ISO 8601 format for Entities.\n\n## Behavior\n- Must follow ISO 8601 datetime format: YYYY-MM-DDTHH:mm:ss.sssZ\n- Includes both date and time components with timezone information\n- Validates for proper datetime structure and valid values\n- Used for timestamps, creation dates, and precise time tracking\n","example":"2023-10-01T12:00:00Z"},"URLFieldValue":{"type":"string","format":"uri","description":"Valid URL for Entities.\n\n## Behavior\n- Must be a valid URL following URI format standards\n- Supports various protocols (http, https, ftp, etc.)\n- Validates for proper URL structure and format\n- Used for external links, documentation references, and resource URLs\n","example":"https://example.com"},"URLFieldValueWithMetadata":{"type":"object","description":"URL value with optional metadata about its source and visibility.\n","required":["value"],"properties":{"value":{"type":"string","format":"uri","description":"The URL value","example":"https://example.com"},"metadata":{"$ref":"#/components/schemas/ValueMetadata"}}},"NameFieldValue":{"type":"string","minLength":0,"maxLength":255,"description":"Entity names and titles for Entities with a 255 character limit.\n\n## Behavior\n- Accepts any string content up to 255 characters\n- Can be empty string, though typically entity names are required\n- Supports UTF-8 encoding for international characters\n- Used for entity titles, display labels, and primary identifiers\n","example":"Example Name"},"StatusFieldValue":{"type":"object","description":"Status information for Entities with ID and display name.\n\n## Behavior\n- Contains both unique `id` (UUID) and human-readable `name`\n- Used for workflow states, progress indicators, and entity classifications\n- Both fields are required for complete status representation\n- Supports filtering by status ID or name\n- Status values are workspace-specific and configurable\n","required":["id","name"],"properties":{"id":{"$ref":"#/components/schemas/UUID"},"name":{"$ref":"#/components/schemas/NameFieldValue"}}},"StatusFieldAssign":{"description":"Status assignment allowing identification by ID or name.\n\n## Behavior\n- Supports two identification methods: unique ID (UUID) or human-readable name\n- Use ID for precision and consistency across API calls\n- Use name for convenience when ID is unknown\n- Names must match existing status values in workspace configuration\n","oneOf":[{"$ref":"#/components/schemas/StatusFieldAssignById"},{"$ref":"#/components/schemas/StatusFieldAssignByName"}]},"StatusFieldAssignById":{"type":"object","description":"Status assignment using unique identifier.\n\n## Behavior\n- Identifies status by UUID for precision and consistency\n- Preferred method for API integrations and automated workflows\n- UUID must match an existing status in workspace configuration\n","required":["id"],"properties":{"id":{"$ref":"#/components/schemas/UUID"},"metadata":{"$ref":"#/components/schemas/ValueMetadata"}}},"StatusFieldAssignByName":{"type":"object","description":"Status assignment using human-readable name.\n\n## Behavior\n- Identifies status by display name for convenience\n- Useful when status ID is unknown or in manual workflows\n- Name must exactly match an existing status in workspace configuration\n- Case-sensitive string matching\n","required":["name"],"properties":{"name":{"$ref":"#/components/schemas/NameFieldValue"},"metadata":{"$ref":"#/components/schemas/ValueMetadata"}}},"MemberFieldValue":{"type":"object","description":"Workspace member information.\n\n## Behavior\n- Contains both unique `id` (UUID) and `email` for member identification\n- Used for ownership, assignment, and team member references\n- Both fields are required for complete member representation\n- Email serves as human-readable identifier\n","required":["id","email"],"properties":{"id":{"$ref":"#/components/schemas/UUID"},"email":{"$ref":"#/components/schemas/NameFieldValue"}}},"MemberFieldAssign":{"description":"Member assignment allowing identification by ID or email address.\n\n## Behavior\n- Supports two identification methods: unique ID (UUID) or email address\n- Use ID for precision and consistency across API calls\n- Use email for convenience when ID is unknown\n- Email must match existing member in workspace\n- Provide either `id` or `email`; providing both is rejected with a validation error\n","anyOf":[{"$ref":"#/components/schemas/MemberAssignById"},{"$ref":"#/components/schemas/MemberAssignByEmail"}]},"MemberAssignById":{"type":"object","description":"Member assignment using unique identifier.\n\n## Behavior\n- Identifies member by UUID for precision and consistency\n- Preferred method for API integrations and automated workflows\n- UUID must match an existing member in workspace\n","required":["id"],"properties":{"id":{"$ref":"#/components/schemas/UUID"},"metadata":{"$ref":"#/components/schemas/ValueMetadata"}}},"MemberAssignByEmail":{"type":"object","description":"Member assignment using email address.\n\n## Behavior\n- Identifies member by email address for convenience\n- Useful when member ID is unknown or in manual workflows\n- Email must match an existing member in workspace\n- Must be valid email format\n","required":["email"],"properties":{"email":{"type":"string","format":"email","example":"john@doe.com"},"metadata":{"$ref":"#/components/schemas/ValueMetadata"}}},"TeamsFieldValue":{"type":"array","description":"Collection of teams associated with Entities.\n\n## Behavior\n- Array of TeamFieldValue objects, each containing team ID and name\n- Can be empty array if no teams are assigned\n- Used for multi-team assignments and collaborations\n- Supports adding/removing individual teams via patch operations\n","items":{"$ref":"#/components/schemas/TeamFieldValue"},"example":[{"id":"95db5914-36b0-45e9-8f6d-7f11a950ac1d","name":"Product Team"},{"id":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","name":"Engineering Team"}]},"TeamFieldValue":{"type":"object","description":"Individual team information with ID and display name.\n\n## Behavior\n- Contains both unique `id` (UUID) and human-readable `name`\n- Used within TeamsFieldValue arrays for team assignments\n- Both fields are required for complete team representation\n- Team values are workspace-specific and configurable\n- Supports filtering by team ID or name\n","required":["id","name"],"properties":{"id":{"$ref":"#/components/schemas/UUID"},"name":{"$ref":"#/components/schemas/NameFieldValue"}}},"TeamFieldAssign":{"description":"Team assignment allowing identification by ID or name.\n\n## Behavior\n- Supports two identification methods: unique ID (UUID) or human-readable name\n- Use ID for precision and consistency across API calls\n- Use name for convenience when ID is unknown\n- Names must match existing team values in workspace configuration\n","oneOf":[{"$ref":"#/components/schemas/TeamAssignById"},{"$ref":"#/components/schemas/TeamAssignByName"}]},"TeamAssignById":{"type":"object","description":"Team assignment using unique identifier.\n\n## Behavior\n- Identifies team by UUID for precision and consistency\n- Preferred method for API integrations and automated workflows\n- UUID must match an existing team in workspace configuration\n","required":["id"],"properties":{"id":{"$ref":"#/components/schemas/UUID"},"metadata":{"$ref":"#/components/schemas/ValueMetadata"}}},"TeamAssignByName":{"type":"object","description":"Team assignment using human-readable name.\n\n## Behavior\n- Identifies team by display name for convenience\n- Useful when team ID is unknown or in manual workflows\n- Name must exactly match an existing team in workspace configuration\n- Case-sensitive string matching\n","required":["name"],"properties":{"name":{"type":"string","example":"Product Team"},"metadata":{"$ref":"#/components/schemas/ValueMetadata"}}},"TeamsFieldAssign":{"type":"array","description":"Collection of team assignments allowing identification by ID or name.\n\n## Behavior\n- Array of team assignments, each identified by ID or name\n- Can be empty array if no teams are assigned\n- Each item can use either ID (for precision) or name (for convenience)\n- All referenced teams must exist in workspace configuration\n- Supports adding/removing individual teams via patch operations\n","items":{"oneOf":[{"$ref":"#/components/schemas/TeamAssignById"},{"$ref":"#/components/schemas/TeamAssignByName"}]},"example":[{"id":"95db5914-36b0-45e9-8f6d-7f11a950ac1d"},{"name":"Product Team"}]},"TimeframeFieldValue":{"type":"object","description":"Time period with start and end dates and granularity level for Entities.\n\nThis object contains:\n- A `startDate` marking the beginning of the timeframe\n- An `endDate` marking the conclusion of the timeframe\n- A `granularity` indicating the time precision level (`year`, `quarter`, `month`, `day`)\n\n## Behavior\n- Both `startDate` and `endDate` use ISO 8601 date format (YYYY-MM-DD)\n- `endDate` must be on or after `startDate`\n- `granularity` affects how dates are displayed and interpreted in the UI\n- All fields are optional, allowing partial timeframe specification\n- Used for planning, scheduling, time-based filtering, and defining work periods for initiatives, features, and releases\n- Supports different planning granularities from daily sprints to quarterly planning\n\n## Examples\n\n**Monthly planning timeframe:**\n```json\n{\n  \"startDate\": \"2024-01-01\",\n  \"endDate\": \"2024-01-31\",\n  \"granularity\": \"month\"\n}\n```\n\n**Quarterly initiative timeframe:**\n```json\n{\n  \"startDate\": \"2024-01-01\",\n  \"endDate\": \"2024-03-31\",\n  \"granularity\": \"quarter\"\n}\n```\n\n**Annual strategic timeframe:**\n```json\n{\n  \"startDate\": \"2024-01-01\",\n  \"endDate\": \"2024-12-31\",\n  \"granularity\": \"year\"\n}\n```\n\n**Sprint timeframe:**\n```json\n{\n  \"startDate\": \"2024-01-15\",\n  \"endDate\": \"2024-01-29\",\n  \"granularity\": \"day\"\n}\n```\n","properties":{"startDate":{"$ref":"#/components/schemas/DateFieldValue"},"endDate":{"$ref":"#/components/schemas/DateFieldValue"},"granularity":{"$ref":"#/components/schemas/GranularityFieldValue"}},"example":{"startDate":"2023-10-01","endDate":"2023-10-31","granularity":"month"}},"TimeframeFieldValueWithMetadata":{"type":"object","description":"Timeframe value with metadata about its source and visibility.\n","required":["metadata"],"properties":{"startDate":{"$ref":"#/components/schemas/DateFieldValue"},"endDate":{"$ref":"#/components/schemas/DateFieldValue"},"granularity":{"$ref":"#/components/schemas/GranularityFieldValue"},"metadata":{"$ref":"#/components/schemas/ValueMetadata"}},"example":{"startDate":"2023-10-01","endDate":"2023-10-31","granularity":"month","metadata":{"source":{"system":"Jira","recordId":"PROJ-123"},"isViewableOnly":false}}},"SingleSelectFieldValue":{"type":"object","description":"Single selection option with ID, name, and optional color for Entities.\n\n## Behavior\n- Contains unique `id`, human-readable `name`, and optional `color` for UI display\n- Represents a single selected value from a predefined list of options\n- Values must match field configuration options\n- Used for status fields, priority levels, categories, and other single-choice selections\n","required":["id","name"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"example":{"id":"95db5914-36b0-45e9-8f6d-7f11a950ac1d","name":"Example Option","color":"red"}},"SingleSelectFieldAssign":{"description":"Single select option assignment allowing identification by ID or name.\n\n## Behavior\n- Supports two identification methods: unique ID or human-readable name\n- Use ID for precision and consistency across API calls\n- Use name for convenience when ID is unknown\n- Values must match existing options in field configuration\n","oneOf":[{"$ref":"#/components/schemas/SingleSelectFieldAssignById"},{"$ref":"#/components/schemas/SingleSelectFieldAssignByName"}]},"SingleSelectFieldAssignById":{"type":"object","description":"Single select option assignment using unique identifier.\n\n## Behavior\n- Identifies select option by UUID for precision and consistency\n- Preferred method for API integrations and automated workflows\n- UUID must match an existing option in field configuration\n","required":["id"],"properties":{"id":{"$ref":"#/components/schemas/UUID"},"metadata":{"$ref":"#/components/schemas/ValueMetadata"}}},"SingleSelectFieldAssignByName":{"type":"object","description":"Single select option assignment using human-readable name.\n\n## Behavior\n- Identifies select option by display name for convenience\n- Useful when option ID is unknown or in manual workflows\n- Name must exactly match an existing option in field configuration\n- Case-sensitive string matching with length constraints\n","required":["name"],"properties":{"name":{"type":"string","minLength":1,"maxLength":255,"example":"Example Option"},"metadata":{"$ref":"#/components/schemas/ValueMetadata"}}},"MultiSelectFieldValue":{"type":"array","description":"Collection of multiple selection options for Entities.\n\n## Behavior\n- Array of SingleSelectFieldValue objects, each with ID, name, and optional color\n- Can be empty array if no options are selected\n- All values must match field configuration options\n- Used for multi-category selections, tag-like fields, and multiple choice attributes\n- Supports adding/removing individual options via patch operations\n","items":{"$ref":"#/components/schemas/SingleSelectFieldValue"},"example":[{"id":"95db5914-36b0-45e9-8f6d-7f11a950ac1d","name":"Example Option"}]},"MultiSelectFieldAssign":{"type":"array","description":"Collection of multi-select option assignments allowing identification by ID or name.\n\n## Behavior\n- Array of select option assignments, each identified by ID or name\n- Can be empty array if no options are selected\n- Each item can use either ID (for precision) or name (for convenience)\n- All referenced options must exist in field configuration\n- Supports adding/removing individual options via patch operations\n","items":{"oneOf":[{"$ref":"#/components/schemas/SingleSelectFieldAssignById"},{"$ref":"#/components/schemas/SingleSelectFieldAssignByName"}]}},"BooleanFieldValue":{"type":"boolean","description":"True/false flag for binary state tracking in Entities.\n\n## Behavior\n- Accepts only `true` or `false` boolean values\n- Used for binary states like archived status, feature toggles, completion flags\n- Displayed as checkboxes or toggle switches in UI\n","example":true},"BooleanFieldValueWithMetadata":{"type":"object","description":"Boolean value with optional metadata about its source and visibility.\n","required":["value"],"properties":{"value":{"type":"boolean","description":"The boolean value","example":true},"metadata":{"$ref":"#/components/schemas/ValueMetadata"}}},"HealthFieldValue":{"type":"object","description":"Health status of a Entities with tracking metadata and history.\n\nThis object contains:\n- A unique `id` for the health record\n- The current `status` (`notSet`, `onTrack`, `atRisk`, `offTrack`)\n- The calculation `mode` (`manual` or `calculated`)\n- Timestamp and user tracking information\n- Optional comment providing context\n- Previous status for change tracking\n\n## Behavior\n- The `status` field indicates current health state\n- The `mode` field determines how health is set:\n  - `manual`: Status explicitly set by users with optional comments\n  - `calculated`: Status automatically derived from system logic or child entities\n- `lastUpdatedAt` is automatically maintained by the system\n- `previousStatus` tracks the last health state for change detection\n- `createdBy` identifies who set the health status (for manual mode)\n- Read-only field populated by the system after health updates\n- Used to monitor work item health across the product hierarchy and track status changes over time\n\n## Examples\n\n**Manual health with comment:**\n```json\n{\n  \"id\": \"123e4567-e89b-12d3-a456-426614174000\",\n  \"status\": \"atRisk\",\n  \"mode\": \"manual\",\n  \"lastUpdatedAt\": \"2024-01-15T10:30:00Z\",\n  \"comment\": \"Resource constraints affecting timeline\",\n  \"createdBy\": {\n    \"email\": \"manager@company.com\"\n  },\n  \"previousStatus\": \"onTrack\"\n}\n```\n\n**Calculated health:**\n```json\n{\n  \"id\": \"123e4567-e89b-12d3-a456-426614174001\",\n  \"status\": \"onTrack\",\n  \"mode\": \"calculated\",\n  \"lastUpdatedAt\": \"2024-01-15T15:45:00Z\",\n  \"previousStatus\": \"notSet\"\n}\n```\n","required":["id","status","lastUpdatedAt","mode"],"properties":{"id":{"$ref":"#/components/schemas/UUID"},"mode":{"$ref":"#/components/schemas/HealthModeEnum"},"status":{"$ref":"#/components/schemas/HealthStatusEnum"},"previousStatus":{"$ref":"#/components/schemas/HealthStatusEnum"},"lastUpdatedAt":{"$ref":"#/components/schemas/DateTimeFieldValue","description":"The date and time when the health status was last updated.\n"},"comment":{"$ref":"#/components/schemas/RichTextFieldValue","description":"An optional comment providing additional context about the health status.\n"},"createdBy":{"$ref":"#/components/schemas/MemberFieldValue"}}},"HealthUpdateFieldValue":{"description":"Writes the health status of an entity, either manually set or automatically calculated.\n\nThis object contains:\n- The `mode` of health tracking (`manual` or `calculated`)\n- The health `status` (required when mode is `manual`; must not be sent when mode is `calculated`)\n- An optional `comment` to provide context\n- Metadata on who created the update (`createdBy`)\n\n### Behavior\n- **Manual** (`mode: \"manual\"`): `status` is **required** and must be one of `onTrack`, `atRisk`, or\n  `offTrack`. You may include an optional `comment`. `status` **cannot** be set to `notSet` — see\n  *Switching to calculated health* below.\n- **Calculated** (`mode: \"calculated\"`): send only `mode`. Do not provide `status`; it causes a\n  validation error. `comment` and `createdBy` are not used for calculated mode. The system derives the\n  health automatically.\n- **Mode-only update**: you may send just `mode` (with no `status`/`comment`) to switch how an entity's\n  health is tracked. Switching an entity that has no health history to `calculated` initializes its\n  health to `notSet`.\n\n### Switching to calculated health\n`notSet` is read-only and reserved for calculated health; it cannot be assigned manually. To stop manually\nsetting health, switch the entity to `calculated` mode rather than sending `status: notSet`.\n\nIf the entity has no health history, switching to `calculated` initializes its health status to `notSet`.\nIf the entity already has health history, the existing health update remains in history while the mode\nchanges to `calculated`.\n\n### Use cases\n- Set `manual` mode to explicitly assign a health status with reasoning.\n- Use `calculated` mode when health is derived from internal logic or automation within Productboard.\n\n### Examples\n\n**Manual mode:**\n```json\n{\n  \"mode\": \"manual\",\n  \"status\": \"atRisk\",\n  \"comment\": \"Project timeline at risk due to resource constraints\"\n}\n```\n\n**Calculated mode:**\n```json\n{\n  \"mode\": \"calculated\"\n}\n```\n","type":"object","properties":{"mode":{"$ref":"#/components/schemas/HealthModeEnum"},"status":{"$ref":"#/components/schemas/HealthStatusEnum"},"comment":{"$ref":"#/components/schemas/RichTextFieldValue","description":"An optional comment providing additional context about the health status.\n"},"createdBy":{"$ref":"#/components/schemas/MemberFieldAssign"}},"examples":[{"summary":"Manual mode example","value":{"mode":"manual","status":"onTrack","comment":"Project timeline at risk due to resource constraints"}},{"summary":"Calculated mode example","value":{"mode":"calculated"}}]},"HealthUpdateFieldValueWithMetadata":{"type":"object","description":"Health update value with metadata about its source and visibility.\n","required":["metadata"],"properties":{"mode":{"$ref":"#/components/schemas/HealthModeEnum"},"status":{"$ref":"#/components/schemas/HealthStatusEnum"},"comment":{"$ref":"#/components/schemas/RichTextFieldValue"},"createdBy":{"$ref":"#/components/schemas/MemberFieldAssign"},"metadata":{"$ref":"#/components/schemas/ValueMetadata"}}},"HealthStatusEnum":{"type":"string","enum":["notSet","onTrack","atRisk","offTrack"],"description":"The health status of the work item. `notSet` is read-only — it is returned on read for entities with\ncalculated or uninitialized health and cannot be assigned in a manual update.\n","example":"onTrack"},"HealthModeEnum":{"type":"string","enum":["manual","calculated"],"description":"The mode of health status calculation.\n","example":"calculated"},"ProgressFieldValue":{"type":"object","description":"Measurable progress tracking for key results with start, target, and current values.\n\nThis object contains:\n- A `startValue` representing the baseline measurement\n- A `targetValue` representing the goal to achieve\n- A `currentValue` representing the present measurement\n\n## Behavior\n- All values are floating-point numbers allowing decimal precision\n- Values can represent various metrics (percentages, counts, amounts, etc.)\n- The `currentValue` is updated to track progress toward the `targetValue`\n- Progress calculation: `(currentValue - startValue) / (targetValue - startValue) * 100`\n- Supports both positive and negative progress directions\n- Currently supported only for key results\n- Used to track quantifiable metrics like revenue, users, and performance indicators\n\n## Examples\n\n**Percentage-based progress:**\n```json\n{\n  \"startValue\": 0.0,\n  \"targetValue\": 100.0,\n  \"currentValue\": 75.5\n}\n```\n\n**Revenue tracking:**\n```json\n{\n  \"startValue\": 50000.0,\n  \"targetValue\": 100000.0,\n  \"currentValue\": 87500.0\n}\n```\n\n**User count growth:**\n```json\n{\n  \"startValue\": 1000.0,\n  \"targetValue\": 5000.0,\n  \"currentValue\": 3250.0\n}\n```\n","properties":{"startValue":{"type":"number","format":"float","description":"The starting baseline value for progress measurement.\n","example":0},"targetValue":{"type":"number","format":"float","description":"The target goal value to achieve.\n","example":100},"currentValue":{"type":"number","format":"float","description":"The current progress value being tracked.\n","example":90.5}}},"ProgressFieldValueWithMetadata":{"type":"object","description":"Progress value with metadata about its source and visibility.\n","required":["metadata"],"properties":{"startValue":{"type":"number","format":"float","description":"The starting baseline value for progress measurement.\n","example":0},"targetValue":{"type":"number","format":"float","description":"The target goal value to achieve.\n","example":100},"currentValue":{"type":"number","format":"float","description":"The current progress value being tracked.\n","example":90.5},"metadata":{"$ref":"#/components/schemas/ValueMetadata"}}},"WorkProgressFieldValue":{"type":"object","description":"Work progress percentage for Entities, tracking completion status from 0-100%.\n\nThis object contains:\n- A numeric `value` representing completion percentage (0-100)\n- A `mode` indicating how the progress is calculated (`manual`, `statusBased`, or `calculated`)\n\n## Behavior\n- The `value` field must be an integer between 0 and 100 (inclusive)\n- The `mode` field determines how progress is tracked and updated:\n  - `manual`: Progress is set directly by users\n  - `statusBased`: Progress is automatically calculated based on entity status\n  - `calculated`: Progress is derived from child entity relationships (parent/link)\n- Different entity types support different modes:\n  - **subfeature**: `manual`, `statusBased`\n  - **feature**: `manual`, `statusBased`, `calculated`\n  - **initiative**: `manual`, `calculated`\n  - **objective**: `manual`, `calculated`\n- When mode is `calculated`, the system automatically updates the value based on relationships\n- Used to track completion percentage across the product hierarchy and monitor progress aggregation\n\n## Examples\n\n**Manual progress:**\n```json\n{\n  \"value\": 75,\n  \"mode\": \"manual\"\n}\n```\n\n**Status-based progress:**\n```json\n{\n  \"value\": 50,\n  \"mode\": \"statusBased\"\n}\n```\n\n**Calculated progress from relationships:**\n```json\n{\n  \"value\": 85,\n  \"mode\": \"calculated\"\n}\n```\n","required":["value","mode"],"properties":{"value":{"type":"number","minimum":0,"maximum":100,"description":"The work progress percentage value between 0 and 100 (inclusive).\n","example":75},"mode":{"$ref":"#/components/schemas/WorkProgressModeEnum"}}},"WorkProgressFieldValueWithMetadata":{"type":"object","description":"Work progress value with metadata about its source and visibility.\n","required":["value","mode","metadata"],"properties":{"value":{"type":"number","minimum":0,"maximum":100,"description":"The work progress percentage value between 0 and 100 (inclusive).\n","example":75},"mode":{"$ref":"#/components/schemas/WorkProgressModeEnum"},"metadata":{"$ref":"#/components/schemas/ValueMetadata"}}},"WorkProgressModeEnum":{"type":"string","enum":["manual","statusBased","calculated"],"description":"The mode of work progress calculation.\n","example":"statusBased"},"ResourceLinks":{"type":"object","required":["self"],"properties":{"self":{"type":"string"}}},"UUID":{"type":"string","format":"uuid","description":"A universally unique identifier (UUID).\n","example":"123e4567-e89b-12d3-a456-426614174000"},"ListLinks":{"type":"object","required":["next"],"properties":{"next":{"type":["string","null"]}}},"ErrorSource":{"type":"object","description":"An object containing references to the source of the error. It helps with location of the problematic field or parameter.\n","properties":{"pointer":{"type":"string","description":"JSON Pointer [RFC6901] to the associated entity in the request document.\n","example":"/data/fields/status"},"parameter":{"type":"string","description":"Query parameter causing the error.\nUsed when the error is related to a query parameter rather than request body.\n","example":"pageCursor"}}},"Error":{"type":"object","description":"Individual error object containing the details and context.\n","required":["code","title","detail"],"properties":{"code":{"type":"string","description":"A unique, machine-readable and stable code that identifies this error.\nMust be consistent across all services and provide clear categorization.\nFormat: `category.subcategory.specificError`\n","examples":["auth.accessDenied","resource.notFound"]},"title":{"type":"string","description":"A short, human-readable summary of the problem that doesn't change\nfrom occurrence to occurrence of the problem. Should provide immediate\nunderstanding of the error type.\n","maxLength":255,"example":"Missing required field"},"detail":{"type":"string","description":"A human-readable explanation specific to this occurrence of the problem.\nMay include suggestions for resolution but should not expose sensitive information.\n","maxLength":1000,"example":"Field 'status' is required."},"source":{"$ref":"#/components/schemas/ErrorSource"}}},"ErrorResponse":{"type":"object","description":"Standard error response structure.\n","required":["id","errors"],"properties":{"id":{"type":"string","description":"A unique identifier for this specific occurrence of the problem.\nIt carries unique request/response ID which allows client\nand server to reference the exact instance of the error\nin logs or support communication.\n"},"errors":{"type":"array","description":"Array of error objects, multiple errors can be returned.","items":{"$ref":"#/components/schemas/Error"},"minItems":1}}},"EntityLinks":{"type":"object","required":["self","html"],"properties":{"self":{"type":"string"},"html":{"type":["string","null"],"description":"Deep link to the entity in the Productboard web UI.\nNull when the parent space has no domain configured (e.g. newly-onboarded spaces or replays).\n"}}}},"requestBodies":{"FieldCreateRequestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","required":["type","fields"],"properties":{"type":{"$ref":"#/components/schemas/FieldCreateType"},"fields":{"type":"object","required":["name"],"properties":{"id":{"$ref":"#/components/schemas/UUID"},"name":{"type":"string","description":"Display name of the new field."},"description":{"$ref":"#/components/schemas/RichTextFieldValue","description":"Optional description of the field."},"assignedEntityTypes":{"type":"array","description":"Entity types the field should be assigned to on creation. Leave empty to keep the field unassigned to any entities.","items":{"$ref":"#/components/schemas/EntityType"}}}}}}}},"examples":{"numberField":{"value":{"data":{"type":"number","fields":{"name":"MD Estimate","assignedEntityTypes":["features","subfeatures"],"description":"This is the description of the given MD Estimate field."}}}},"textField":{"value":{"data":{"type":"text","fields":{"name":"Target Metric","description":"This is the description of the given Target Metric field."}}}}}}}},"SelectOptionCreateRequestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","required":["fields"],"properties":{"fields":{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"Display name of the new select option."},"color":{"$ref":"#/components/schemas/SelectOptionColor","description":"Color of the select option. If omitted, the system assigns the next available color."}}}}}}},"example":{"data":{"fields":{"name":"High Priority","color":"red"}}}}}},"SelectOptionUpdateRequestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"fields":{"type":"object","description":"Attributes to update. Omitted fields remain unchanged.","properties":{"name":{"type":"string","description":"Updated display name of the select option."},"color":{"$ref":"#/components/schemas/SelectOptionColor","description":"Updated color of the select option."}}}}}}},"examples":{"updateName":{"value":{"data":{"fields":{"name":"Critical Priority"}}}},"updateColor":{"value":{"data":{"fields":{"color":"blue"}}}}}}}},"FieldUpdateRequestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"fields":{"type":"object","description":"Attributes that can be updated for a custom field.","properties":{"name":{"type":"string","description":"New display name of the field."},"description":{"type":["string","null"],"minLength":0,"maxLength":524288,"description":"Updated description of the field. Pass null to clear the description."},"assignedEntityTypes":{"type":"array","description":"Complete list of entity types the field should be assigned to after the update. Provide an empty array to remove all assignments.","items":{"$ref":"#/components/schemas/EntityType"}}}}}}}},"examples":{"numberField":{"value":{"data":{"fields":{"name":"MD Estimate","assignedEntityTypes":["features"],"description":"This is the new description of the given MD Estimate field."}}}},"textField":{"value":{"data":{"fields":{"name":"Target Metric","description":"This is the new description of the given Target Metric field."}}}}}}}},"EntityBulkUpdateRequestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","additionalProperties":{"type":"object","properties":{"fields":{"$ref":"#/components/schemas/EntityCreateOrUpdateFields"},"metadata":{"$ref":"#/components/schemas/EntityUpdateMetadata"}}}}}},"example":{"data":{"3fa85f64-5717-4562-b3fc-2c963f66afa6":{"fields":{"name":"Q4 2024 Product Launch Initiative","status":{"name":"In Progress"},"073695b4-7c85-491e-8869-7a7ac093ccb3":"2024-12-15","35a28b0d-d520-42a8-bdc6-e22a56947b32":null,"50330d1f-e2cf-4805-b8b9-60aee8d96320":"Final preparations for launch event","9c18319f-3e89-4f66-95af-667d9277601a":95}},"7a26ba09-db99-4041-8864-bcd16e8afc5e":{"fields":{"name":"Align Marketing Campaigns","073695b4-7c85-491e-8869-7a7ac093ccb3":"2024-12-10","50330d1f-e2cf-4805-b8b9-60aee8d96320":"Sync with product launch timeline"}}}}}}},"EntityCreateRequestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/EntityType"},"fields":{"$ref":"#/components/schemas/EntityCreateOrUpdateFields"},"relationships":{"type":"array","items":{"$ref":"#/components/schemas/EntityRelationshipCreate"}},"metadata":{"$ref":"#/components/schemas/EntityMetadata"}}}}},"example":{"data":{"type":"initiative","fields":{"name":"Q4 2024 Product Launch Initiative","status":{"name":"In Progress"},"owner":{"email":"john@doe.com"},"timeframe":{"startDate":"2024-10-01","endDate":"2024-12-31","granularity":"month"},"teams":[{"name":"Product Team"}],"archived":false,"health":{"id":"4bc29fba-257d-483f-842c-36defa1705b7","mode":"manual","status":"onTrack","lastUpdatedAt":"2024-11-15T10:30:00.000000Z","comment":"All milestones are on track for Q4 launch"},"workProgress":{"value":0,"mode":"calculated"},"tags":[{"name":"Q4"},{"name":"Launch"}],"faa1d59a-d55f-4ad2-b1d3-5b888123873b":120,"073695b4-7c85-491e-8869-7a7ac093ccb3":"2024-12-15","194508f3-f39e-479f-9d38-0b0565ad4ad1":"This initiative focuses on launching our new product features for Q4 2024. **Key highlights:**\n- Mobile app redesign\n- API improvements\n- Performance optimizations","35a28b0d-d520-42a8-bdc6-e22a56947b32":null,"50330d1f-e2cf-4805-b8b9-60aee8d96320":"Final preparations for launch event","e732da31-082c-48e0-b07b-dff0eb2cb6db":8,"9c18319f-3e89-4f66-95af-667d9277601a":95},"metadata":{"source":{"system":"Jira","recordId":"PROJ-456","url":"https://jira.example.com/browse/PROJ-456"}}}}}}},"EntityPatchRequestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"fields":{"$ref":"#/components/schemas/EntityCreateOrUpdateFields"},"patch":{"$ref":"#/components/schemas/EntityPatch"},"metadata":{"$ref":"#/components/schemas/EntityUpdateMetadata"}}}}},"examples":{"simple":{"summary":"Simple value update","value":{"data":{"fields":{"name":"Next awesome feature","owner":{"email":"john@doe.com"},"status":{"name":"In Progress"},"faa1d59a-d55f-4ad2-b1d3-5b888123873b":150,"e732da31-082c-48e0-b07b-dff0eb2cb6db":9,"35a28b0d-d520-42a8-bdc6-e22a56947b32":null,"50330d1f-e2cf-4805-b8b9-60aee8d96320":null},"metadata":{"source":{"system":"Asana","recordId":"1234567890","url":"https://app.asana.com/0/1234567890"}}}}},"complex":{"summary":"For complex operations on fields","value":{"data":{"patch":[{"op":"set","path":"name","value":"Improved feature"},{"op":"set","path":"status","value":{"name":"In Progress"}},{"op":"addItems","path":"teams","value":[{"name":"Design Team"}]},{"op":"removeItems","path":"teams","value":[{"name":"Legacy Team"}]},{"op":"addItems","path":"tags","value":[{"name":"Q1 2025"}]},{"op":"removeItems","path":"tags","value":[{"name":"Deprecated"}]},{"op":"clear","path":"timeframe.startDate"},{"op":"set","path":"faa1d59a-d55f-4ad2-b1d3-5b888123873b","value":200},{"op":"addItems","path":"eedbf60e-9927-4f60-a7fb-266744d328c0","value":[{"name":"Frontend"}]},{"op":"clear","path":"35a28b0d-d520-42a8-bdc6-e22a56947b32"}]}}},"combined":{"summary":"You can combine both approaches","value":{"data":{"fields":{"name":"Next awesome feature","owner":{"email":"john@doe.com"},"35a28b0d-d520-42a8-bdc6-e22a56947b32":null},"patch":[{"op":"addItems","path":"teams","value":[{"name":"QA Team"}]},{"op":"removeItems","path":"teams","value":[{"name":"Old Team"}]},{"op":"clear","path":"timeframe.startDate"},{"op":"set","path":"faa1d59a-d55f-4ad2-b1d3-5b888123873b","value":180},{"op":"addItems","path":"eedbf60e-9927-4f60-a7fb-266744d328c0","value":[{"name":"Backend"}]}]}}}}}}},"EntitySearchRequestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/EntitySearch"}}},"examples":{"basic_search":{"summary":"Basic search by type","value":{"data":{"filter":{"type":["initiative"]}}}},"structured_filter":{"summary":"New structured filter format (recommended)","value":{"data":{"filter":{"type":["initiative"],"id":["133275f0-7a57-4c54-bbd6-fa6118313f53","7a26ba09-db99-4041-8864-bcd16e8afc5e"],"fields":{"archived":false,"status":[{"name":"In Progress"},{"name":"At Risk"}],"owner":[{"email":"john@doe.com"},{"email":"jane@doe.com"}]},"relationships":{"parent":[{"id":"318de52f-4e38-4c94-a550-a0d47a1f212e"}]}},"return":{"fields":["name","status","owner"]}}}},"multi_type_search":{"summary":"Search across multiple entity types","value":{"data":{"filter":{"type":["feature","initiative"],"fields":{"archived":false}}}}},"custom_field_search":{"summary":"Search by custom field values","value":{"data":{"filter":{"type":"company","fields":{"domain":"productboard.com"}}}}},"custom_field_combined_search":{"summary":"Search with custom field and standard filters","value":{"data":{"filter":{"type":"feature","fields":{"archived":false,"a7f837a6-80b3-41bd-8072-1fd5bdce127e":"100"}}}}}}}}},"EntityRelationshipCreateRequestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/EntityRelationshipCreate"}}},"example":{"data":{"type":"link","target":{"id":"318de52f-4e38-4c94-a550-a0d47a1f212e"}}}}}},"EntityParentRelationshipReplaceRequestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","description":"Payload representing replacing of existing relationship with a new one of the same type\n","required":["target"],"properties":{"type":{"$ref":"#/components/schemas/EntityType"},"target":{"$ref":"#/components/schemas/ResourceReferenceAssign"}}}}},"example":{"data":{"target":{"id":"318de52f-4e38-4c94-a550-a0d47a1f212e"}}}}}}},"responses":{"FieldListResponse":{"description":"A paginated list of fields","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Field"}},"links":{"$ref":"#/components/schemas/ListLinks"}}}}}},"FieldReferenceResponse":{"description":"Field created successfully","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/FieldReference"}}},"example":{"data":{"id":"f05b1848-b598-435f-a076-93f41aecdaff","type":"text","links":{"self":null}}}}}},"FieldUpdateResponse":{"description":"Field updated successfully","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/FieldReference"}}},"example":{"data":{"id":"f05b1848-b598-435f-a076-93f41aecdaff","type":"text","links":{"self":null}}}}}},"FieldResponse":{"description":"Field details","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Field"}}}}}},"FieldValuesListResponse":{"description":"A paginated list of field values","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/FieldValue"}},"links":{"$ref":"#/components/schemas/ListLinks"}}},"examples":{"selectOptions":{"summary":"Select field values","value":{"data":[{"id":"a09fccc8-a4ac-4262-84f1-68ad77f82265","fields":{"name":"High","color":"red"}},{"id":"043d163b-fda2-47fd-82ed-4026ad1965e6","fields":{"name":"Medium","color":"yellow"}},{"id":"b2debcbc-5034-4768-aff4-9f52e6c8427e","fields":{"name":"Low","color":"gray"}}],"links":{"next":"https://api.productboard.com/v2/entities/fields/be0f15ed-7e9c-4815-a974-adced8c55602/values?pageCursor=eyJpZCI6IjEyMyJ9"}}},"statusValues":{"summary":"Status field values with entity type filter","value":{"data":[{"id":"a09fccc8-a4ac-4262-84f1-68ad77f82265","fields":{"name":"In Progress","assignedEntityTypes":["feature","subfeature"]}},{"id":"043d163b-fda2-47fd-82ed-4026ad1965e6","fields":{"name":"Done","assignedEntityTypes":["feature"]}}],"links":{"next":"https://api.productboard.com/v2/entities/fields/status/values?pageCursor=eyJpZCI6IjEyMyJ9&assignedEntityType[]=feature"}}}}}}},"FieldValueReferenceResponse":{"description":"Field value created or updated successfully","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","required":["id"],"properties":{"id":{"$ref":"#/components/schemas/UUID"},"links":{"$ref":"#/components/schemas/ResourceLinks"}}}}},"example":{"data":{"id":"a09fccc8-a4ac-4262-84f1-68ad77f82265","links":{"self":"https://api.productboard.com/v2/entities/fields/be0f15ed-7e9c-4815-a974-adced8c55602/values/a09fccc8-a4ac-4262-84f1-68ad77f82265"}}}}}},"ReferenceResponse":{"description":"Entity created successfully","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ResourceReference"}}},"example":{"data":{"id":"318de52f-4e38-4c94-a550-a0d47a1f212e","type":"feature","links":{"self":"https://api.productboard.com/v2/entities/318de52f-4e38-4c94-a550-a0d47a1f212e","html":"https://example.productboard.com/detail/UG1FbnRpdHk6MzE4ZGU1MmYtNGUzOC00Yzk0LWE1NTAtYTBkNDdhMWYyMTJl"}}}}}},"EntityUpdateResponse":{"description":"Entity updated successfully","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ResourceReference"}}},"example":{"data":{"id":"318de52f-4e38-4c94-a550-a0d47a1f212e","type":"feature","links":{"self":"https://api.productboard.com/v2/entities/318de52f-4e38-4c94-a550-a0d47a1f212e","html":"https://example.productboard.com/detail/UG1FbnRpdHk6MzE4ZGU1MmYtNGUzOC00Yzk0LWE1NTAtYTBkNDdhMWYyMTJl"}}}}}},"EntityResponse":{"description":"Entity details","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Entity"}}},"example":{"data":{"id":"133275f0-7a57-4c54-bbd6-fa6118313f53","type":"initiative","fields":{"name":"Q4 2024 Product Launch Initiative","status":{"id":"447eb060-2a7e-4d1e-9d59-322a11e0fdb0","name":"In Progress"},"owner":{"id":"56caede9-bae0-4521-9702-d2c553488caf","email":"john@doe.com"},"timeframe":{"startDate":"2024-10-01","endDate":"2024-12-31","granularity":"month"},"teams":[{"id":"95db5914-36b0-45e9-8f6d-7f11a950ac1d","name":"Product Team"},{"id":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","name":"Engineering Team"}],"archived":false,"health":{"id":"4bc29fba-257d-483f-842c-36defa1705b7","status":"onTrack","lastUpdatedAt":"2024-11-15T10:30:00.000000Z","comment":"All milestones are on track for Q4 launch"},"workProgress":{"value":75,"mode":"calculated"},"tags":[{"id":"95db5914-36b0-45e9-8f6d-7f11a950ac1d","name":"Q4"},{"id":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","name":"Launch"}],"faa1d59a-d55f-4ad2-b1d3-5b888123873b":120,"073695b4-7c85-491e-8869-7a7ac093ccb3":"2024-12-15","194508f3-f39e-479f-9d38-0b0565ad4ad1":"This initiative focuses on launching our new product features for Q4 2024. **Key highlights:**\n- Mobile app redesign\n- API improvements\n- Performance optimizations","35a28b0d-d520-42a8-bdc6-e22a56947b32":null,"41018772-10ad-434c-aeb9-313cdf1933f1":null,"9fe06369-0801-4a31-a900-0051aa78e01c":null,"50330d1f-e2cf-4805-b8b9-60aee8d96320":"Final preparations for launch event","eedbf60e-9927-4f60-a7fb-266744d328c0":null,"e732da31-082c-48e0-b07b-dff0eb2cb6db":8,"9c18319f-3e89-4f66-95af-667d9277601a":95,"868e1567-d1b0-4629-a6a6-0cab349e2e47":null},"relationships":[{"type":"parent","target":{"id":"318de52f-4e38-4c94-a550-a0d47a1f212e","type":"objective","links":{"self":"https://api.productboard.com/v2/entities/318de52f-4e38-4c94-a550-a0d47a1f212e","html":"https://example.productboard.com/detail/UG1FbnRpdHk6MzE4ZGU1MmYtNGUzOC00Yzk0LWE1NTAtYTBkNDdhMWYyMTJl"}}}],"links":{"self":"https://api.productboard.com/v2/entities/133275f0-7a57-4c54-bbd6-fa6118313f53","html":"https://example.productboard.com/detail/UG1FbnRpdHk6MTMzMjc1ZjAtN2E1Ny00YzU0LWJiZDYtZmE2MTE4MzEzZjUz"},"createdAt":"2024-10-01T08:30:57.059002Z","updatedAt":"2024-11-15T10:30:00.000000Z"}}}}},"EntityBulkUpdateResponse":{"description":"Entities updated successfully","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/ResourceReference"}}}},"example":{"data":{"7a26ba09-db99-4041-8864-bcd16e8afc5e":{"id":"7a26ba09-db99-4041-8864-bcd16e8afc5e","type":"initiative","links":{"self":"https://api.productboard.com/v2/entities/7a26ba09-db99-4041-8864-bcd16e8afc5e","html":"https://example.productboard.com/detail/UG1FbnRpdHk6N2EyNmJhMDktZGI5OS00MDQxLTg4NjQtYmNkMTZlOGFmYzVl"}},"3fa85f64-5717-4562-b3fc-2c963f66afa6":{"id":"3fa85f64-5717-4562-b3fc-2c963f66afa6","type":"initiative","links":{"self":"https://api.productboard.com/v2/entities/3fa85f64-5717-4562-b3fc-2c963f66afa6","html":"https://example.productboard.com/detail/UG1FbnRpdHk6M2ZhODVmNjQtNTcxNy00NTYyLWIzZmMtMmM5NjNmNjZhZmE2"}}}}}}},"EntityListResponse":{"description":"A paginated list of entities","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Entity"}},"links":{"$ref":"#/components/schemas/ListLinks"}}},"example":{"data":[{"id":"7a26ba09-db99-4041-8864-bcd16e8afc5e","type":"initiative","fields":{"name":"Q4 2024 Product Launch Initiative","status":{"id":"447eb060-2a7e-4d1e-9d59-322a11e0fdb0","name":"In Progress"},"owner":{"id":"56caede9-bae0-4521-9702-d2c553488caf","email":"john@doe.com"},"timeframe":{"startDate":"2024-10-01","endDate":"2024-12-31","granularity":"month"},"teams":[{"id":"95db5914-36b0-45e9-8f6d-7f11a950ac1d","name":"Product Team"},{"id":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","name":"Engineering Team"}],"archived":false,"health":{"id":"4bc29fba-257d-483f-842c-36defa1705b7","mode":"manual","status":"onTrack","lastUpdatedAt":"2024-11-15T10:30:00.000000Z"},"workProgress":{"value":75,"mode":"calculated"},"faa1d59a-d55f-4ad2-b1d3-5b888123873b":120,"073695b4-7c85-491e-8869-7a7ac093ccb3":"2024-12-15","194508f3-f39e-479f-9d38-0b0565ad4ad1":null,"35a28b0d-d520-42a8-bdc6-e22a56947b32":null,"41018772-10ad-434c-aeb9-313cdf1933f1":null,"9fe06369-0801-4a31-a900-0051aa78e01c":null,"50330d1f-e2cf-4805-b8b9-60aee8d96320":null,"eedbf60e-9927-4f60-a7fb-266744d328c0":null,"e732da31-082c-48e0-b07b-dff0eb2cb6db":null,"9c18319f-3e89-4f66-95af-667d9277601a":null,"868e1567-d1b0-4629-a6a6-0cab349e2e47":null},"links":{"self":"https://api.productboard.com/v2/entities/7a26ba09-db99-4041-8864-bcd16e8afc5e","html":"https://example.productboard.com/detail/UG1FbnRpdHk6N2EyNmJhMDktZGI5OS00MDQxLTg4NjQtYmNkMTZlOGFmYzVl"},"createdAt":"2024-10-01T08:30:57.059002Z","updatedAt":"2024-11-15T10:30:00.000000Z"},{"id":"fd7fdf2f-c88c-4b57-a0fc-5620be2e7bfe","type":"feature","fields":{"name":"User Authentication Feature","status":{"id":"447eb060-2a7e-4d1e-9d59-322a11e0fdb0","name":"Upcoming"},"owner":{"id":"56caede9-bae0-4521-9702-d2c553488caf","email":"john@doe.com"},"timeframe":{"startDate":"2025-01-01","endDate":"2025-03-31","granularity":"quarter"},"teams":[{"id":"95db5914-36b0-45e9-8f6d-7f11a950ac1d","name":"Product Team"},{"id":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","name":"Engineering Team"}],"archived":false,"health":{"id":"4bc29fba-257d-483f-842c-36defa1705b7","status":"atRisk","lastUpdatedAt":"2024-11-15T14:20:00.000000Z","mode":"manual","comment":"Dependencies on external auth provider"},"workProgress":{"value":25,"mode":"manual"},"faa1d59a-d55f-4ad2-b1d3-5b888123873b":80,"073695b4-7c85-491e-8869-7a7ac093ccb3":"2025-02-28","194508f3-f39e-479f-9d38-0b0565ad4ad1":"Implement secure user authentication with OAuth 2.0 support","35a28b0d-d520-42a8-bdc6-e22a56947b32":null,"41018772-10ad-434c-aeb9-313cdf1933f1":null,"9fe06369-0801-4a31-a900-0051aa78e01c":null,"50330d1f-e2cf-4805-b8b9-60aee8d96320":"Waiting for security review","eedbf60e-9927-4f60-a7fb-266744d328c0":null,"e732da31-082c-48e0-b07b-dff0eb2cb6db":6,"9c18319f-3e89-4f66-95af-667d9277601a":85,"868e1567-d1b0-4629-a6a6-0cab349e2e47":null},"links":{"self":"https://api.productboard.com/v2/entities/fd7fdf2f-c88c-4b57-a0fc-5620be2e7bfe","html":"https://example.productboard.com/detail/UG1FbnRpdHk6ZmQ3ZmRmMmYtYzg4Yy00YjU3LWEwZmMtNTYyMGJlMmU3YmZl"},"createdAt":"2024-11-01T09:15:30.123456Z","updatedAt":"2024-11-15T14:20:00.000000Z"}],"links":{"next":"https://api.productboard.com/v2/entities?type=feature&pageCursor=asdf79a0sd"}}}}},"ConfigurationListResponse":{"description":"A paginated list of configurations","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Configuration"}},"links":{"$ref":"#/components/schemas/ListLinks"}}},"example":{"data":[{"type":"feature","fields":{"name":{"id":"name","name":"Name","path":"/fields/name","schema":{"type":"string"},"lifecycle":{"create":{"set":true},"update":{"set":true},"patch":{"set":true}},"constraints":{"required":true,"notBlank":true,"minLength":1,"maxLength":2000},"links":{"self":"https://api.productboard.info/configuration/fields/name"}},"owner":{"id":"owner","name":"Owner","path":"/fields/owner","schema":{"type":"object","required":["id","email"],"properties":{"id":{"type":"string","format":"uuid"},"email":{"type":"string"}}},"lifecycle":{"create":{"set":true},"update":{"set":true,"clear":true},"patch":{"set":true,"clear":true}},"values":{"data":[],"links":{"next":"https://api.productboard.com/v2/members?roles[]=admin&roles[]=maker"}},"links":{"self":null}}},"relationships":{"parent":{"targetType":["component","product"],"cardinality":"single","mandatory":false},"link":{"targetType":["initiative","release","feature"],"cardinality":"multiple","mandatory":false},"isBlockedBy":{"targetType":["feature"],"cardinality":"multiple","mandatory":false},"isBlocking":{"targetType":["feature"],"cardinality":"multiple","mandatory":false}}},{"type":"subfeature","fields":{"name":{"id":"name","name":"Name","path":"/fields/name","schema":{"type":"string"},"lifecycle":{"create":{"set":true},"update":{"set":true},"patch":{"set":true}},"constraints":{"required":true,"notBlank":true,"minLength":1,"maxLength":2000},"links":{"self":"https://api.productboard.info/configuration/fields/name"}},"owner":{"id":"owner","name":"Owner","path":"/fields/owner","schema":{"type":"object","required":["id","email"],"properties":{"id":{"type":"string","format":"uuid"},"email":{"type":"string"}}},"lifecycle":{"create":{"set":true},"update":{"set":true,"clear":true},"patch":{"set":true,"clear":true}},"values":{"data":[],"links":{"next":"https://api.productboard.com/v2/members?roles[]=admin&roles[]=maker"}},"links":{"self":null}}},"relationships":{"parent":{"targetType":["feature"],"cardinality":"single","mandatory":true},"link":{"targetType":["initiative","release","feature"],"cardinality":"multiple","mandatory":false},"isBlockedBy":{"targetType":["feature"],"cardinality":"multiple","mandatory":false},"isBlocking":{"targetType":["feature"],"cardinality":"multiple","mandatory":false}}}],"links":{"next":null}}}}},"ConfigurationResponse":{"description":"Configuration details","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Configuration"}}},"example":{"data":{"type":"feature","fields":{"name":{"id":"name","name":"Name","path":"/fields/name","schema":{"type":"string"},"lifecycle":{"create":{"set":true},"update":{"set":true},"patch":{"set":true}},"constraints":{"required":true,"notBlank":true,"minLength":1,"maxLength":2000},"links":{"self":"https://api.productboard.info/configuration/fields/name"}},"owner":{"id":"owner","name":"Owner","path":"/fields/owner","schema":{"type":"object","required":["id","email"],"properties":{"id":{"type":"string","format":"uuid"},"email":{"type":"string"}}},"lifecycle":{"create":{"set":true},"update":{"set":true,"clear":true},"patch":{"set":true,"clear":true}},"values":{"data":[],"links":{"next":"https://api.productboard.com/v2/members?roles[]=admin&roles[]=maker"}},"links":{"self":null}}},"relationships":{"parent":{"targetType":["component","product"],"cardinality":"single","mandatory":false},"link":{"targetType":["initiative","release","feature"],"cardinality":"multiple","mandatory":false},"isBlockedBy":{"targetType":["feature"],"cardinality":"multiple","mandatory":false},"isBlocking":{"targetType":["feature"],"cardinality":"multiple","mandatory":false}},"links":{"self":"https://api.productboard.com/v2/entities/configurations/feature"}}}}}},"EntityRelationshipResponse":{"description":"Relationship created successfully","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/EntityRelationship"},"links":{"$ref":"#/components/schemas/ResourceLinks"}}},"example":{"data":{"type":"parent","target":{"id":"318de52f-4e38-4c94-a550-a0d47a1f212e","type":"component","links":{"self":"https://api.productboard.com/v2/entities/318de52f-4e38-4c94-a550-a0d47a1f212e","html":"https://example.productboard.com/detail/UG1FbnRpdHk6MzE4ZGU1MmYtNGUzOC00Yzk0LWE1NTAtYTBkNDdhMWYyMTJl"}}},"links":{"self":"https://api.productboard.com/v2/entities/195a1cb2-728f-4be8-900f-aebbd84d7944/relationships/parent/318de52f-4e38-4c94-a550-a0d47a1f212e"}}}}},"EntityRelationshipReplaceResponse":{"description":"Relationship updated successfully","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/EntityRelationship"},"links":{"$ref":"#/components/schemas/ResourceLinks"}}},"example":{"data":{"type":"parent","target":{"id":"318de52f-4e38-4c94-a550-a0d47a1f212e","type":"component","links":{"self":"https://api.productboard.com/v2/entities/318de52f-4e38-4c94-a550-a0d47a1f212e","html":"https://example.productboard.com/detail/UG1FbnRpdHk6MzE4ZGU1MmYtNGUzOC00Yzk0LWE1NTAtYTBkNDdhMWYyMTJl"}}},"links":{"self":"https://api.productboard.com/v2/entities/195a1cb2-728f-4be8-900f-aebbd84d7944/relationships/parent/318de52f-4e38-4c94-a550-a0d47a1f212e"}}}}},"EntityRelationshipListResponse":{"description":"A paginated list of relationships","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/EntityRelationship"}},"links":{"$ref":"#/components/schemas/ListLinks"}}},"example":{"data":[{"type":"link","target":{"id":"318de52f-4e38-4c94-a550-a0d47a1f212e","type":"component","links":{"self":"https://api.productboard.com/v2/entities/318de52f-4e38-4c94-a550-a0d47a1f212e","html":"https://example.productboard.com/detail/UG1FbnRpdHk6MzE4ZGU1MmYtNGUzOC00Yzk0LWE1NTAtYTBkNDdhMWYyMTJl"}}},{"type":"parent","target":{"id":"318de52f-4e38-4c94-a550-a0d47a1f212e","type":"feature","links":{"self":"https://api.productboard.com/v2/entities/318de52f-4e38-4c94-a550-a0d47a1f212e","html":"https://example.productboard.com/detail/UG1FbnRpdHk6MzE4ZGU1MmYtNGUzOC00Yzk0LWE1NTAtYTBkNDdhMWYyMTJl"}}}],"links":{"self":"https://api.productboard.com/v2/entities/195a1cb2-728f-4be8-900f-aebbd84d7944/relationships"}}}}},"BadBulkUpdateRequestResponse":{"description":"Bad Request - Invalid input format or malformed request, no changes were applied to any entities","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalidRequest":{"summary":"Invalid request structure","value":{"id":"req-6234567888","errors":[{"code":"request.invalid","title":"Invalid request","detail":"The request is missing required parameter 'data'.","source":{"pointer":"/data"}}]}},"malformedRequest":{"summary":"Malformed JSON request","value":{"id":"req-6234567889","errors":[{"code":"request.malformed","title":"Malformed request","detail":"The request body contains invalid JSON syntax at line 5, column 12."}]}},"mixedErrorsOnFieldsAndEntities":{"summary":"Validation and entity errors","value":{"id":"req-6234567890","errors":[{"code":"validation.failed","title":"Validation failed","detail":"Field 'status' is required.","source":{"pointer":"/data/7a26ba09-db99-4041-8864-bcd16e8afc5e/fields/status"}},{"code":"resource.notFound","title":"Resource not found","detail":"Entity with ID '3fa85f64-5717-4562-b3fc-2c963f66afa6' was not found. It either does not exist or you do not have access to it.","source":{"pointer":"/data/3fa85f64-5717-4562-b3fc-2c963f66afa6"}}]}},"referenceNotFound":{"summary":"Referenced resource not found","value":{"id":"req-6234567892","errors":[{"code":"validation.referenceNotFound","title":"Referenced resource not found","detail":"The team with name 'nonexistent-team' could not be found or is not active.","source":{"pointer":"/data/7a26ba09-db99-4041-8864-bcd16e8afc5e/fields/team"}}]}},"payloadTooLarge":{"summary":"Payload too large","value":{"id":"req-6234567891","errors":[{"code":"validation.failed","title":"Validation failed","detail":"The request includes 126 entities, but the maximum allowed per request is 100.","source":{"pointer":"/data"}},{"code":"validation.failed","title":"Validation failed","detail":"The request includes 1273 total field updates, but the maximum allowed per request is 1000.","source":{"pointer":"/data"}}]}}}}}},"UnprocessableEntityBulkResponse":{"description":"Unprocessable Entity - Validation failed (e.g., missing required fields, unknown fields), no changes were applied to any entities","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"validationFailed":{"summary":"Validation failed","value":{"id":"req-1234567890","errors":[{"code":"validation.failed","title":"Validation failed","detail":"The field 'status' must be set to a valid status value from the entity configuration.","source":{"pointer":"/data/fields/status"}}]}},"referenceNotFound":{"summary":"Referenced resource not found","value":{"id":"req-1234567890","errors":[{"code":"validation.referenceNotFound","title":"Referenced resource not found","detail":"The owner with email 'nonexistent@example.com' could not be found or you do not have access to it.","source":{"pointer":"/data/fields/owner"}}]}}}}}},"BadRequestResponse":{"description":"Bad Request - Invalid input format or malformed request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"schemaInvalid":{"summary":"Request does not satisfy schema","value":{"id":"req-1234567890","errors":[{"code":"request.invalid","title":"Request schema invalid","detail":"The request does not satisfy the required schema. Field 'type' is required but was not provided.","source":{"pointer":"/data/type"}}]}},"fieldInvalid":{"summary":"Invalid field value type","value":{"id":"req-1234567891","errors":[{"code":"request.invalid","title":"Request schema invalid","detail":"Field 'fields/name' must be a string with maximum length of 255 characters, but received a number.","source":{"pointer":"/data/fields/name"}}]}},"malformedJson":{"summary":"Malformed JSON syntax","value":{"id":"req-1234567892","errors":[{"code":"request.malformed","title":"Request malformed","detail":"The request body contains invalid JSON syntax. Expected ',' or '}' at line 5, column 12."}]}},"invalidContentType":{"summary":"Invalid content type","value":{"id":"req-1234567893","errors":[{"code":"request.malformed","title":"Request malformed","detail":"The Content-Type header must be 'application/json'. Received 'text/plain'."}]}}}}}},"UnauthorizedResponse":{"description":"Unauthorized - Missing or invalid authentication credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"missingCredentials":{"summary":"Missing authentication credentials","value":{"id":"req-2234567890","errors":[{"code":"auth.invalid","title":"Invalid authentication","detail":"Authentication credentials are missing."}]}},"invalidToken":{"summary":"Invalid or expired token","value":{"id":"req-2234567891","errors":[{"code":"auth.invalid","title":"Invalid authentication","detail":"The provided authentication credentials are invalid or have expired. Please obtain new credentials and try again."}]}},"revokedCredentials":{"summary":"Revoked credentials","value":{"id":"req-2234567892","errors":[{"code":"auth.invalid","title":"Invalid authentication","detail":"The authentication credentials have been revoked. Please contact your workspace administrator."}]}}}}}},"ForbiddenResponse":{"description":"Forbidden - Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"permissionDenied":{"summary":"Permission denied for resource","value":{"id":"req-3234567890","errors":[{"code":"auth.accessDenied","title":"Access denied","detail":"You do not have permission to perform this operation on the specified resource. Contact your workspace administrator to request access."}]}},"insufficientScope":{"summary":"Insufficient OAuth scopes","value":{"id":"req-3234567891","errors":[{"code":"auth.accessDenied","title":"Access denied","detail":"Your authentication token lacks the required OAuth scopes to perform this operation. Please re-authenticate with the necessary scopes."}]}},"readOnlyRole":{"summary":"Read-only role restriction","value":{"id":"req-3234567892","errors":[{"code":"auth.accessDenied","title":"Access denied","detail":"Your user role does not permit this operation. Please contact your workspace administrator."}]}}}}}},"NotFoundResponse":{"description":"Not Found - The requested resource does not exist or is not accessible","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"resourceNotFoundById":{"summary":"Resource not found by ID","value":{"id":"req-4234567890","errors":[{"code":"resource.notFound","title":"Resource not found","detail":"Resource with ID '3fa85f64-5717-4562-b3fc-2c963f66afa6' was not found. It either does not exist or you do not have access to it."}]}},"routeNotFound":{"summary":"API route not found","value":{"id":"req-4234567893","errors":[{"code":"route.notFound","title":"Route not found","detail":"The requested URL path does not match any defined API route. Please check the API documentation for valid endpoints."}]}}}}}},"RequestTimeoutResponse":{"description":"Request Timeout - The server did not receive a complete request within the allowed time","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"requestTimeout":{"summary":"Request timeout","value":{"id":"req-5234567890","errors":[{"code":"request.timeout","title":"Request timeout","detail":"The request took too long to process and was terminated. Try simplifying your request or try again later."}]}}}}}},"TooManyRequestsResponse":{"description":"Too Many Requests - API rate limit exceeded, reduce request frequency and retry after the indicated time","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimitExceeded":{"summary":"Rate limit exceeded","value":{"id":"req-7234567890","errors":[{"code":"rate.limitExceeded","title":"Rate limit exceeded","detail":"You have exceeded the allowed number of API requests. Please wait before making additional requests."}]}}}}}},"InternalServerErrorResponse":{"description":"Internal Server Error - An unexpected error occurred on the server, please retry or contact support","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"internalServerError":{"summary":"Unexpected server error","value":{"id":"req-8234567890","errors":[{"code":"internal.serverError","title":"Internal server error","detail":"An unexpected error occurred while processing your request. Please try again later. If the problem persists, contact support with the correlation ID."}]}}}}}},"UnprocessableEntityResponse":{"description":"Unprocessable Entity - Validation failed (e.g., missing required fields, unknown fields)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"validationFailed":{"summary":"Validation failed","value":{"id":"req-6234567890","errors":[{"code":"validation.failed","title":"Validation failed","detail":"One or more fields failed validation.","source":{"pointer":"/data/type"}}]}},"validationMultipleFields":{"summary":"Multiple validation errors","value":{"id":"req-6234567891","errors":[{"code":"validation.failed","title":"Validation failed","detail":"The field 'name' cannot be empty.","source":{"pointer":"/data/fields/name"}},{"code":"validation.failed","title":"Validation failed","detail":"The field 'type' has an unsupported value.","source":{"pointer":"/data/fields/type"}}]}},"referenceNotFound":{"summary":"Referenced resource not found","value":{"id":"req-6234567892","errors":[{"code":"validation.referenceNotFound","title":"Referenced resource not found","detail":"Referenced resource with ID '7a26ba09-db99-4041-8864-bcd16e8afc5e' was not found. It either does not exist or you do not have access to it.","source":{"pointer":"/data/fields/id"}}]}}}}}},"NoContentResponse":{"description":"The request was successful and no content is returned."},"ConflictResponse":{"description":"Conflict - Action cannot be performed due to current state or constraint violation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"uniqueConstraintViolation":{"summary":"Unique constraint violation","value":{"id":"req-9234567890","errors":[{"code":"conflict.uniqueViolation","title":"Unique constraint violation","detail":"A resource with this value already exists.","source":{"pointer":"/data/fields/name"}}]}}}}}}},"parameters":{"Id":{"in":"path","name":"id","required":true,"schema":{"$ref":"#/components/schemas/UUID"},"description":"Entity identifier."},"Fields":{"name":"fields[]","in":"query","required":false,"description":"Controls which fields are returned in the response to optimize bandwidth and tailor data to your needs.\n\n**Options:**\n- Not specified: Returns only fields with non-empty values (default)\n- `fields[]=all`: Returns all fields, including those with `null` values\n- `fields[]=name&fields[]=status`: Returns only the specified fields\n\nFor detailed usage, examples, and field discovery, see [Response Field Control](https://developer.productboard.com/v2.0.0/reference/response-field-control).\n","schema":{"type":"array","items":{"type":"string"}}},"PageCursor":{"name":"pageCursor","in":"query","required":false,"description":"Cursor for pagination. Use the value from `links.next` to fetch the next page.","schema":{"type":"string"}}}},"x-readme":{"samples-languages":["shell","javascript","ruby"]}}