{"files":{"SKILL.md":"---\nname: conversations-inbox-messages\ndescription: \"Conversations Inbox & Messages API skill. Use when working with Conversations Inbox & Messages for conversations. Covers 18 endpoints.\"\nversion: 1.0.0\ngenerator: lapsh\n---\n\n# Conversations Inbox & Messages\nAPI version: v3\n\n## Auth\nOAuth2 | ApiKey private-app in header\n\n## Base URL\nhttps://api.hubapi.com\n\n## Setup\n1. Set your API key in the appropriate header\n2. GET /conversations/v3/conversations/channel-accounts -- get channel accounts\n3. POST /conversations/v3/conversations/actors/batch/read -- create first read\n\n## Endpoints\n18 endpoints across 1 group. See references/api-spec.lap for full details.\n\n### Conversations\n| Method | Path | Description |\n|--------|------|-------------|\n| PUT | /conversations/conversations/v3/threads/{threadId}/assignee |  |\n| DELETE | /conversations/conversations/v3/threads/{threadId}/assignee |  |\n| POST | /conversations/v3/conversations/actors/batch/read | Get a group of actors |\n| GET | /conversations/v3/conversations/actors/{actorId} | Get a single actor |\n| GET | /conversations/v3/conversations/channel-accounts | Get channel accounts |\n| GET | /conversations/v3/conversations/channel-accounts/{channelAccountId} | Get a single channel account |\n| GET | /conversations/v3/conversations/channels | Get channels |\n| GET | /conversations/v3/conversations/channels/{channelId} | Get a single channel |\n| GET | /conversations/v3/conversations/inboxes | Get conversations inboxes |\n| GET | /conversations/v3/conversations/inboxes/{inboxId} | Get a single conversations inbox |\n| GET | /conversations/v3/conversations/threads | Get threads |\n| GET | /conversations/v3/conversations/threads/{threadId} | Get a single thread |\n| DELETE | /conversations/v3/conversations/threads/{threadId} | Archives a thread |\n| PATCH | /conversations/v3/conversations/threads/{threadId} | Update a thread |\n| GET | /conversations/v3/conversations/threads/{threadId}/messages | Get message history for a thread |\n| POST | /conversations/v3/conversations/threads/{threadId}/messages | Send a message to a thread |\n| GET | /conversations/v3/conversations/threads/{threadId}/messages/{messageId} | Get a single message |\n| GET | /conversations/v3/conversations/threads/{threadId}/messages/{messageId}/original-content | Get the original content of a single message |\n\n## Common Questions\nMatch user requests to endpoints in references/api-spec.lap. Key patterns:\n- \"Create a read?\" -> POST /conversations/v3/conversations/actors/batch/read\n- \"Get actor details?\" -> GET /conversations/v3/conversations/actors/{actorId}\n- \"List all channel-accounts?\" -> GET /conversations/v3/conversations/channel-accounts\n- \"Get channel-account details?\" -> GET /conversations/v3/conversations/channel-accounts/{channelAccountId}\n- \"List all channels?\" -> GET /conversations/v3/conversations/channels\n- \"Get channel details?\" -> GET /conversations/v3/conversations/channels/{channelId}\n- \"List all inboxes?\" -> GET /conversations/v3/conversations/inboxes\n- \"Get inboxe details?\" -> GET /conversations/v3/conversations/inboxes/{inboxId}\n- \"List all threads?\" -> GET /conversations/v3/conversations/threads\n- \"Get thread details?\" -> GET /conversations/v3/conversations/threads/{threadId}\n- \"Delete a thread?\" -> DELETE /conversations/v3/conversations/threads/{threadId}\n- \"Partially update a thread?\" -> PATCH /conversations/v3/conversations/threads/{threadId}\n- \"List all messages?\" -> GET /conversations/v3/conversations/threads/{threadId}/messages\n- \"Create a message?\" -> POST /conversations/v3/conversations/threads/{threadId}/messages\n- \"Get message details?\" -> GET /conversations/v3/conversations/threads/{threadId}/messages/{messageId}\n- \"List all original-content?\" -> GET /conversations/v3/conversations/threads/{threadId}/messages/{messageId}/original-content\n- \"How to authenticate?\" -> See Auth section above\n\n## Response Tips\n- Check response schemas in references/api-spec.lap for field details\n- Paginated endpoints accept limit/offset or cursor parameters\n- Create/update endpoints return the modified resource on success\n\n## References\n- Full spec: See references/api-spec.lap for complete endpoint details, parameter tables, and response schemas\n\n> Generated from the official API spec by [LAP](https://lap.sh)\n","references/api-spec.lap":"@lap v0.3\n# Machine-readable API spec. Each @endpoint block is one API call.\n@api Conversations Inbox & Messages\n@base https://api.hubapi.com\n@version v3\n@auth OAuth2 | ApiKey private-app in header\n@endpoints 18\n@toc conversations(18)\n\n@endpoint PUT /conversations/conversations/v3/threads/{threadId}/assignee\n@required {threadId: int(int64), actorId: str}\n@returns(200) {archived: bool, assignedTo: str, associatedContactId: str, closedAt: str(date-time), createdAt: str(date-time), id: str, inboxId: str, latestMessageReceivedTimestamp: str(date-time), latestMessageSentTimestamp: str(date-time), latestMessageTimestamp: str(date-time), originalChannelAccountId: str, originalChannelId: str, spam: bool, status: str, threadAssociations: map{associatedTicketId: str}} # successful operation\n\n@endpoint DELETE /conversations/conversations/v3/threads/{threadId}/assignee\n@required {threadId: int(int64)}\n@returns(204) No content\n\n@endpoint POST /conversations/v3/conversations/actors/batch/read\n@desc Get a group of actors\n@required {inputs: [str]}\n@optional {property: str}\n@returns(200) {completedAt: str(date-time), errors: [map], links: map, numErrors: int(int32), requestedAt: str(date-time), results: [any], startedAt: str(date-time), status: str} # successful operation\n\n@endpoint GET /conversations/v3/conversations/actors/{actorId}\n@desc Get a single actor\n@required {actorId: str}\n@optional {property: str}\n@returns(200) successful operation\n\n@endpoint GET /conversations/v3/conversations/channel-accounts\n@desc Get channel accounts\n@optional {after: str # The paging cursor token of the last successfully read resource will be returned as the `paging.next.after` JSON property of a paged response containing more results., archived: bool # Whether to return only results that have been archived., channelId: [int(int32)], defaultPageLength: int(int32), inboxId: [int(int32)], limit: int(int32) # The maximum number of results to display per page., sort: [str]}\n@returns(200) {paging: map{next: map{after: str, link: str}, prev: map{before: str, link: str}}, results: [map], total: int(int32)} # successful operation\n\n@endpoint GET /conversations/v3/conversations/channel-accounts/{channelAccountId}\n@desc Get a single channel account\n@required {channelAccountId: int(int64)}\n@optional {archived: bool=false # Whether to return only results that have been archived.}\n@returns(200) {active: bool, archived: bool, archivedAt: str(date-time), authorized: bool, channelId: str, createdAt: str(date-time), deliveryIdentifier: map{type: str, value: str}, id: str, inboxId: str, name: str} # successful operation\n\n@endpoint GET /conversations/v3/conversations/channels\n@desc Get channels\n@optional {after: str # The paging cursor token of the last successfully read resource will be returned as the `paging.next.after` JSON property of a paged response containing more results., defaultPageLength: int(int32), limit: int(int32) # The maximum number of results to display per page., sort: [str]}\n@returns(200) {paging: map{next: map{after: str, link: str}, prev: map{before: str, link: str}}, results: [map], total: int(int32)} # successful operation\n\n@endpoint GET /conversations/v3/conversations/channels/{channelId}\n@desc Get a single channel\n@required {channelId: int(int32)}\n@returns(200) {id: str, name: str} # successful operation\n\n@endpoint GET /conversations/v3/conversations/inboxes\n@desc Get conversations inboxes\n@optional {after: str # The paging cursor token of the last successfully read resource will be returned as the `paging.next.after` JSON property of a paged response containing more results., archived: bool # Whether to return only results that have been archived., defaultPageLength: int(int32), limit: int(int32) # The maximum number of results to display per page., sort: [str]}\n@returns(200) {paging: map{next: map{after: str, link: str}, prev: map{before: str, link: str}}, results: [map], total: int(int32)} # successful operation\n\n@endpoint GET /conversations/v3/conversations/inboxes/{inboxId}\n@desc Get a single conversations inbox\n@required {inboxId: int(int32)}\n@optional {archived: bool=false # Whether to return only results that have been archived.}\n@returns(200) {archived: bool, archivedAt: str(date-time), createdAt: str(date-time), id: str, name: str, type: str, updatedAt: str(date-time)} # successful operation\n\n@endpoint GET /conversations/v3/conversations/threads\n@desc Get threads\n@optional {after: str # The paging cursor token of the last successfully read resource will be returned as the `paging.next.after` JSON property of a paged response containing more results., archived: bool # Whether to return only results that have been archived., associatedContactId: int(int64), associatedTicketId: int(int64), association: [str], inboxId: [int(int32)], latestMessageTimestampAfter: str(date-time), limit: int(int32) # The maximum number of results to display per page., property: str, sort: [str], threadStatus: str(CLOSED/OPEN)}\n@returns(200) {paging: map{next: map{after: str, link: str}}, results: [map]} # successful operation\n\n@endpoint GET /conversations/v3/conversations/threads/{threadId}\n@desc Get a single thread\n@required {threadId: int(int64)}\n@optional {archived: bool # Whether to return only results that have been archived., association: [str], property: str}\n@returns(200) {archived: bool, assignedTo: str, associatedContactId: str, closedAt: str(date-time), createdAt: str(date-time), id: str, inboxId: str, latestMessageReceivedTimestamp: str(date-time), latestMessageSentTimestamp: str(date-time), latestMessageTimestamp: str(date-time), originalChannelAccountId: str, originalChannelId: str, spam: bool, status: str, threadAssociations: map{associatedTicketId: str}} # successful operation\n\n@endpoint DELETE /conversations/v3/conversations/threads/{threadId}\n@desc Archives a thread\n@required {threadId: int(int64)}\n@returns(204) No content\n\n@endpoint PATCH /conversations/v3/conversations/threads/{threadId}\n@desc Update a thread\n@required {threadId: int(int64)}\n@optional {archived: bool # Whether to return only results that have been archived., archived: bool # Whether this thread is archived. Set to false to restore the thread., status: str(CLOSED/OPEN) # The thread's status: `OPEN` or `CLOSED`.}\n@returns(200) {archived: bool, assignedTo: str, associatedContactId: str, closedAt: str(date-time), createdAt: str(date-time), id: str, inboxId: str, latestMessageReceivedTimestamp: str(date-time), latestMessageSentTimestamp: str(date-time), latestMessageTimestamp: str(date-time), originalChannelAccountId: str, originalChannelId: str, spam: bool, status: str, threadAssociations: map{associatedTicketId: str}} # successful operation\n\n@endpoint GET /conversations/v3/conversations/threads/{threadId}/messages\n@desc Get message history for a thread\n@required {threadId: int(int64)}\n@optional {after: str # The paging cursor token of the last successfully read resource will be returned as the `paging.next.after` JSON property of a paged response containing more results., archived: bool # Whether to return only results that have been archived., limit: int(int32) # The maximum number of results to display per page., property: str, sort: [str]}\n@returns(200) {paging: map{next: map{after: str, link: str}}, results: [any]} # successful operation\n\n@endpoint POST /conversations/v3/conversations/threads/{threadId}/messages\n@desc Send a message to a thread\n@required {threadId: int(int64)}\n@returns(201) successful operation\n\n@endpoint GET /conversations/v3/conversations/threads/{threadId}/messages/{messageId}\n@desc Get a single message\n@required {messageId: str, threadId: int(int64)}\n@optional {property: str}\n@returns(200) successful operation\n\n@endpoint GET /conversations/v3/conversations/threads/{threadId}/messages/{messageId}/original-content\n@desc Get the original content of a single message\n@required {messageId: str, threadId: int(int64)}\n@optional {property: str}\n@returns(200) {richText: str, text: str} # successful operation\n\n@end\n"}}