openapi: 3.0.1 info: title: Papercups Conversations Customers 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: Customers description: Customer records (users, leads, or contacts). paths: /customers: get: operationId: listCustomers tags: - Customers summary: List customers description: Lists customers, filterable by name, email, host, and company_id. parameters: - name: name in: query required: false schema: type: string - name: email in: query required: false schema: type: string - name: host in: query required: false schema: type: string - name: company_id in: query required: false schema: type: string responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/CustomerListResponse' '401': $ref: '#/components/responses/Unauthorized' post: operationId: createCustomer tags: - Customers summary: Create a customer requestBody: required: true content: application/json: schema: type: object properties: customer: $ref: '#/components/schemas/CustomerInput' responses: '201': description: Created content: application/json: schema: $ref: '#/components/schemas/CustomerResponse' '401': $ref: '#/components/responses/Unauthorized' /customers/{id}: parameters: - $ref: '#/components/parameters/IdParam' get: operationId: getCustomer tags: - Customers summary: Retrieve a customer responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/CustomerResponse' '404': $ref: '#/components/responses/NotFound' put: operationId: updateCustomer tags: - Customers summary: Update a customer requestBody: required: true content: application/json: schema: type: object properties: customer: $ref: '#/components/schemas/CustomerInput' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/CustomerResponse' '404': $ref: '#/components/responses/NotFound' delete: operationId: deleteCustomer tags: - Customers summary: Delete a customer responses: '204': description: No Content '404': $ref: '#/components/responses/NotFound' components: schemas: CustomerResponse: type: object properties: data: $ref: '#/components/schemas/Customer' Customer: type: object properties: id: type: string account_id: type: string name: type: string nullable: true email: type: string nullable: true external_id: type: string nullable: true phone: type: string nullable: true company_id: type: string nullable: true host: type: string nullable: true current_url: type: string nullable: true browser: type: string nullable: true os: type: string nullable: true metadata: type: object additionalProperties: true first_seen: type: string format: date last_seen_at: type: string format: date-time inserted_at: type: string format: date-time updated_at: type: string format: date-time CustomerInput: type: object properties: name: type: string email: type: string external_id: type: string phone: type: string company_id: type: string metadata: type: object additionalProperties: true Error: type: object properties: error: type: object properties: status: type: integer message: type: string CustomerListResponse: type: object properties: data: type: array items: $ref: '#/components/schemas/Customer' 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' 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 `.'