---
title: "Get Hubspot Reply Threads"
method: GET
path: "/api/v1/public/hubspot/reply-threads"
tags: ["hubspot-crm-card"]
---

# Get Hubspot Reply Threads

`GET /api/v1/public/hubspot/reply-threads`

## Request

- Base URL: `https://api.getanana.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.getanana.com/api/v1/public/hubspot/reply-threads`
- Auth: none declared

Email and form conversations for the record the card is placed on.

HubSpot appends ``portalId``, ``userId``, ``userEmail``, and ``appId``.
``userEmail`` stays in the signed query and is used only to verify that
signature. It is not parsed as a field, logged, sent to Sentry, or
forwarded. The list uses the same thread ids as the reply draft. A thread
that was never ingested is included when HubSpot says it is email or a
form. A HubSpot chat channel is omitted. When the record has no email
thread and Anana wrote it from a phone call or website chat, the list
is one follow-up for a guest who has an email.

## Query parameters

- `portalId` string, required
- `objectType` string, required
- `objectId` string, required
- `appId` string, nullable

## Response `200`

Successful Response

- HubSpotReplyThreadsResponse: Conversations synced for one CRM record, in HubSpot's order. ``ok`` is the only status that includes conversations. Any other status is an empty state and carries no partial list.
  - `status` 'ok' | 'portal_not_connected' | 'ambiguous_portal' | 'thread_not_found' | 'not_email_thread' | 'list_incomplete', required
  - `conversations` HubSpotReplyConversation[], nullable
    - `hubspot_thread_id` string, required
    - `subject` string, nullable
    - `last_message_at` string, date-time, nullable
    - `last_sender` string, required
    - `channel` string, required
    - `draftable` boolean, required
    - `blocked_reason` 'hotel_replied_last' | 'ambiguous_inbox', nullable
  - `notice` string, nullable

## Other responses

- `400`: Error
- `401`: Error
- `422`: Validation Error
- `502`: Error

## Changes

> 55 revisions in range; 1 not diffed.

- **2026-10-16** `9454f10581b0`: 1 info
  - added the optional property `conversations/anyOf[subschema #1]/items/blocked_reason` to the response with the `200` status
- **2026-10-16** `4f0170dcfa72`: 1 info
  - added the optional property `notice` to the response with the `200` status
- **2026-10-15** `a9cebb28e243`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/getanana/apis/cleon-api/changes/api/v1/public/hubspot/reply-threads/get.md)

---

[API](https://skmtc.dev/getanana/apis/cleon-api.md) · [All operations](https://skmtc.dev/getanana/apis/cleon-api/llms.txt) · [OpenAPI document](https://skmtc.dev/getanana/apis/cleon-api/revisions/4d9d38769a75?raw)
