openapi: 3.1.0 info: version: 1.0.0 title: Waizer Public API description: The Waizer API provides a robust way to send messages to a project, manage users and run analysis jobs. Use your API key to authenticate requests. servers: - url: https://api.analyzer.whitewall.dev/api/v1 tags: - name: Messages description: Send messages to a project. - name: Jobs description: Create and monitor analysis jobs. - name: Users description: Manage company users and roles. security: - ApiKeyAuth: [] components: securitySchemes: ApiKeyAuth: type: apiKey in: header name: x-api-key schemas: WCFMessage: type: object properties: threadId: type: string minLength: 1 description: Unique identifier of the thread. Commonly tied to a user. example: 9831d5c5-f6e2-48fe-bb48-095dd1fb536e type: type: string minLength: 1 description: Original message's MIME Type. example: text/plain direction: type: string enum: - SENT - RECEIVED description: Indicates whether the message was sent by the agent or received from the user. example: SENT x-enum-descriptions: SENT: Message was sent by the agent. RECEIVED: Message was received from the user. content: type: string minLength: 1 description: The actual content of the message. example: My name is John Doe. How can I assist you? agentId: type: string minLength: 1 description: An identifier for the agent the user is interacting with. example: support@waizer.ai timestamp: type: string format: date-time description: A timestamp representing when the message was sent or received (ISO 8601). example: 2025-09-10T10:39:44.000Z metadata: type: - object - "null" properties: error: type: string minLength: 1 description: Specify that a message contains a platform specific error. Should be a description of said error. Can only be used for messages whose direction is SENT. example: Failed to deliver message due to network error. humanAssigneeId: type: string minLength: 1 description: Specify that a message was sent as a human handoff. Allows identifying a specific person. Can only be used for messages whose direction is SENT. example: john.doe@waizer.ai description: Used to flag special information about the message. required: - threadId - type - direction - content - agentId - timestamp Job: type: object properties: id: type: string description: Unique identifier of the job. example: aeb76972-ebf7-47ee-89a3-57ae5b8bf0f0 status: type: string enum: - pending - running - completed - failed description: Current job status. example: pending progress: type: number description: Progress percentage from 0 to 100. example: 0 startedAt: type: string description: Timestamp when the job started. format: date-time example: 2026-01-01T00:00:00Z error: type: - string - "null" description: Error message if the job failed. example: null required: - id - status - progress - startedAt - error User: type: object properties: id: type: string description: Unique identifier of the user. example: cmk46vbto00002a6g3gzx6l0 name: type: - string - "null" minLength: 1 maxLength: 64 description: Full name of the user. example: John Doe email: type: string format: email description: Email address of the user. example: johndoe@example.com photoUri: type: - string - "null" description: URL to the profile picture of the user. role: type: string enum: &a1 - admin - member - viewer description: Role of the user within the organization. example: member createdAt: type: string description: Timestamp when the user was created. format: date-time example: 2025-11-25T07:20:37Z required: - id - name - email - photoUri - role - createdAt parameters: {} paths: /messages/{projectId}: post: x-speakeasy-name-override: post operationId: postMessages tags: - Messages summary: Ingest API messages description: >- Ingests an array of API messages for a project. Messages are validated and stored for later analysis. Scope: messages:write parameters: - schema: type: string description: Unique identifier of the project. example: cmk4s required: true name: projectId in: path requestBody: required: true content: application/json: schema: type: array items: $ref: "#/components/schemas/WCFMessage" maxItems: 1000 responses: "201": description: Messages ingested successfully content: application/json: schema: type: object properties: message: type: string description: Status message describing the result of the ingestion. example: Messages ingested successfully count: type: number description: Number of messages successfully ingested. example: 42 required: - message - count "400": description: Invalid request body content: application/json: schema: type: object properties: error: type: string required: - error "401": description: Invalid or missing API key content: application/json: schema: type: object properties: error: type: string required: - error "404": description: Project or integration not found content: application/json: schema: type: object properties: error: type: string required: - error "500": description: Internal Server Error content: application/json: schema: type: object properties: error: type: string required: - error /jobs/{projectId}: get: x-speakeasy-name-override: get operationId: getJob tags: - Jobs summary: Get job details description: |- Retrieves the details and status of a job. Scope: jobs:read parameters: - schema: type: string description: Unique identifier of the project. example: cmk4s required: true name: projectId in: path - schema: type: string description: Unique identifier of the job. example: aeb76972-ebf7-47ee-89a3-57ae5b8bf0f0 required: true name: jobId in: query responses: "200": description: Job details content: application/json: schema: $ref: "#/components/schemas/Job" "400": description: Invalid request body content: application/json: schema: type: object properties: error: type: string required: - error "401": description: Invalid or missing API key content: application/json: schema: type: object properties: error: type: string required: - error "404": description: Integration, project or job not found content: application/json: schema: type: object properties: error: type: string required: - error "500": description: Internal Server Error content: application/json: schema: type: object properties: error: type: string required: - error post: x-speakeasy-name-override: create operationId: createJob tags: - Jobs summary: Create new job description: |- Triggers a new ingestion process for the API integration of the project. Scope: jobs:write parameters: - schema: type: string description: Unique identifier of the project. example: cmk4s required: true name: projectId in: path responses: "200": description: Job created successfully content: application/json: schema: type: object properties: jobId: type: string description: Unique identifier of the job. example: aeb76972-ebf7-47ee-89a3-57ae5b8bf0f0 required: - jobId "401": description: Invalid or missing API key content: application/json: schema: type: object properties: error: type: string required: - error "404": description: API integration not found content: application/json: schema: type: object properties: error: type: string required: - error "429": description: Rate limit exceeded content: application/json: schema: type: object properties: error: type: string required: - error "500": description: Internal Server Error content: application/json: schema: type: object properties: error: type: string required: - error /users: get: x-speakeasy-name-override: list operationId: getOrganizationUsers tags: - Users summary: List organization users description: |- Lists all users from the organization. Scope: users:read responses: "200": description: List of organization users content: application/json: schema: type: array items: $ref: "#/components/schemas/User" "401": description: Invalid or missing API key content: application/json: schema: type: object properties: error: type: string required: - error "500": description: Internal Server Error content: application/json: schema: type: object properties: error: type: string required: - error post: x-speakeasy-name-override: add operationId: addUserToOrganization tags: - Users summary: Add user to organization description: |- Adds a new user to the organization. Sends an invitation email. Scope: users:write requestBody: required: true content: application/json: schema: type: object properties: email: type: string format: email description: Email address of the user. example: johndoe@example.com role: type: string enum: *a1 default: member description: Role of the user within the organization. example: member required: - email responses: "201": description: User added successfully content: application/json: schema: type: object properties: userId: type: string description: Unique identifier of the user. example: cmk46vbto00002a6g3gzx6l0 required: - userId "400": description: Invalid request body content: application/json: schema: type: object properties: error: type: string required: - error "401": description: Invalid or missing API key content: application/json: schema: type: object properties: error: type: string required: - error "409": description: User already exists in the organization content: application/json: schema: type: object properties: error: type: string required: - error "500": description: Internal Server Error content: application/json: schema: type: object properties: error: type: string required: - error /users/{userId}: patch: x-speakeasy-name-override: updateRole operationId: updateUserRole tags: - Users summary: Update user role description: |- Updates the role of a user in the organization. Scope: users:write parameters: - schema: type: string description: Unique identifier of the user. example: cmk46vbto00002a6g3gzx6l0 required: true name: userId in: path requestBody: required: true content: application/json: schema: type: object properties: role: type: string enum: *a1 description: Role of the user within the organization. example: member required: - role responses: "204": description: User role updated successfully "400": description: Invalid request or cannot demote last admin content: application/json: schema: type: object properties: error: type: string required: - error "401": description: Invalid or missing API key content: application/json: schema: type: object properties: error: type: string required: - error "404": description: User not found content: application/json: schema: type: object properties: error: type: string required: - error "500": description: Internal Server Error content: application/json: schema: type: object properties: error: type: string required: - error delete: x-speakeasy-name-override: delete operationId: removeUserFromOrganization tags: - Users summary: Remove user from organization description: |- Removes a user from the organization. Cannot remove the last admin. Scope: users:write parameters: - schema: type: string description: Unique identifier of the user. example: cmk46vbto00002a6g3gzx6l0 required: true name: userId in: path responses: "204": description: User removed successfully "400": description: Cannot remove last admin content: application/json: schema: type: object properties: error: type: string required: - error "401": description: Invalid or missing API key content: application/json: schema: type: object properties: error: type: string required: - error "404": description: User not found content: application/json: schema: type: object properties: error: type: string required: - error "500": description: Internal Server Error content: application/json: schema: type: object properties: error: type: string required: - error /users/by-email/{email}: get: x-speakeasy-name-override: getByEmail operationId: getUserByEmail tags: - Users summary: Get user by email description: |- Finds a user in the organization by their email address. Scope: users:read parameters: - schema: type: string format: email description: Email address of the user. example: johndoe@example.com required: true name: email in: path responses: "200": description: User found content: application/json: schema: $ref: "#/components/schemas/User" "401": description: Invalid or missing API key content: application/json: schema: type: object properties: error: type: string required: - error "404": description: User not found in this organization content: application/json: schema: type: object properties: error: type: string required: - error "500": description: Internal Server Error content: application/json: schema: type: object properties: error: type: string required: - error webhooks: {}