> For the complete documentation index, see [llms.txt](https://docs.usepylon.com/pylon-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.usepylon.com/pylon-docs/developer/api/api-reference/feature-requests.md).

# Feature Requests

## Search or list feature requests

> Returns feature requests matching the given criteria. Supports semantic search, status filtering, and pagination.\
> \
> \*\*Rate limit:\*\* 20 requests per minute

```json
{"openapi":"3.0.3","info":{"title":"Pylon API.","version":"1.0.0"},"servers":[{"url":"https://api.usepylon.com"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"description":"Authorization: Bearer <token>","scheme":"bearer","type":"http"}},"schemas":{"SearchFeatureRequestsRequest":{"properties":{"account_ids":{"description":"Filter by one or more account IDs. Returns only feature requests with evidence linked to any of the given accounts.","items":{"type":"string"},"type":"array"},"limit":{"description":"The maximum number of feature requests to return. Defaults to 100, max 1000.","format":"int64","type":"integer"},"query":{"description":"A search query string for semantic and keyword matching. If omitted, all feature requests are returned (subject to other filters and limit).","type":"string"},"request_statuses":{"description":"Filter by one or more request statuses. Each value can be a built-in status (new, in_progress, closed, archived) or a custom status slug.","items":{"type":"string"},"type":"array"}},"type":"object"},"SearchFeatureRequestsResponseBody":{"properties":{"data":{"items":{"$ref":"#/components/schemas/FeatureRequestSearchResult"},"type":"array"},"request_id":{"type":"string"}},"type":"object"},"FeatureRequestSearchResult":{"properties":{"account_ids":{"description":"IDs of customer accounts that have requested this feature, resolved via the evidence chain.","items":{"type":"string"},"type":"array"},"created_at":{"description":"The time the feature request was created (RFC3339).","type":"string"},"custom_fields":{"additionalProperties":{"$ref":"#/components/schemas/CustomFieldValue"},"description":"Custom field values associated with the feature request, keyed by custom field slug.","type":"object"},"description":{"description":"The description of the feature request.","type":"string"},"evidence_count":{"description":"The number of evidence items (excluding irrelevant) linked to this feature request.","format":"int64","type":"integer"},"external_issues":{"description":"The external product issues associated with the feature request, if any.","items":{"$ref":"#/components/schemas/ExternalIssue"},"type":"array"},"id":{"description":"The ID of the feature request.","type":"string"},"portal_visible_to_account_ids":{"description":"Account IDs that can see this feature request in the customer portal. Empty means hidden from all accounts. Only takes effect when the Feature Requests tab is enabled in portal settings.","items":{"type":"string"},"type":"array"},"request_status":{"description":"The status of the feature request. Can be a built-in status (new, in_progress, closed, archived) or a custom status slug.","type":"string"},"title":{"description":"The title of the feature request.","type":"string"},"updated_at":{"description":"The time the feature request was last updated (RFC3339).","type":"string"}},"type":"object"},"CustomFieldValue":{"properties":{"slug":{"description":"The slug of the custom field.","type":"string"},"value":{"description":"The value of the custom field. Only to be used for single-valued custom fields. If unset, the custom field will be unset. If the custom field is a select field, the value must be the select option slug, which you can find from the GET /custom-fields endpoint. If the custom field is a relationship field, the value must be the related object ID.","type":"string"},"values":{"description":"The values of the custom field. Only to be used for multi-valued custom fields (ex. multiselect). If unset, the custom field will be unset. If the custom field is a multiselect field, the values must be the select option slugs which you can find from the GET /custom-fields endpoint.","items":{"type":"string"},"type":"array"}},"type":"object"},"ExternalIssue":{"properties":{"external_id":{"description":"The external ID of the external issue.\n\nJira: ID of the issue (autoincrementing number from 10000).\n\nGitHub: Owner/Repo/IssueID.\n\nLinear: ID of the issue (UUID).\n\nAsana: ID of the task (Long number).","type":"string"},"link":{"description":"Link to the product issue.","type":"string"},"source":{"description":"The source of the external issue.","type":"string"}},"type":"object"},"ErrorApiResponseBody":{"properties":{"errors":{"description":"The list of errors.","items":{"type":"string"},"type":"array"},"exists_id":{"description":"The ID of the object that already exists if this is a duplicate object error.","type":"string"},"request_id":{"description":"The request ID for tracking.","type":"string"}},"type":"object"}},"responses":{"SearchFeatureRequestsResponse":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchFeatureRequestsResponseBody"}}},"description":""},"BadRequestApiResponse":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorApiResponseBody"}}},"description":"The request was invalid or could not be completed."},"ErrorApiResponse":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorApiResponseBody"}}},"description":""},"InternalServerErrorApiResponse":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorApiResponseBody"}}},"description":"An unexpected internal error occurred."}}},"paths":{"/feature-requests/search":{"post":{"description":"Returns feature requests matching the given criteria. Supports semantic search, status filtering, and pagination.\n\n**Rate limit:** 20 requests per minute","operationId":"SearchFeatureRequests","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchFeatureRequestsRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/SearchFeatureRequestsResponse"},"400":{"$ref":"#/components/responses/BadRequestApiResponse"},"404":{"$ref":"#/components/responses/ErrorApiResponse"},"500":{"$ref":"#/components/responses/InternalServerErrorApiResponse"}},"summary":"Search or list feature requests","tags":["feature-requests"]}}}}
```

## Update a feature request

> Updates an existing feature request. Only provided fields are modified.\
> \
> \*\*Rate limit:\*\* 20 requests per minute

```json
{"openapi":"3.0.3","info":{"title":"Pylon API.","version":"1.0.0"},"servers":[{"url":"https://api.usepylon.com"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"description":"Authorization: Bearer <token>","scheme":"bearer","type":"http"}},"schemas":{"UpdateFeatureRequestRequestBody":{"properties":{"custom_fields":{"description":"An array of custom fields to set. Only passed-in fields will be modified.","items":{"$ref":"#/components/schemas/CustomFieldValue"},"type":"array"},"request_status":{"description":"The new request status. Can be a built-in status (new, in_progress, closed, archived) or a custom status slug.","type":"string"}},"type":"object"},"CustomFieldValue":{"properties":{"slug":{"description":"The slug of the custom field.","type":"string"},"value":{"description":"The value of the custom field. Only to be used for single-valued custom fields. If unset, the custom field will be unset. If the custom field is a select field, the value must be the select option slug, which you can find from the GET /custom-fields endpoint. If the custom field is a relationship field, the value must be the related object ID.","type":"string"},"values":{"description":"The values of the custom field. Only to be used for multi-valued custom fields (ex. multiselect). If unset, the custom field will be unset. If the custom field is a multiselect field, the values must be the select option slugs which you can find from the GET /custom-fields endpoint.","items":{"type":"string"},"type":"array"}},"type":"object"},"UpdateFeatureRequestResponseBody":{"properties":{"data":{"$ref":"#/components/schemas/FeatureRequest"},"request_id":{"type":"string"}},"type":"object"},"FeatureRequest":{"properties":{"created_at":{"description":"The time the feature request was created (RFC3339).","type":"string"},"custom_fields":{"additionalProperties":{"$ref":"#/components/schemas/CustomFieldValue"},"description":"Custom field values associated with the feature request, keyed by custom field slug.","type":"object"},"description":{"description":"The description of the feature request.","type":"string"},"evidence":{"description":"Evidence items linked to this feature request. Only populated when fetch_evidence=true.","items":{"$ref":"#/components/schemas/FeatureRequestEvidence"},"type":"array"},"evidence_count":{"description":"The number of evidence items (excluding irrelevant) linked to this feature request.","format":"int64","type":"integer"},"external_issues":{"description":"The external product issues associated with the feature request, if any.","items":{"$ref":"#/components/schemas/ExternalIssue"},"type":"array"},"id":{"description":"The ID of the feature request.","type":"string"},"portal_visible_to_account_ids":{"description":"Account IDs that can see this feature request in the customer portal. Empty means hidden from all accounts. Only takes effect when the Feature Requests tab is enabled in portal settings.","items":{"type":"string"},"type":"array"},"request_status":{"description":"The status of the feature request. Can be a built-in status (new, in_progress, closed, archived) or a custom status slug.","type":"string"},"title":{"description":"The title of the feature request.","type":"string"},"updated_at":{"description":"The time the feature request was last updated (RFC3339).","type":"string"}},"type":"object"},"FeatureRequestEvidence":{"properties":{"account_id":{"description":"The ID of the customer account that submitted this evidence (e.g. the account whose issue or call recording is linked), if available.","type":"string"},"external_url":{"description":"The URL of the evidence in the external system (e.g. Fathom, Gong). Only included for call recording evidence when the value is known; omitted for other evidence sources.","type":"string"},"source_id":{"description":"The ID of the linked issue. Only present for issue evidence.","type":"string"},"source_type":{"description":"The source type of the evidence (e.g. 'issue', 'call_recording', 'survey_response', 'manual').","type":"string"},"summary":{"description":"An AI-generated summary of why this evidence supports the feature request.","type":"string"}},"type":"object"},"ExternalIssue":{"properties":{"external_id":{"description":"The external ID of the external issue.\n\nJira: ID of the issue (autoincrementing number from 10000).\n\nGitHub: Owner/Repo/IssueID.\n\nLinear: ID of the issue (UUID).\n\nAsana: ID of the task (Long number).","type":"string"},"link":{"description":"Link to the product issue.","type":"string"},"source":{"description":"The source of the external issue.","type":"string"}},"type":"object"},"ErrorApiResponseBody":{"properties":{"errors":{"description":"The list of errors.","items":{"type":"string"},"type":"array"},"exists_id":{"description":"The ID of the object that already exists if this is a duplicate object error.","type":"string"},"request_id":{"description":"The request ID for tracking.","type":"string"}},"type":"object"}},"responses":{"UpdateFeatureRequestResponse":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateFeatureRequestResponseBody"}}},"description":""},"BadRequestApiResponse":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorApiResponseBody"}}},"description":"The request was invalid or could not be completed."},"ErrorApiResponse":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorApiResponseBody"}}},"description":""},"InternalServerErrorApiResponse":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorApiResponseBody"}}},"description":"An unexpected internal error occurred."}}},"paths":{"/feature-requests/{id}":{"patch":{"description":"Updates an existing feature request. Only provided fields are modified.\n\n**Rate limit:** 20 requests per minute","operationId":"UpdateFeatureRequest","parameters":[{"description":"The ID of the feature request to update.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateFeatureRequestRequestBody"}}}},"responses":{"200":{"$ref":"#/components/responses/UpdateFeatureRequestResponse"},"400":{"$ref":"#/components/responses/BadRequestApiResponse"},"404":{"$ref":"#/components/responses/ErrorApiResponse"},"500":{"$ref":"#/components/responses/InternalServerErrorApiResponse"}},"summary":"Update a feature request","tags":["feature-requests"]}}}}
```

## Delete a feature request

> Permanently deletes a feature request and its associated evidence.\
> \
> \*\*Rate limit:\*\* 20 requests per minute

```json
{"openapi":"3.0.3","info":{"title":"Pylon API.","version":"1.0.0"},"servers":[{"url":"https://api.usepylon.com"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"description":"Authorization: Bearer <token>","scheme":"bearer","type":"http"}},"responses":{"DeleteFeatureRequestResponse":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteFeatureRequestResponseBody"}}},"description":""},"BadRequestApiResponse":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorApiResponseBody"}}},"description":"The request was invalid or could not be completed."},"ErrorApiResponse":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorApiResponseBody"}}},"description":""},"InternalServerErrorApiResponse":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorApiResponseBody"}}},"description":"An unexpected internal error occurred."}},"schemas":{"DeleteFeatureRequestResponseBody":{"properties":{"request_id":{"type":"string"}},"type":"object"},"ErrorApiResponseBody":{"properties":{"errors":{"description":"The list of errors.","items":{"type":"string"},"type":"array"},"exists_id":{"description":"The ID of the object that already exists if this is a duplicate object error.","type":"string"},"request_id":{"description":"The request ID for tracking.","type":"string"}},"type":"object"}}},"paths":{"/feature-requests/{id}":{"delete":{"description":"Permanently deletes a feature request and its associated evidence.\n\n**Rate limit:** 20 requests per minute","operationId":"DeleteFeatureRequest","parameters":[{"description":"The ID of the feature request to delete.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"$ref":"#/components/responses/DeleteFeatureRequestResponse"},"400":{"$ref":"#/components/responses/BadRequestApiResponse"},"404":{"$ref":"#/components/responses/ErrorApiResponse"},"500":{"$ref":"#/components/responses/InternalServerErrorApiResponse"}},"summary":"Delete a feature request","tags":["feature-requests"]}}}}
```

## Get a feature request by ID

> Returns a single feature request by ID. Optionally includes evidence items when fetch\_evidence is true.\
> \
> \*\*Rate limit:\*\* 60 requests per minute

```json
{"openapi":"3.0.3","info":{"title":"Pylon API.","version":"1.0.0"},"servers":[{"url":"https://api.usepylon.com"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"description":"Authorization: Bearer <token>","scheme":"bearer","type":"http"}},"responses":{"GetFeatureRequestResponse":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetFeatureRequestResponseBody"}}},"description":""},"BadRequestApiResponse":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorApiResponseBody"}}},"description":"The request was invalid or could not be completed."},"ErrorApiResponse":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorApiResponseBody"}}},"description":""},"InternalServerErrorApiResponse":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorApiResponseBody"}}},"description":"An unexpected internal error occurred."}},"schemas":{"GetFeatureRequestResponseBody":{"properties":{"data":{"$ref":"#/components/schemas/FeatureRequest"},"request_id":{"type":"string"}},"type":"object"},"FeatureRequest":{"properties":{"created_at":{"description":"The time the feature request was created (RFC3339).","type":"string"},"custom_fields":{"additionalProperties":{"$ref":"#/components/schemas/CustomFieldValue"},"description":"Custom field values associated with the feature request, keyed by custom field slug.","type":"object"},"description":{"description":"The description of the feature request.","type":"string"},"evidence":{"description":"Evidence items linked to this feature request. Only populated when fetch_evidence=true.","items":{"$ref":"#/components/schemas/FeatureRequestEvidence"},"type":"array"},"evidence_count":{"description":"The number of evidence items (excluding irrelevant) linked to this feature request.","format":"int64","type":"integer"},"external_issues":{"description":"The external product issues associated with the feature request, if any.","items":{"$ref":"#/components/schemas/ExternalIssue"},"type":"array"},"id":{"description":"The ID of the feature request.","type":"string"},"portal_visible_to_account_ids":{"description":"Account IDs that can see this feature request in the customer portal. Empty means hidden from all accounts. Only takes effect when the Feature Requests tab is enabled in portal settings.","items":{"type":"string"},"type":"array"},"request_status":{"description":"The status of the feature request. Can be a built-in status (new, in_progress, closed, archived) or a custom status slug.","type":"string"},"title":{"description":"The title of the feature request.","type":"string"},"updated_at":{"description":"The time the feature request was last updated (RFC3339).","type":"string"}},"type":"object"},"CustomFieldValue":{"properties":{"slug":{"description":"The slug of the custom field.","type":"string"},"value":{"description":"The value of the custom field. Only to be used for single-valued custom fields. If unset, the custom field will be unset. If the custom field is a select field, the value must be the select option slug, which you can find from the GET /custom-fields endpoint. If the custom field is a relationship field, the value must be the related object ID.","type":"string"},"values":{"description":"The values of the custom field. Only to be used for multi-valued custom fields (ex. multiselect). If unset, the custom field will be unset. If the custom field is a multiselect field, the values must be the select option slugs which you can find from the GET /custom-fields endpoint.","items":{"type":"string"},"type":"array"}},"type":"object"},"FeatureRequestEvidence":{"properties":{"account_id":{"description":"The ID of the customer account that submitted this evidence (e.g. the account whose issue or call recording is linked), if available.","type":"string"},"external_url":{"description":"The URL of the evidence in the external system (e.g. Fathom, Gong). Only included for call recording evidence when the value is known; omitted for other evidence sources.","type":"string"},"source_id":{"description":"The ID of the linked issue. Only present for issue evidence.","type":"string"},"source_type":{"description":"The source type of the evidence (e.g. 'issue', 'call_recording', 'survey_response', 'manual').","type":"string"},"summary":{"description":"An AI-generated summary of why this evidence supports the feature request.","type":"string"}},"type":"object"},"ExternalIssue":{"properties":{"external_id":{"description":"The external ID of the external issue.\n\nJira: ID of the issue (autoincrementing number from 10000).\n\nGitHub: Owner/Repo/IssueID.\n\nLinear: ID of the issue (UUID).\n\nAsana: ID of the task (Long number).","type":"string"},"link":{"description":"Link to the product issue.","type":"string"},"source":{"description":"The source of the external issue.","type":"string"}},"type":"object"},"ErrorApiResponseBody":{"properties":{"errors":{"description":"The list of errors.","items":{"type":"string"},"type":"array"},"exists_id":{"description":"The ID of the object that already exists if this is a duplicate object error.","type":"string"},"request_id":{"description":"The request ID for tracking.","type":"string"}},"type":"object"}}},"paths":{"/feature-requests/{id}":{"get":{"description":"Returns a single feature request by ID. Optionally includes evidence items when fetch_evidence is true.\n\n**Rate limit:** 60 requests per minute","operationId":"GetFeatureRequest","parameters":[{"description":"The ID of the feature request to fetch.","in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"Whether to include evidence items in the response. Defaults to false.","in":"query","name":"fetch_evidence","schema":{"type":"boolean"}}],"responses":{"200":{"$ref":"#/components/responses/GetFeatureRequestResponse"},"400":{"$ref":"#/components/responses/BadRequestApiResponse"},"404":{"$ref":"#/components/responses/ErrorApiResponse"},"500":{"$ref":"#/components/responses/InternalServerErrorApiResponse"}},"summary":"Get a feature request by ID","tags":["feature-requests"]}}}}
```

## Create a feature request

> Creates a new feature request. When should\_auto\_fetch\_evidence is true, supporting evidence is automatically gathered and used to generate the description.\
> \
> \*\*Rate limit:\*\* 20 requests per minute

```json
{"openapi":"3.0.3","info":{"title":"Pylon API.","version":"1.0.0"},"servers":[{"url":"https://api.usepylon.com"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"description":"Authorization: Bearer <token>","scheme":"bearer","type":"http"}},"schemas":{"CreateFeatureRequestRequest":{"properties":{"description":{"description":"The description of the feature request. Ignored when should_auto_fetch_evidence is true, since the description is then generated from gathered evidence.","type":"string"},"should_auto_fetch_evidence":{"description":"When true, asynchronously gathers supporting evidence and generates a description, mirroring the in-app experience. Defaults to false, which creates the feature request as-is.","type":"boolean"},"title":{"description":"The title of the feature request.","type":"string"}},"required":["title"],"type":"object"},"CreateFeatureRequestResponseBody":{"properties":{"data":{"$ref":"#/components/schemas/FeatureRequest"},"request_id":{"type":"string"}},"type":"object"},"FeatureRequest":{"properties":{"created_at":{"description":"The time the feature request was created (RFC3339).","type":"string"},"custom_fields":{"additionalProperties":{"$ref":"#/components/schemas/CustomFieldValue"},"description":"Custom field values associated with the feature request, keyed by custom field slug.","type":"object"},"description":{"description":"The description of the feature request.","type":"string"},"evidence":{"description":"Evidence items linked to this feature request. Only populated when fetch_evidence=true.","items":{"$ref":"#/components/schemas/FeatureRequestEvidence"},"type":"array"},"evidence_count":{"description":"The number of evidence items (excluding irrelevant) linked to this feature request.","format":"int64","type":"integer"},"external_issues":{"description":"The external product issues associated with the feature request, if any.","items":{"$ref":"#/components/schemas/ExternalIssue"},"type":"array"},"id":{"description":"The ID of the feature request.","type":"string"},"portal_visible_to_account_ids":{"description":"Account IDs that can see this feature request in the customer portal. Empty means hidden from all accounts. Only takes effect when the Feature Requests tab is enabled in portal settings.","items":{"type":"string"},"type":"array"},"request_status":{"description":"The status of the feature request. Can be a built-in status (new, in_progress, closed, archived) or a custom status slug.","type":"string"},"title":{"description":"The title of the feature request.","type":"string"},"updated_at":{"description":"The time the feature request was last updated (RFC3339).","type":"string"}},"type":"object"},"CustomFieldValue":{"properties":{"slug":{"description":"The slug of the custom field.","type":"string"},"value":{"description":"The value of the custom field. Only to be used for single-valued custom fields. If unset, the custom field will be unset. If the custom field is a select field, the value must be the select option slug, which you can find from the GET /custom-fields endpoint. If the custom field is a relationship field, the value must be the related object ID.","type":"string"},"values":{"description":"The values of the custom field. Only to be used for multi-valued custom fields (ex. multiselect). If unset, the custom field will be unset. If the custom field is a multiselect field, the values must be the select option slugs which you can find from the GET /custom-fields endpoint.","items":{"type":"string"},"type":"array"}},"type":"object"},"FeatureRequestEvidence":{"properties":{"account_id":{"description":"The ID of the customer account that submitted this evidence (e.g. the account whose issue or call recording is linked), if available.","type":"string"},"external_url":{"description":"The URL of the evidence in the external system (e.g. Fathom, Gong). Only included for call recording evidence when the value is known; omitted for other evidence sources.","type":"string"},"source_id":{"description":"The ID of the linked issue. Only present for issue evidence.","type":"string"},"source_type":{"description":"The source type of the evidence (e.g. 'issue', 'call_recording', 'survey_response', 'manual').","type":"string"},"summary":{"description":"An AI-generated summary of why this evidence supports the feature request.","type":"string"}},"type":"object"},"ExternalIssue":{"properties":{"external_id":{"description":"The external ID of the external issue.\n\nJira: ID of the issue (autoincrementing number from 10000).\n\nGitHub: Owner/Repo/IssueID.\n\nLinear: ID of the issue (UUID).\n\nAsana: ID of the task (Long number).","type":"string"},"link":{"description":"Link to the product issue.","type":"string"},"source":{"description":"The source of the external issue.","type":"string"}},"type":"object"},"ErrorApiResponseBody":{"properties":{"errors":{"description":"The list of errors.","items":{"type":"string"},"type":"array"},"exists_id":{"description":"The ID of the object that already exists if this is a duplicate object error.","type":"string"},"request_id":{"description":"The request ID for tracking.","type":"string"}},"type":"object"}},"responses":{"CreateFeatureRequestResponse":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateFeatureRequestResponseBody"}}},"description":""},"BadRequestApiResponse":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorApiResponseBody"}}},"description":"The request was invalid or could not be completed."},"ForbiddenApiResponse":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorApiResponseBody"}}},"description":"The authenticated caller or organization is not allowed to access this endpoint or operation."},"InternalServerErrorApiResponse":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorApiResponseBody"}}},"description":"An unexpected internal error occurred."}}},"paths":{"/feature-requests":{"post":{"description":"Creates a new feature request. When should_auto_fetch_evidence is true, supporting evidence is automatically gathered and used to generate the description.\n\n**Rate limit:** 20 requests per minute","operationId":"CreateFeatureRequest","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateFeatureRequestRequest"}}}},"responses":{"200":{"$ref":"#/components/responses/CreateFeatureRequestResponse"},"400":{"$ref":"#/components/responses/BadRequestApiResponse"},"403":{"$ref":"#/components/responses/ForbiddenApiResponse"},"500":{"$ref":"#/components/responses/InternalServerErrorApiResponse"}},"summary":"Create a feature request","tags":["feature-requests"]}}}}
```

## Set portal visibility for a feature request

> Toggles portal visibility for a set of accounts on a feature request. Idempotent — adding already-visible accounts or removing already-hidden accounts is a no-op. Note: visibility only takes effect when the Feature Requests tab is enabled in portal settings.\
> \
> \*\*Rate limit:\*\* 20 requests per minute

```json
{"openapi":"3.0.3","info":{"title":"Pylon API.","version":"1.0.0"},"servers":[{"url":"https://api.usepylon.com"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"description":"Authorization: Bearer <token>","scheme":"bearer","type":"http"}},"schemas":{"SetFeatureRequestPortalVisibilityRequestBody":{"properties":{"account_ids":{"description":"The account IDs to add or remove portal visibility for.","items":{"type":"string"},"type":"array"},"visible":{"description":"Whether the specified accounts should be able to see this feature request in the portal. True to add visibility, false to remove.","type":"boolean"}},"required":["account_ids","visible"],"type":"object"},"SetFeatureRequestPortalVisibilityResponseBody":{"properties":{"data":{"$ref":"#/components/schemas/FeatureRequest"},"request_id":{"type":"string"}},"type":"object"},"FeatureRequest":{"properties":{"created_at":{"description":"The time the feature request was created (RFC3339).","type":"string"},"custom_fields":{"additionalProperties":{"$ref":"#/components/schemas/CustomFieldValue"},"description":"Custom field values associated with the feature request, keyed by custom field slug.","type":"object"},"description":{"description":"The description of the feature request.","type":"string"},"evidence":{"description":"Evidence items linked to this feature request. Only populated when fetch_evidence=true.","items":{"$ref":"#/components/schemas/FeatureRequestEvidence"},"type":"array"},"evidence_count":{"description":"The number of evidence items (excluding irrelevant) linked to this feature request.","format":"int64","type":"integer"},"external_issues":{"description":"The external product issues associated with the feature request, if any.","items":{"$ref":"#/components/schemas/ExternalIssue"},"type":"array"},"id":{"description":"The ID of the feature request.","type":"string"},"portal_visible_to_account_ids":{"description":"Account IDs that can see this feature request in the customer portal. Empty means hidden from all accounts. Only takes effect when the Feature Requests tab is enabled in portal settings.","items":{"type":"string"},"type":"array"},"request_status":{"description":"The status of the feature request. Can be a built-in status (new, in_progress, closed, archived) or a custom status slug.","type":"string"},"title":{"description":"The title of the feature request.","type":"string"},"updated_at":{"description":"The time the feature request was last updated (RFC3339).","type":"string"}},"type":"object"},"CustomFieldValue":{"properties":{"slug":{"description":"The slug of the custom field.","type":"string"},"value":{"description":"The value of the custom field. Only to be used for single-valued custom fields. If unset, the custom field will be unset. If the custom field is a select field, the value must be the select option slug, which you can find from the GET /custom-fields endpoint. If the custom field is a relationship field, the value must be the related object ID.","type":"string"},"values":{"description":"The values of the custom field. Only to be used for multi-valued custom fields (ex. multiselect). If unset, the custom field will be unset. If the custom field is a multiselect field, the values must be the select option slugs which you can find from the GET /custom-fields endpoint.","items":{"type":"string"},"type":"array"}},"type":"object"},"FeatureRequestEvidence":{"properties":{"account_id":{"description":"The ID of the customer account that submitted this evidence (e.g. the account whose issue or call recording is linked), if available.","type":"string"},"external_url":{"description":"The URL of the evidence in the external system (e.g. Fathom, Gong). Only included for call recording evidence when the value is known; omitted for other evidence sources.","type":"string"},"source_id":{"description":"The ID of the linked issue. Only present for issue evidence.","type":"string"},"source_type":{"description":"The source type of the evidence (e.g. 'issue', 'call_recording', 'survey_response', 'manual').","type":"string"},"summary":{"description":"An AI-generated summary of why this evidence supports the feature request.","type":"string"}},"type":"object"},"ExternalIssue":{"properties":{"external_id":{"description":"The external ID of the external issue.\n\nJira: ID of the issue (autoincrementing number from 10000).\n\nGitHub: Owner/Repo/IssueID.\n\nLinear: ID of the issue (UUID).\n\nAsana: ID of the task (Long number).","type":"string"},"link":{"description":"Link to the product issue.","type":"string"},"source":{"description":"The source of the external issue.","type":"string"}},"type":"object"},"ErrorApiResponseBody":{"properties":{"errors":{"description":"The list of errors.","items":{"type":"string"},"type":"array"},"exists_id":{"description":"The ID of the object that already exists if this is a duplicate object error.","type":"string"},"request_id":{"description":"The request ID for tracking.","type":"string"}},"type":"object"}},"responses":{"SetFeatureRequestPortalVisibilityResponse":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetFeatureRequestPortalVisibilityResponseBody"}}},"description":""},"BadRequestApiResponse":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorApiResponseBody"}}},"description":"The request was invalid or could not be completed."},"ErrorApiResponse":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorApiResponseBody"}}},"description":""},"InternalServerErrorApiResponse":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorApiResponseBody"}}},"description":"An unexpected internal error occurred."}}},"paths":{"/feature-requests/{id}/set-portal-visibility":{"post":{"description":"Toggles portal visibility for a set of accounts on a feature request. Idempotent — adding already-visible accounts or removing already-hidden accounts is a no-op. Note: visibility only takes effect when the Feature Requests tab is enabled in portal settings.\n\n**Rate limit:** 20 requests per minute","operationId":"SetFeatureRequestPortalVisibility","parameters":[{"description":"The ID of the feature request.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetFeatureRequestPortalVisibilityRequestBody"}}}},"responses":{"200":{"$ref":"#/components/responses/SetFeatureRequestPortalVisibilityResponse"},"400":{"$ref":"#/components/responses/BadRequestApiResponse"},"404":{"$ref":"#/components/responses/ErrorApiResponse"},"500":{"$ref":"#/components/responses/InternalServerErrorApiResponse"}},"summary":"Set portal visibility for a feature request","tags":["feature-requests"]}}}}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.usepylon.com/pylon-docs/developer/api/api-reference/feature-requests.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
