openapi: 3.0.1 info: title: Papercups Conversations API description: REST API for Papercups, the open-source customer-messaging and live-chat platform built on Elixir/Phoenix. Covers the documented conversations, messages, and customers resources plus the authenticated user endpoint. Authentication uses a Bearer API key (available from the Papercups dashboard). The hosted instance is at https://app.papercups.io; self-hosted deployments expose the same paths on their own host. Papercups is in maintenance mode (community-maintained). termsOfService: https://papercups.io contact: name: Papercups url: https://github.com/papercups-io/papercups license: name: MIT url: https://github.com/papercups-io/papercups/blob/master/LICENSE version: '1.0' servers: - url: https://app.papercups.io/api/v1 description: Papercups hosted instance - url: https://{host}/api/v1 description: Self-hosted Papercups instance variables: host: default: app.papercups.io description: Hostname of your self-hosted Papercups deployment security: - bearerAuth: [] tags: - name: Conversations description: Threads of messages between customers and agents. paths: /conversations: get: operationId: listConversations tags: - Conversations summary: List conversations description: Lists conversations. Supports filtering by status, priority, customer_id, and assignee_id via query parameters. parameters: - name: status in: query required: false schema: type: string enum: - open - closed - name: priority in: query required: false schema: type: string enum: - priority - not_priority - name: customer_id in: query required: false schema: type: string - name: assignee_id in: query required: false schema: type: string responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ConversationListResponse' '401': $ref: '#/components/responses/Unauthorized' post: operationId: createConversation tags: - Conversations summary: Create a conversation requestBody: required: true content: application/json: schema: type: object properties: conversation: $ref: '#/components/schemas/ConversationInput' responses: '201': description: Created content: application/json: schema: $ref: '#/components/schemas/ConversationResponse' '401': $ref: '#/components/responses/Unauthorized' /conversations/{id}: parameters: - $ref: '#/components/parameters/IdParam' get: operationId: getConversation tags: - Conversations summary: Retrieve a conversation responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ConversationResponse' '404': $ref: '#/components/responses/NotFound' put: operationId: updateConversation tags: - Conversations summary: Update a conversation description: Update conversation status, priority, or assignee. requestBody: required: true content: application/json: schema: type: object properties: conversation: $ref: '#/components/schemas/ConversationInput' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ConversationResponse' '404': $ref: '#/components/responses/NotFound' delete: operationId: deleteConversation tags: - Conversations summary: Delete a conversation responses: '204': description: No Content '404': $ref: '#/components/responses/NotFound' components: responses: Unauthorized: description: Missing or invalid API key content: application/json: schema: $ref: '#/components/schemas/Error' NotFound: description: Resource not found content: application/json: schema: $ref: '#/components/schemas/Error' schemas: ConversationListResponse: type: object properties: data: type: array items: $ref: '#/components/schemas/Conversation' Conversation: type: object properties: id: type: string account_id: type: string customer_id: type: string assignee_id: type: string nullable: true status: type: string enum: - open - closed priority: type: string enum: - priority - not_priority source: type: string read: type: boolean inserted_at: type: string format: date-time updated_at: type: string format: date-time ConversationInput: type: object properties: customer_id: type: string assignee_id: type: string status: type: string enum: - open - closed priority: type: string enum: - priority - not_priority source: type: string ConversationResponse: type: object properties: data: $ref: '#/components/schemas/Conversation' Error: type: object properties: error: type: object properties: status: type: integer message: type: string parameters: IdParam: name: id in: path required: true schema: type: string description: Resource identifier (UUID). securitySchemes: bearerAuth: type: http scheme: bearer description: 'Bearer API key (personal API key / token) from the Papercups dashboard, sent as `Authorization: Bearer `.'