openapi: 3.0.0 info: title: Craft.io Feedback Portal Feedback items API description: REST API for managing customer feedback portals, including listing portals and categories, retrieving feedback items, and submitting new feedback via POST requests. version: 1.0.0 contact: name: Craft.io Support url: https://help.craft.io/ email: support@craft.io servers: - url: / tags: - name: Feedback items description: Feedback items are the main building blocks of your product’s feedback process. paths: /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 '400': description: Invalid portal 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 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 - 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 /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 '400': description: Invalid item 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: No idea found content: application/json: schema: $ref: '#/components/schemas/GeneralErrorResponse' '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 /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 '400': description: Invalid item 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 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 '400': description: Invalid item 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 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' components: schemas: Person: properties: id: type: string name: type: string nullable: true email: type: string type: object additionalProperties: false FeedbackItem: $ref: '#/components/schemas/BaseFeedbackItem' BaseFeedbackItem: properties: id: type: string portalId: type: string shortId: type: string title: type: string description: type: string creationTime: type: string format: date-time category: $ref: '#/components/schemas/Category' 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_' webUrl: type: string description: Direct link into the feedback portal for this feedback item. required: - id type: object additionalProperties: false NullableType_string-Array_: items: type: string type: array nullable: true NullableType_string_: type: string nullable: true NullableType_LinkedItem-Array_: items: $ref: '#/components/schemas/LinkedItem' type: array nullable: true CustomFieldValue: properties: id: type: string name: type: string value: $ref: '#/components/schemas/NullableType_string_' values: $ref: '#/components/schemas/NullableType_string-Array_' label: type: string required: - id type: object additionalProperties: false Entity: properties: id: type: string name: type: string nullable: true 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\r\nperson record from this email and attributes the feedback to them. This\r\nis NOT a user ID — sending a numeric ID will return 400." 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\r\nomitted, the portal's `isDefault: true` importance is used (see\r\n`GET /feedback_portal/{portalId}/importances`)." example: Critical customFields: items: $ref: '#/components/schemas/CustomFieldValue' type: array required: - title 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 GeneralErrorResponse: properties: message: type: string required: - message type: object additionalProperties: false Category: properties: id: type: string name: type: string required: - id - name type: object additionalProperties: false FeedbackItemsPaginated_FeedbackItem_: properties: items: items: $ref: '#/components/schemas/FeedbackItem' type: array metadata: $ref: '#/components/schemas/PaginationMetadata' required: - items - metadata 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\r\nperson record from this email and attributes the feedback to them. This\r\nis NOT a user ID — sending a numeric ID will return 400." 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\r\nomitted, the portal's `isDefault: true` importance is used (see\r\n`GET /feedback_portal/{portalId}/importances`)." example: Critical required: - title type: object additionalProperties: false 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 securitySchemes: api_key: type: apiKey in: header name: x-api-key