{"components":{"examples":{},"headers":{},"parameters":{},"requestBodies":{},"responses":{},"schemas":{"Workspace":{"properties":{"id":{"type":"string"},"name":{"type":"string","nullable":true},"key":{"type":"string"},"webUrl":{"type":"string","description":"Canonical Craft.io app URL for this workspace. Computed in PublishService."}},"type":"object","additionalProperties":false},"GeneralErrorResponse":{"properties":{"message":{"type":"string"}},"required":["message"],"type":"object","additionalProperties":false},"CustomFieldOption":{"properties":{"id":{"type":"string"},"label":{"type":"string"},"startDate":{"type":"string","nullable":true},"endDate":{"type":"string","nullable":true}},"required":["id","label"],"type":"object","additionalProperties":false},"OptionShape":{"type":"string","enum":["select","date","date_range"]},"CustomField":{"properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"},"categoryId":{"type":"string","nullable":true},"categoryName":{"type":"string","nullable":true},"values":{"items":{"type":"string"},"type":"array"},"options":{"items":{"$ref":"#/components/schemas/CustomFieldOption"},"type":"array"},"optionShape":{"$ref":"#/components/schemas/OptionShape"},"multi":{"type":"boolean"},"source":{"type":"string","enum":["portal","workspace"]}},"required":["id","name","type"],"type":"object","additionalProperties":false},"Terminology":{"properties":{"category":{"type":"string"},"default":{"type":"string"},"customSingle":{"type":"string"},"customPlural":{"type":"string"}},"required":["category","default","customSingle"],"type":"object","additionalProperties":false},"TerminologyList_Terminology_":{"properties":{},"type":"object","additionalProperties":{"$ref":"#/components/schemas/Terminology"}},"StatusPhase":{"type":"string","enum":["open","in_progress","done","released"],"description":"Workflow bucket a status belongs to, mirroring the core's GlobalStatus states."},"ItemStatus":{"description":"A native workflow status as configured in the container's \"Workflow &\nstatuses\" settings — the whole configured list, including statuses no item\ncurrently uses (those are invisible to a caller that only reads items).","properties":{"id":{"type":"string"},"name":{"type":"string"},"phase":{"$ref":"#/components/schemas/StatusPhase","description":"Workflow bucket the UI groups the status under. Absent if unmapped."},"color":{"type":"string","nullable":true,"description":"Swatch shown in the UI, e.g. `#586CF5`."}},"required":["id","name"],"type":"object","additionalProperties":false},"Portfolio":{"properties":{"id":{"type":"string"},"name":{"type":"string","nullable":true},"workspaces":{"items":{"$ref":"#/components/schemas/Workspace"},"type":"array"},"webUrl":{"type":"string","description":"Canonical Craft.io app URL for this portfolio. Computed in PublishService."}},"required":["workspaces"],"type":"object","additionalProperties":false},"ViewSummary":{"properties":{"viewId":{"type":"string"},"name":{"type":"string"},"viewType":{"type":"string"},"ownerType":{"type":"string","enum":["personal","workspace"]},"category":{"type":"string"},"workspaceId":{"type":"string"},"portfolioId":{"type":"string"},"webUrl":{"type":"string"}},"required":["viewId","name","viewType","ownerType"],"type":"object","additionalProperties":false},"CategorySummary":{"properties":{"name":{"type":"string"},"scope":{"type":"string","enum":["workspace","personal"]}},"required":["name","scope"],"type":"object","additionalProperties":false},"ViewListResponse":{"description":"Saved views — the filters, grouping, sorting and columns a user has set up in\nthe app. Reading one lets a client work on exactly what the user sees;\ncreating one hands a result back to the user as something they can open.\n\nViews belong to a workspace or a portfolio, and are either personal (only the\nowner sees them) or workspace-wide (everyone, admins only to create). The\nroutes mirror that: the same five operations under both containers.","properties":{"views":{"items":{"$ref":"#/components/schemas/ViewSummary"},"type":"array"},"categories":{"items":{"$ref":"#/components/schemas/CategorySummary"},"type":"array","description":"Categories the container's views menu is organised by."},"canCreateWorkspaceViews":{"type":"boolean","description":"False when the caller may only create personal views here."},"page":{"type":"number","format":"double"},"limit":{"type":"number","format":"double"},"total":{"type":"number","format":"double"}},"required":["views","categories","canCreateWorkspaceViews","page","limit","total"],"type":"object","additionalProperties":false},"ViewControllers":{"properties":{"sortBy":{"type":"string"},"sortDirection":{"type":"string","enum":["asc","desc"]},"groupBy":{"type":"string"},"swimLanesBy":{"type":"string"}},"type":"object","additionalProperties":false},"Record_string.unknown_":{"properties":{},"type":"object","description":"Construct a type with a set of properties K of type T"},"Record_string.string_":{"properties":{},"type":"object","description":"Construct a type with a set of properties K of type T"},"UnsupportedFilter":{"description":"A filter the view holds that no list endpoint can reproduce.","properties":{"filter":{"type":"string"},"reason":{"type":"string"}},"required":["filter","reason"],"type":"object","additionalProperties":false},"WireView":{"description":"A view exactly as the views service stores it. Unknown props round-trip.","properties":{"id":{"type":"string"},"name":{"type":"string"},"categoryId":{"type":"string"},"workspaceId":{"type":"string"},"personId":{"type":"string","nullable":true},"ownerType":{"type":"string"},"viewType":{"type":"string"},"orderIndex":{"type":"string"},"category":{"type":"string","nullable":true},"nameId":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"viewFields":{"items":{"type":"string"},"type":"array","nullable":true},"compactViewFields":{"items":{"type":"string"},"type":"array","nullable":true},"compactMode":{"type":"string","nullable":true,"description":"Card density on a card-based view; empty string means never set."},"groupBy":{"type":"string","nullable":true},"groupByCustomFieldId":{"type":"string","nullable":true},"secondaryGroupBy":{"type":"string","nullable":true},"secondaryGroupByCustomFieldId":{"type":"string","nullable":true},"sortBy":{"type":"string","nullable":true},"sortByCustomFieldId":{"type":"string","nullable":true},"reverse":{"type":"boolean","nullable":true},"isChanged":{"type":"boolean"},"okrHierarchy":{"type":"string","nullable":true},"fieldFilters":{"allOf":[{"$ref":"#/components/schemas/Record_string.unknown_"}],"nullable":true},"filters":{"allOf":[{"$ref":"#/components/schemas/Record_string.unknown_"}],"nullable":true}},"type":"object","additionalProperties":{}},"ViewDetail":{"properties":{"viewId":{"type":"string"},"name":{"type":"string"},"viewType":{"type":"string"},"ownerType":{"type":"string","enum":["personal","workspace"]},"category":{"type":"string"},"workspaceId":{"type":"string"},"portfolioId":{"type":"string"},"webUrl":{"type":"string"},"controllers":{"$ref":"#/components/schemas/ViewControllers"},"columns":{"items":{"type":"string"},"type":"array"},"layout":{"items":{"type":"string"},"type":"array"},"compactMode":{"type":"string","description":"Card density on a card-based view: `compact` or `default`."},"filters":{"$ref":"#/components/schemas/Record_string.unknown_"},"listItemsParams":{"$ref":"#/components/schemas/Record_string.string_","description":"Pass straight to the tool named by `listItemsTool` to get the view's items."},"listItemsTool":{"type":"string","enum":["list_items","list_portfolio_items","list_feedback_items"],"description":"Which list tool `listItemsParams` belongs to. Feedback views are the reason\nthis is stated rather than assumed — their items are not work items."},"unsupportedFilters":{"items":{"$ref":"#/components/schemas/UnsupportedFilter"},"type":"array","description":"Filters the list endpoints cannot reproduce — the result will be wider."},"raw":{"$ref":"#/components/schemas/WireView","description":"Only when includeRaw was asked for: the full stored state."}},"required":["viewId","name","viewType","ownerType","controllers","filters","listItemsParams","listItemsTool"],"type":"object","additionalProperties":false},"ViewLookupResponse":{"description":"A name lookup resolves to one view, or reports every candidate so the caller\ncan narrow by ownerType / category. Two views may share a name — the id is\nthe identity, the name is a convenience.","properties":{"view":{"$ref":"#/components/schemas/ViewDetail"},"candidates":{"items":{"$ref":"#/components/schemas/ViewSummary"},"type":"array"}},"type":"object","additionalProperties":false},"ValidateErrorJSON":{"properties":{"message":{"type":"string"},"details":{"properties":{},"additionalProperties":{},"type":"object"}},"required":["message","details"],"type":"object","additionalProperties":false},"ViewDateRange":{"properties":{"from":{"type":"string","description":"ISO 8601 date."},"to":{"type":"string","description":"ISO 8601 date."}},"type":"object","additionalProperties":false},"ViewCustomFieldFilter":{"properties":{"id":{"type":"string","description":"Field id from get_workspace_custom_fields / get_portfolio_fields."},"values":{"items":{"type":"string"},"type":"array","description":"Option ids or labels."}},"required":["id","values"],"type":"object","additionalProperties":false},"ViewFiltersInput":{"description":"A view's filters, in the same vocabulary the item list endpoints use — so a\nfilter you can pass to list_items works here unchanged, and vice versa.\n\nEvery list takes ids OR names (names are resolved, and an unknown one is a\n422 naming the valid values). An empty list clears that filter. `\"-1\"` means\n\"items with no value set\", the same sentinel the app uses.\n\nPortfolio views: `assignee` does not apply, and quarter / sprint / importance\nare matched by name because a portfolio merges them across its workspaces.","properties":{"type":{"items":{"type":"string"},"type":"array","description":"Item types — the view's hierarchy control. e.g. `epic`, `feature`, `story`."},"status":{"items":{"type":"string"},"type":"array"},"importance":{"items":{"type":"string"},"type":"array"},"quarter":{"items":{"type":"string"},"type":"array","description":"Release / quarter."},"sprint":{"items":{"type":"string"},"type":"array"},"assignee":{"items":{"type":"string"},"type":"array","description":"Workspace views only."},"labels":{"items":{"type":"string"},"type":"array"},"createdBy":{"items":{"type":"string"},"type":"array"},"epic":{"items":{"type":"string"},"type":"array","description":"Ancestor epic ids."},"workspace":{"items":{"type":"string"},"type":"array","description":"Source workspace — mainly useful on portfolio views."},"initiative":{"items":{"type":"string"},"type":"array","description":"Linked portfolio initiative ids."},"objectives":{"items":{"type":"string"},"type":"array"},"keyResults":{"items":{"type":"string"},"type":"array"},"persona":{"items":{"type":"string"},"type":"array"},"statusCategory":{"items":{"type":"string"},"type":"array","description":"Workflow bucket: `open`, `inProgress`, `done`."},"startDate":{"$ref":"#/components/schemas/ViewDateRange","description":"Actual start date range."},"endDate":{"$ref":"#/components/schemas/ViewDateRange","description":"Actual end date range."},"customFields":{"items":{"$ref":"#/components/schemas/ViewCustomFieldFilter"},"type":"array"}},"type":"object","additionalProperties":false},"ViewControllersInput":{"properties":{"sortBy":{"type":"string","description":"Sort axis, e.g. `status`, `importance`, `hierarchy`, `custom:<fieldId>`."},"sortDirection":{"type":"string","enum":["asc","desc"]},"groupBy":{"type":"string","description":"Grouping axis. Not available on timeline views."},"swimLanesBy":{"type":"string","description":"Swim-lane axis. Timeline and swimlanes views only."}},"type":"object","additionalProperties":false},"ViewCreateBody":{"properties":{"name":{"type":"string"},"viewType":{"type":"string","description":"One of table, kanban, timeline, swimlanes, okr-table. Defaults to table."},"ownerType":{"type":"string","enum":["personal","workspace"],"description":"`personal` (default) or `workspace`. Workspace views need admin rights."},"category":{"type":"string","description":"Category name from the list endpoint. Required for workspace views."},"filters":{"$ref":"#/components/schemas/ViewFiltersInput","description":"Same vocabulary the item list endpoints accept."},"controllers":{"$ref":"#/components/schemas/ViewControllersInput"},"columns":{"items":{"type":"string"},"type":"array","description":"Visible columns, table and okr-table only."},"layout":{"items":{"type":"string"},"type":"array","description":"Card fields, kanban / timeline / swimlanes only."},"compactMode":{"type":"string","description":"Card density, kanban / timeline / swimlanes only: `compact` or `default`."}},"required":["name"],"type":"object","additionalProperties":false},"ViewUpdateBody":{"properties":{"name":{"type":"string"},"category":{"type":"string"},"filters":{"$ref":"#/components/schemas/ViewFiltersInput","description":"Merged per key onto the view's current filters: a key you pass replaces\nthat key, a key you omit is untouched, an empty list clears one key. Pass\n`replaceAllFilters` to drop everything you didn't send instead."},"replaceAllFilters":{"type":"boolean"},"controllers":{"$ref":"#/components/schemas/ViewControllersInput"},"columns":{"items":{"type":"string"},"type":"array","description":"Ordered visible columns — table and okr-table only. Replaces the current\nset outright; there is no per-column merge.\n\nSupported because the app changes columns on an existing view through the\nsame call. Without it an agent asked to add one column had to recreate the\nwhole view, which left the original behind as a duplicate."},"layout":{"items":{"type":"string"},"type":"array","description":"Card fields — kanban, timeline and swimlanes only. Replaces the current set."},"compactMode":{"type":"string","description":"Card density, kanban / timeline / swimlanes only: `compact` or `default`."}},"type":"object","additionalProperties":false},"SlackConnection":{"properties":{"workspaceId":{"type":"string"},"token":{"type":"string"},"slackTeamId":{"type":"string"},"slackInstallation":{"type":"string"},"isActive":{"type":"boolean"}},"type":"object","additionalProperties":false},"SlackPortal":{"properties":{"workspaceId":{"type":"string"},"portalId":{"type":"string"},"portalName":{"type":"string"},"token":{"type":"string"}},"type":"object","additionalProperties":false},"TeamInfo":{"properties":{"installation":{"$ref":"#/components/schemas/SlackConnection"},"portalList":{"items":{"$ref":"#/components/schemas/SlackPortal"},"type":"array"}},"required":["installation","portalList"],"type":"object","additionalProperties":false},"SlackTeamInfo":{"$ref":"#/components/schemas/TeamInfo"},"ConnectionUpdateRequest":{"properties":{"slackTeamId":{"type":"string"},"slackTeamName":{"type":"string"},"slackEnterpriseId":{"type":"string"},"slackEnterpriseName":{"type":"string"},"slackInstallation":{"type":"string"}},"required":["slackInstallation"],"type":"object","additionalProperties":false},"ApiKeyIntrospection":{"description":"Introspection endpoints for \"what is the current API key allowed to do\".\nUsed by clients (notably the MCP server) to self-filter the tools they expose.","properties":{"userId":{"type":"string","description":"The user this key authenticates as."},"accountId":{"type":"string","description":"The account this key belongs to."},"scopes":{"items":{"type":"string"},"type":"array","description":"Granted granular scope strings (already normalized)."},"resourceScope":{"properties":{"feedback_portals":{"items":{"type":"string"},"type":"array","nullable":true},"portfolios":{"items":{"type":"string"},"type":"array","nullable":true},"workspaces":{"items":{"type":"string"},"type":"array","nullable":true}},"type":"object","description":"Optional resource-scope narrowing. When a dimension is null/missing the key\nhas access to every instance the bound user can see; when present it is the\nexclusive allowlist of ids on that dimension."},"mcpAccess":{"type":"boolean"}},"required":["userId","accountId","scopes","resourceScope","mcpAccess"],"type":"object","additionalProperties":false},"Entity":{"properties":{"id":{"type":"string"},"name":{"type":"string","nullable":true}},"type":"object","additionalProperties":false},"NullableType_Entity_":{"allOf":[{"$ref":"#/components/schemas/Entity"}],"nullable":true},"NullableType_Entity-Array_":{"items":{"$ref":"#/components/schemas/Entity"},"type":"array","nullable":true},"Persona":{"properties":{"id":{"type":"string"},"name":{"type":"string","nullable":true},"position":{"type":"string"}},"required":["position"],"type":"object","additionalProperties":false},"NullableType_Persona_":{"allOf":[{"$ref":"#/components/schemas/Persona"}],"nullable":true},"NullableType_Persona-Array_":{"items":{"$ref":"#/components/schemas/Persona"},"type":"array","nullable":true},"EntityWithDates":{"properties":{"id":{"type":"string"},"name":{"type":"string","nullable":true},"startDate":{"type":"string","nullable":true},"endDate":{"type":"string","nullable":true}},"type":"object","additionalProperties":false},"NullableType_EntityWithDates_":{"allOf":[{"$ref":"#/components/schemas/EntityWithDates"}],"nullable":true},"EntityWithTerminology":{"properties":{"id":{"type":"string"},"name":{"type":"string","nullable":true},"customTermName":{"type":"string"}},"type":"object","additionalProperties":false},"NullableType_EntityWithTerminology-and-EntityWithDates_":{"allOf":[{"$ref":"#/components/schemas/EntityWithTerminology"},{"$ref":"#/components/schemas/EntityWithDates"}],"nullable":true},"Assignee":{"properties":{"id":{"type":"string"},"team":{"type":"string"},"user":{"type":"string"},"userId":{"type":"string"}},"type":"object","additionalProperties":false},"NullableType_Assignee_":{"allOf":[{"$ref":"#/components/schemas/Assignee"}],"nullable":true},"EntityParent":{"properties":{"id":{"type":"string"},"title":{"type":"string"},"shortId":{"type":"string"},"webUrl":{"type":"string","description":"Direct link to the parent item in the Craft.io app."}},"required":["id"],"type":"object","additionalProperties":false},"NullableType_EntityParent_":{"allOf":[{"$ref":"#/components/schemas/EntityParent"}],"nullable":true},"NullableType_string-or-number_":{"anyOf":[{"type":"string"},{"type":"number","format":"double"}],"nullable":true},"NullableType_string-Array_":{"items":{"type":"string"},"type":"array","nullable":true},"CustomFieldValue":{"properties":{"id":{"type":"string"},"name":{"type":"string"},"value":{"$ref":"#/components/schemas/NullableType_string-or-number_"},"values":{"$ref":"#/components/schemas/NullableType_string-Array_"},"label":{"type":"string"}},"required":["id"],"type":"object","additionalProperties":false},"OutIn":{"properties":{"quarter":{"type":"boolean"},"sprint":{"type":"boolean"}},"type":"object","additionalProperties":false},"Dependency":{"properties":{"id":{"type":"string"},"name":{"type":"string"},"value":{"type":"string","enum":["blocks","blocked by","related"]},"workspaceId":{"type":"string"},"portfolioId":{"type":"string"}},"required":["id","value"],"type":"object","additionalProperties":false},"NullableType__id%3F%3Astring.name%3F%3Astring__":{"properties":{"name":{"type":"string"},"id":{"type":"string"}},"type":"object","nullable":true},"FeedbackLink":{"properties":{"id":{"type":"string"},"shortId":{"type":"string"},"title":{"type":"string"},"status":{"$ref":"#/components/schemas/NullableType__id%3F%3Astring.name%3F%3Astring__"},"webUrl":{"type":"string","description":"Direct link into the feedback portal for this linked feedback item."}},"type":"object","additionalProperties":false},"NullableType_FeedbackLink-Array_":{"items":{"$ref":"#/components/schemas/FeedbackLink"},"type":"array","nullable":true},"ItemComment":{"properties":{"id":{"type":"string"},"author":{"$ref":"#/components/schemas/Entity"},"createdAt":{"type":"string","nullable":true},"body":{"type":"string"},"parentId":{"type":"string","nullable":true}},"type":"object","additionalProperties":false},"NullableType_string_":{"type":"string","nullable":true},"NullableType_Date_":{"type":"string","format":"date-time","nullable":true},"DevToolKeyList":{"properties":{"jira":{"type":"string"},"ado":{"type":"string"},"github":{"type":"string"},"gitlab":{"type":"string"},"pivotaltracker":{"type":"string"},"targetprocess":{"type":"string"}},"type":"object","additionalProperties":false},"Item":{"properties":{"id":{"$ref":"#/components/schemas/NullableType_string_"},"type":{"type":"string","description":"Workspace-facing type label — the workspace's custom terminology (e.g. \"Subtask\")."},"typeKey":{"type":"string","description":"Canonical type name (requirement/feature/idea/task/bug/epic/product/story/…) — the value the `type` filter and write endpoints accept, independent of workspace terminology."},"workspaceId":{"type":"string"},"portfolioId":{"type":"string"},"shortId":{"type":"string"},"title":{"type":"string"},"description":{"type":"string","nullable":true},"creationTime":{"type":"string","format":"date-time"},"updateTime":{"type":"string","format":"date-time"},"storyPoints":{"type":"number","format":"double"},"initiativeId":{"$ref":"#/components/schemas/NullableType_string_"},"value":{"type":"number","format":"double"},"effort":{"type":"number","format":"double"},"kano":{"type":"string"},"estimatedHours":{"type":"number","format":"double"},"labels":{"items":{"type":"string"},"type":"array"},"actualStartDate":{"$ref":"#/components/schemas/NullableType_Date_"},"actualEndDate":{"$ref":"#/components/schemas/NullableType_Date_"},"devToolKey":{"$ref":"#/components/schemas/DevToolKeyList"},"webUrl":{"type":"string","description":"Canonical Craft.io app URL for this item. Computed in PublishService."},"status":{"$ref":"#/components/schemas/NullableType_Entity_"},"importance":{"$ref":"#/components/schemas/NullableType_Entity_"},"objective":{"$ref":"#/components/schemas/NullableType_Entity_"},"keyResult":{"$ref":"#/components/schemas/NullableType_Entity_"},"objectives":{"$ref":"#/components/schemas/NullableType_Entity-Array_"},"keyResults":{"$ref":"#/components/schemas/NullableType_Entity-Array_"},"persona":{"$ref":"#/components/schemas/NullableType_Persona_"},"personas":{"$ref":"#/components/schemas/NullableType_Persona-Array_"},"sprint":{"$ref":"#/components/schemas/NullableType_EntityWithDates_"},"quarter":{"$ref":"#/components/schemas/NullableType_EntityWithTerminology-and-EntityWithDates_"},"assignee":{"$ref":"#/components/schemas/NullableType_Assignee_"},"parent":{"$ref":"#/components/schemas/NullableType_EntityParent_"},"createdBy":{"$ref":"#/components/schemas/Entity"},"customFields":{"items":{"$ref":"#/components/schemas/CustomFieldValue"},"type":"array"},"outIn":{"$ref":"#/components/schemas/OutIn"},"dependencies":{"items":{"$ref":"#/components/schemas/Dependency"},"type":"array"},"feedbackLinks":{"$ref":"#/components/schemas/NullableType_FeedbackLink-Array_"},"commentCount":{"type":"number","format":"double"},"comments":{"items":{"$ref":"#/components/schemas/ItemComment"},"type":"array"}},"type":"object","additionalProperties":false},"ItemFlat":{"properties":{"id":{"$ref":"#/components/schemas/NullableType_string_"},"type":{"type":"string","description":"Workspace-facing type label — the workspace's custom terminology (e.g. \"Subtask\")."},"typeKey":{"type":"string","description":"Canonical type name (requirement/feature/idea/task/bug/epic/product/story/…) — the value the `type` filter and write endpoints accept, independent of workspace terminology."},"workspaceId":{"type":"string"},"portfolioId":{"type":"string"},"shortId":{"type":"string"},"title":{"type":"string"},"description":{"type":"string","nullable":true},"creationTime":{"type":"string","format":"date-time"},"updateTime":{"type":"string","format":"date-time"},"storyPoints":{"type":"number","format":"double"},"initiativeId":{"$ref":"#/components/schemas/NullableType_string_"},"value":{"type":"number","format":"double"},"effort":{"type":"number","format":"double"},"kano":{"type":"string"},"estimatedHours":{"type":"number","format":"double"},"labels":{"items":{"type":"string"},"type":"array"},"actualStartDate":{"$ref":"#/components/schemas/NullableType_Date_"},"actualEndDate":{"$ref":"#/components/schemas/NullableType_Date_"},"devToolKey":{"$ref":"#/components/schemas/DevToolKeyList"},"webUrl":{"type":"string","description":"Canonical Craft.io app URL for this item. Computed in PublishService."},"status_id":{"type":"string"},"status_name":{"type":"string"},"importance_id":{"type":"string"},"importance_name":{"type":"string"},"objective_id":{"type":"string"},"objective_name":{"type":"string"},"keyResult_id":{"type":"string"},"keyResult_name":{"type":"string"},"persona_id":{"type":"string"},"persona_name":{"type":"string"},"sprint_id":{"type":"string"},"sprint_name":{"type":"string"},"quarter_id":{"type":"string"},"quarter_name":{"type":"string"},"assignee_id":{"type":"string"},"assignee_team":{"type":"string"},"assignee_user":{"type":"string"},"parent_id":{"type":"string","nullable":true},"parent_name":{"type":"string","nullable":true},"parent_shortId":{"type":"string","nullable":true},"devToolKey_jira":{"type":"string"},"devToolKey_ado":{"type":"string"},"devToolKey_github":{"type":"string"},"devToolKey_gitlab":{"type":"string"},"devToolKey_pivotaltracker":{"type":"string"},"devToolKey_targetprocess":{"type":"string"},"sprint_startDate":{"type":"string","nullable":true},"sprint_endDate":{"type":"string","nullable":true},"quarter_startDate":{"type":"string","nullable":true},"quarter_endDate":{"type":"string","nullable":true}},"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"},{"type":"boolean"},{"type":"string","format":"date-time"},{"type":"number","format":"double"},{"$ref":"#/components/schemas/DevToolKeyList"}],"nullable":true}},"PaginationMetadata":{"properties":{"currentPage":{"type":"number","format":"double"},"perPage":{"type":"number","format":"double"},"totalPages":{"type":"number","format":"double"},"totalRecords":{"type":"number","format":"double"}},"required":["currentPage","perPage","totalPages","totalRecords"],"type":"object","additionalProperties":false},"ItemsPaginated_Item_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/Item"},"type":"array"},"metadata":{"$ref":"#/components/schemas/PaginationMetadata"}},"required":["items","metadata"],"type":"object","additionalProperties":false},"ItemsPaginated_ItemFlat_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ItemFlat"},"type":"array"},"metadata":{"$ref":"#/components/schemas/PaginationMetadata"}},"required":["items","metadata"],"type":"object","additionalProperties":false},"Pick_Item.Exclude_keyofItem.workspaceId-or-initiativeId-or-sprint-or-quarter-or-assignee-or-storyPoints-or-estimatedHours-or-objective-or-keyResult-or-persona-or-personas-or-parent-or-labels-or-kano__":{"properties":{"status":{"$ref":"#/components/schemas/NullableType_Entity_"},"importance":{"$ref":"#/components/schemas/NullableType_Entity_"},"objectives":{"$ref":"#/components/schemas/NullableType_Entity-Array_"},"keyResults":{"$ref":"#/components/schemas/NullableType_Entity-Array_"},"createdBy":{"$ref":"#/components/schemas/Entity"},"customFields":{"items":{"$ref":"#/components/schemas/CustomFieldValue"},"type":"array"},"outIn":{"$ref":"#/components/schemas/OutIn"},"dependencies":{"items":{"$ref":"#/components/schemas/Dependency"},"type":"array"},"feedbackLinks":{"$ref":"#/components/schemas/NullableType_FeedbackLink-Array_"},"commentCount":{"type":"number","format":"double"},"comments":{"items":{"$ref":"#/components/schemas/ItemComment"},"type":"array"},"id":{"$ref":"#/components/schemas/NullableType_string_"},"type":{"type":"string","description":"Workspace-facing type label — the workspace's custom terminology (e.g. \"Subtask\")."},"typeKey":{"type":"string","description":"Canonical type name (requirement/feature/idea/task/bug/epic/product/story/…) — the value the `type` filter and write endpoints accept, independent of workspace terminology."},"portfolioId":{"type":"string"},"shortId":{"type":"string"},"title":{"type":"string"},"description":{"type":"string","nullable":true},"creationTime":{"type":"string","format":"date-time"},"updateTime":{"type":"string","format":"date-time"},"value":{"type":"number","format":"double"},"effort":{"type":"number","format":"double"},"actualStartDate":{"$ref":"#/components/schemas/NullableType_Date_"},"actualEndDate":{"$ref":"#/components/schemas/NullableType_Date_"},"devToolKey":{"$ref":"#/components/schemas/DevToolKeyList"},"webUrl":{"type":"string","description":"Canonical Craft.io app URL for this item. Computed in PublishService."}},"type":"object","description":"From T, pick a set of properties whose keys are in the union K"},"Omit_Item.workspaceId-or-initiativeId-or-sprint-or-quarter-or-assignee-or-storyPoints-or-estimatedHours-or-objective-or-keyResult-or-persona-or-personas-or-parent-or-labels-or-kano_":{"$ref":"#/components/schemas/Pick_Item.Exclude_keyofItem.workspaceId-or-initiativeId-or-sprint-or-quarter-or-assignee-or-storyPoints-or-estimatedHours-or-objective-or-keyResult-or-persona-or-personas-or-parent-or-labels-or-kano__","description":"Construct a type with the properties of T except for those in type K."},"Initiative":{"$ref":"#/components/schemas/Omit_Item.workspaceId-or-initiativeId-or-sprint-or-quarter-or-assignee-or-storyPoints-or-estimatedHours-or-objective-or-keyResult-or-persona-or-personas-or-parent-or-labels-or-kano_"},"ItemsPaginated_Initiative_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/Initiative"},"type":"array"},"metadata":{"$ref":"#/components/schemas/PaginationMetadata"}},"required":["items","metadata"],"type":"object","additionalProperties":false},"EntityId":{"properties":{"id":{"type":"string"}},"type":"object","additionalProperties":false},"ParentRef":{"anyOf":[{"$ref":"#/components/schemas/EntityId"},{"type":"string"}],"description":"A reference to a parent item on a write.\n\nAccepts the object form `{ id }` and a bare id string, because the read and\nfilter side of this API spells the same relationship as a plain\n`parentId=<id>` — so a plain string is what most callers try first, and it\nused to fail with a raw tsoa union dump that never mentioned the object form.\nEither spelling takes a numeric id or a `KEY-N` shortId."},"NullableType_ParentRef_":{"allOf":[{"$ref":"#/components/schemas/ParentRef"}],"nullable":true},"NullableType_number_":{"type":"number","format":"double","nullable":true},"NullableType_EntityId_":{"allOf":[{"$ref":"#/components/schemas/EntityId"}],"nullable":true},"NullableType_EntityId-Array_":{"items":{"$ref":"#/components/schemas/EntityId"},"type":"array","nullable":true},"ItemCreate":{"properties":{"type":{"type":"string"},"workspaceId":{"type":"string"},"portfolioId":{"type":"string"},"title":{"type":"string"},"parent":{"$ref":"#/components/schemas/NullableType_ParentRef_"},"description":{"type":"string","nullable":true},"storyPoints":{"$ref":"#/components/schemas/NullableType_number_"},"initiativeId":{"$ref":"#/components/schemas/NullableType_string_"},"value":{"$ref":"#/components/schemas/NullableType_number_"},"effort":{"$ref":"#/components/schemas/NullableType_number_"},"kano":{"$ref":"#/components/schemas/NullableType_string_"},"estimatedHours":{"$ref":"#/components/schemas/NullableType_number_"},"labels":{"items":{"type":"string"},"type":"array"},"actualStartDate":{"$ref":"#/components/schemas/NullableType_Date_"},"actualEndDate":{"$ref":"#/components/schemas/NullableType_Date_"},"status":{"$ref":"#/components/schemas/NullableType_EntityId_"},"importance":{"$ref":"#/components/schemas/NullableType_EntityId_"},"objectives":{"$ref":"#/components/schemas/NullableType_EntityId-Array_"},"keyResults":{"$ref":"#/components/schemas/NullableType_EntityId-Array_"},"persona":{"$ref":"#/components/schemas/NullableType_EntityId_"},"personas":{"$ref":"#/components/schemas/NullableType_EntityId-Array_"},"sprint":{"$ref":"#/components/schemas/NullableType_EntityId_"},"quarter":{"$ref":"#/components/schemas/NullableType_EntityId_"},"assignee":{"description":"`null` to unassign, or an object `{ team: \"<team name>\" }` (team required)\nwith optional `user: \"<member email>\"` to assign a specific person — shape\nmatches the read-side `assignee` object (the `Assignee` component). Typed\n`unknown` on purpose: the shape is validated by assertAssignee so every wrong\nshape gets one clear message instead of a raw tsoa union error.","example":{"team":"Team A","user":"a@b.com"}},"customFields":{"items":{"$ref":"#/components/schemas/CustomFieldValue"},"type":"array"},"outIn":{"$ref":"#/components/schemas/OutIn"}},"required":["type","title"],"type":"object","additionalProperties":false},"ItemUpdate":{"properties":{"id":{"type":"string"},"title":{"type":"string"},"parent":{"$ref":"#/components/schemas/NullableType_ParentRef_"},"description":{"type":"string","nullable":true},"storyPoints":{"$ref":"#/components/schemas/NullableType_number_"},"initiativeId":{"$ref":"#/components/schemas/NullableType_string_"},"value":{"$ref":"#/components/schemas/NullableType_number_"},"effort":{"$ref":"#/components/schemas/NullableType_number_"},"kano":{"$ref":"#/components/schemas/NullableType_string_"},"estimatedHours":{"$ref":"#/components/schemas/NullableType_number_"},"labels":{"items":{"type":"string"},"type":"array"},"actualStartDate":{"$ref":"#/components/schemas/NullableType_Date_"},"actualEndDate":{"$ref":"#/components/schemas/NullableType_Date_"},"status":{"$ref":"#/components/schemas/NullableType_EntityId_"},"importance":{"$ref":"#/components/schemas/NullableType_EntityId_"},"objectives":{"$ref":"#/components/schemas/NullableType_EntityId-Array_"},"keyResults":{"$ref":"#/components/schemas/NullableType_EntityId-Array_"},"persona":{"$ref":"#/components/schemas/NullableType_EntityId_"},"personas":{"$ref":"#/components/schemas/NullableType_EntityId-Array_"},"sprint":{"$ref":"#/components/schemas/NullableType_EntityId_"},"quarter":{"$ref":"#/components/schemas/NullableType_EntityId_"},"assignee":{"description":"`null` to unassign, or an object `{ team: \"<team name>\" }` (team required)\nwith optional `user: \"<member email>\"` to assign a specific person — shape\nmatches the read-side `assignee` object (the `Assignee` component). Typed\n`unknown` on purpose: the shape is validated by assertAssignee so every wrong\nshape gets one clear message instead of a raw tsoa union error.","example":{"team":"Team A","user":"a@b.com"}},"customFields":{"items":{"$ref":"#/components/schemas/CustomFieldValue"},"type":"array"},"outIn":{"$ref":"#/components/schemas/OutIn"}},"required":["id"],"type":"object","additionalProperties":false},"AddCommentRequest":{"properties":{"body":{"type":"string","description":"Plain-text comment body (non-empty). Mentions are not supported yet."}},"required":["body"],"type":"object","additionalProperties":false},"DependencyWrite":{"properties":{"itemId":{"type":"string"},"relatedItemId":{"type":"string"},"type":{"type":"string","enum":["blocks","blocked by","related"],"nullable":true},"removed":{"type":"boolean"}},"required":["itemId","relatedItemId","type","removed"],"type":"object","additionalProperties":false},"DependencyWriteRequest":{"properties":{"relatedItemId":{"type":"string","description":"The other item in the relation: numeric ID or shortId `KEY-N`."},"type":{"type":"string","description":"Relation type, directional from the path item: \"item <type> relatedItem\".\nOne of `blocks`, `blocked by`, `related`. Required unless remove=true. Typed\n`string` (not a union) so an invalid value gets one clear controller message\n(\"type must be one of: …\") instead of a raw tsoa union error."},"remove":{"type":"boolean","description":"true = delete the dependency between the two items (type is ignored)."}},"required":["relatedItemId"],"type":"object","additionalProperties":false},"BulkItemResult":{"description":"Per-item outcome of a bulk write. `index` is the position in the request's\n`items` array so the caller can correlate (and retry only the failures).\nOn success `id` carries the created/updated item id; on failure `error`\ncarries the message + HTTP-status code. `item`/`result` are present only when\nthe request asked for verbose output.","properties":{"index":{"type":"number","format":"double"},"status":{"type":"string","enum":["ok","error"]},"id":{"type":"string"},"mode":{"type":"string"},"error":{"properties":{"code":{"type":"number","format":"double"},"message":{"type":"string"}},"required":["code","message"],"type":"object"},"item":{},"result":{}},"required":["index","status"],"type":"object","additionalProperties":false},"BulkWriteSummary":{"properties":{"total":{"type":"number","format":"double"},"succeeded":{"type":"number","format":"double"},"failed":{"type":"number","format":"double"}},"required":["total","succeeded","failed"],"type":"object","additionalProperties":false},"BulkWriteResult":{"properties":{"results":{"items":{"$ref":"#/components/schemas/BulkItemResult"},"type":"array"},"summary":{"$ref":"#/components/schemas/BulkWriteSummary"}},"required":["results","summary"],"type":"object","additionalProperties":false},"BulkWriteOptions":{"properties":{"verbose":{"type":"boolean","description":"Return the full item body for each successful row (default: compact)."}},"type":"object","additionalProperties":false},"BulkItemCreateRequest":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ItemCreate"},"type":"array"},"options":{"$ref":"#/components/schemas/BulkWriteOptions"}},"required":["items"],"type":"object","additionalProperties":false},"BulkItemUpdateRequest":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ItemUpdate"},"type":"array"},"options":{"$ref":"#/components/schemas/BulkWriteOptions"}},"required":["items"],"type":"object","additionalProperties":false},"FeedbackPortal":{"properties":{"id":{"type":"string"},"name":{"type":"string","nullable":true},"url":{"type":"string"},"workspaces":{"items":{"$ref":"#/components/schemas/Workspace"},"type":"array"},"webUrl":{"type":"string","description":"Fully-qualified portal URL (https://{slug}.{FPURL}). Convenience over `url`."}},"type":"object","additionalProperties":false},"PortalImportance":{"properties":{"id":{"type":"string"},"name":{"type":"string"},"isDefault":{"type":"boolean","description":"True when this importance is the portal's default — used by create_feedback when `importanceId` is omitted."}},"required":["id","name"],"type":"object","additionalProperties":false},"Category":{"properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"],"type":"object","additionalProperties":false},"Person":{"properties":{"id":{"type":"string"},"name":{"type":"string","nullable":true},"email":{"type":"string"}},"type":"object","additionalProperties":false},"LinkedItem":{"properties":{"id":{"type":"string"},"shortId":{"type":"string"},"title":{"type":"string"},"webUrl":{"type":"string","description":"Direct link to the linked work item in the Craft.io app."}},"type":"object","additionalProperties":false},"NullableType_LinkedItem-Array_":{"items":{"$ref":"#/components/schemas/LinkedItem"},"type":"array","nullable":true},"BaseFeedbackItem":{"properties":{"id":{"type":"string"},"portalId":{"type":"string"},"shortId":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"creationTime":{"type":"string","format":"date-time"},"updateTime":{"type":"string","format":"date-time"},"category":{"$ref":"#/components/schemas/Category"},"company":{"$ref":"#/components/schemas/Entity"},"owner":{"$ref":"#/components/schemas/Person"},"createdBy":{"$ref":"#/components/schemas/Person"},"status":{"$ref":"#/components/schemas/Entity"},"internalStatus":{"$ref":"#/components/schemas/Entity"},"importance":{"$ref":"#/components/schemas/Entity"},"labels":{"items":{"type":"string"},"type":"array"},"customFields":{"items":{"$ref":"#/components/schemas/CustomFieldValue"},"type":"array"},"linkedItems":{"$ref":"#/components/schemas/NullableType_LinkedItem-Array_"},"commentCount":{"type":"number","format":"double"},"comments":{"items":{"$ref":"#/components/schemas/ItemComment"},"type":"array"},"internalNoteCount":{"type":"number","format":"double"},"internalNotes":{"items":{"$ref":"#/components/schemas/ItemComment"},"type":"array"},"webUrl":{"type":"string","description":"Direct link into the feedback portal for this feedback item."}},"required":["id"],"type":"object","additionalProperties":false},"FeedbackItem":{"$ref":"#/components/schemas/BaseFeedbackItem"},"FeedbackItemsPaginated_FeedbackItem_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/FeedbackItem"},"type":"array"},"metadata":{"$ref":"#/components/schemas/PaginationMetadata"}},"required":["items","metadata"],"type":"object","additionalProperties":false},"ConnectFeedbackResponse":{"properties":{"feedbackItemId":{"type":"string"},"connectedItemIds":{"items":{"type":"string"},"type":"array","description":"IDs of the work items now linked to the feedback item."}},"required":["feedbackItemId","connectedItemIds"],"type":"object","additionalProperties":false},"ConnectFeedbackRequest":{"properties":{"itemIds":{"items":{"type":"string"},"type":"array","description":"IDs of existing work items to connect this feedback item to."}},"required":["itemIds"],"type":"object","additionalProperties":false},"DisconnectFeedbackResponse":{"properties":{"feedbackItemId":{"type":"string"},"connectedItemIds":{"items":{"type":"string"},"type":"array","description":"IDs of the work items still linked to the feedback item after the unlink."},"disconnected":{"items":{"type":"string"},"type":"array","description":"IDs that were actually unlinked by this call."},"notFound":{"items":{"type":"string"},"type":"array","description":"Requested IDs that were not unlinked because they weren't linked (or don't\nexist) — lets the caller distinguish a real disconnect from a no-op."}},"required":["feedbackItemId","connectedItemIds","disconnected","notFound"],"type":"object","additionalProperties":false},"DisconnectFeedbackRequest":{"properties":{"itemIds":{"items":{"type":"string"},"type":"array","description":"IDs of work items to unlink from this feedback item. Ids that aren't\ncurrently linked are silently ignored (the call is idempotent)."}},"required":["itemIds"],"type":"object","additionalProperties":false},"PromoteFeedbackResponse":{"properties":{"feedbackItemId":{"type":"string"},"createdItemId":{"type":"string","description":"ID of the newly created work item linked to the feedback item."},"shortId":{"type":"string","description":"ShortId of the new work item (e.g. `CRK-1234`)."},"createdItemType":{"type":"string","description":"Type of the new work item, derived from the parent (theme→epic, epic→story/\nbug/task/requirement, leaf→sub-task). Lets the caller confirm what was made."},"webUrl":{"type":"string","description":"Direct link to the new work item in the Craft.io app."}},"required":["feedbackItemId","createdItemId"],"type":"object","additionalProperties":false},"PromoteFeedbackRequest":{"properties":{"parentItemId":{"type":"string","description":"ID of the existing work item to create the promoted item under."},"promotedItemType":{"type":"string","description":"Optional type for the new item when the parent is an epic (ignored for\nother parents — a theme yields an epic, a leaf item yields a sub-task).\nOne of: story, bug, task, requirement (case-insensitive). Defaults to `story`.\nTyped as string (not a literal union) so an invalid value yields a single\nclean 422 instead of tsoa's noisy 4-way union mismatch."}},"required":["parentItemId"],"type":"object","additionalProperties":false},"UpdateFeedbackRequest":{"properties":{"title":{"type":"string","description":"New title (non-empty, max 256 chars)."},"description":{"$ref":"#/components/schemas/NullableType_string_","description":"Description. `null` clears it."},"categoryId":{"$ref":"#/components/schemas/NullableType_string_","description":"Category id (from get_portal_categories). A feedback item always has a\ncategory, so `null` resets it to the portal's default (it does not become\nuncategorized)."},"importanceId":{"$ref":"#/components/schemas/NullableType_string_","description":"Importance — numeric id OR exact name (from get_portal_importances). `null` clears (un-prioritized)."},"statusId":{"type":"string","description":"Portal status — numeric id OR exact name (e.g. `Released`)."},"internalStatusId":{"type":"string","description":"Internal status — numeric id OR exact name (e.g. `Under consideration`)."},"company":{"$ref":"#/components/schemas/NullableType_string_","description":"Customer company — numeric id OR exact name (from get_portal_companies). `null` clears the association."},"labels":{"$ref":"#/components/schemas/NullableType_string-Array_","description":"Label names (replaces the item's labels). `null` or `[]` clears them."},"customFields":{"items":{"$ref":"#/components/schemas/CustomFieldValue"},"type":"array"},"connectedItemIds":{"items":{"type":"string"},"type":"array","description":"Existing work item ids to additionally connect to this feedback item."}},"type":"object","additionalProperties":false},"AddFeedbackCommentRequest":{"properties":{"body":{"type":"string","description":"Plain-text body (non-empty). Mentions are not supported yet."},"internal":{"type":"boolean","description":"true = private internal team note; false/omitted = public portal comment."}},"required":["body"],"type":"object","additionalProperties":false},"BulkFeedbackUpdateItem":{"description":"One feedback update in a bulk call — an UpdateFeedbackRequest plus the id.","properties":{"title":{"type":"string","description":"New title (non-empty, max 256 chars)."},"description":{"$ref":"#/components/schemas/NullableType_string_","description":"Description. `null` clears it."},"categoryId":{"$ref":"#/components/schemas/NullableType_string_","description":"Category id (from get_portal_categories). A feedback item always has a\ncategory, so `null` resets it to the portal's default (it does not become\nuncategorized)."},"importanceId":{"$ref":"#/components/schemas/NullableType_string_","description":"Importance — numeric id OR exact name (from get_portal_importances). `null` clears (un-prioritized)."},"statusId":{"type":"string","description":"Portal status — numeric id OR exact name (e.g. `Released`)."},"internalStatusId":{"type":"string","description":"Internal status — numeric id OR exact name (e.g. `Under consideration`)."},"company":{"$ref":"#/components/schemas/NullableType_string_","description":"Customer company — numeric id OR exact name (from get_portal_companies). `null` clears the association."},"labels":{"$ref":"#/components/schemas/NullableType_string-Array_","description":"Label names (replaces the item's labels). `null` or `[]` clears them."},"customFields":{"items":{"$ref":"#/components/schemas/CustomFieldValue"},"type":"array"},"connectedItemIds":{"items":{"type":"string"},"type":"array","description":"Existing work item ids to additionally connect to this feedback item."},"feedbackItemId":{"type":"string","description":"Feedback item to update — numeric id or `KEY-N` shortId."}},"required":["feedbackItemId"],"type":"object","additionalProperties":false},"BulkFeedbackUpdateRequest":{"properties":{"items":{"items":{"$ref":"#/components/schemas/BulkFeedbackUpdateItem"},"type":"array"},"options":{"$ref":"#/components/schemas/BulkWriteOptions"}},"required":["items"],"type":"object","additionalProperties":false},"BulkFeedbackConnectionItem":{"description":"One connection op in a bulk call. Fields used depend on `mode`.","properties":{"feedbackItemId":{"type":"string","description":"Feedback item — numeric id or `KEY-N` shortId."},"mode":{"type":"string","enum":["connect","disconnect","promote"]},"itemIds":{"items":{"type":"string"},"type":"array","description":"connect / disconnect: work item ids to link / unlink."},"parentItemId":{"type":"string","description":"promote: existing work item to create the promoted item under."},"promotedItemType":{"type":"string","enum":["story","bug","task","requirement"],"description":"promote (epic parent only): type for the created item."}},"required":["feedbackItemId","mode"],"type":"object","additionalProperties":false},"BulkFeedbackConnectionRequest":{"properties":{"items":{"items":{"$ref":"#/components/schemas/BulkFeedbackConnectionItem"},"type":"array"},"options":{"$ref":"#/components/schemas/BulkWriteOptions"}},"required":["items"],"type":"object","additionalProperties":false},"PortalCompany":{"properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"],"type":"object","additionalProperties":false},"PlainIdeaRequest":{"properties":{"workspaceId":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"owner":{"type":"string","description":"Email address of the idea author. The backend looks up (or creates) the\nperson record from this email and attributes the feedback to them. This\nis NOT a user ID — sending anything that is not an email address returns\n422 (`owner must be a valid email address`), like every other value error here.","example":"user@example.com"},"categoryId":{"type":"string"},"labels":{"items":{"type":"string"},"type":"array"},"importanceId":{"type":"string","description":"Portal importance — numeric ID OR exact name (case-insensitive). When\nomitted, the portal's `isDefault: true` importance is used (see\n`GET /feedback_portal/{portalId}/importances`).","example":"Critical"},"company":{"type":"string","description":"Customer company — numeric ID OR exact name (case-insensitive). Resolve via\n`GET /feedback_portal/{portalId}/companies`."}},"required":["title"],"type":"object","additionalProperties":false},"IdeaRequest":{"properties":{"workspaceId":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"owner":{"type":"string","description":"Email address of the idea author. The backend looks up (or creates) the\nperson record from this email and attributes the feedback to them. This\nis NOT a user ID — sending anything that is not an email address returns\n422 (`owner must be a valid email address`), like every other value error here.","example":"user@example.com"},"categoryId":{"type":"string"},"labels":{"items":{"type":"string"},"type":"array"},"importanceId":{"type":"string","description":"Portal importance — numeric ID OR exact name (case-insensitive). When\nomitted, the portal's `isDefault: true` importance is used (see\n`GET /feedback_portal/{portalId}/importances`).","example":"Critical"},"company":{"type":"string","description":"Customer company — numeric ID OR exact name (case-insensitive). Resolve via\n`GET /feedback_portal/{portalId}/companies`."},"customFields":{"items":{"$ref":"#/components/schemas/CustomFieldValue"},"type":"array"}},"required":["title"],"type":"object","additionalProperties":false},"FormCustomField":{"properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"},"categoryId":{"type":"string","nullable":true},"categoryName":{"type":"string","nullable":true},"values":{"items":{"type":"string"},"type":"array"},"options":{"items":{"$ref":"#/components/schemas/CustomFieldOption"},"type":"array"},"optionShape":{"$ref":"#/components/schemas/OptionShape"},"multi":{"type":"boolean"},"source":{"type":"string","enum":["portal","workspace"]},"required":{"type":"boolean"}},"required":["id","name","type","required"],"type":"object","additionalProperties":false},"PortalForm":{"properties":{"id":{"type":"string"},"name":{"type":"string"},"categories":{"items":{"$ref":"#/components/schemas/Entity"},"type":"array"},"fields":{"items":{"$ref":"#/components/schemas/FormCustomField"},"type":"array"}},"required":["id","name","categories","fields"],"type":"object","additionalProperties":false}},"securitySchemes":{"api_key":{"type":"apiKey","in":"header","name":"x-api-key"}}},"info":{"title":"Craft.io Public API","version":"1.0.0","description":"Our platform provides a set of comprehensive public APIs that allows users and applications to access and retrieve data about working items within our system.\n\nWith our API, users can easily integrate item information into their own applications, such as dashboards or organizational tools for customer service, sales, and marketing.\n\nOur API supports a variety of data formats and retrieval methods, making it easy to customize and integrate with your existing systems. Whether you're looking to build custom reports, track inventory, or monitor sales trends, our API provides the flexibility and scalability you need to get the job done.\n\nFor getting an API key just approach our support team at [support@craft.io](mailto:support@craft.io) or on the app chat (‘contact support’).","license":{"name":"Terms and conditions","url":"https://craft.io/terms-and-conditions/"}},"openapi":"3.0.0","paths":{"/workspaces/{accountId}":{"get":{"operationId":"GetWorkspaces","responses":{"200":{"description":"A list of workspaces","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/Workspace"},"type":"array"},"examples":{"Example 1":{"value":[{"id":"string","name":"string","key":"string"},{"id":"string","name":"string","key":"string"}]}}}}},"400":{"description":"Invalid account ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"401":{"description":"No access to account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"500":{"description":"An error occurred while fetching workspaces","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}}},"description":"Get the list of your account’s workspaces (workspace ID & name)","tags":["Workspaces"],"security":[{"api_key":["read:workspace-meta:craft"]}],"parameters":[{"in":"path","name":"accountId","required":true,"schema":{"type":"string"}}]}},"/workspaces":{"get":{"operationId":"GetWorkspacesByKey","responses":{"200":{"description":"A list of workspaces","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/Workspace"},"type":"array"},"examples":{"Example 1":{"value":[{"id":"string","name":"string","key":"string"},{"id":"string","name":"string","key":"string"}]}}}}},"401":{"description":"No access to account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"500":{"description":"An error occurred while fetching workspaces","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}}},"description":"Get the list of your account’s workspaces (workspace ID & name)","tags":["Workspaces"],"security":[{"api_key":["read:workspace-meta:craft"]}],"parameters":[]}},"/workspace/{workspaceId}/custom_fields":{"get":{"operationId":"GetCustomFields","responses":{"200":{"description":"A list of workspace custom fields and their metadata","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CustomField"},"type":"array"}}}},"400":{"description":"Invalid account ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"401":{"description":"No access to account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"500":{"description":"An error occurred while fetching custom fields","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}}},"description":"Get the list of all workspace custom fields and their metadata","tags":["Workspaces"],"security":[{"api_key":["read:workspace-meta:craft"]}],"parameters":[{"in":"path","name":"workspaceId","required":true,"schema":{"type":"string"}},{"in":"query","name":"includeOptions","required":false,"schema":{"default":false,"type":"boolean"}}]}},"/workspace/{workspaceId}/terminology":{"get":{"operationId":"GetTerminology","responses":{"200":{"description":"A list of workspace entities terminology","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TerminologyList_Terminology_"}}}},"400":{"description":"Invalid workspace ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"401":{"description":"No access to account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"500":{"description":"An error occurred while fetching terminology","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}}},"description":"Get the list of the workspace entities terminology","tags":["Workspaces"],"security":[{"api_key":["read:workspace-meta:craft"]}],"parameters":[{"in":"path","name":"workspaceId","required":true,"schema":{"type":"string"}}]}},"/workspace/{workspaceId}/statuses":{"get":{"operationId":"GetWorkspaceStatuses","responses":{"200":{"description":"A list of the workspace’s statuses","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ItemStatus"},"type":"array"}}}},"400":{"description":"Invalid workspace ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"401":{"description":"No access to account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"404":{"description":"Workspace not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"500":{"description":"An error occurred while fetching statuses","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}}},"description":"Get the workspace’s full native status list (“Workflow & statuses”)","tags":["Workspaces"],"security":[{"api_key":["read:workspace-meta:craft"]}],"parameters":[{"in":"path","name":"workspaceId","required":true,"schema":{"type":"string"}}]}},"/portfolios/{accountId}":{"get":{"operationId":"GetPortfolios","responses":{"200":{"description":"A list of portfolios","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/Portfolio"},"type":"array"},"examples":{"Example 1":{"value":[{"id":"string","name":"string","workspaces":[{"id":"string","name":"string","key":"string"}]}]}}}}},"400":{"description":"Invalid account ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"401":{"description":"No access to account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"500":{"description":"An error occurred while fetching portfolios","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}}},"description":"Get the list of your account’s portfolios and the workspaces they are connected with","tags":["Portfolios"],"security":[{"api_key":["read:portfolios:craft"]}],"parameters":[{"in":"path","name":"accountId","required":true,"schema":{"type":"string"}}]}},"/portfolio/{portfolioId}/portfolio_fields":{"get":{"operationId":"GetPortfolioCustomFields","responses":{"200":{"description":"A list of portfolio fields and their metadata","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CustomField"},"type":"array"}}}},"400":{"description":"Invalid portfolio ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"401":{"description":"No access to portfolio","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"500":{"description":"An error occurred while fetching portfolio fields","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}}},"description":"Get the list of portfolio fields and their metadata","tags":["Portfolios"],"security":[{"api_key":["read:portfolios:craft"]}],"parameters":[{"in":"path","name":"portfolioId","required":true,"schema":{"type":"string"}},{"in":"query","name":"includeOptions","required":false,"schema":{"default":false,"type":"boolean"}}]}},"/portfolio/{portfolioId}/terminology":{"get":{"operationId":"GetPortfolioTerminology","responses":{"200":{"description":"A list of portfolio entities terminology","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TerminologyList_Terminology_"}}}},"400":{"description":"Invalid portfolio ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"401":{"description":"No access to portfolio","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"500":{"description":"An error occurred while fetching terminology","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}}},"description":"Get the list of the portfolio entities terminology","tags":["Portfolios"],"security":[{"api_key":["read:portfolios:craft"]}],"parameters":[{"in":"path","name":"portfolioId","required":true,"schema":{"type":"string"}}]}},"/portfolio/{portfolioId}/statuses":{"get":{"operationId":"GetPortfolioStatuses","responses":{"200":{"description":"A list of the portfolio’s statuses","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ItemStatus"},"type":"array"}}}},"400":{"description":"Invalid portfolio ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"401":{"description":"No access to portfolio","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"404":{"description":"Portfolio not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"500":{"description":"An error occurred while fetching statuses","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}}},"description":"Get the portfolio’s full native status list (“Workflow & statuses”)","tags":["Portfolios"],"security":[{"api_key":["read:portfolios:craft"]}],"parameters":[{"in":"path","name":"portfolioId","required":true,"schema":{"type":"string"}}]}},"/workspace/{workspaceId}/views":{"get":{"operationId":"ListWorkspaceViews","responses":{"200":{"description":"The workspace views","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ViewListResponse"}}}},"400":{"description":"Invalid workspace ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}}},"description":"List the workspace's views and the categories they are organised by.","tags":["Views"],"security":[{"api_key":["read:workspace-meta:craft"]}],"parameters":[{"in":"path","name":"workspaceId","required":true,"schema":{"type":"string"}},{"description":"Only views in this category (exact name, case-insensitive).","in":"query","name":"category","required":false,"schema":{"type":"string"}},{"description":"`personal` or `workspace`.","in":"query","name":"ownerType","required":false,"schema":{"type":"string","enum":["personal","workspace"]}},{"description":"Only views whose name contains this text (case-insensitive).","in":"query","name":"name","required":false,"schema":{"type":"string"}},{"in":"query","name":"page","required":false,"schema":{"default":1,"format":"double","type":"number"}},{"in":"query","name":"limit","required":false,"schema":{"default":50,"format":"double","type":"number"}}]},"post":{"operationId":"CreateWorkspaceView","responses":{"200":{"description":"The created view","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ViewDetail"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"422":{"description":"Invalid view","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateErrorJSON"}}}}},"description":"Create a workspace or personal view and return a link that opens it.","tags":["Views"],"security":[{"api_key":["write:items:craft","read:workspace-meta:craft"]}],"parameters":[{"in":"path","name":"workspaceId","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ViewCreateBody"}}}}}},"/workspace/{workspaceId}/views/{viewId}":{"get":{"operationId":"GetWorkspaceView","responses":{"200":{"description":"The view configuration","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ViewDetail"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"404":{"description":"No view found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}}},"description":"A single view's full configuration, by its id.","tags":["Views"],"security":[{"api_key":["read:workspace-meta:craft"]}],"parameters":[{"in":"path","name":"workspaceId","required":true,"schema":{"type":"string"}},{"in":"path","name":"viewId","required":true,"schema":{"type":"string"}},{"description":"Also return the stored state verbatim.","in":"query","name":"includeRaw","required":false,"schema":{"default":false,"type":"boolean"}},{"description":"Include released items in listItemsParams. A view with no status filter hides them, so they are excluded by default to match what the view shows.","in":"query","name":"includeCompleted","required":false,"schema":{"default":false,"type":"boolean"}}]},"patch":{"operationId":"UpdateWorkspaceView","responses":{"200":{"description":"The updated view","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ViewDetail"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"404":{"description":"No view found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"422":{"description":"Invalid update","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateErrorJSON"}}}}},"description":"Change a view's filters, controllers, name or category.","tags":["Views"],"security":[{"api_key":["write:items:craft","read:workspace-meta:craft"]}],"parameters":[{"in":"path","name":"workspaceId","required":true,"schema":{"type":"string"}},{"in":"path","name":"viewId","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ViewUpdateBody"}}}}},"delete":{"operationId":"DeleteWorkspaceView","responses":{"200":{"description":"The view is deleted","content":{"application/json":{"schema":{"properties":{"viewId":{"type":"string"},"deleted":{"type":"boolean"}},"required":["viewId","deleted"],"type":"object"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"404":{"description":"No view found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}}},"description":"Delete a view.\n\nThe owner/admin rule (a workspace view needs admin rights, a personal view\nonly its owner) is enforced by the views service itself, which holds the\nownerType and personId — checking here as well would cost an extra fetch to\nre-derive what it already knows. Its 403 is relayed verbatim.","tags":["Views"],"security":[{"api_key":["delete:items:craft"]}],"parameters":[{"in":"path","name":"workspaceId","required":true,"schema":{"type":"string"}},{"in":"path","name":"viewId","required":true,"schema":{"type":"string"}}]}},"/workspace/{workspaceId}/view":{"get":{"operationId":"FindWorkspaceView","responses":{"200":{"description":"The view, or the candidates to choose between","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ViewLookupResponse"}}}},"404":{"description":"No view with that name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}}},"description":"Resolve a view by name. Returns the view, or every candidate when the name\nis not unique in the container.","tags":["Views"],"security":[{"api_key":["read:workspace-meta:craft"]}],"parameters":[{"in":"path","name":"workspaceId","required":true,"schema":{"type":"string"}},{"description":"Exact view name (case-insensitive).","in":"query","name":"name","required":true,"schema":{"type":"string"}},{"description":"Narrow to `personal` or `workspace`.","in":"query","name":"ownerType","required":false,"schema":{"type":"string","enum":["personal","workspace"]}},{"description":"Narrow to a category name.","in":"query","name":"category","required":false,"schema":{"type":"string"}},{"description":"Also return the stored state verbatim.","in":"query","name":"includeRaw","required":false,"schema":{"default":false,"type":"boolean"}},{"description":"Include released items in listItemsParams. A view with no status filter hides them, so they are excluded by default to match what the view shows.","in":"query","name":"includeCompleted","required":false,"schema":{"default":false,"type":"boolean"}}]}},"/portfolio/{portfolioId}/views":{"get":{"operationId":"ListPortfolioViews","responses":{"200":{"description":"The portfolio views","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ViewListResponse"}}}},"400":{"description":"Invalid portfolio ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}}},"description":"List the portfolio's views and the categories they are organised by.","tags":["Views"],"security":[{"api_key":["read:portfolios:craft"]}],"parameters":[{"in":"path","name":"portfolioId","required":true,"schema":{"type":"string"}},{"description":"Only views in this category (exact name, case-insensitive).","in":"query","name":"category","required":false,"schema":{"type":"string"}},{"description":"`personal` or `workspace`.","in":"query","name":"ownerType","required":false,"schema":{"type":"string","enum":["personal","workspace"]}},{"description":"Only views whose name contains this text (case-insensitive).","in":"query","name":"name","required":false,"schema":{"type":"string"}},{"in":"query","name":"page","required":false,"schema":{"default":1,"format":"double","type":"number"}},{"in":"query","name":"limit","required":false,"schema":{"default":50,"format":"double","type":"number"}}]},"post":{"operationId":"CreatePortfolioView","responses":{"200":{"description":"The created view","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ViewDetail"}}}},"422":{"description":"Invalid view","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateErrorJSON"}}}}},"description":"Create a portfolio view and return a link that opens it.","tags":["Views"],"security":[{"api_key":["write:portfolios:craft","read:portfolios:craft"]}],"parameters":[{"in":"path","name":"portfolioId","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ViewCreateBody"}}}}}},"/portfolio/{portfolioId}/views/{viewId}":{"get":{"operationId":"GetPortfolioView","responses":{"200":{"description":"The view configuration","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ViewDetail"}}}},"404":{"description":"No view found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}}},"description":"A single portfolio view's full configuration, by its id.","tags":["Views"],"security":[{"api_key":["read:portfolios:craft"]}],"parameters":[{"in":"path","name":"portfolioId","required":true,"schema":{"type":"string"}},{"in":"path","name":"viewId","required":true,"schema":{"type":"string"}},{"description":"Also return the stored state verbatim.","in":"query","name":"includeRaw","required":false,"schema":{"default":false,"type":"boolean"}},{"description":"Include released items in listItemsParams. A view with no status filter hides them, so they are excluded by default to match what the view shows.","in":"query","name":"includeCompleted","required":false,"schema":{"default":false,"type":"boolean"}}]},"patch":{"operationId":"UpdatePortfolioView","responses":{"200":{"description":"The updated view","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ViewDetail"}}}},"422":{"description":"Invalid update","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateErrorJSON"}}}}},"description":"Change a portfolio view's filters, controllers, name or category.","tags":["Views"],"security":[{"api_key":["write:portfolios:craft","read:portfolios:craft"]}],"parameters":[{"in":"path","name":"portfolioId","required":true,"schema":{"type":"string"}},{"in":"path","name":"viewId","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ViewUpdateBody"}}}}},"delete":{"operationId":"DeletePortfolioView","responses":{"200":{"description":"The view is deleted","content":{"application/json":{"schema":{"properties":{"viewId":{"type":"string"},"deleted":{"type":"boolean"}},"required":["viewId","deleted"],"type":"object"}}}},"404":{"description":"No view found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}}},"description":"Delete a portfolio view.","tags":["Views"],"security":[{"api_key":["delete:portfolios:craft"]}],"parameters":[{"in":"path","name":"portfolioId","required":true,"schema":{"type":"string"}},{"in":"path","name":"viewId","required":true,"schema":{"type":"string"}}]}},"/portfolio/{portfolioId}/view":{"get":{"operationId":"FindPortfolioView","responses":{"200":{"description":"The view, or the candidates to choose between","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ViewLookupResponse"}}}},"404":{"description":"No view with that name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}}},"description":"Resolve a portfolio view by name.","tags":["Views"],"security":[{"api_key":["read:portfolios:craft"]}],"parameters":[{"in":"path","name":"portfolioId","required":true,"schema":{"type":"string"}},{"description":"Exact view name (case-insensitive).","in":"query","name":"name","required":true,"schema":{"type":"string"}},{"description":"Narrow to `personal` or `workspace`.","in":"query","name":"ownerType","required":false,"schema":{"type":"string","enum":["personal","workspace"]}},{"description":"Narrow to a category name.","in":"query","name":"category","required":false,"schema":{"type":"string"}},{"description":"Also return the stored state verbatim.","in":"query","name":"includeRaw","required":false,"schema":{"default":false,"type":"boolean"}},{"description":"Include released items in listItemsParams. A view with no status filter hides them, so they are excluded by default to match what the view shows.","in":"query","name":"includeCompleted","required":false,"schema":{"default":false,"type":"boolean"}}]}},"/me/api-key":{"get":{"operationId":"GetMyApiKey","responses":{"200":{"description":"API key introspection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyIntrospection"}}}},"401":{"description":"No valid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}}},"description":"Returns the current API key's authorization context — its bound user,\ngranted scopes, and any resource-scope narrowing. Useful for AI clients\n(MCP) to hide tools that the key cannot use, instead of failing at the\nfirst request.","tags":["Introspection"],"security":[{"api_key":[]}],"parameters":[]}},"/item/{itemId}":{"get":{"operationId":"GetItem","responses":{"200":{"description":"The item’s metadata","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Item"}}}},"401":{"description":"No access to account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"404":{"description":"No item found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"422":{"description":"Invalid item ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateErrorJSON"}}}},"500":{"description":"An error occurred while fetching item","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}}},"description":"Get a specific work item metadata by its ID","tags":["Work Items and OKRs"],"security":[{"api_key":["read:items:craft"]}],"parameters":[{"in":"path","name":"itemId","required":true,"schema":{"type":"string"}},{"description":"Comma separated field list to be included in response, set \"all\" for all fields","in":"query","name":"fields","required":false,"schema":{"type":"string"}}]},"delete":{"operationId":"DeleteItem","responses":{"200":{"description":"The item’s metadata","content":{"application/json":{"schema":{"properties":{"message":{"type":"string"}},"required":["message"],"type":"object"}}}},"401":{"description":"No access to account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"404":{"description":"No workspace found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"422":{"description":"Invalid item","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateErrorJSON"}}}},"500":{"description":"An error occurred while creating item","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}}},"description":"Delete a work item","tags":["Work Items and OKRs"],"security":[{"api_key":["delete:items:craft"]}],"parameters":[{"in":"path","name":"itemId","required":true,"schema":{"type":"string"}}]}},"/item/{itemId}/flat":{"get":{"operationId":"GetItemFlat","responses":{"200":{"description":"The item’s metadata","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ItemFlat"},"examples":{"Example 1":{"value":{"id":"string","type":"string","workspaceId":"string","title":"string","description":"string","creationTime":"2022-09-16T06:26:01.000Z","updateTime":"2023-06-14T13:54:34.792Z","status_id":"string","status_name":"string","importance_id":"string","importance_name":"string","objective_id":"string","objective_name":"string","keyResult_id":"string","keyResult_name":"string","persona_id":"string","persona_name":"string","sprint_id":"string","sprint_name":"string","quarter_id":"string","release_name":"string","assignee_id":"string","assignee_team":"string","assignee_user":"string","storyPoints":0,"estimatedHours":0,"actualStartDate":"2023-06-06T06:56:35.000Z","actualEndDate":"2023-06-20T06:56:35.000Z","devToolKey":{"jira":"string","ado":"string","github":"string","gitlab":"string","pivotaltracker":"string","targetprocess":"string"},"parent_id":"string","parent_title":"string","parent_shortId":"string","custom_2305843010172190992":"string","custom_2305843010172191018":"string","custom_2305843010172191132":"string","custom_2305843010172191024":"string","custom_2305843010172191022":"string","custom_2305843010172191016":"2023-06-20T21:00:00.000Z","custom_2305843010172171351":"string","custom_2305843010172171349":"string","custom_2305843010172171347":"string","custom_2305843010172190959":["string"],"labels":["string"]}}}}}},"401":{"description":"No access to account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"404":{"description":"No item found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"422":{"description":"Invalid item ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateErrorJSON"}}}},"500":{"description":"An error occurred while fetching item","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}}},"description":"Get a specific work item metadata by its ID (flattened format)","tags":["Work Items and OKRs"],"security":[{"api_key":["read:items:craft"]}],"parameters":[{"in":"path","name":"itemId","required":true,"schema":{"type":"string"}},{"description":"Comma separated field list to be included in response, set \"all\" for all fields","in":"query","name":"fields","required":false,"schema":{"type":"string"}}]}},"/workspace/{workspaceId}/items":{"get":{"operationId":"GetItems","responses":{"200":{"description":"List of workspace items, OKRs and their metadata","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ItemsPaginated_Item_"}}}},"401":{"description":"No access to account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"422":{"description":"Invalid workspace ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateErrorJSON"}}}},"500":{"description":"An error occurred while fetching item list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}}},"description":"Get all workspace working items and OKRs metadata by the workspace ID","tags":["Work Items and OKRs"],"security":[{"api_key":["read:items:craft"]}],"parameters":[{"in":"path","name":"workspaceId","required":true,"schema":{"type":"string"}},{"description":"Comma separated field list to be included in response, set \"all\" for all fields","in":"query","name":"fields","required":false,"schema":{"type":"string"}},{"in":"query","name":"page","required":false,"schema":{"default":1,"format":"double","type":"number"}},{"description":"Items per page (1-500).","in":"query","name":"limit","required":false,"schema":{"default":50,"format":"double","type":"number"}},{"description":"Get list of items updated after this date (e.g. 2023-08-09T12:33:18.615Z )","in":"query","name":"updated_from","required":false,"schema":{"format":"date-time","type":"string"}},{"description":"Get list of items updated before this date (e.g. 2023-09-09T23:22:10.531Z )","in":"query","name":"updated_to","required":false,"schema":{"format":"date-time","type":"string"}},{"description":"Filter by item type, comma separated. Accepts canonical type names (see the 422 error for the full list) and this workspace's custom type labels (the values reads return in `type`). Each returned item also carries `typeKey` — the canonical name.","in":"query","name":"type","required":false,"schema":{"type":"string"}},{"description":"Filter by parent/ancestor IDs (comma separated). MUST be internal numeric IDs (e.g. `2305843010635321210`), NOT shortIds like `CRK-25832` — the SQL casts to `::bigint[]`, so a shortId yields zero matches (200 with an empty list, no error). To resolve a shortId first, call the same list endpoint with `?shortId=<KEY-N>` to get the numeric id.","in":"query","name":"parents","required":false,"schema":{"type":"string"}},{"in":"query","name":"parentId","required":false,"schema":{"type":"string"}},{"description":"Case-insensitive substring search over title + description + linked dev-tool issue keys (e.g. a Jira key like PROJ-123) + attachment metadata. Min 2 chars; shorter values are ignored.","in":"query","name":"keyword","required":false,"schema":{"type":"string"}},{"description":"Exact match on textual short id (e.g. `CRK-20091`). When supplied, takes precedence over `keyword` and resolves via the `(ct_craft_product__id, short_id)` unique index — sub-millisecond, returns at most one item.","in":"query","name":"shortId","required":false,"schema":{"type":"string"}},{"description":"Exact match on a linked dev-tool issue key — Jira, Azure DevOps, or another connected integration (e.g. `EP-402`). Strongly consistent: resolves against the link tables' key unique indexes, so it finds every linked item — unlike `keyword`, which only carries a dev key after the item's title/description is edited *after* linking and therefore misses linked-but-unedited items. Case-sensitive (keys are stored upper-case). Combines with other filters (status, type, …).","in":"query","name":"devToolKey","required":false,"schema":{"type":"string"}},{"in":"query","name":"status","required":false,"schema":{"type":"string"}},{"in":"query","name":"importance","required":false,"schema":{"type":"string"}},{"in":"query","name":"assignee","required":false,"schema":{"type":"string"}},{"in":"query","name":"sprint","required":false,"schema":{"type":"string"}},{"in":"query","name":"quarter","required":false,"schema":{"type":"string"}},{"in":"query","name":"labels","required":false,"schema":{"type":"string"}},{"in":"query","name":"createdBy","required":false,"schema":{"type":"string"}},{"in":"query","name":"created_from","required":false,"schema":{"format":"date-time","type":"string"}},{"in":"query","name":"created_to","required":false,"schema":{"format":"date-time","type":"string"}},{"in":"query","name":"customFields","required":false,"schema":{"type":"string"}}]}},"/workspace/{workspaceId}/items/flat":{"get":{"operationId":"GetItemsFlat","responses":{"200":{"description":"List of workspace items, OKRS and their metadata","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ItemsPaginated_ItemFlat_"},"examples":{"Example 1":{"value":{"items":[{"id":"string","type":"string","workspaceId":"string","title":"string","description":"string","creationTime":"2022-09-16T06:26:01.000Z","updateTime":"2023-06-14T13:54:34.792Z","status_id":"string","status_name":"string","importance_id":"string","importance_name":"string","objective_id":"string","objective_name":"string","keyResult_id":"string","keyResult_name":"string","persona_id":"string","persona_name":"string","sprint_id":"string","sprint_name":"string","quarter_id":"string","release_name":"string","assignee_id":"string","assignee_team":"string","assignee_user":"string","storyPoints":0,"estimatedHours":0,"actualStartDate":"2023-06-06T06:56:35.000Z","actualEndDate":"2023-06-20T06:56:35.000Z","devToolKey":{"jira":"string","ado":"string","github":"string","gitlab":"string","pivotaltracker":"string","targetprocess":"string"},"parent_id":"string","parent_title":"string","parent_shortId":"string","custom_2305843010172190992":"string","custom_2305843010172191018":"string","custom_2305843010172191132":"string","custom_2305843010172191024":"string","custom_2305843010172191022":"string","custom_2305843010172191016":"2023-06-20T21:00:00.000Z","custom_2305843010172171351":"string","custom_2305843010172171349":"string","custom_2305843010172171347":"string","custom_2305843010172190959":["string"],"labels":["string"]}],"metadata":{"currentPage":0,"perPage":0,"totalPages":0,"totalRecords":0}}}}}}},"401":{"description":"No access to account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"422":{"description":"Invalid workspace ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateErrorJSON"}}}},"500":{"description":"An error occurred while fetching item list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}}},"description":"Get all workspace working items and OKRs metadata by the workspace ID (flattened format)","tags":["Work Items and OKRs"],"security":[{"api_key":["read:items:craft"]}],"parameters":[{"in":"path","name":"workspaceId","required":true,"schema":{"type":"string"}},{"description":"Comma separated field list to be included in response, set \"all\" for all fields","in":"query","name":"fields","required":false,"schema":{"type":"string"}},{"in":"query","name":"page","required":false,"schema":{"default":1,"format":"double","type":"number"}},{"description":"Items per page (1-500).","in":"query","name":"limit","required":false,"schema":{"default":50,"format":"double","type":"number"}},{"description":"Get list of items updated after this date (e.g. 2023-08-09T12:33:18.615Z )","in":"query","name":"updated_from","required":false,"schema":{"format":"date-time","type":"string"}},{"description":"Get list of items updated before this date (e.g. 2023-09-09T23:22:10.531Z )","in":"query","name":"updated_to","required":false,"schema":{"format":"date-time","type":"string"}},{"description":"Filter by item types, comma separated. Accepts canonical type names (see the 422 error for the full list) and this workspace's custom type labels (the values reads return in `type`). Each returned item also carries `typeKey` — the canonical name.","in":"query","name":"type","required":false,"schema":{"type":"string"}},{"description":"Filter by parent/ancestor IDs (comma separated). MUST be internal numeric IDs (e.g. `2305843010635321210`), NOT shortIds like `CRK-25832` — the SQL casts to `::bigint[]`, so a shortId yields zero matches (200 with an empty list, no error). To resolve a shortId first, call the same list endpoint with `?shortId=<KEY-N>` to get the numeric id.","in":"query","name":"parents","required":false,"schema":{"type":"string"}},{"in":"query","name":"parentId","required":false,"schema":{"type":"string"}},{"description":"Case-insensitive substring search over title + description + linked dev-tool issue keys (e.g. a Jira key like PROJ-123) + attachment metadata. Min 2 chars; shorter values are ignored.","in":"query","name":"keyword","required":false,"schema":{"type":"string"}},{"description":"Exact match on textual short id (e.g. `CRK-20091`). When supplied, takes precedence over `keyword` and resolves via the `(ct_craft_product__id, short_id)` unique index.","in":"query","name":"shortId","required":false,"schema":{"type":"string"}},{"description":"Exact match on a linked dev-tool issue key — Jira, Azure DevOps, or another connected integration (e.g. `EP-402`). Strongly consistent: resolves against the link tables' key unique indexes, so it finds every linked item — unlike `keyword`, which only carries a dev key after the item's title/description is edited *after* linking and therefore misses linked-but-unedited items. Case-sensitive (keys are stored upper-case). Combines with other filters (status, type, …).","in":"query","name":"devToolKey","required":false,"schema":{"type":"string"}},{"in":"query","name":"status","required":false,"schema":{"type":"string"}},{"in":"query","name":"importance","required":false,"schema":{"type":"string"}},{"in":"query","name":"assignee","required":false,"schema":{"type":"string"}},{"in":"query","name":"sprint","required":false,"schema":{"type":"string"}},{"in":"query","name":"quarter","required":false,"schema":{"type":"string"}},{"in":"query","name":"labels","required":false,"schema":{"type":"string"}},{"in":"query","name":"createdBy","required":false,"schema":{"type":"string"}},{"in":"query","name":"created_from","required":false,"schema":{"format":"date-time","type":"string"}},{"in":"query","name":"created_to","required":false,"schema":{"format":"date-time","type":"string"}},{"in":"query","name":"customFields","required":false,"schema":{"type":"string"}}]}},"/portfolio_item/{itemId}":{"get":{"operationId":"GetInitiative","responses":{"200":{"description":"The item’s metadata","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Initiative"}}}},"401":{"description":"No access to account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"404":{"description":"No item found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"422":{"description":"Invalid item ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateErrorJSON"}}}},"500":{"description":"An error occurred while fetching item","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}}},"description":"Get a specific portfolio item metadata by its ID","tags":["Work Items and OKRs"],"security":[{"api_key":["read:portfolios:craft"]}],"parameters":[{"in":"path","name":"itemId","required":true,"schema":{"type":"string"}},{"description":"Comma separated field list to be included in response, set \"all\" for all fields","in":"query","name":"fields","required":false,"schema":{"type":"string"}}]},"delete":{"operationId":"DeletePortfolioItem","responses":{"200":{"description":"The item was deleted","content":{"application/json":{"schema":{"properties":{"message":{"type":"string"}},"required":["message"],"type":"object"}}}},"401":{"description":"No access to account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"404":{"description":"No portfolio item found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"422":{"description":"Invalid item","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateErrorJSON"}}}}},"description":"Delete a portfolio item (initiative / super initiative / objective / key\nresult). DELETE /item/{id} rejects a portfolio id and points here; this is\nthe matching route so portfolio items have full CRUD parity.","tags":["Work Items and OKRs"],"security":[{"api_key":["delete:portfolios:craft"]}],"parameters":[{"in":"path","name":"itemId","required":true,"schema":{"type":"string"}}]}},"/portfolio/{portfolioId}/items":{"get":{"operationId":"GetInitiatives","responses":{"200":{"description":"List of portfolio initiatives and their metadata","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ItemsPaginated_Initiative_"}}}},"401":{"description":"No access to portfolio","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"422":{"description":"Invalid portfolio ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateErrorJSON"}}}},"500":{"description":"An error occurred while fetching item list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}}},"description":"Get all portfolio initiatives and OKRs metadata by the portfolio ID","tags":["Work Items and OKRs"],"security":[{"api_key":["read:portfolios:craft"]}],"parameters":[{"in":"path","name":"portfolioId","required":true,"schema":{"type":"string"}},{"description":"Comma separated field list to be included in response, set \"all\" for all fields","in":"query","name":"fields","required":false,"schema":{"type":"string"}},{"in":"query","name":"page","required":false,"schema":{"default":1,"format":"double","type":"number"}},{"description":"Items per page (1-500).","in":"query","name":"limit","required":false,"schema":{"default":50,"format":"double","type":"number"}},{"description":"Get list of items updated after this date (e.g. 2023-08-09T12:33:18.615Z )","in":"query","name":"updated_from","required":false,"schema":{"format":"date-time","type":"string"}},{"description":"Get list of items updated before this date (e.g. 2023-09-09T23:22:10.531Z )","in":"query","name":"updated_to","required":false,"schema":{"format":"date-time","type":"string"}},{"description":"Filter by item type, comma separated. Accepts canonical portfolio type names (initiative, super_initiative, objective, keyresult) and this portfolio's custom type labels. Each returned item also carries `typeKey` — the canonical name.","in":"query","name":"type","required":false,"schema":{"type":"string"}},{"description":"Filter by parent/ancestor IDs (comma separated). MUST be internal numeric IDs (e.g. `2305843010635321210`), NOT shortIds like `CRK-25832` — the SQL casts to `::bigint[]`, so a shortId yields zero matches (200 with an empty list, no error). To resolve a shortId first, call the same list endpoint with `?shortId=<KEY-N>` to get the numeric id.","in":"query","name":"parents","required":false,"schema":{"type":"string"}},{"description":"Case-insensitive substring search over title + description + linked dev-tool issue keys (e.g. a Jira key like PROJ-123) + attachment metadata. Min 2 chars; shorter values are ignored.","in":"query","name":"keyword","required":false,"schema":{"type":"string"}},{"description":"Exact match on textual short id (e.g. `CRK-20091`). When supplied, takes precedence over `keyword`.","in":"query","name":"shortId","required":false,"schema":{"type":"string"}},{"description":"Exact match on a linked dev-tool issue key — Jira, Azure DevOps, or another connected integration (e.g. `EP-402`). Strongly consistent: resolves against the link tables' key unique indexes, so it finds every linked item — unlike `keyword`, which only carries a dev key after the item's title/description is edited *after* linking and therefore misses linked-but-unedited items. Case-sensitive (keys are stored upper-case). Combines with other filters (status, type, …).","in":"query","name":"devToolKey","required":false,"schema":{"type":"string"}},{"in":"query","name":"status","required":false,"schema":{"type":"string"}},{"in":"query","name":"importance","required":false,"schema":{"type":"string"}},{"in":"query","name":"createdBy","required":false,"schema":{"type":"string"}},{"in":"query","name":"created_from","required":false,"schema":{"format":"date-time","type":"string"}},{"in":"query","name":"created_to","required":false,"schema":{"format":"date-time","type":"string"}},{"in":"query","name":"customFields","required":false,"schema":{"type":"string"}},{"in":"query","name":"sprint","required":false,"schema":{"type":"string"}},{"in":"query","name":"quarter","required":false,"schema":{"type":"string"}},{"in":"query","name":"labels","required":false,"schema":{"type":"string"}},{"in":"query","name":"assignee","required":false,"schema":{"type":"string"}}]}},"/item":{"post":{"operationId":"CreateItem","responses":{"200":{"description":"The item’s metadata","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Item"}}}},"401":{"description":"No access to account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"404":{"description":"No workspace found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"422":{"description":"Invalid item","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateErrorJSON"}}}},"500":{"description":"An error occurred while creating item","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}}},"description":"Create a work item","tags":["Work Items and OKRs"],"security":[{"api_key":["write:items:craft"]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ItemCreate"}}}}},"put":{"operationId":"UpdateItem","responses":{"200":{"description":"The item’s metadata","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Item"}}}},"401":{"description":"No access to account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"404":{"description":"No workspace found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"422":{"description":"Invalid item","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateErrorJSON"}}}},"500":{"description":"An error occurred while creating item","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}}},"description":"Update a work item","tags":["Work Items and OKRs"],"security":[{"api_key":["write:items:craft"]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ItemUpdate"}}}}}},"/item/{itemId}/comment":{"post":{"operationId":"AddItemComment","responses":{"201":{"description":"The created comment id","content":{"application/json":{"schema":{"properties":{"id":{"type":"string"}},"required":["id"],"type":"object"}}}},"401":{"description":"No access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"404":{"description":"Item not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"422":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateErrorJSON"}}}}},"description":"Add a plain-text comment to a work item. Append-only (no edit/delete);\nmentions not supported yet. Read comments back via get_item `fields=comments`.","tags":["Work Items and OKRs"],"security":[{"api_key":["write:items:craft"]}],"parameters":[{"in":"path","name":"itemId","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddCommentRequest"}}}}}},"/item/{itemId}/dependency":{"post":{"operationId":"ManageItemDependency","responses":{"200":{"description":"The resulting dependency","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DependencyWrite"}}}},"401":{"description":"No access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"404":{"description":"Item not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"422":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateErrorJSON"}}}}},"description":"Create, retype, or remove a dependency between two items — work items (epics,\nfeatures, stories, bugs, tasks, requirements) and/or portfolio initiatives.\nProducts, OKRs, key results and super-initiatives cannot have dependencies and\nare rejected (422) on create/retype; `remove` is allowed regardless of type.\nUpsert — creates the relation or changes its type; `remove: true` deletes it\n(idempotent — removing an absent dependency returns 200 with removed=false).\nDirectional from the path item: \"item <type> relatedItem\". Relation types:\n`blocks`, `blocked by`, `related`. Read dependencies via get_item `fields=all`.","tags":["Work Items and OKRs"],"security":[{"api_key":["write:items:craft"]}],"parameters":[{"in":"path","name":"itemId","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DependencyWriteRequest"}}}}}},"/items":{"post":{"operationId":"CreateItemsBulk","responses":{"200":{"description":"Per-item results","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkWriteResult"}}}},"401":{"description":"No access to account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"422":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateErrorJSON"}}}}},"description":"Bulk-create work items (workspace / portfolio / OKR) in one call. Accepts an\narray of the same payload as POST /item plus a shared options envelope.\nPartial-success: each item is validated/resolved and written independently;\nfailures are isolated and reported per item (keyed by request index) so the\ncaller can retry only the failures. Max 100 items.","tags":["Work Items and OKRs"],"security":[{"api_key":["write:items:craft"]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkItemCreateRequest"}}}}},"put":{"operationId":"UpdateItemsBulk","responses":{"200":{"description":"Per-item results","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkWriteResult"}}}},"401":{"description":"No access to account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"422":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateErrorJSON"}}}}},"description":"Bulk-update work items (workspace / portfolio / OKR) in one call. Accepts an\narray of the same payload as PUT /item plus a shared options envelope.\nPartial-success, per-item results keyed by request index. Max 100 items.","tags":["Work Items and OKRs"],"security":[{"api_key":["write:items:craft"]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkItemUpdateRequest"}}}}}},"/feedback_portals/{accountId}":{"get":{"operationId":"GetPortals","responses":{"200":{"description":"A list of feedback portals","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/FeedbackPortal"},"type":"array"},"examples":{"Example 1":{"value":[{"id":"2305843010022720311","name":"My Favorite portal","url":"myportal"},{"id":"2305843010022720322","name":"Secret portal","url":"secretportal"}]}}}}},"401":{"description":"No access to account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"422":{"description":"Invalid account ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateErrorJSON"}}}},"500":{"description":"An error occurred while fetching feedback portals","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}}},"description":"Get the list of your account’s feedback portals","tags":["Feedback Portals"],"security":[{"api_key":["read:feedback:craft"]}],"parameters":[{"in":"path","name":"accountId","required":true,"schema":{"type":"string"}}]}},"/feedback_portals":{"get":{"operationId":"GetPortalsExtended","responses":{"200":{"description":"A list of feedback portals","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/FeedbackPortal"},"type":"array"},"examples":{"Example 1":{"value":[{"id":"2305843010022720311","name":"My Favorite portal","url":"myportal"},{"id":"2305843010022720322","name":"Secret portal","url":"secretportal"}]}}}}},"401":{"description":"No access to account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"500":{"description":"An error occurred while fetching feedback portals","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}}},"description":"Get the list of your account’s feedback portals","tags":["Feedback Portals"],"security":[{"api_key":["read:feedback:craft"]}],"parameters":[{"description":"Filter by single portal","in":"query","name":"portalId","required":false,"schema":{"type":"string"}}]}},"/feedback_portal/{portalId}/categories":{"get":{"operationId":"GetCategories","responses":{"200":{"description":"A list of categories in a feedback portal","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/FeedbackPortal"},"type":"array"},"examples":{"Example 1":{"value":[{"id":"2305843010122720311","name":"General"},{"id":"2305843010222720322","name":"My favorite category"}]}}}}},"401":{"description":"No access to account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"422":{"description":"Invalid portal ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateErrorJSON"}}}},"500":{"description":"An error occurred while fetching categories in a feedback portal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}}},"description":"Get the list of the feedback portal categories","tags":["Feedback Portals"],"security":[{"api_key":["read:feedback:craft"]}],"parameters":[{"in":"path","name":"portalId","required":true,"schema":{"type":"string"}},{"in":"query","name":"workspaceId","required":false,"schema":{"default":"","type":"string"}}]}},"/feedback_portal/{portalId}/importances":{"get":{"operationId":"GetImportances","responses":{"200":{"description":"A list of importances in a feedback portal","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/PortalImportance"},"type":"array"},"examples":{"Example 1":{"value":[{"id":"2305843010122720555","name":"Critical","isDefault":false},{"id":"2305843010122720556","name":"Nice to Have","isDefault":true}]}}}}},"401":{"description":"No access to account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"422":{"description":"Invalid portal ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateErrorJSON"}}}},"500":{"description":"An error occurred while fetching importances in a feedback portal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}}},"description":"Get the list of the feedback portal importances.","tags":["Feedback Portals"],"security":[{"api_key":["read:feedback:craft"]}],"parameters":[{"in":"path","name":"portalId","required":true,"schema":{"type":"string"}}]}},"/feedback_portal/{portalId}/feedback_items":{"get":{"operationId":"GetIdeas","responses":{"200":{"description":"A list of items in a feedback portal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedbackItemsPaginated_FeedbackItem_"},"examples":{"Example 1":{"value":[{"id":"2305843010159177973","portalId":"2305843009928936739","shortId":"DAR-6","title":"1","description":"qdw","category":{"id":"2305843009943746454","name":"1"},"status":{"id":"2305843009928936743","name":"New"},"internalStatus":{"id":"2305843009943114957","name":"Not a Priority"},"importance":{"id":"2305843009928936757","name":"Nice to Have"},"creationTime":"2022-06-16T17:06:30.000Z","createdBy":{"id":"2305843009550306942","name":"John Doe"},"owner":{"id":"2305843009550306943","name":"Jane Doe"},"labels":["Label 1","Label 2"]}]}}}}},"401":{"description":"No access to account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"422":{"description":"Invalid portal ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateErrorJSON"}}}},"500":{"description":"An error occurred while fetching ideas in a feedback portal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}}},"description":"Get the list of your feedback portal's items","tags":["Feedback items"],"security":[{"api_key":["read:feedback:craft"]}],"parameters":[{"in":"path","name":"portalId","required":true,"schema":{"type":"string"}},{"in":"query","name":"workspaceId","required":false,"schema":{"default":"","type":"string"}},{"in":"query","name":"page","required":false,"schema":{"default":1,"format":"double","type":"number"}},{"in":"query","name":"limit","required":false,"schema":{"default":25,"format":"double","type":"number"}},{"description":"Case-insensitive substring search over title + description. Min 2 chars; shorter values are ignored.","in":"query","name":"keyword","required":false,"schema":{"type":"string"}},{"description":"Exact match on textual short id (e.g. `CRK-3563`). When supplied, takes precedence over `keyword`.","in":"query","name":"shortId","required":false,"schema":{"type":"string"}},{"description":"Additive include-list (or `all`): default is metadata-only; add `description`, `customFields`, `comments`, `linkedItems`, or a custom-field name/id to include it. Unlike the item endpoints this ADDS to the response rather than subsetting it. Unknown tokens are rejected 422.","in":"query","name":"fields","required":false,"schema":{"type":"string"}},{"description":"Comma-separated numeric feedback IDs (e.g. `2305843…,2305843…`). Use when you already know which feedback items you need — e.g. the IDs returned by `get_item.feedbackLinks` — and want their metadata in one shot instead of paginating the portal.","in":"query","name":"ids","required":false,"schema":{"type":"string"}},{"in":"query","name":"status","required":false,"schema":{"type":"string"}},{"in":"query","name":"internalStatus","required":false,"schema":{"type":"string"}},{"in":"query","name":"importance","required":false,"schema":{"type":"string"}},{"in":"query","name":"category","required":false,"schema":{"type":"string"}},{"in":"query","name":"company","required":false,"schema":{"type":"string"}},{"in":"query","name":"labels","required":false,"schema":{"type":"string"}},{"in":"query","name":"hasLinkedItems","required":false,"schema":{"type":"boolean"}},{"in":"query","name":"postedBy","required":false,"schema":{"type":"string"}},{"in":"query","name":"created_from","required":false,"schema":{"format":"date-time","type":"string"}},{"in":"query","name":"created_to","required":false,"schema":{"format":"date-time","type":"string"}},{"in":"query","name":"customFields","required":false,"schema":{"type":"string"}}]}},"/feedback_item/{ideaId}":{"get":{"operationId":"GetIdea","responses":{"200":{"description":"Get a feedback item by id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedbackItem"},"examples":{"Example 1":{"value":[{"id":"2305843010159177973","portalId":"2305843009928936739","shortId":"DAR-6","title":"1","description":"qdw","category":{"id":"2305843009943746454","name":"1"},"status":{"id":"2305843009928936743","name":"New"},"internalStatus":{"id":"2305843009943114957","name":"Not a Priority"},"importance":{"id":"2305843009928936757","name":"Nice to Have"},"creationTime":"2022-06-16T17:06:30.000Z","createdBy":{"id":"2305843009550306942","name":"John Doe"},"owner":{"id":"2305843009550306943","name":"Jane Doe"},"labels":["Label 1","Label 2"]}]}}}}},"401":{"description":"No access to account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"404":{"description":"No idea found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"422":{"description":"Invalid item ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateErrorJSON"}}}},"500":{"description":"An error occurred while fetching ideas in a feedback portal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}}},"description":"Get a feedback item by id","tags":["Feedback items"],"security":[{"api_key":["read:feedback:craft"]}],"parameters":[{"in":"path","name":"ideaId","required":true,"schema":{"type":"string"}},{"description":"Optional comma-separated include-list (or `all`). Omit for the full-detail default. Unknown tokens (not a built-in field or a portal custom-field name/id) are rejected 422.","in":"query","name":"fields","required":false,"schema":{"type":"string"}}]}},"/feedback_item/{feedbackItemId}/connect":{"post":{"operationId":"ConnectFeedback","responses":{"200":{"description":"The feedback item is connected to the work items","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectFeedbackResponse"}}}},"401":{"description":"No access to account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"404":{"description":"No idea found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"422":{"description":"Invalid item ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateErrorJSON"}}}},"500":{"description":"An error occurred while connecting the feedback item","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}}},"description":"Connect an existing feedback item to one or more existing work items.\nIdempotent: items already linked are left untouched.","tags":["Feedback items"],"security":[{"api_key":["write:feedback:craft"]}],"parameters":[{"in":"path","name":"feedbackItemId","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectFeedbackRequest"}}}}}},"/feedback_item/{feedbackItemId}/disconnect":{"post":{"operationId":"DisconnectFeedback","responses":{"200":{"description":"The feedback item is disconnected from the work items","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DisconnectFeedbackResponse"}}}},"401":{"description":"No access to account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"404":{"description":"No idea found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"422":{"description":"Invalid item ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateErrorJSON"}}}},"500":{"description":"An error occurred while disconnecting the feedback item","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}}},"description":"Unlink a feedback item from one or more work items — the inverse of\nconnect. Idempotent: ids that aren't currently linked are ignored, so an\nagent can safely undo a wrong connect or retry. Returns the remaining\nconnections (same shape as connect).","tags":["Feedback items"],"security":[{"api_key":["write:feedback:craft"]}],"parameters":[{"in":"path","name":"feedbackItemId","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DisconnectFeedbackRequest"}}}}}},"/feedback_item/{feedbackItemId}/promote":{"post":{"operationId":"PromoteFeedback","responses":{"200":{"description":"The feedback item is promoted to a new work item","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromoteFeedbackResponse"}}}},"401":{"description":"No access to account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"404":{"description":"No idea found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"422":{"description":"Invalid item ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateErrorJSON"}}}},"500":{"description":"An error occurred while promoting the feedback item","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}}},"description":"Promote a feedback item into a new work item created under the given\nparent (themes→epic, epics→story/bug/etc, leaf items→sub-task) and link\nthem atomically.","tags":["Feedback items"],"security":[{"api_key":["write:feedback:craft"]}],"parameters":[{"in":"path","name":"feedbackItemId","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromoteFeedbackRequest"}}}}}},"/feedback_item/{feedbackItemId}":{"patch":{"operationId":"UpdateFeedback","responses":{"200":{"description":"The updated feedback item","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedbackItem"},"examples":{"Example 1":{"value":{"id":"2305456780315711635","shortId":"AAR-15","link":"https://portal.ideas-test.craft.io/DAR-15"}}}}}},"401":{"description":"No access to account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"404":{"description":"No idea found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"422":{"description":"A field value could not be resolved for this portal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"500":{"description":"An error occurred while updating the feedback item","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}}},"description":"Update an existing feedback item. All fields optional (partial update);\nonly provided fields change. feedbackItemId accepts a numeric id or a\n`KEY-N` shortId. Returns the full updated feedback item.","tags":["Feedback items"],"security":[{"api_key":["write:feedback:craft"]}],"parameters":[{"in":"path","name":"feedbackItemId","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateFeedbackRequest"}}}}}},"/feedback_item/{feedbackItemId}/comment":{"post":{"operationId":"AddFeedbackComment","responses":{"201":{"description":"The created comment id","content":{"application/json":{"schema":{"properties":{"internal":{"type":"boolean"},"id":{"type":"string"}},"required":["internal","id"],"type":"object"}}}},"401":{"description":"No access to account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"404":{"description":"No feedback item found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"422":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateErrorJSON"}}}}},"description":"Add a comment to a feedback item — a public portal comment (default) or a\nprivate internal team note (`internal: true`). Append-only (no edit/delete);\nplain text, no mentions yet. Read them back via get_feedback_item.","tags":["Feedback items"],"security":[{"api_key":["write:feedback:craft"]}],"parameters":[{"in":"path","name":"feedbackItemId","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddFeedbackCommentRequest"}}}}}},"/feedback_items/bulk":{"post":{"operationId":"UpdateFeedbackBulk","responses":{"200":{"description":"Per-item results","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkWriteResult"}}}},"401":{"description":"No access to account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"422":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateErrorJSON"}}}}},"description":"Bulk-update feedback items in one call (= N × PATCH feedback_item). Accepts\nan array of the same payload plus a shared options envelope. Partial-success:\neach item is validated/resolved independently and forwarded to the core bulk\nendpoint in ONE call; failures are isolated and reported per request index.\nMax 100 items.","tags":["Feedback items"],"security":[{"api_key":["write:feedback:craft"]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkFeedbackUpdateRequest"}}}}}},"/feedback_items/connections/bulk":{"post":{"operationId":"ManageConnectionsBulk","responses":{"200":{"description":"Per-item results","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkWriteResult"}}}},"401":{"description":"No access to account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"422":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateErrorJSON"}}}}},"description":"Bulk feedback connections in one call (= N × manage_feedback_connection).\nEach item carries its own mode + payload. Partial-success; resolved ops are\nforwarded to the core bulk endpoint in ONE call. Max 100 items.","tags":["Feedback items"],"security":[{"api_key":["write:feedback:craft"]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkFeedbackConnectionRequest"}}}}}},"/feedback_portal/{portalId}/companies":{"get":{"operationId":"GetPortalCompanies","responses":{"200":{"description":"A list of the portal companies","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/PortalCompany"},"type":"array"}}}},"401":{"description":"No access to account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"422":{"description":"Invalid portal ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateErrorJSON"}}}},"500":{"description":"An error occurred while fetching portal companies","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}}},"description":"List a feedback portal's customer companies ({id, name}) — for resolving the\n`company` field on create/update. Optional `keyword` name filter + `limit`.","tags":["Feedback items"],"security":[{"api_key":["read:feedback:craft"]}],"parameters":[{"in":"path","name":"portalId","required":true,"schema":{"type":"string"}},{"in":"query","name":"keyword","required":false,"schema":{"type":"string"}},{"in":"query","name":"limit","required":false,"schema":{"format":"double","type":"number"}}]}},"/feedback_portal/{portalId}/plain_feedback":{"post":{"operationId":"PostPlainIdea","responses":{"200":{"description":"Create a plain feedback","content":{"application/json":{"schema":{"type":"string"},"examples":{"Example 1":{"value":{"id":"2305456780315711635","shortId":"AAR-15","link":"https://portal.ideas-test.craft.io/DAR-15"}}}}}},"401":{"description":"No access to account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"422":{"description":"Invalid item ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateErrorJSON"}}}},"500":{"description":"An error occurred while creating a plain feedback","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}}},"description":"Create new plain feedbacks and submit to the desired feedback portal for further evaluation","tags":["Feedback items"],"security":[{"api_key":["write:feedback:craft"]}],"parameters":[{"in":"path","name":"portalId","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlainIdeaRequest"}}}}}},"/feedback_portal/{portalId}/feedback":{"post":{"operationId":"PostIdea","responses":{"200":{"description":"Create a plain feedback","content":{"application/json":{"schema":{"type":"string"},"examples":{"Example 1":{"value":{"id":"2305456780315711635","shortId":"AAR-15","link":"https://portal.ideas-test.craft.io/DAR-15"}}}}}},"401":{"description":"No access to account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"422":{"description":"Invalid item ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateErrorJSON"}}}},"500":{"description":"An error occurred while creating a plain feedback","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}}},"description":"Create a new feedback and submit to the desired feedback portal for further evaluation","tags":["Feedback items"],"security":[{"api_key":["write:feedback:craft"]}],"parameters":[{"in":"path","name":"portalId","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdeaRequest"}}}}}},"/feedback_portal/{portalId}/custom_fields":{"get":{"operationId":"GetCustomFields","responses":{"200":{"description":"A list of feedback portal custom fields and their metadata","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CustomField"},"type":"array"}}}},"401":{"description":"No access to account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"422":{"description":"Invalid portal ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateErrorJSON"}}}},"500":{"description":"An error occurred while fetching custom fields in a feedback portal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}}},"description":"Get the list of your feedback portal's custom fields","tags":["Feedback Portals"],"security":[{"api_key":["read:feedback:craft"]}],"parameters":[{"in":"path","name":"portalId","required":true,"schema":{"type":"string"}},{"in":"query","name":"includeOptions","required":false,"schema":{"default":false,"type":"boolean"}}]}},"/feedback_portal/{portalId}/forms":{"get":{"operationId":"GetForms","responses":{"200":{"description":"A list of feedback portal forms and their metadata","content":{"application/json":{"schema":{"properties":{"forms":{"items":{"$ref":"#/components/schemas/PortalForm"},"type":"array"},"metadata":{"properties":{"count":{"type":"number","format":"double"},"portalId":{"type":"string"}},"required":["count","portalId"],"type":"object"}},"required":["forms","metadata"],"type":"object"}}}},"401":{"description":"No access to account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}},"422":{"description":"Invalid portal ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateErrorJSON"}}}},"500":{"description":"An error occurred while fetching forms in a feedback portal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralErrorResponse"}}}}},"description":"Get the list of your feedback portal's forms","tags":["Feedback Portals"],"security":[{"api_key":["read:feedback:craft"]}],"parameters":[{"in":"path","name":"portalId","required":true,"schema":{"type":"string"}},{"description":"Filter by category","in":"query","name":"categoryId","required":false,"schema":{"type":"string"}},{"in":"query","name":"includeOptions","required":false,"schema":{"default":false,"type":"boolean"}}]}}},"servers":[{"url":"/"}],"tags":[{"name":"Workspaces","description":"Workspaces are the areas where product teams are managing the full lifecycle of their products"},{"name":"Work Items and OKRs","description":"Work items are the main building blocks of your product’s roadmap, and include Products, Epics, Features and Sub Features.<br /> OKRs are the goal-setting framework of your product’s roadmap, and include Objectives and Key Results."},{"name":"Portfolios","description":""},{"name":"Feedback Portals","description":"Feedback portals are the areas where various stakeholders submit their product related feedbacks"},{"name":"Feedback items","description":"Feedback items are the main building blocks of your product’s feedback process."}],"externalDocs":{"description":"Help center","url":"https://help.craft.io/en/"}}