Assembled Conversations API

Bulk-ingest and bulk-update customer conversation records — phone, email, chat, SMS, social, and back-office — so they can be associated with agents, queues, and channels for reporting, QA, and analytics. Used by customers running on non-Zendesk/Salesforce stacks or merging multiple CRMs into a unified support view.

Assembled Conversations API is one of 12 APIs that Assembled publishes on the APIs.io network, described by a machine-readable OpenAPI specification.

This API exposes 1 machine-runnable capability that can be deployed as REST, MCP, or Agent Skill surfaces via Naftiko and 1 JSON Schema definition.

Tagged areas include Conversations, Channels, and Customer Interactions. The published artifact set on APIs.io includes API documentation, an OpenAPI specification, 1 Naftiko capability spec, and 1 JSON Schema.

OpenAPI Specification

assembled-conversations-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Assembled Conversations API
  description: |
    Bulk-ingest and bulk-update customer conversation records — phone,
    email, chat, SMS, social, and back-office — so they can be associated
    with agents, queues, and channels for reporting, QA, and analytics.

    Used by customers running on non-Zendesk/Salesforce stacks or merging
    multiple CRMs into a unified support view.
  version: '2026-05-24'
  contact:
    name: Assembled Support
    url: https://support.assembled.com
servers:
  - url: https://api.assembledhq.com
    description: Production Server
security:
  - BasicAuth: []
tags:
  - name: Conversations
paths:
  /v0/conversations/bulk:
    post:
      summary: Assembled Bulk Upsert Conversations
      description: Create or overwrite conversation records in bulk.
      operationId: bulkUpsertConversations
      tags: [Conversations]
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                conversations:
                  type: array
                  items: { $ref: '#/components/schemas/ConversationInput' }
      responses:
        '202':
          description: Accepted
    patch:
      summary: Assembled Bulk Update Conversations
      description: Update existing conversations with partial fields, identified by external_id.
      operationId: bulkUpdateConversations
      tags: [Conversations]
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                conversations:
                  type: array
                  items: { $ref: '#/components/schemas/ConversationUpdate' }
      responses:
        '202':
          description: Accepted
components:
  securitySchemes:
    BasicAuth: { type: http, scheme: basic }
  schemas:
    ConversationInput:
      type: object
      required: [external_id, channel, started_at]
      properties:
        external_id: { type: string, description: Stable identifier from the source platform }
        platform: { type: string, example: zendesk }
        channel: { type: string, enum: [phone, email, chat, sms, social, back_office] }
        queue_id: { type: string }
        assigned_agent_id: { type: string }
        customer_id: { type: string }
        subject: { type: string }
        status: { type: string }
        started_at: { type: string, format: date-time }
        ended_at: { type: string, format: date-time }
        handle_time_seconds: { type: number }
        wait_time_seconds: { type: number }
        first_response_time_seconds: { type: number }
        resolved: { type: boolean }
        csat_score: { type: number, nullable: true }
        metadata:
          type: object
          additionalProperties: true
    ConversationUpdate:
      type: object
      required: [external_id]
      properties:
        external_id: { type: string }
        assigned_agent_id: { type: string }
        status: { type: string }
        ended_at: { type: string, format: date-time }
        handle_time_seconds: { type: number }
        resolved: { type: boolean }
        csat_score: { type: number }
        metadata:
          type: object
          additionalProperties: true