{"openapi":"3.1.1","info":{"title":"Notes","description":"Productboard API v2 for managing notes and their relationships to other entities. Use these endpoints to create, list, update, and delete notes, and to link them to entities, companies, and other resources.","version":"2.0.0","contact":{"name":"Productboard Support","url":"https://support.productboard.com","email":"support@productboard.com"},"license":{"name":"Productboard Proprietary","url":"https://www.productboard.com/"}},"servers":[{"url":"https://api.productboard.com/v2","description":"Production server"}],"security":[{"BearerAuth":[]},{"OAuth2":["notes:read","notes:write","notes:delete"]}],"tags":[{"name":"notes","description":"Operations related to notes and their relationships."}],"paths":{"/notes/configurations":{"get":{"tags":["notes"],"summary":"List configurations","description":"Returns configuration metadata for note types, including supported fields, patch operations, and validation rules.\n\nUse this endpoint to programmatically discover which fields are available, what note types are supported,\nand how your workspace is configured.\n\n### Filtering by Type\n\nBy default, this endpoint returns configurations for all available note types (`textNote`, `conversationNote`, `opportunityNote`).\n\nYou can filter results to specific types using the optional `type[]` query parameter:\n\n- `type[]=textNote`\n- `type[]=textNote&type[]=conversationNote`\n\nFor backward compatibility, the API also accepts a single `type` query parameter with one value,\nfor example `type=textNote`.\n\nLegacy aliases (`simple`, `conversation`, `opportunity`) are also accepted and normalized to the canonical values above.\n","operationId":"listNoteConfigurations","security":[{"BearerAuth":["notes:read"]}],"parameters":[{"name":"type[]","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/NoteTypeInput"}},"style":"form","explode":true,"description":"Optional array of note types to filter results.\nValid values: textNote, conversationNote, opportunityNote.\nLegacy aliases simple, conversation, opportunity are also accepted.\nExample: type[]=textNote&type[]=conversationNote\n"},{"name":"type","in":"query","required":false,"schema":{"$ref":"#/components/schemas/NoteTypeInput"},"description":"Optional single note type filter for backward compatibility.\nValid values: textNote, conversationNote, opportunityNote.\nLegacy aliases simple, conversation, opportunity are also accepted.\nExample: type=textNote\nNote: Use `type[]` to filter by multiple note types.\n"}],"responses":{"200":{"description":"A list of entity configurations","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Configuration"}}}},"examples":{"all-types":{"summary":"All entity configurations","value":{"data":[{"type":"textNote","fields":{"name":{"id":"name","name":"Name","path":"/fields/name","schema":{"type":"string"},"lifecycle":{"create":{"set":true},"update":{"set":true},"patch":{"set":true}},"constraints":{"required":true}}}},{"type":"conversationNote","fields":{"name":{"id":"name","name":"Name","path":"/fields/name","schema":{"type":"string"},"lifecycle":{"create":{"set":true},"update":{"set":true},"patch":{"set":true}},"constraints":{"required":true}}}},{"type":"opportunityNote","fields":{"name":{"id":"name","name":"Name","path":"/fields/name","schema":{"type":"string"},"lifecycle":{"create":{"set":true},"update":{"set":true},"patch":{"set":true}},"constraints":{"required":true}}}}]}},"filtered":{"summary":"Filtered entity configurations","value":{"data":[{"type":"textNote","fields":{"name":{"id":"name","name":"Name","path":"/fields/name","schema":{"type":"string"},"lifecycle":{"create":{"set":true},"update":{"set":true},"patch":{"set":true}},"constraints":{"required":true}}}}]}}}}}},"400":{"$ref":"#/components/responses/BadRequestResponse"},"401":{"$ref":"#/components/responses/UnauthorizedResponse"},"403":{"$ref":"#/components/responses/ForbiddenResponse"},"404":{"$ref":"#/components/responses/NotFoundResponse"},"408":{"$ref":"#/components/responses/RequestTimeoutResponse"},"429":{"$ref":"#/components/responses/TooManyRequestsResponse"},"500":{"$ref":"#/components/responses/InternalServerErrorResponse"}}}},"/notes/configurations/{type}":{"get":{"tags":["notes"],"summary":"Get configuration","description":"Returns configuration metadata for a specific note type, including supported fields, patch operations, and validation rules.\n\nUse this endpoint to programmatically discover the configuration for a specific note type.\n","operationId":"getNoteConfiguration","security":[{"BearerAuth":["notes:read"]}],"parameters":[{"name":"type","in":"path","required":true,"schema":{"$ref":"#/components/schemas/NoteTypeInput"},"description":"The note type to retrieve configuration for. Legacy note type aliases are also accepted.\n"}],"responses":{"200":{"description":"Configuration details","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Configuration"}}},"examples":{"text-note":{"summary":"Text note configuration","value":{"data":{"type":"textNote","fields":{"name":{"id":"name","name":"Name","path":"/fields/name","schema":{"type":"string"},"lifecycle":{"create":{"set":true},"update":{"set":true},"patch":{"set":true}},"constraints":{"required":true}}}}}},"conversation-note":{"summary":"Conversation note configuration","value":{"data":{"type":"conversationNote","fields":{"name":{"id":"name","name":"Name","path":"/fields/name","schema":{"type":"string"},"lifecycle":{"create":{"set":true},"update":{"set":true},"patch":{"set":true}},"constraints":{"required":true}}}}}}}}}},"400":{"$ref":"#/components/responses/BadRequestResponse"},"401":{"$ref":"#/components/responses/UnauthorizedResponse"},"403":{"$ref":"#/components/responses/ForbiddenResponse"},"404":{"$ref":"#/components/responses/NotFoundResponse"},"408":{"$ref":"#/components/responses/RequestTimeoutResponse"},"429":{"$ref":"#/components/responses/TooManyRequestsResponse"},"500":{"$ref":"#/components/responses/InternalServerErrorResponse"}}}},"/notes":{"post":{"tags":["notes"],"summary":"Create note","description":"Creates a new note in your workspace.\nNotes represent individual pieces of feedback from customers, internal teams, or external systems.\n\nYou must specify the `type` of note you're creating:\n- `\"textNote\"` - for plain, unstructured notes\n- `\"conversationNote\"` - for structured messages (e.g., from chat, email, or support systems)\n\nLegacy aliases (`simple`, `conversation`, `opportunity`) are accepted on input and normalized before business rules are applied.\n> ⚠️ Notes of type `opportunityNote` cannot be created via the API.\n\n## Field Requirements and Configuration\n\nThe `fields.name` attribute is **required** for all note types.\nOther fields depend on the selected note type and your workspace configuration.\nUse the [`/v2/notes/configurations`](#/paths/~1v2~1notes~1configurations/get) endpoint to discover available fields for each type.\n\nNotes can also be linked to Customers entities or Product links (like features) via relationships.\n","operationId":"createNote","security":[{"BearerAuth":["notes:write"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","required":["type","fields"],"properties":{"type":{"$ref":"#/components/schemas/NoteTypeInput","example":"textNote"},"fields":{"$ref":"#/components/schemas/NoteCreateOrUpdateFields"},"metadata":{"$ref":"#/components/schemas/EntityMetadata"},"relationships":{"type":"array","description":"Optional relationships to create with the note.\nUsed for atomically linking notes to customers (users or companies) and product links (like features).\n","items":{"$ref":"#/components/schemas/NoteCreateRelationship"}}}}}},"examples":{"text-note-basic-fields":{"summary":"Create a text note with basic fields","value":{"data":{"type":"textNote","fields":{"name":"New note","content":"This is a new note content."}}}},"text-note-advanced-fields":{"summary":"Create a text note with advanced fields","value":{"data":{"type":"textNote","fields":{"name":"New note","tags":[{"name":"product"},{"name":"q2"}],"content":"This is a new note content.","owner":{"email":"jane.doe@example.com"},"creator":{"email":"john.doe@example.com"}}}}},"text-note-with-metadata-source":{"summary":"Create a text note with metadata source","value":{"data":{"type":"textNote","fields":{"name":"Note from external system","content":"This note was imported from an external system."},"metadata":{"source":{"system":"support","recordId":"ticket-12345","url":"https://support.example.com/ticket/12345"}}}}},"text-note-with-relationships":{"summary":"Create a text note with customer and feature relationships","value":{"data":{"type":"textNote","fields":{"name":"Note with relationships","content":"This note is linked to a customer and features"},"relationships":[{"type":"customer","target":{"id":"123e4567-e89b-12d3-a456-426614174000","type":"user"}},{"type":"link","target":{"id":"223e4567-e89b-12d3-a456-426614174001","type":"link"}},{"type":"link","target":{"id":"323e4567-e89b-12d3-a456-426614174002","type":"link"}}]}}},"simple-note-with-customer-by-email":{"summary":"Create a simple note with customer assigned by email","value":{"data":{"type":"simple","fields":{"name":"Note with email-based customer","content":"Customer assigned by email lookup"},"relationships":[{"type":"customer","target":{"email":"john@acme.com","type":"user"}}]}}},"conversation-note":{"summary":"Create a conversation note","value":{"data":{"type":"conversationNote","fields":{"name":"Conversation Note","content":[{"externalId":"000","content":"Hello","timestamp":"2023-10-01T11:00:00Z","authorType":"agent"},{"externalId":"111","content":"world","authorName":"John Doe","authorType":"customer","timestamp":"2023-10-01T12:00:00Z"}],"tags":[{"name":"support"}],"owner":{"email":"john.doe@example.com"},"creator":{"email":"john.doe@example.com"}}}}},"conversation-note-with-relationships":{"summary":"Create a conversation note with company customer relationship","value":{"data":{"type":"conversationNote","fields":{"name":"Conversation Note with Company","content":[{"externalId":"000","content":"Hello from company","timestamp":"2023-10-01T11:00:00Z","authorType":"agent"}]},"relationships":[{"type":"customer","target":{"id":"123e4567-e89b-12d3-a456-426614174100","type":"company"}}]}}}}}}},"responses":{"201":{"description":"Note created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteReferenceResponse"},"examples":{"text-note":{"summary":"Text note response","value":{"data":{"id":"123e4567-e89b-12d3-a456-426614174000","type":"textNote","links":{"self":"https://api.productboard.com/v2/notes/123e4567-e89b-12d3-a456-426614174000","html":"https://example.productboard.com/all-notes/notes/42"}}}},"conversation-note":{"summary":"Conversation note response","value":{"data":{"id":"223e4567-e89b-12d3-a456-426614174000","type":"conversationNote","links":{"self":"https://api.productboard.com/v2/notes/223e4567-e89b-12d3-a456-426614174000","html":"https://example.productboard.com/all-notes/notes/42"}}}}}}}},"400":{"$ref":"#/components/responses/BadRequestResponse"},"401":{"$ref":"#/components/responses/UnauthorizedResponse"},"403":{"$ref":"#/components/responses/ForbiddenResponse"},"404":{"$ref":"#/components/responses/NotFoundResponse"},"408":{"$ref":"#/components/responses/RequestTimeoutResponse"},"422":{"$ref":"#/components/responses/UnprocessableEntityResponse"},"429":{"$ref":"#/components/responses/TooManyRequestsResponse"},"500":{"$ref":"#/components/responses/InternalServerErrorResponse"}}},"get":{"tags":["notes"],"summary":"List notes","description":"Retrieves a list of notes from your workspace.\n\n> Without the `members:pii:read` scope, owner and creator email fields are returned as `[redacted]`. Filtering by `owner[email]` or `creator[email]` requires the `members:pii:read` scope.\n\n- Notes are sorted by creation date, newest first.\n- You can filter results using query parameters like `archived`, `processed`, `owner[email]`, `creator[email]`, `metadata[source][system]`, `metadata[source][recordId]`, or date/time ranges.\n- Use the `pageCursor` parameter to paginate through results.\n- Use the `fields` query parameter to optimize response size (default: all non-null fields, use `fields=all` to include null values, or `fields=name,tags` for specific fields).\n\n> To discover available fields\nuse the [`/v2/notes/configurations`](#/paths/~1v2~1notes~1configurations/get) endpoint.\n\n### Date/Time Filtering\n\nYou can filter notes by creation or update timestamps using ISO-8601 date-time format:\n- Use `createdFrom` and `createdTo` to filter by creation date (inclusive bounds)\n- Use `updatedFrom` and `updatedTo` to filter by update date (inclusive bounds)\n- All date/time filters can be combined with each other and with other filters\n- Date ranges must be valid (From <= To) or a 400 error will be returned\n\n### Filtering combinations\n\nSome combinations of the `archived` and `processed` flags result in empty or unexpected results.\nUse the following table to understand which notes are returned based on the filter values:\n\n| `archived` | `processed` | Result                    |\n|------------|-------------|---------------------------|\n| –          | –           | All notes                 |\n| `true`     | `true`      | None                      |\n| `true`     | `false`     | Archived                  |\n| `false`    | `true`      | Processed                 |\n| `false`    | `false`     | Unprocessed               |\n| `true`     | –           | Archived                  |\n| `false`    | –           | Processed + unprocessed   |\n| –          | `true`      | Processed                 |\n| –          | `false`     | Archived + unprocessed    |\n\n> **Note**: Archived notes always return `processed: false` in the API response, regardless of their actual processing state. This is a known limitation of the system.\n","operationId":"listNotes","security":[{"BearerAuth":["notes:read"]}],"parameters":[{"name":"pageCursor","in":"query","description":"Cursor for pagination.","required":false,"schema":{"type":"string"}},{"name":"archived","in":"query","description":"Filter notes by archived status.","required":false,"schema":{"type":"boolean","example":true}},{"name":"processed","in":"query","description":"Filter notes by processed status.","required":false,"schema":{"type":"boolean","example":true}},{"name":"type[]","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/NoteTypeInput"}},"style":"form","explode":true,"description":"Filter notes by one or more note types. Use array notation: `type[]=textNote&type[]=conversationNote`.\nCurrently supported note types:\n  - textNote\n  - conversationNote\n  - opportunityNote\n\nLegacy aliases (simple, conversation, opportunity) are also accepted.\n"},{"name":"owner[id]","in":"query","description":"Filter notes by owner UUID.","required":false,"schema":{"type":"string","format":"uuid"},"example":"e9f642b4-f0f8-4acc-ba0c-acc76453f60e"},{"name":"owner[email]","in":"query","description":"Filter notes by owner email.","required":false,"schema":{"type":"string","example":"jane.doe@example.com"}},{"name":"creator[id]","in":"query","description":"Filter notes by creator UUID.","required":false,"schema":{"type":"string","format":"uuid"},"example":"e9f642b4-f0f8-4acc-ba0c-acc76453f60e"},{"name":"creator[email]","in":"query","description":"Filter notes by creator email.","required":false,"schema":{"type":"string","example":"john.doe@example.com"}},{"name":"metadata[source][system]","in":"query","description":"Filter notes by the source system name from metadata.source.\nCan be combined with metadata[source][recordId] and other filters.\n","required":false,"schema":{"type":"string","example":"support"}},{"name":"metadata[source][recordId]","in":"query","description":"Filter notes by the source record ID from metadata.source.\nCan be combined with metadata[source][system] and other filters.\n","required":false,"schema":{"type":"string","example":"ticket-12345"}},{"name":"createdFrom","in":"query","description":"Filter notes created on or after this date/time (inclusive).\nMust be in ISO-8601 format (e.g., \"2023-10-01T12:00:00Z\").\nCan be combined with createdTo to define a range.\n","required":false,"schema":{"type":"string","format":"date-time","example":"2023-10-01T00:00:00Z"}},{"name":"createdTo","in":"query","description":"Filter notes created on or before this date/time (inclusive).\nMust be in ISO-8601 format (e.g., \"2023-12-31T23:59:59Z\").\nCan be combined with createdFrom to define a range.\n","required":false,"schema":{"type":"string","format":"date-time","example":"2023-12-31T23:59:59Z"}},{"name":"updatedFrom","in":"query","description":"Filter notes updated on or after this date/time (inclusive).\nMust be in ISO-8601 format (e.g., \"2023-10-01T12:00:00Z\").\nCan be combined with updatedTo to define a range.\n","required":false,"schema":{"type":"string","format":"date-time","example":"2023-10-01T00:00:00Z"}},{"name":"updatedTo","in":"query","description":"Filter notes updated on or before this date/time (inclusive).\nMust be in ISO-8601 format (e.g., \"2023-12-31T23:59:59Z\").\nCan be combined with updatedFrom to define a range.\n","required":false,"schema":{"type":"string","format":"date-time","example":"2023-12-31T23:59:59Z"}},{"$ref":"#/components/parameters/fields"}],"responses":{"200":{"description":"A paginated list of notes","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Note"}},"links":{"$ref":"#/components/schemas/ListLinks"}}},"examples":{"success":{"summary":"List of notes","value":{"data":[{"id":"123e4567-e89b-12d3-a456-426614174000","type":"textNote","fields":{"name":"Customer feedback","tags":[{"name":"feedback"},{"name":"q1"}],"content":"Customer reported slow loading times on mobile app","owner":{"id":"923e4567-e89b-12d3-a456-426614174008","email":"john.doe@example.com"},"creator":{"id":"e23e4567-e89b-12d3-a456-426614174013","email":"creator@example.com"},"processed":true,"archived":false,"createdAt":"2023-10-01T09:00:00Z","updatedAt":"2023-10-02T14:00:00Z"},"relationships":[{"type":"customer","target":{"id":"f23e4567-e89b-12d3-a456-426614174014","type":"user","links":{"self":"https://api.productboard.com/v2/users/f23e4567-e89b-12d3-a456-426614174014"}}},{"type":"link","target":{"id":"g23e4567-e89b-12d3-a456-426614174015","type":"feature","links":{"self":"https://api.productboard.com/v2/entities/g23e4567-e89b-12d3-a456-426614174015"}}}],"links":{"self":"https://api.productboard.com/v2/notes/123e4567-e89b-12d3-a456-426614174000","html":"https://example.productboard.com/all-notes/notes/42"}},{"id":"223e4567-e89b-12d3-a456-426614174001","type":"conversationNote","fields":{"name":"Support conversation","content":[{"externalId":"b23e4567-e89b-12d3-a456-426614174010","content":"Hello, I need help with the app","authorName":"John Customer","authorType":"customer","timestamp":"2023-10-01T10:00:00Z"},{"externalId":"c23e4567-e89b-12d3-a456-426614174011","content":"Hi John, how can I help you today?","authorName":"Support Agent","authorType":"agent","timestamp":"2023-10-01T10:05:00Z"}],"tags":[{"name":"support"}],"owner":{"id":"d23e4567-e89b-12d3-a456-426614174012","email":"support@example.com"},"creator":{"id":"e23e4567-e89b-12d3-a456-426614174013","email":"creator@example.com"},"processed":true,"archived":false,"createdAt":"2023-10-01T10:00:00Z","updatedAt":"2023-10-01T10:05:00Z"},"relationships":[{"type":"customer","target":{"id":"h23e4567-e89b-12d3-a456-426614174016","type":"company","links":{"self":"https://api.productboard.com/v2/companies/h23e4567-e89b-12d3-a456-426614174016"}}}],"links":{"self":"https://api.productboard.com/v2/notes/223e4567-e89b-12d3-a456-426614174001","html":"https://example.productboard.com/all-notes/notes/43"}}],"links":{"next":"https://api.productboard.com/v2/notes?pageCursor=next_cursor_value"}}},"filterByOwnerEmail":{"summary":"List unarchived notes owned by a specific user (filter by owner email)","description":"Example using query parameters: `?archived=false&owner[email]=john.doe@example.com`","value":{"data":[{"id":"123e4567-e89b-12d3-a456-426614174000","type":"textNote","fields":{"name":"Customer feedback","content":"Customer reported slow loading times on mobile app","owner":{"id":"923e4567-e89b-12d3-a456-426614174008","email":"john.doe@example.com"},"creator":{"id":"e23e4567-e89b-12d3-a456-426614174013","email":"creator@example.com"},"processed":false,"archived":false},"links":{"self":"https://api.productboard.com/v2/notes/123e4567-e89b-12d3-a456-426614174000","html":"https://example.productboard.com/all-notes/notes/42"}}],"links":{"next":null}}},"filterByDateRange":{"summary":"List notes created within a specific date range","description":"Example using query parameters: `?createdFrom=2023-10-01T00:00:00Z&createdTo=2023-12-31T23:59:59Z`","value":{"data":[{"id":"123e4567-e89b-12d3-a456-426614174000","type":"textNote","fields":{"name":"Q4 feedback","content":"Feedback collected during Q4","processed":false,"archived":false},"links":{"self":"https://api.productboard.com/v2/notes/123e4567-e89b-12d3-a456-426614174000","html":"https://example.productboard.com/all-notes/notes/42"}},{"id":"223e4567-e89b-12d3-a456-426614174001","type":"textNote","fields":{"name":"Another Q4 note","content":"More Q4 feedback","processed":true,"archived":false},"links":{"self":"https://api.productboard.com/v2/notes/223e4567-e89b-12d3-a456-426614174001","html":"https://example.productboard.com/all-notes/notes/43"}}],"links":{"next":null}}},"filterByUpdateTime":{"summary":"List notes updated after a specific time (for incremental sync)","description":"Example using query parameter: `?updatedFrom=2024-01-01T00:00:00Z`","value":{"data":[{"id":"123e4567-e89b-12d3-a456-426614174000","type":"textNote","fields":{"name":"Recently updated note","content":"This note was recently modified","processed":false,"archived":false},"links":{"self":"https://api.productboard.com/v2/notes/123e4567-e89b-12d3-a456-426614174000","html":"https://example.productboard.com/all-notes/notes/42"}}],"links":{"next":null}}}}}}},"400":{"$ref":"#/components/responses/BadRequestResponse"},"401":{"$ref":"#/components/responses/UnauthorizedResponse"},"403":{"$ref":"#/components/responses/ForbiddenResponse"},"404":{"$ref":"#/components/responses/NotFoundResponse"},"408":{"$ref":"#/components/responses/RequestTimeoutResponse"},"429":{"$ref":"#/components/responses/TooManyRequestsResponse"},"500":{"$ref":"#/components/responses/InternalServerErrorResponse"}}}},"/notes/search":{"post":{"tags":["notes"],"summary":"Search notes","description":"Performs a filtered search over notes using a POST request.\nThis endpoint supports the same filtering capabilities as `GET /v2/notes`, but allows more complex filtering through relationships.\n\n> Filtering by owner or creator email requires the `members:pii:read` scope.\n\n### Filter Logic\n\n- Multiple values within a filter use **OR** logic (e.g., customer with id1 OR id2)\n- Different filter types use **AND** logic (e.g., customer AND link filters)\n\n### Relationships\n\nFilter notes by their relationships to customers (users or companies) and links (features):\n\n- `filter.relationships.customer[].id` - Filter by customer or company UUIDs (OR logic within)\n- `filter.relationships.link[].id` - Filter by linked feature UUIDs (OR logic within)\n","operationId":"performNotesSearch","security":[{"BearerAuth":["notes:read"]}],"parameters":[{"name":"pageCursor","in":"query","description":"Cursor for pagination.","required":false,"schema":{"type":"string"}},{"name":"fields[]","in":"query","deprecated":true,"description":"**Deprecated**: Use `return.fields` in the request body instead.\n\nControls which fields are returned in the response.\n","required":false,"schema":{"type":"array","items":{"type":"string"}}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteSearchRequest"},"examples":{"structured_filter":{"summary":"Structured filter format","value":{"data":{"filter":{"type":"textNote","id":["123e4567-e89b-12d3-a456-426614174000"],"createdAt":{"from":"2024-01-01T00:00:00Z","to":"2024-12-31T23:59:59Z"},"fields":{"owner":[{"id":"223e4567-e89b-12d3-a456-426614174001"}],"tag":[{"name":"important"}],"archived":false,"processed":true},"metadata":{"source":[{"system":"intercom"}]},"relationships":{"customer":[{"id":"323e4567-e89b-12d3-a456-426614174002"}],"link":[{"id":"423e4567-e89b-12d3-a456-426614174003"}]}},"return":{"fields":["name","content","owner","tags"]}}}},"search_only":{"summary":"Fulltext search","value":{"data":{"search":{"query":"onboarding"}}}},"search_with_filter":{"summary":"Fulltext search with filters","value":{"data":{"search":{"query":"onboarding"},"filter":{"fields":{"tag":[{"name":"important"}],"processed":true},"relationships":{"customer":[{"id":"323e4567-e89b-12d3-a456-426614174002"}]}},"return":{"fields":["name","content","tags"]}}}}}}}},"responses":{"200":{"description":"A paginated list of notes","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Note"}},"links":{"$ref":"#/components/schemas/ListLinks"}}}}}},"400":{"$ref":"#/components/responses/BadRequestResponse"},"401":{"$ref":"#/components/responses/UnauthorizedResponse"},"403":{"$ref":"#/components/responses/ForbiddenResponse"},"408":{"$ref":"#/components/responses/RequestTimeoutResponse"},"422":{"$ref":"#/components/responses/UnprocessableEntityResponse"},"429":{"$ref":"#/components/responses/TooManyRequestsResponse"},"500":{"$ref":"#/components/responses/InternalServerErrorResponse"}}}},"/notes/{id}":{"get":{"tags":["notes"],"summary":"Get note","description":"Retrieves the full details of a specific note by its ID.\n\n> Without the `members:pii:read` scope, owner and creator email fields are returned as `[redacted]`.\n\nBy default, the response includes all non-null fields available in your workspace for that note type\n(e.g. `textNote`, `conversationNote`). You can optimize the response size by using the `fields` query parameter:\n- Use `fields=name,tags,content` to retrieve only specific fields\n- Use `fields=all` to include all fields, even those with null values\n\nYou can use this endpoint to display the entire note content, including metadata such as owner, tags, and relationships.\n\n> Use the [`/v2/notes/configurations`](#/paths/~1v2~1notes~1configurations/get) endpoint\nto discover which fields are available for your workspace.\n","operationId":"getNote","security":[{"BearerAuth":["notes:read"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Note identifier.","schema":{"type":"string","format":"uuid","example":"123e4567-e89b-12d3-a456-426614174000"}},{"$ref":"#/components/parameters/fields"}],"responses":{"200":{"description":"Note details","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Note"}}},"examples":{"text-note":{"summary":"Text note response","value":{"data":{"id":"123e4567-e89b-12d3-a456-426614174000","type":"textNote","createdAt":"2023-10-01T10:00:00Z","updatedAt":"2023-10-15T14:30:00Z","fields":{"name":"My note","tags":[{"name":"sales"},{"name":"q1"}],"content":"This is a sample note content.","owner":{"id":"e23e4567-e89b-12d3-a456-426614174013","email":"owner@example.com"},"creator":{"id":"e23e4567-e89b-12d3-a456-426614174013","email":"creator@example.com"},"processed":true,"archived":false},"relationships":[{"type":"customer","target":{"id":"923e4567-e89b-12d3-a456-426614174008","type":"user","links":{"self":"https://api.productboard.com/v2/users/923e4567-e89b-12d3-a456-426614174008"}}},{"type":"link","target":{"id":"a23e4567-e89b-12d3-a456-426614174009","type":"feature","links":{"self":"https://api.productboard.com/v2/entities/a23e4567-e89b-12d3-a456-426614174009"}}}],"links":{"self":"https://api.productboard.com/v2/notes/123e4567-e89b-12d3-a456-426614174000","html":"https://example.productboard.com/all-notes/notes/42"}}}},"conversation-note":{"summary":"Conversation note response","value":{"data":{"id":"223e4567-e89b-12d3-a456-426614174001","type":"conversationNote","fields":{"name":"Conversation Note","content":[{"externalId":"323e4567-e89b-12d3-a456-426614174002","content":"hello","authorName":"","authorType":"agent","timestamp":"2023-10-01T11:00:00Z"},{"externalId":"423e4567-e89b-12d3-a456-426614174003","content":"world","authorName":"John Doe","authorType":"customer","timestamp":"2023-10-01T12:00:00Z"}],"tags":[{"name":"support"}],"owner":{"id":"f23e4567-e89b-12d3-a456-426614174014","email":"owner2@example.com"},"creator":{"id":"e23e4567-e89b-12d3-a456-426614174013","email":"creator@example.com"},"processed":false,"archived":false,"createdAt":"2023-10-01T10:00:00Z","updatedAt":"2023-10-01T12:00:00Z"},"relationships":[{"type":"customer","target":{"id":"b23e4567-e89b-12d3-a456-426614174010","type":"company","links":{"self":"https://api.productboard.com/v2/companies/b23e4567-e89b-12d3-a456-426614174010"}}}],"links":{"self":"https://api.productboard.com/v2/notes/223e4567-e89b-12d3-a456-426614174001","html":"https://example.productboard.com/all-notes/notes/43"}}}},"opportunity-note":{"summary":"Opportunity note response","value":{"data":{"id":"323e4567-e89b-12d3-a456-426614174002","type":"opportunityNote","fields":{"name":"Opportunity Note","tags":[{"name":"sales"}],"content":[{"id":"523e4567-e89b-12d3-a456-426614174004","name":"Amount","value":"1000.1235","fieldType":"number"},{"id":"623e4567-e89b-12d3-a456-426614174005","name":"Description","value":"Test Opportunity","fieldType":"string"},{"id":"723e4567-e89b-12d3-a456-426614174006","name":"Close Date","value":"2023-12-31","fieldType":"string"}],"owner":{"id":"123e4567-e89b-12d3-a456-426614174015","email":"sales.rep@example.com"},"creator":{"id":"e23e4567-e89b-12d3-a456-426614174013","email":"creator@example.com"},"processed":true,"archived":false,"createdAt":"2023-09-15T08:00:00Z","updatedAt":"2023-12-01T16:45:00Z"},"relationships":[{"type":"link","target":{"id":"c23e4567-e89b-12d3-a456-426614174011","type":"initiative","links":{"self":"https://api.productboard.com/v2/entities/c23e4567-e89b-12d3-a456-426614174011"}}}],"links":{"self":"https://api.productboard.com/v2/notes/323e4567-e89b-12d3-a456-426614174002","html":"https://example.productboard.com/all-notes/notes/44"}}}}}}}},"400":{"$ref":"#/components/responses/BadRequestResponse"},"401":{"$ref":"#/components/responses/UnauthorizedResponse"},"403":{"$ref":"#/components/responses/ForbiddenResponse"},"404":{"$ref":"#/components/responses/NotFoundResponse"},"408":{"$ref":"#/components/responses/RequestTimeoutResponse"},"429":{"$ref":"#/components/responses/TooManyRequestsResponse"},"500":{"$ref":"#/components/responses/InternalServerErrorResponse"}}},"patch":{"tags":["notes"],"summary":"Update note","description":"Updates the values of one or more fields for an existing note.\n\nYou can update fields using either:\n- **Field Updates**: Replace entire field values using the `fields` object\n- **Patch Operations**: Perform granular updates using the `patch` array with operations (`set`, `clear`, `addItems`, `removeItems`)\n\nUse this endpoint to update note metadata such as name, owner, tags, or content.\nUse the [`/v2/notes/configurations`](#/paths/~1v2~1notes~1configurations/get) endpoint to discover available fields and possible patch operations.\n\n### Patch Operations\n\nThe following patch operations are supported:\n\n| Operation | Description | Supported Fields |\n|-----------|-------------|------------------|\n| `set` | Set a field to a specific value | All fields |\n| `clear` | Clear/reset a field to its default value | `owner`, `tags` |\n| `addItems` | Add items to array fields | `tags`, `content` (conversationNote) |\n| `removeItems` | Remove items from array fields | `tags`, `content` (conversationNote) |\n\n**Field-specific patch operation support:**\n- **owner**: `set`, `clear`\n- **tags**: `set`, `clear`, `addItems`, `removeItems`\n- **archived**: `set`\n- **processed**: `set`\n- **name**: `set`\n- **content** (textNote): `set`\n- **content** (conversationNote): `set`, `addItems`, `removeItems`\n\n### Known Limitations\n\n**Content updates for notes with linked features**: Notes that have content linked to features (via highlights/snippets) cannot have their `content` field updated. Attempting to update the content will return a `422 Unprocessable Entity` error with code `validation.forbidden`. You can still update other fields such as `name`, `owner`, `tags`, `archived`, and `processed` on these notes.\n\n**Archive and Processed Field Behavior**: When you set `archived` to `false`, the note will be set to processed automatically by the system. This is a known limitation where unarchiving a note triggers processing regardless of the previous processed state. The `processed` field will reflect the actual processing status after the unarchive operation.\n","operationId":"updateNote","security":[{"BearerAuth":["notes:write"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Note identifier.","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"fields":{"$ref":"#/components/schemas/NoteCreateOrUpdateFields"},"patch":{"$ref":"#/components/schemas/NotePatch"}}}},"examples":[{"summary":"Update note fields","value":{"data":{"fields":{"name":"New name","tags":["sales","onboarding"],"content":"<p>Updated content of the note</p>"}}}},{"summary":"Set owner using patch operation","value":{"data":{"patch":[{"op":"set","path":"owner","value":{"email":"john.doe@example.com"}}]}}},{"summary":"Clear owner using patch operation","value":{"data":{"patch":[{"op":"clear","path":"owner"}]}}},{"summary":"Add conversation parts using patch operation","value":{"data":{"patch":[{"op":"addItems","path":"content","value":[{"authorType":"customer","authorName":"John","content":"Hi, I have a question","timestamp":"2025-07-01T09:00:00Z"}]},{"op":"removeItems","path":"content","value":["123e4567-e89b-12d3-a456-426614174000"]}]}}},{"summary":"Set tags using patch operation","value":{"data":{"patch":[{"op":"set","path":"tags","value":[{"name":"support"},{"name":"urgent"}]}]}}},{"summary":"Add tags using patch operation","value":{"data":{"patch":[{"op":"addItems","path":"tags","value":[{"name":"new-tag"}]}]}}},{"summary":"Remove tags using patch operation","value":{"data":{"patch":[{"op":"removeItems","path":"tags","value":[{"name":"old-tag"}]}]}}},{"summary":"Clear tags using patch operation","value":{"data":{"patch":[{"op":"clear","path":"tags"}]}}},{"summary":"Set archived status using patch operation","value":{"data":{"patch":[{"op":"set","path":"archived","value":true}]}}},{"summary":"Set processed status using patch operation","value":{"data":{"patch":[{"op":"set","path":"processed","value":true}]}}}]}}}},"responses":{"200":{"description":"Note updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteReferenceResponse"},"examples":{"text-note":{"summary":"Text note updated","value":{"data":{"id":"123e4567-e89b-12d3-a456-426614174000","type":"textNote","links":{"self":"https://api.productboard.com/v2/notes/123e4567-e89b-12d3-a456-426614174000","html":"https://example.productboard.com/all-notes/notes/42"}}}},"conversation-note":{"summary":"Conversation note updated","value":{"data":{"id":"223e4567-e89b-12d3-a456-426614174000","type":"conversationNote","links":{"self":"https://api.productboard.com/v2/notes/223e4567-e89b-12d3-a456-426614174000","html":"https://example.productboard.com/all-notes/notes/45"}}}}}}}},"400":{"$ref":"#/components/responses/BadRequestResponse"},"401":{"$ref":"#/components/responses/UnauthorizedResponse"},"403":{"$ref":"#/components/responses/ForbiddenResponse"},"404":{"$ref":"#/components/responses/NotFoundResponse"},"408":{"$ref":"#/components/responses/RequestTimeoutResponse"},"422":{"$ref":"#/components/responses/UnprocessableEntityResponse"},"429":{"$ref":"#/components/responses/TooManyRequestsResponse"},"500":{"$ref":"#/components/responses/InternalServerErrorResponse"}}},"delete":{"tags":["notes"],"summary":"Delete note","description":"Permanently deletes a note from your workspace. This action is irreversible and should be used with caution.\n\nOnce deleted, the note and all of its content, metadata, and relationships\nwill be removed and cannot be recovered.\n\n> To perform a soft-delete (archiving), use an update call instead to set the `archived` flag.\n","operationId":"deleteNote","security":[{"BearerAuth":["notes:delete"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Note identifier.","schema":{"type":"string","format":"uuid","example":"123e4567-e89b-12d3-a456-426614174000"}}],"responses":{"204":{"$ref":"#/components/responses/NoContentResponse"},"400":{"$ref":"#/components/responses/BadRequestResponse"},"401":{"$ref":"#/components/responses/UnauthorizedResponse"},"403":{"$ref":"#/components/responses/ForbiddenResponse"},"404":{"$ref":"#/components/responses/NotFoundResponse"},"408":{"$ref":"#/components/responses/RequestTimeoutResponse"},"422":{"$ref":"#/components/responses/UnprocessableEntityResponse"},"429":{"$ref":"#/components/responses/TooManyRequestsResponse"},"500":{"$ref":"#/components/responses/InternalServerErrorResponse"}}}},"/notes/{id}/comments":{"post":{"tags":["notes"],"summary":"Create comment","description":"Creates a comment on a note.\n\nThe comment is attributed to the authenticated user and appears in the note's\ndiscussion thread, notifying the note's followers.\n","operationId":"createNoteComment","security":[{"BearerAuth":["notes:write"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Note identifier.","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","required":["content"],"properties":{"content":{"type":"string","minLength":1,"maxLength":7000}}}}},"examples":{"comment":{"summary":"Create a comment","value":{"data":{"content":"Flagging this for the Q3 security epic."}}}}}}},"responses":{"201":{"description":"Comment created successfully","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"}}}}}}}},"400":{"$ref":"#/components/responses/BadRequestResponse"},"401":{"$ref":"#/components/responses/UnauthorizedResponse"},"403":{"$ref":"#/components/responses/ForbiddenResponse"},"404":{"$ref":"#/components/responses/NotFoundResponse"},"408":{"$ref":"#/components/responses/RequestTimeoutResponse"},"422":{"$ref":"#/components/responses/UnprocessableEntityResponse"},"429":{"$ref":"#/components/responses/TooManyRequestsResponse"},"500":{"$ref":"#/components/responses/InternalServerErrorResponse"}}}},"/notes/{id}/relationships":{"get":{"tags":["notes"],"summary":"List relationships","operationId":"listNoteRelationships","security":[{"BearerAuth":["notes:read"]}],"description":"Retrieves all relationships connected to a specific note.\n\nThis includes:\n- Customer relationship (either a User or Company entity)\n- Product link relationships (e.g. linked features)\n\n### Customer relationship rules\n- A note can have a relationship to **exactly one customer entity** (User or Company).\n- If the note has a **User** as the customer, and that User is associated with a Company,\n  only the **User** is returned.\n- If the note has a **User** without a Company, the User is returned.\n- If the note has a **Company**, the Company is returned.\n- If the note has no customer relationship, an empty array is returned.\n\n### Product link relationships\n- Notes can be linked to **multiple Product Management entities** (e.g. features, components).\n- All such relationships are returned in the same response.\n\n> To discover supported relationship types, use the [`/v2/notes/configurations`](#/paths/~1v2~1notes~1configurations/get) endpoint.\n","parameters":[{"name":"id","in":"path","required":true,"description":"Note identifier.","schema":{"type":"string","format":"uuid"}},{"name":"pageCursor","in":"query","description":"Cursor for pagination through relationships","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Maximum number of relationships to return per page","required":false,"schema":{"type":"integer","minimum":1}},{"name":"type","in":"query","description":"Filter relationships by type. When provided, only relationships of the specified type are returned.\nIf not provided, all relationship types are returned.\n","required":false,"schema":{"type":"string","enum":["customer","link"]}},{"name":"target[type]","in":"query","description":"Filter relationships by the target entity type. When provided, only relationships\nwhere the target matches the specified entity type are returned.\nIf not provided, all target types are returned.\n\nAvailable values:\n- `user`: Customer relationships where the target is a user\n- `company`: Customer relationships where the target is a company\n- `feature`: Link relationships where the target is a feature\n- `subfeature`: Link relationships where the target is a subfeature\n- `product`: Link relationships where the target is a product\n- `component`: Link relationships where the target is a component\n","required":false,"schema":{"type":"string","enum":["user","company","feature","subfeature","product","component"]}}],"responses":{"200":{"description":"A paginated list of relationships","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/NoteRelationship"}},"links":{"type":"object","properties":{"next":{"type":["string","null"],"description":"URL to the next page of relationships. Null when all relationships are returned.\n"}}}}},"examples":{"example":{"summary":"Example relationships response","value":{"data":[{"type":"customer","target":{"id":"123e4567-e89b-12d3-a456-426614174000","type":"user","links":{"self":"https://api.productboard.com/v2/users/123e4567-e89b-12d3-a456-426614174000"}}},{"type":"link","target":{"id":"223e4567-e89b-12d3-a456-426614174001","type":"feature","links":{"self":"https://api.productboard.com/v2/entities/223e4567-e89b-12d3-a456-426614174001"}}}],"links":{"next":null}}}}}}},"400":{"$ref":"#/components/responses/BadRequestResponse"},"401":{"$ref":"#/components/responses/UnauthorizedResponse"},"403":{"$ref":"#/components/responses/ForbiddenResponse"},"404":{"$ref":"#/components/responses/NotFoundResponse"},"408":{"$ref":"#/components/responses/RequestTimeoutResponse"},"429":{"$ref":"#/components/responses/TooManyRequestsResponse"},"500":{"$ref":"#/components/responses/InternalServerErrorResponse"}}},"post":{"tags":["notes"],"summary":"Create relationship","description":"Creates a new relationship between a note and another entity.\n\nYou can link a note to:\n- A Product Management entity (e.g. feature, component, initiative)\n- A customer entity (company or user)\n\nThis is useful for capturing customer feedback and tying it to the right product link,\nor for attributing a note to a specific customer.\n\nNotes can have **one customer** relationship and **multiple product link** relationships.\nIf a Customer relationship already exists (user or company), this endpoint returns a validation error.\nUse `PUT /v2/notes/{id}/relationships/customer` to replace an existing Customer relationship.\n","operationId":"createNoteRelationship","security":[{"BearerAuth":["notes:write"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Note identifier.","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelationshipRequest"},"examples":{"customer_relationship":{"summary":"Create customer relationship","value":{"data":{"type":"customer","target":{"id":"123e4567-e89b-12d3-a456-426614174000","type":"user"}}}},"link_relationship":{"summary":"Create Product link relationship","value":{"data":{"type":"link","target":{"id":"223e4567-e89b-12d3-a456-426614174001","type":"link"}}}}}}}},"responses":{"201":{"description":"Relationship created successfully","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","example":"customer"},"target":{"$ref":"#/components/schemas/EntityReferenceResponse"}}}}},"examples":{"customer_relationship_created":{"summary":"Customer relationship created","value":{"data":{"type":"customer","target":{"id":"123e4567-e89b-12d3-a456-426614174000","type":"user","links":{"self":"https://api.productboard.com/v2/users/123e4567-e89b-12d3-a456-426614174000"}}}}},"link_relationship_created":{"summary":"Product link relationship created","value":{"data":{"type":"link","target":{"id":"223e4567-e89b-12d3-a456-426614174001","type":"feature","links":{"self":"https://api.productboard.com/v2/entities/223e4567-e89b-12d3-a456-426614174001"}}}}}}}}},"400":{"$ref":"#/components/responses/BadRequestResponse"},"401":{"$ref":"#/components/responses/UnauthorizedResponse"},"403":{"$ref":"#/components/responses/ForbiddenResponse"},"404":{"$ref":"#/components/responses/NotFoundResponse"},"408":{"$ref":"#/components/responses/RequestTimeoutResponse"},"422":{"$ref":"#/components/responses/UnprocessableEntityResponse"},"429":{"$ref":"#/components/responses/TooManyRequestsResponse"},"500":{"$ref":"#/components/responses/InternalServerErrorResponse"}}}},"/notes/{id}/relationships/customer":{"put":{"tags":["notes"],"summary":"Set customer relationship","description":"Sets or replaces the customer relationship of a note.\n\n* A note can be linked to **one customer only** — either a User or a Company.\n* If a customer relationship already exists, it will be **replaced** with the new one provided.\n\nThis is useful for attributing feedback to the correct user or company, especially when syncing notes from support systems or CRMs.\n\n> To remove the customer relationship completely, use the `DELETE /v2/notes/{id}/relationships/customer/{targetId}` endpoint.\n","operationId":"replaceNoteCustomerRelationship","security":[{"BearerAuth":["notes:write"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Note identifier."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerRelationshipReplaceRequest"},"examples":{"link_user":{"summary":"Link a user to a note","value":{"data":{"target":{"type":"user","id":"123e4567-e89b-12d3-a456-426614174000"}}}},"link_company":{"summary":"Link a company to a note","value":{"data":{"target":{"type":"company","id":"223e4567-e89b-12d3-a456-426614174001"}}}}}}}},"responses":{"200":{"description":"Customer relationship replaced","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"type":{"type":"string","example":"customer"},"target":{"$ref":"#/components/schemas/EntityReferenceResponse"}}}}},"examples":{"customer_relationship_replaced":{"summary":"Customer relationship replaced","value":{"data":{"type":"customer","target":{"id":"123e4567-e89b-12d3-a456-426614174000","type":"user","links":{"self":"https://api.productboard.com/v2/users/123e4567-e89b-12d3-a456-426614174000"}}}}}}}}},"400":{"$ref":"#/components/responses/BadRequestResponse"},"401":{"$ref":"#/components/responses/UnauthorizedResponse"},"403":{"$ref":"#/components/responses/ForbiddenResponse"},"404":{"$ref":"#/components/responses/NotFoundResponse"},"408":{"$ref":"#/components/responses/RequestTimeoutResponse"},"422":{"$ref":"#/components/responses/UnprocessableEntityResponse"},"429":{"$ref":"#/components/responses/TooManyRequestsResponse"},"500":{"$ref":"#/components/responses/InternalServerErrorResponse"}}}},"/notes/{id}/relationships/{targetType}/{targetId}":{"delete":{"tags":["notes"],"summary":"Delete relationship","operationId":"deleteNoteRelationship","security":[{"BearerAuth":["notes:write"]}],"description":"Deletes a relationship between a note and a target entity (customer or link).\n\nThis is used to unlink a note from:\n* **customer**: A user or company associated with the note\n* **link**: A specific feature, component, or other product\n\nFor customer relationships, the targetId should be the UUID of the customer or organization.\nFor link relationships, the targetId should be the UUID of the feature, component or product entity.\n\n> **Note**: For customer relationships, the targetId parameter can be any UUID as it is ignored during deletion.\nThe endpoint will remove all customer relationships from the note regardless of the targetId value provided.\n","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","example":"123e4567-e89b-12d3-a456-426614174000"},"description":"Note identifier."},{"name":"targetType","in":"path","required":true,"schema":{"type":"string","enum":["customer","link"],"example":"link"},"description":"Relationship type to delete.\n* `customer`: Delete customer relationship (user or company)\n* `link`: Delete link relationship (feature, component or product entity)\n"},{"name":"targetId","in":"path","required":true,"schema":{"type":"string","format":"uuid","example":"223e4567-e89b-12d3-a456-426614174001"},"description":"UUID of the target entity (customer, organization, or link). For customer relationships, this is optional for backward compatibility."}],"responses":{"204":{"$ref":"#/components/responses/NoContentResponse"},"401":{"$ref":"#/components/responses/UnauthorizedResponse"},"403":{"$ref":"#/components/responses/ForbiddenResponse"},"404":{"$ref":"#/components/responses/NotFoundResponse"},"408":{"$ref":"#/components/responses/RequestTimeoutResponse"},"422":{"$ref":"#/components/responses/UnprocessableEntityResponse"},"429":{"$ref":"#/components/responses/TooManyRequestsResponse"},"500":{"$ref":"#/components/responses/InternalServerErrorResponse"}}}}},"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"API token authentication. Use your API token as the value of the Authorization header"},"OAuth2":{"type":"oauth2","description":"OAuth 2.0 authentication. Use this for user-authorized access to Productboard API.","flows":{"authorizationCode":{"authorizationUrl":"https://app.productboard.com/oauth/authorize","tokenUrl":"https://app.productboard.com/oauth/token","scopes":{"notes:read":"Read access to notes","notes:write":"Write access to create and modify notes","notes:delete":"Delete notes"}}}}},"schemas":{"NoteReference":{"type":"object","description":"Minimal reference to a note resource containing only identifying information.\n","required":["id","type","links"],"properties":{"id":{"type":"string","format":"uuid"},"type":{"$ref":"#/components/schemas/NoteType"},"links":{"$ref":"#/components/schemas/NoteLinks"}}},"NoteLinks":{"type":"object","description":"Links for navigating note resources.","required":["self","html"],"properties":{"self":{"type":"string","format":"uri","description":"URL of the note resource.","example":"https://api.productboard.com/v2/notes/123e4567-e89b-12d3-a456-426614174000"},"html":{"type":"string","format":"uri","description":"URL of the note in the Productboard UI.","example":"https://example.productboard.com/all-notes/notes/42"}}},"NoteReferenceResponse":{"type":"object","description":"Response wrapper containing a note reference.\n","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/NoteReference"}}},"NoteSearchRequest":{"type":"object","description":"Request body for searching notes with filters.\nUses a structured `filter` object with nested field groups.\n","properties":{"data":{"$ref":"#/components/schemas/NoteSearchData"}}},"NoteSearchData":{"type":"object","additionalProperties":false,"description":"Search data using structured filter format.\n","properties":{"search":{"$ref":"#/components/schemas/NoteSearchSearch"},"filter":{"$ref":"#/components/schemas/NoteSearchFilter"},"return":{"$ref":"#/components/schemas/NoteSearchReturn"}}},"NoteSearchSearch":{"type":"object","additionalProperties":false,"description":"Fulltext search options for notes.","properties":{"query":{"type":"string","maxLength":255,"description":"Fulltext query. Empty or whitespace-only values behave like filter-only search."}}},"NoteSearchFilter":{"type":"object","description":"Structured filter object for note search. Filters are grouped by category.\nDifferent filter groups use AND logic.\n","properties":{"type":{"description":"Filter by note type. Single string or array (OR logic).","oneOf":[{"$ref":"#/components/schemas/NoteType"},{"type":"array","items":{"$ref":"#/components/schemas/NoteType"}}]},"id":{"description":"Filter by note UUIDs (OR logic).","oneOf":[{"$ref":"#/components/schemas/UUID"},{"type":"array","maxItems":100,"items":{"$ref":"#/components/schemas/UUID"}}]},"createdAt":{"$ref":"#/components/schemas/DateTimeRange"},"updatedAt":{"$ref":"#/components/schemas/DateTimeRange"},"fields":{"$ref":"#/components/schemas/NoteSearchFilterFields"},"metadata":{"$ref":"#/components/schemas/NoteSearchFilterMetadata"},"relationships":{"$ref":"#/components/schemas/NoteSearchFilterRelationships"}}},"NoteSearchFilterFields":{"type":"object","description":"Filter by note field values","properties":{"owner":{"description":"Filter by owner. Single object or array (OR logic).","oneOf":[{"$ref":"#/components/schemas/MemberFilterValue"},{"type":"array","items":{"$ref":"#/components/schemas/MemberFilterValue"}}]},"creator":{"description":"Filter by creator. Single object or array (OR logic).","oneOf":[{"$ref":"#/components/schemas/MemberFilterValue"},{"type":"array","items":{"$ref":"#/components/schemas/MemberFilterValue"}}]},"tag":{"description":"Filter by tag. Single object or array (OR logic).","oneOf":[{"$ref":"#/components/schemas/TagFilterValue"},{"type":"array","items":{"$ref":"#/components/schemas/TagFilterValue"}}]},"archived":{"type":"boolean","description":"Filter by archived status"},"processed":{"type":"boolean","description":"Filter by processed status"}}},"NoteSearchFilterMetadata":{"type":"object","description":"Filter by metadata properties","properties":{"source":{"description":"Filter by source system. Single object or array (OR logic).","oneOf":[{"$ref":"#/components/schemas/SourceFilterValue"},{"type":"array","items":{"$ref":"#/components/schemas/SourceFilterValue"}}]}}},"NoteSearchFilterRelationships":{"type":"object","description":"Relationship filters. Multiple values use OR logic within a relationship type.\nDifferent relationship types use AND logic.\n","properties":{"customer":{"description":"Filter by customer (user or company). Single object or array (OR logic).","oneOf":[{"$ref":"#/components/schemas/RelationshipFilterValue"},{"type":"array","items":{"$ref":"#/components/schemas/RelationshipFilterValue"}}]},"link":{"description":"Filter by linked feature. Single object or array (OR logic).","oneOf":[{"$ref":"#/components/schemas/RelationshipFilterValue"},{"type":"array","items":{"$ref":"#/components/schemas/RelationshipFilterValue"}}]}}},"NoteSearchReturn":{"type":"object","description":"Controls which fields are included in the response","properties":{"fields":{"type":"array","description":"Field names to include in the response","items":{"type":"string"}}}},"MemberFilterValue":{"type":"object","description":"Reference to a member by ID or email","properties":{"id":{"type":"string","format":"uuid","description":"Member UUID"},"email":{"type":"string","format":"email","description":"Member email address (requires members:pii:read scope)"}}},"TagFilterValue":{"type":"object","description":"Reference to a tag by name","properties":{"name":{"type":"string","description":"Tag name"}}},"SourceFilterValue":{"type":"object","description":"Filter by source system and/or record ID","properties":{"system":{"type":"string","description":"Source system name (e.g., \"intercom\", \"zendesk\")"},"recordId":{"type":"string","description":"Source record ID"}}},"RelationshipFilterValue":{"type":"object","description":"Reference to a related entity by ID","properties":{"id":{"type":"string","format":"uuid","description":"Entity UUID"}}},"UserReference":{"type":"object","description":"Reference to a user by ID or email","properties":{"id":{"type":"string","format":"uuid","description":"User UUID"},"email":{"type":"string","format":"email","description":"User email address"}}},"DateTimeRange":{"type":"object","description":"Date/time range filter","properties":{"from":{"type":"string","format":"date-time","description":"Start of range (inclusive)"},"to":{"type":"string","format":"date-time","description":"End of range (inclusive)"}}},"Note":{"description":"Full note resource with all fields and metadata.\n","allOf":[{"$ref":"#/components/schemas/NoteReference"},{"type":"object","required":["fields","relationships","createdAt","updatedAt"],"properties":{"fields":{"$ref":"#/components/schemas/NoteFields"},"relationships":{"$ref":"#/components/schemas/NoteRelationships"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp when the note was created","example":"2025-01-15T10:30:00Z"},"metadata":{"$ref":"#/components/schemas/EntityMetadata"},"updatedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp when the note was last updated","example":"2025-01-15T14:45:00Z"}}}]},"CustomerTargetById":{"type":"object","required":["type","id"],"properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","enum":["user","company"],"example":"user"}}},"CustomerTargetByEmail":{"type":"object","required":["type","email"],"properties":{"email":{"type":"string","format":"email","example":"john@acme.com"},"type":{"type":"string","enum":["user"],"example":"user"}}},"CustomerTarget":{"oneOf":[{"$ref":"#/components/schemas/CustomerTargetById"},{"$ref":"#/components/schemas/CustomerTargetByEmail"}]},"LinkTargetById":{"type":"object","required":["type","id"],"properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","enum":["link"],"example":"link"}}},"CustomerRelationshipInput":{"type":"object","required":["type","target"],"properties":{"type":{"type":"string","enum":["customer"]},"target":{"$ref":"#/components/schemas/CustomerTarget"}}},"LinkRelationshipInput":{"type":"object","required":["type","target"],"properties":{"type":{"type":"string","enum":["link"]},"target":{"$ref":"#/components/schemas/LinkTargetById"}}},"RelationshipRequest":{"type":"object","required":["data"],"properties":{"data":{"oneOf":[{"$ref":"#/components/schemas/CustomerRelationshipInput"},{"$ref":"#/components/schemas/LinkRelationshipInput"}],"discriminator":{"propertyName":"type","mapping":{"customer":"#/components/schemas/CustomerRelationshipInput","link":"#/components/schemas/LinkRelationshipInput"}}}}},"CustomerRelationshipReplaceRequest":{"type":"object","required":["data"],"properties":{"data":{"type":"object","required":["target"],"properties":{"target":{"$ref":"#/components/schemas/CustomerTarget"}}}}},"EntityReferenceResponse":{"type":"object","description":"Represents a reference to an entity in Productboard.\n","properties":{"id":{"$ref":"#/components/schemas/UUID"},"type":{"$ref":"#/components/schemas/EntityType"},"links":{"$ref":"#/components/schemas/ResourceLinks"}}},"EntityType":{"type":"string","description":"- Initially comes from PMM, where this value is called \"model\".\n- We are exposing it under more understandable \"type\".\n- Plural form is kept for consistency.\n","example":"feature"},"NoteType":{"type":"string","enum":["textNote","conversationNote","opportunityNote"],"example":"textNote"},"NoteTypeInput":{"type":"string","enum":["simple","textNote","conversation","conversationNote","opportunity","opportunityNote"],"example":"textNote"},"NoteRelationship":{"type":"object","properties":{"type":{"type":"string","enum":["customer","link"]},"target":{"$ref":"#/components/schemas/EntityReferenceResponse"}}},"NoteRelationships":{"type":"object","description":"A collection of relationships connected to the note.\nThis includes:\n- Customer relationship (either a User or Company entity)\n- Product link relationships (e.g. linked features)\nThe list is paginated, to see the rest of the relationships follow the URL contained in the `links.next` attribute.\n","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/NoteRelationship"}},"links":{"$ref":"#/components/schemas/ListLinks"}}},"NoteCreateRelationship":{"description":"Relationship to create when creating a note.\nUsed for atomically creating notes with relationships in a single API call.\n","oneOf":[{"$ref":"#/components/schemas/CustomerRelationshipInput"},{"$ref":"#/components/schemas/LinkRelationshipInput"}],"discriminator":{"propertyName":"type","mapping":{"customer":"#/components/schemas/CustomerRelationshipInput","link":"#/components/schemas/LinkRelationshipInput"}}},"NoteFields":{"type":"object","additionalProperties":{"anyOf":[{"$ref":"#/components/schemas/NoteFieldValue"},{"type":"null"}]}},"NoteFieldValue":{"description":"A list of possible value types of Note fields\n","anyOf":[{"$ref":"#/components/schemas/BooleanFieldValue"},{"$ref":"#/components/schemas/ConversationNoteFieldValue"},{"$ref":"#/components/schemas/DateFieldValue"},{"$ref":"#/components/schemas/KeyValueFieldValue"},{"$ref":"#/components/schemas/MemberFieldValue"},{"$ref":"#/components/schemas/MultiSelectFieldValue"},{"$ref":"#/components/schemas/NameFieldValue"},{"$ref":"#/components/schemas/NumberFieldValue"},{"$ref":"#/components/schemas/RichTextFieldValue"},{"$ref":"#/components/schemas/SourceFieldValue"},{"$ref":"#/components/schemas/TextFieldValue"},{"$ref":"#/components/schemas/URLFieldValue"},{"$ref":"#/components/schemas/UUIDFieldValue"}]},"NoteCreateOrUpdateFields":{"type":"object","description":"A collection of fields that can be used to create or update a Note.\nIt is a subset of `NoteFields` that is used for creation or update operations.\n","additionalProperties":{"anyOf":[{"$ref":"#/components/schemas/NoteCreateOrUpdateFieldValue"},{"type":"null"}]}},"NoteCreateOrUpdateFieldValue":{"description":"A list of create/update payloads for possible value types of a resource fields.\n","anyOf":[{"$ref":"#/components/schemas/BooleanFieldValue"},{"$ref":"#/components/schemas/ConversationNoteFieldValue"},{"$ref":"#/components/schemas/DateFieldValue"},{"$ref":"#/components/schemas/MemberFieldAssign"},{"$ref":"#/components/schemas/MultiSelectFieldAssign"},{"$ref":"#/components/schemas/NameFieldValue"},{"$ref":"#/components/schemas/NumberFieldValue"},{"$ref":"#/components/schemas/RichTextFieldValue"},{"$ref":"#/components/schemas/SourceFieldValue"},{"$ref":"#/components/schemas/TextFieldValue"},{"$ref":"#/components/schemas/URLFieldValue"},{"$ref":"#/components/schemas/UUIDFieldValue"}]},"RelationshipsFieldValue":{"type":"array","description":"Array of relationships to create with the note.\nUsed only for POST /v2/notes creation.\n","items":{"$ref":"#/components/schemas/NoteCreateRelationship"}},"NotePatch":{"type":"array","description":"A list of patch operations to perform on a Note field.\nEach operation can be one of `set`, `clear`, `addItems`, or `removeItems`.\n\n**Supported Operations:**\n- `set`: Set a field to a specific value (supports all fields)\n- `clear`: Clear/reset a field to its default value (supports owner, tags, content)\n- `addItems`: Add items to array fields (supports tags, conversation content)\n- `removeItems`: Remove items from array fields (supports tags, conversation content)\n\n**Field-specific support:**\n- **owner**: set, clear\n- **tags**: set, clear, addItems, removeItems\n- **archived**: set\n- **processed**: set\n- **name**: set\n- **content** (textNote): set\n- **content** (conversationNote): set, addItems, removeItems\n\n**Operation Compatibility Rules (for each field):**\n- Cannot combine `set`/`clear` with `addItems`/`removeItems` operations on the same field\n- Cannot combine both `set` and `clear` operations on the same field\n- Can combine `addItems` and `removeItems` together on the same field (for array operations)\n","items":{"oneOf":[{"$ref":"#/components/schemas/NotePatchOperation"},{"$ref":"#/components/schemas/NotePatchOperationClear"}]}},"NotePatchOperation":{"type":"object","description":"This patch operation modifies a field value using set, addItems, or removeItems operations.\n\n**Operation Types:**\n- `set`: Replace the entire field value\n- `addItems`: Add items to array fields (tags, conversation content)\n- `removeItems`: Remove items from array fields (tags, conversation content)\n","required":["op","path","value"],"additionalProperties":false,"properties":{"op":{"type":"string","description":"The operation to perform on the field.\nCan be one of `set`, `addItems`, `removeItems`.\n","enum":["set","addItems","removeItems"]},"path":{"type":"string","description":"The path to the field to be modified.\nCommon field paths: \"owner\", \"tags\", \"archived\", \"processed\", \"name\", \"content\"\n"},"value":{"anyOf":[{"$ref":"#/components/schemas/NoteCreateOrUpdateFieldValue"},{"$ref":"#/components/schemas/ConversationNotePartsAssign"}]}}},"NotePatchOperationClear":{"type":"object","description":"This patch operation clears/resets the value of a field to its default state.\n\n**Supported Fields:**\n- `owner`: Clears the owner (sets to null)\n- `tags`: Clears all tags (sets to empty array)\n- `content`: Clears content (for conversationNote/opportunityNote notes)\n","required":["op","path"],"additionalProperties":false,"properties":{"op":{"type":"string","description":"The operation to perform on the field.\nMust be `clear`.\n","enum":["clear"]},"path":{"type":"string","description":"The path to the field to be cleared.\nCommon field paths: \"owner\", \"tags\", \"content\"\n"}}},"ConversationNotePartsAssign":{"type":"array","description":"Assign conversation parts to a conversation note.\n","items":{"type":"object","required":["externalId"],"properties":{"externalId":{"type":"string","description":"Unique identifier of the conversation part. It is used to identify the part in the system.\n"}}}},"Configuration":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/NoteType"},"fields":{"type":"object","description":"A key-value definition fields that are part of the entity.\nKey represents field id (eg. name, description, or UUID)\n","additionalProperties":{"$ref":"#/components/schemas/ConfigurationField"}},"relationships":{"type":"object","description":"A key-value definition of possible relationships to other entities.\nKey represents the relationship type to other entities (child, parent, link)\n","additionalProperties":{"$ref":"#/components/schemas/ConfigurationRelationship"}}}},"ConfigurationRelationship":{"type":"object","required":["targetType","cardinality","mandatory"],"properties":{"targetType":{"type":"array","items":{"$ref":"#/components/schemas/EntityType"}},"cardinality":{"type":"string","description":"Whether the entity can have single or multiple relationships of a given type\n","enum":["single","multiple"]},"mandatory":{"type":"boolean","description":"Specifies whether the entity must have such relationship to a target entity (e.g. it must have parent).\n","default":false}}},"ConfigurationFieldLifecycle":{"type":"object","description":"Defines the available operations for a field during different lifecycle stages.\nPossible lifecycle stages are `create`, `update` and `patch`.\n","additionalProperties":{"$ref":"#/components/schemas/ConfigurationFieldLifecycleOperation"}},"ConfigurationFieldLifecycleOperation":{"type":"object","description":"Defines the specific operations allowed during a lifecycle stage.\n","properties":{"set":{"type":"boolean","description":"Whether the field value can be set (assigned).\n","default":false},"clear":{"type":"boolean","description":"Whether the field value can be cleared (set to null/empty).\n","default":false},"addItems":{"type":"boolean","description":"Whether items can be added to the field (for list-type fields).\n","default":false},"removeItems":{"type":"boolean","description":"Whether items can be removed from the field (for list-type fields).\n","default":false}}},"ConfigurationFieldConstraints":{"type":"object","description":"Validation constraints and rules for the field.\n","properties":{"maxLength":{"type":"integer","description":"Maximum length for text fields.\n","minimum":0,"example":255},"maxSize":{"type":"integer","description":"Maximum size in bytes for content fields.\n","minimum":0,"example":1048576},"maxItems":{"type":"integer","description":"Maximum number of items for list-type fields.\n","minimum":0,"example":20},"allowEmpty":{"type":"boolean","description":"Whether empty string values are allowed.\n","default":true},"required":{"type":"boolean","description":"Whether the field is required.\n","default":false},"uniqueItems":{"type":"boolean","description":"Whether items in list-type fields must be unique.\n","default":false},"values":{"$ref":"#/components/schemas/ConfigurationFieldConstraintsValues"}}},"ConfigurationFieldConstraintsValues":{"type":"object","description":"Defines constraints on allowed values for the field.\n","properties":{"query":{"$ref":"#/components/schemas/ConfigurationFieldConstraintsQuery"}}},"ConfigurationFieldConstraintsQuery":{"type":"object","description":"Query-based value constraints referencing external endpoints.\n","properties":{"links":{"type":"object","properties":{"list":{"type":"string","format":"uri","description":"URL endpoint that provides the list of allowed values.\n","example":"/members?role=admin"}}}}},"ConfigurationFieldDefaultValue":{"type":"object","description":"Default value configuration for the field.\n","oneOf":[{"$ref":"#/components/schemas/ConfigurationFieldDefaultValueObject"},{"$ref":"#/components/schemas/ConfigurationFieldDefaultValueSource"}]},"ConfigurationFieldDefaultValueObject":{"type":"object","description":"Explicit default value object.\n","properties":{"value":{"description":"The default value for the field.\n","oneOf":[{"type":"boolean","example":false},{"type":"string","example":"default text"},{"type":"number","example":0},{"type":"object","properties":{"id":{"$ref":"#/components/schemas/UUID"},"name":{"type":"string","example":"New Idea"}}}]}}},"ConfigurationFieldDefaultValueSource":{"type":"object","description":"Runtime-computed default value (e.g., authenticated user).\n","required":["type","source"],"properties":{"type":{"type":"string","enum":["runtime"],"example":"runtime"},"source":{"type":"string","enum":["authenticatedMember"],"example":"authenticatedMember"}}},"FieldValues":{"type":"object","description":"Configuration for field values. Provides inline data for small sets and/or a reference link for large/dynamic sets.\n\nInterpretation:\n- `data` only → Complete set inline\n- `data` + `links.next` → Preview in `data`, full list at link\n- `data` empty + `links.next` → Fully dynamic, fetch from link\n","required":["data"],"properties":{"data":{"type":"array","description":"Inline set of allowed values. Empty array when values are fully dynamic (use `links.next` to fetch).\n","items":{"$ref":"#/components/schemas/FieldValueItem"}},"links":{"type":"object","properties":{"next":{"type":"string","format":"uri","description":"URL endpoint that provides the full list of allowed values.\n","example":"https://api.productboard.com/v2/members?roles[]=admin&roles[]=maker&roles[]=contributor"}}}}},"FieldValueItem":{"type":"object","required":["id","name"],"properties":{"id":{"type":"string","format":"uuid","description":"Unique identifier of the value.\n"},"name":{"type":"string","description":"Display name of the value.\n"},"assignedEntityTypes":{"type":"array","description":"Entity types this value is assigned to. Only present for status field values.\n","items":{"type":"string"}}}},"ConfigurationField":{"type":"object","description":"Field configuration with inline JSON schema and path for API operations.\n","required":["id","name","path","schema"],"properties":{"id":{"type":"string","description":"The unique identifier of the field.\n","pattern":"^([a-z][a-zA-Z]*(\\.[a-z][a-zA-Z]*)?)|([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$","example":"name"},"name":{"type":"string","description":"The display name of the field.\n","example":"Name"},"path":{"type":"string","description":"The path used for API operations.\n","pattern":"^/fields/[a-z][a-zA-Z]*(/[a-z][a-zA-Z]*)?$|^/fields/[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$","example":"/fields/name"},"schema":{"type":"object","description":"Inline JSON Schema that defines this field's structure.\n","example":{"type":"string","maxLength":255}},"links":{"$ref":"#/components/schemas/ResourceLinks"},"lifecycle":{"$ref":"#/components/schemas/ConfigurationFieldLifecycle"},"constraints":{"$ref":"#/components/schemas/ConfigurationFieldConstraints"},"default":{"$ref":"#/components/schemas/ConfigurationFieldDefaultValue"},"values":{"$ref":"#/components/schemas/FieldValues"}}},"ResourceLinks":{"type":"object","required":["self"],"properties":{"self":{"type":"string"}}},"UUID":{"type":"string","format":"uuid","description":"A universally unique identifier (UUID).\n","example":"123e4567-e89b-12d3-a456-426614174000"},"ErrorSource":{"type":"object","description":"An object containing references to the source of the error. It helps with location of the problematic field or parameter.\n","properties":{"pointer":{"type":"string","description":"JSON Pointer [RFC6901] to the associated entity in the request document.\n","example":"/data/fields/status"},"parameter":{"type":"string","description":"Query parameter causing the error.\nUsed when the error is related to a query parameter rather than request body.\n","example":"pageCursor"}}},"Error":{"type":"object","description":"Individual error object containing the details and context.\n","required":["code","title","detail"],"properties":{"code":{"type":"string","description":"A unique, machine-readable and stable code that identifies this error.\nMust be consistent across all services and provide clear categorization.\nFormat: `category.subcategory.specificError`\n","examples":["auth.accessDenied","resource.notFound"]},"title":{"type":"string","description":"A short, human-readable summary of the problem that doesn't change\nfrom occurrence to occurrence of the problem. Should provide immediate\nunderstanding of the error type.\n","maxLength":255,"example":"Missing required field"},"detail":{"type":"string","description":"A human-readable explanation specific to this occurrence of the problem.\nMay include suggestions for resolution but should not expose sensitive information.\n","maxLength":1000,"example":"Field 'status' is required."},"source":{"$ref":"#/components/schemas/ErrorSource"}}},"ErrorResponse":{"type":"object","description":"Standard error response structure.\n","required":["id","errors"],"properties":{"id":{"type":"string","description":"A unique identifier for this specific occurrence of the problem.\nIt carries unique request/response ID which allows client\nand server to reference the exact instance of the error\nin logs or support communication.\n"},"errors":{"type":"array","description":"Array of error objects, multiple errors can be returned.","items":{"$ref":"#/components/schemas/Error"},"minItems":1}}},"BooleanFieldValue":{"type":"boolean","description":"Boolean value or flag. In the UI, it is usually represented as a single checkbox.\n# Validation\nValidate if value is `true` or `false`\n# Filtering\nWe support filtering by value\n","example":true},"ConversationNotePart":{"type":"object","required":["externalId","authorType","content","timestamp"],"properties":{"externalId":{"type":"string","description":"Unique reference of a part in the external system\n"},"authorName":{"type":"string","description":"Name of the author of the conversation part\n"},"authorType":{"type":"string","description":"Type of the author, either `customer` or `agent`\n","enum":["customer","agent"]},"content":{"type":"string","description":"Content of the conversation part\n"},"timestamp":{"type":"string","description":"When the conversation part was created\n","format":"date-time"}}},"ConversationNoteFieldValue":{"description":"Conversation-style content with multiple parts representing a back-and-forth dialog.\n","type":"array","items":{"$ref":"#/components/schemas/ConversationNotePart"}},"DateFieldValue":{"type":"string","format":"date","description":"Date and time in ISO 8601 format without time.\n\n# Validation\nValidate if provided value is a date string.\n\n# Filtering\nWe support only exact match.\n","example":"2023-10-01"},"KeyValueFieldValueItem":{"type":"object","description":"Represents a field in key-value format.\n","properties":{"id":{"type":"string","format":"uuid","description":"Unique identifier of the field."},"name":{"type":"string","description":"Name of the field."},"fieldType":{"type":"string","description":"Type of the field.","enum":["number","string"]},"value":{"type":"string","description":"Value of the field"}}},"KeyValueFieldValue":{"type":"array","description":"An array of key-value fields. Each field represents a specific piece of information.\n","items":{"$ref":"#/components/schemas/KeyValueFieldValueItem"}},"Email":{"type":"string","maxLength":256,"description":"The email of a Productboard user that has access to your workspace.","example":"email@example.com"},"ObfuscatedValue":{"type":"string","enum":["[redacted]"],"description":"The value `[redacted]`. Used to hide personally identifiable information in cases the request doesn't have the required `members:pii:read` OAuth2 scope.\n","example":"[redacted]"},"MemberFieldValue":{"type":"object","description":"Member field value containing id and email.\n\nNote: When the `members:pii:read` scope is not present, the `email`\nfield will return `[redacted]` instead of actual value.\n","required":["id","email"],"properties":{"id":{"$ref":"#/components/schemas/UUID"},"email":{"anyOf":[{"$ref":"#/components/schemas/Email"},{"$ref":"#/components/schemas/ObfuscatedValue"}]}}},"SingleSelectFieldValue":{"type":"object","required":["id","name"],"properties":{"id":{"type":"string"},"name":{"type":"string"}},"example":{"id":"95db5914-36b0-45e9-8f6d-7f11a950ac1d","name":"Example Option"}},"MultiSelectFieldValue":{"type":"array","items":{"$ref":"#/components/schemas/SingleSelectFieldValue"},"example":[{"id":"95db5914-36b0-45e9-8f6d-7f11a950ac1d","name":"Example Option"}]},"NameFieldValue":{"type":"string","minLength":0,"maxLength":255,"description":"A name field that can contain any text.\nThe exact format should be specified in the API documentation.\n\n# Validation\n\n# Filtering\nWe support only exact match.\n","example":"Example Name"},"NumberFieldValue":{"type":"number","description":"A numeric field that can contain any number.\nThe exact format should be specified in the API documentation.\n\n# Validation\nValidate if provided value is a number.\nWe support integers or flows and negative numbers.\n\n# Filtering\nWe support only exact match.\n","example":123.45},"RichTextFieldValue":{"type":"string","format":"html","minLength":0,"maxLength":524288,"description":"Rich text content, which may include HTML or Markdown formatting.\nThe exact format should be specified in the API documentation.\n\n# Validation\n\n# Filtering\nNo filtering\n","example":"<p>This is <strong>rich</strong> text.</p>"},"SourceFieldValue":{"type":"object","description":"Source information for the note content","properties":{"id":{"type":["string","null"],"description":"Identifier of the source in an external system"},"origin":{"type":["string","null"],"description":"Origin system name, e.g., crm, support, etc."},"recordId":{"type":["string","null"],"description":"External source record ID for filtering and cross-referencing"},"url":{"type":["string","null"],"description":"URL pointing to the source record"}}},"TextFieldValue":{"type":"string","minLength":0,"maxLength":255,"description":"A string field that can contain any text.\nThe exact format should be specified in the API documentation.\n\n# Validation\n\n# Filtering\nWe support only exact match. No wildcards or startWith/endWith.\n","example":"Example String"},"URLFieldValue":{"type":"string","format":"uri","description":"A URL field that can contain any valid URL.\nThe exact format should be specified in the API documentation.\n\n# Validation\nValidate if provided value is a URL.\n\n# Filtering\nWe support only exact match.\n","example":"https://example.com"},"UUIDFieldValue":{"type":"string","format":"uuid","description":"A universally unique identifier (UUID).\n\n# Validation\nValidate if provided value is an UUID.\n\n# Filtering\nN/A\n"},"ListLinks":{"type":"object","required":["next"],"properties":{"next":{"type":["string","null"]}}},"ApiSource":{"type":"object","description":"Source metadata identifying the external system origin of a record.\n\n- `system`: Identifier for the external system (e.g., \"salesforce\", \"zendesk\"). Free-form string, no specific format enforced.\n- `recordId`: Identifier of the record in the external system (e.g., \"ticket-999\", \"acc-12345\"). Free-form string, no specific format enforced.\n- `url`: URL pointing to the source record in the external system\n","properties":{"system":{"type":"string","example":"zendesk"},"recordId":{"type":"string","example":"ticket-999"},"url":{"type":"string","format":"uri","example":"https://example.zendesk.com/tickets/999"}}},"EntityMetadata":{"type":"object","description":"Metadata associated with a resource, including its external source.\n","properties":{"source":{"$ref":"#/components/schemas/ApiSource"}}},"MemberAssignById":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/UUID"}}},"MemberAssignByEmail":{"type":"object","properties":{"email":{"type":"string","format":"email","example":"john@doe.com"}}},"MemberFieldAssign":{"description":"\n# Validation\n\n# Filtering\n","oneOf":[{"$ref":"#/components/schemas/MemberAssignById"},{"$ref":"#/components/schemas/MemberAssignByEmail"}]},"SingleSelectFieldAssignById":{"type":"object","required":["id"],"properties":{"id":{"$ref":"#/components/schemas/UUID"}}},"SingleSelectFieldAssignByName":{"type":"object","required":["name"],"properties":{"name":{"type":"string","minLength":1,"maxLength":255,"example":"Example Option"}}},"MultiSelectFieldAssign":{"type":"array","items":{"oneOf":[{"$ref":"#/components/schemas/SingleSelectFieldAssignById"},{"$ref":"#/components/schemas/SingleSelectFieldAssignByName"}]}}},"responses":{"ConfigurationResponse":{"description":"Response containing entity configurations","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Configuration"}}}}}}},"BadRequestResponse":{"description":"Bad Request - Invalid input format or malformed request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"schemaInvalid":{"summary":"Request does not satisfy schema","value":{"id":"req-1234567890","errors":[{"code":"request.invalid","title":"Request schema invalid","detail":"The request does not satisfy the required schema. Field 'type' is required but was not provided.","source":{"pointer":"/data/type"}}]}},"fieldInvalid":{"summary":"Invalid field value type","value":{"id":"req-1234567891","errors":[{"code":"request.invalid","title":"Request schema invalid","detail":"Field 'fields/name' must be a string with maximum length of 255 characters, but received a number.","source":{"pointer":"/data/fields/name"}}]}},"malformedJson":{"summary":"Malformed JSON syntax","value":{"id":"req-1234567892","errors":[{"code":"request.malformed","title":"Request malformed","detail":"The request body contains invalid JSON syntax. Expected ',' or '}' at line 5, column 12."}]}},"invalidContentType":{"summary":"Invalid content type","value":{"id":"req-1234567893","errors":[{"code":"request.malformed","title":"Request malformed","detail":"The Content-Type header must be 'application/json'. Received 'text/plain'."}]}}}}}},"UnauthorizedResponse":{"description":"Unauthorized - Missing or invalid authentication credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"missingCredentials":{"summary":"Missing authentication credentials","value":{"id":"req-2234567890","errors":[{"code":"auth.invalid","title":"Invalid authentication","detail":"Authentication credentials are missing."}]}},"invalidToken":{"summary":"Invalid or expired token","value":{"id":"req-2234567891","errors":[{"code":"auth.invalid","title":"Invalid authentication","detail":"The provided authentication credentials are invalid or have expired. Please obtain new credentials and try again."}]}},"revokedCredentials":{"summary":"Revoked credentials","value":{"id":"req-2234567892","errors":[{"code":"auth.invalid","title":"Invalid authentication","detail":"The authentication credentials have been revoked. Please contact your workspace administrator."}]}}}}}},"ForbiddenResponse":{"description":"Forbidden - Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"permissionDenied":{"summary":"Permission denied for resource","value":{"id":"req-3234567890","errors":[{"code":"auth.accessDenied","title":"Access denied","detail":"You do not have permission to perform this operation on the specified resource. Contact your workspace administrator to request access."}]}},"insufficientScope":{"summary":"Insufficient OAuth scopes","value":{"id":"req-3234567891","errors":[{"code":"auth.accessDenied","title":"Access denied","detail":"Your authentication token lacks the required OAuth scopes to perform this operation. Please re-authenticate with the necessary scopes."}]}},"readOnlyRole":{"summary":"Read-only role restriction","value":{"id":"req-3234567892","errors":[{"code":"auth.accessDenied","title":"Access denied","detail":"Your user role does not permit this operation. Please contact your workspace administrator."}]}}}}}},"NotFoundResponse":{"description":"Not Found - The requested resource does not exist or is not accessible","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"resourceNotFoundById":{"summary":"Resource not found by ID","value":{"id":"req-4234567890","errors":[{"code":"resource.notFound","title":"Resource not found","detail":"The requested resource could not be found or you do not have permission to access it."}]}},"routeNotFound":{"summary":"API route not found","value":{"id":"req-4234567893","errors":[{"code":"route.notFound","title":"Route not found","detail":"The requested URL path does not match any defined API route. Please check the API documentation for valid endpoints."}]}}}}}},"RequestTimeoutResponse":{"description":"Request Timeout - The server did not receive a complete request within the allowed time","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"requestTimeout":{"summary":"Request timeout","value":{"id":"req-5234567890","errors":[{"code":"request.timeout","title":"Request timeout","detail":"The request took too long to process and was terminated. Try simplifying your request or try again later."}]}}}}}},"TooManyRequestsResponse":{"description":"Too Many Requests - API rate limit exceeded, reduce request frequency and retry after the indicated time","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"rateLimitExceeded":{"summary":"Rate limit exceeded","value":{"id":"req-7234567890","errors":[{"code":"rate.limitExceeded","title":"Rate limit exceeded","detail":"You have exceeded the allowed number of API requests. Please wait before making additional requests."}]}}}}}},"InternalServerErrorResponse":{"description":"Internal Server Error - An unexpected error occurred on the server, please retry or contact support","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"internalServerError":{"summary":"Unexpected server error","value":{"id":"req-8234567890","errors":[{"code":"internal.serverError","title":"Internal server error","detail":"An unexpected error occurred while processing your request. Please try again later. If the problem persists, contact support with the correlation ID."}]}}}}}},"UnprocessableEntityResponse":{"description":"Unprocessable Entity - Validation failed (e.g., missing required fields, unknown fields)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"validationFailed":{"summary":"Validation failed","value":{"id":"req-6234567890","errors":[{"code":"validation.failed","title":"Validation failed","detail":"One or more fields failed validation.","source":{"pointer":"/data/type"}}]}},"validationMultipleFields":{"summary":"Multiple validation errors","value":{"id":"req-6234567891","errors":[{"code":"validation.failed","title":"Validation failed","detail":"The field 'name' cannot be empty.","source":{"pointer":"/data/fields/name"}},{"code":"validation.failed","title":"Validation failed","detail":"The field 'type' has an unsupported value.","source":{"pointer":"/data/fields/type"}}]}},"referenceNotFound":{"summary":"Referenced resource not found","value":{"id":"req-6234567892","errors":[{"code":"validation.referenceNotFound","title":"Referenced resource not found","detail":"The referenced resource could not be found or you do not have access to it.","source":{"pointer":"/data/fields/id"}}]}}}}}},"NoContentResponse":{"description":"The request was successful and no content is returned."}},"parameters":{"fields":{"name":"fields","in":"query","description":"Controls which fields are returned in the response to optimize bandwidth and tailor data to your needs.\n\n**Options:**\n- Not specified: Returns only fields with non-empty values (default)\n- `fields[]=all`: Returns all fields, including those with `null` values\n- `fields[]=name&fields[]=tags`: Returns only the specified fields\n\n**Notes:**\n- When specific fields are requested, they are returned even if they have null/empty values\n- Unknown field IDs result in a 400 Bad Request error\n- Combining `all` with specific field IDs results in a 400 Bad Request error\n\nFor detailed usage, examples, and field discovery, see [Response Field Control](https://developer.productboard.com/v2.0.0/reference/response-field-control).\n","required":false,"schema":{"type":"array","items":{"type":"string"}},"examples":{"sparse":{"summary":"Retrieve only specific fields","value":["name","tags","content"]},"all":{"summary":"Include all fields including null values","value":["all"]}}}}},"x-readme":{"samples-languages":["shell","javascript","ruby"]}}