Deck Docs

Resource Reference

Learn which Public API endpoints are available, what they return, and how pagination works.

Resource Reference

This page documents the human-readable shape of the v1 Deck Public API. The machine-readable contract is available from the OpenAPI endpoint.

Endpoint summary

MethodPathDescriptionPagination
GET/openapiOpenAPI 3.1 specificationnone
GET/meVerify the key and inspect resolved identitynone
GET/themesList themescursor
GET/themes/{themeId}Get a theme by IDnone
GET/insightsList insightscursor
GET/insights/{insightId}Get an insight by IDnone
GET/initiativesList initiativescursor
GET/initiatives/{initiativeId}Get an initiative by IDnone
POST/build/initiativesExecute one initiative build mutationnone
POST/build/opportunitiesExecute one opportunity build mutationnone
GET/subthemesList subthemesoffset
GET/subthemes/{subthemeId}Get a subtheme by IDnone

/me

Use this endpoint to confirm that your key works and see the identity Deck resolved from it.

Response fields

FieldMeaning
org_idThe authenticated organization
user_idThe key owner
roleThe key owner’s current role
scopeThe authorized scope for this endpoint (read for /me)

/themes

Lists themes for the authenticated organization.

Query parameters

ParameterTypeNotes
limitintegerdefault 50, max 100
cursorstringopaque pagination cursor

Theme fields

FieldMeaning
idTheme ID
nameTheme name
colorTheme color
notesOptional notes
insight_countNumber of linked insights
created_atCreation timestamp
updated_atLast update timestamp

/insights

Lists insights for the authenticated organization.

Query parameters

ParameterTypeNotes
limitintegerdefault 50, max 100
cursorstringopaque pagination cursor
theme_idstringfilter to a specific theme
sentimentstringPOSITIVE, NEGATIVE, NEUTRAL
categorystringcategory filter

Supported categories

  • PAIN_POINTS
  • DELIGHTS
  • GENERAL_FEEDBACK
  • FEATURE_REQUESTS
  • USABILITY_ISSUES
  • BUGS_AND_ERRORS

Insight list fields

FieldMeaning
idInsight ID
nameInsight title
sentimentSentiment classification
categoryInsight category
quoteRepresentative customer quote
themesLinked theme references
created_atCreation timestamp
updated_atLast update timestamp

/insights/{insightId}

Returns a single insight with richer source metadata.

Additional fields include:

  • feedback_id
  • contact_id
  • user_email
  • user_name
  • interview_date

/initiatives

Lists initiatives for the authenticated organization.

Query parameters

ParameterTypeNotes
limitintegerdefault 50, max 100
cursorstringopaque pagination cursor
statusstringinitiative lifecycle status

Supported statuses

  • draft
  • exploring
  • building
  • ready_to_act
  • completed
  • archived

Initiative fields

FieldMeaning
idInitiative ID
titleInitiative title
slugURL slug
descriptionOptional short summary
goalOptional goal statement
statusInitiative status
leveraged_insights_countNumber of linked insights
created_atCreation timestamp
updated_atLast update timestamp

/initiatives/{initiativeId}

Returns a single initiative plus structured content sections.

Additional fields:

  • sections
  • last_generated_at

Each section includes:

  • key
  • content
  • updated_at

Build write surfaces

Build writes are action-based and strictly bounded.

Required on every mutation:

  • Idempotency-Key header (1-128 chars)
  • one action payload per request
  • org policy that allows write scope for the key owner

Explicit non-goals:

  • backlog generation endpoints
  • story generation endpoints
  • arbitrary delete endpoints

/build/initiatives

Executes one initiative mutation action.

Supported actions

ActionRequired fieldsOptional fields
createtitlegoal, owner_id
update_titleinitiative_id, titlenone
update_goalinitiative_id, goalnone
update_statusinitiative_id, statusnone
upsert_sectioninitiative_id, section_type, contentmetadata
set_segmentsinitiative_id, segment_idsnone

/build/opportunities

Executes one opportunity mutation action.

Supported actions

ActionRequired fieldsOptional fields
archiveopportunity_idnone
set_segmentsopportunity_id, segment_idsnone
link_initiativeopportunity_id, initiative_idnone
create_initiative_from_opportunityopportunity_id, titlegoal, owner_id

Idempotency behavior

  • Same key + same normalized payload returns the original response with idempotency.replayed=true
  • Same key + different payload returns 409 IDEMPOTENCY_CONFLICT
  • Reusing the same key while the original matching request is still running also returns 409 IDEMPOTENCY_CONFLICT

/subthemes

Lists subthemes synthesized from theme-level or segment-level analysis.

Subthemes are only available to organizations eligible for the subthemes feature.

Query parameters

ParameterTypeNotes
limitintegerdefault 50, max 100
offsetintegerzero-based offset
theme_idstringfilter to a specific theme
segment_idstringfilter to a specific segment when segments are enabled
qstringcase-insensitive search against pattern name or description

Subtheme fields

FieldMeaning
idSubtheme ID
nameSubtheme name
descriptionSubtheme description
insight_countNumber of contributing insights
sentiment_breakdownPositive, negative, and neutral counts
theme_idParent theme ID
theme_nameParent theme name
theme_colorParent theme color
segment_idSegment context when present
synthesized_atTimestamp of the synthesis used

/subthemes/{subthemeId}

Returns full synthesized subtheme detail.

Additional fields:

  • insight_ids
  • blocks
  • theme
  • related_subthemes

Use this endpoint when you need more than the summary list and want the full subtheme context.

Pagination

Cursor pagination

Used by:

  • themes
  • insights
  • initiatives

Response shape:

{
  "pagination": {
    "next_cursor": "opaque-string-or-null",
    "has_more": true
  }
}

Offset pagination

Used by:

  • subthemes

Response shape:

{
  "pagination": {
    "total": 120,
    "has_more": true,
    "offset": 0,
    "limit": 50
  }
}

OpenAPI spec

The latest API contract is available at:

/api/v1/openapi

Use it when you want the exact field types or need to generate a client.