Ir al contenido principal
Posts

Get a post by ID

Retrieves a single post by its unique identifier.

GET
/v2/posts/{id}

Returns the full post object including:

  • Author information
  • Current status
  • Tags
  • Voting stats
  • Engagement metrics
  • Custom field values

Feedback processing

For a post created with intakeMode: 'feedback', the response also carries processing, which says how far Featurebase has got with the text and what it made of it. It is absent on every other post, and on the list endpoint.

processing.status:

  • queued - the text was accepted and no result has landed yet
  • processing - Featurebase is organizing the submission right now
  • complete - it is done; results lists what came out of it
  • needs_review - it is done, and a teammate still has to decide something
  • skipped - nothing ran, and nothing will; reason says why (the same reason the create returned, for example autopilot_off). The post is stored exactly as it was sent.

processing.results is present in workspaces that organize submissions, once the run has finished: one entry per ask found in the text, in the order they appear. Each entry has the ask's title and its outcome:

  • request - the ask became a request of its own
  • attached - it was added as evidence to a request that already existed
  • held - it became a request waiting for a teammate to publish it
  • question - it asked something; no request was created and a teammate answers it

postId and postTitle name the request the ask became or was attached to. They are absent for a question, and absent when that request is not readable through this API.

held results carry a reason code saying what the teammate still has to decide: too_many_topics (the submission held more separate asks than one submission can become requests, so this request lists the ones that did not fit), uncertain, custom_fields or processing_failed (the AI could not rewrite the text, or could not check the ask against existing requests, so a teammate confirms it). No other outcome carries it.

Workspaces that do not organize submissions report status only: there the post you sent IS the request, so there is no separate result to list.

Authorizationstringheaderobligatorio

API key as Bearer token. Use: Authorization: Bearer sk_...

idstringobligatorio

Post unique identifier

Ejemplo: 507f1f77bcf86cd799439011
Featurebase-Versionenum<string>header

API version for this request. Defaults to your organization's configured API version if not specified.

Opciones disponibles: 2026-08-19.orbit, 2026-01-01.nova, 2025-12-12.clover
Ejemplo: 2026-08-19.orbit

Respuesta

application/json

Success

accessobjectobligatorio
anchorobject | nullobligatorio

When kind is 'insight', where exactly the insight points back into its origin: an insight source record with character ranges into its fullText, or the native conversation/message/comment/post ids.

assigneeIdstring | nullobligatorio

ID of the admin assigned to this post, null if unassigned

Ejemplo: 507f1f77bcf86cd799439013
authorobject | nullobligatorio
boardIdstringobligatorio

Board (category) ID this post belongs to

Ejemplo: 507f1f77bcf86cd799439011
commentCountnumberobligatorio

Total number of comments

Ejemplo: 5
contentstringobligatorio

Post content in HTML format

Ejemplo: <p>It would be great to have a dark mode option for the dashboard.</p>
createdAtstringobligatorio

ISO 8601 timestamp when created

Ejemplo: 2023-12-12T00:00:00.000Z
customFieldsobjectobligatorio

Custom field values keyed by field ID

dedupedenum<boolean>

Present and true only on POST /v2/posts, when the request carried a source.externalId that already had a post. The existing post is returned unchanged with HTTP 200; a newly created post returns HTTP 201 without this field.

Opciones disponibles: true
Ejemplo: true
etastring | nullobligatorio

Estimated completion time as ISO 8601 timestamp, null if not set

Ejemplo: 2025-01-01T00:00:00.000Z
featuresobjectobligatorio
groupKeystring | nullobligatorio

When kind is 'insight', the triage grouping key (source record id, conversation id, origin post id, or the insight's own id for singletons). Legacy insights may be null and group as singletons.

idstringobligatorio

Unique identifier

Ejemplo: 507f1f77bcf86cd799439011
inReviewbooleanobligatorio

Whether the post is pending moderation review

Ejemplo: false
insightSourceobject | nullobligatorio

Provenance of an insight: which channel it came from and how it was captured.

intakeModeenum<string>

Present only on POST /v2/posts: the intakeMode the post was processed under ('request' when the request named none). On an idempotent replay (deduped: true) this is the mode the post was ORIGINALLY created with.

Opciones disponibles: request, feedback
Ejemplo: request
integrationsobjectobligatorio

Third-party integration links associated with this post

isPinnedbooleanobligatorio

Whether the post is pinned to the top

Ejemplo: false
kindenum<string>obligatorio

Discriminates an actionable work item ('issue') from a customer submission whose claims were extracted into insights ('record' — not a work item). Defaults to 'issue' for all pre-existing posts. Default list responses return issues only; pass kind='record' to opt in. Raw signal ('insight') is never returned by the posts resource — insights are served by /v2/insights.

Opciones disponibles: issue, insight, record
Ejemplo: issue
linkedInsightCountnumberobligatorio

Number of insights linked to this issue as supporting evidence. Only meaningful when kind is 'issue'.

Ejemplo: 0
linkedIssueIdstring | nullobligatorio

When kind is 'insight', the ID of the issue this insight supports. Null when the insight is unlinked or when kind is 'issue'.

objectenum<string>obligatorio

Object type identifier

Opciones disponibles: post
Ejemplo: post
opportunityAmountnumber | nullobligatorio

Total opportunity amount from linked HubSpot deals and Salesforce opportunities

Ejemplo: 30000
portalHiddenbooleanobligatorio

True when the issue is hidden from portal/public surfaces. Missing stored values are returned as false.

Ejemplo: false
postUrlstringobligatorio

Full URL to view the post

Ejemplo: https://feedback.example.com/p/add-dark-mode-support
processingobject

On POST /v2/posts — queued: a processing run (claim extraction or the Organize rewrite) was enqueued and its result lands asynchronously on the post. skipped: nothing was enqueued; reason says which gate decided ('request_mode' for every intakeMode: 'request' create). existing: the create was an idempotent replay and the post was not processed again. On GET /v2/posts/{id} this field is present only for posts created with intakeMode: 'feedback' and reports how far that processing has got ('queued', 'processing', 'complete', 'needs_review', or 'skipped' with the same reason the create returned), with results listing what was made of the submission once the run has finished.

slugstringobligatorio

URL-friendly slug

Ejemplo: add-dark-mode-support
statusobjectobligatorio
tagsobject[]obligatorio

Tags attached to this post

titlestringobligatorio

Post title

Ejemplo: Add dark mode support
updatedAtstringobligatorio

ISO 8601 timestamp when last modified

Ejemplo: 2023-12-13T00:00:00.000Z
upvotesnumberobligatorio

Total number of upvotes

Ejemplo: 42