Prewave Users API

🆕 NEW - API to manage users in the public network. Available from February 2026.

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/prewave-users-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

prewave-users-api-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: Public Prewave Actions Users API
  description: 'Documentation of the Public Prewave API.


    ## What''s New


    ### Q1 2026 — Supplier Management, User Management, Actions and Feed


    This quarter introduces major v2 upgrades, expanded administrative capabilities, and the new Actions API.


    - **Core Releases:** Deployed Supplier Management API v2 and Feed API v2, alongside the all-new Actions API.

    - **Enhanced Functionality:** Added robust identifier management, granular user and role configuration, and endpoints for managing supplier connection contacts.

    - ⚠️ **Required Migration:** Legacy v1 endpoints for Suppliers and Sites Upsert have been deprecated. Developers must migrate existing integrations to v2 by **May 31, 2027** (original deadline was December 31, 2026).


    📖 **[Read the Q1 2026 changelog](https://docs.prewave.com/en/articles/699847-q1-2026-public-api-updates)**


    ### Q2 2026 — Supplier Screening and External Scores


    We have expanded our v2 documentation to include comprehensive integration guidance for supplier screening and validation workflows and identifier-based external score ingestion.


    - **New Capabilities:** Added support for optional post-onboarding screening and validation during the create event.

    - **External Scores:** Batch POST for multiple supplier sites, per-site history GET, and event-type discovery GET (`/public/v1/scores/externals` and `/public/v1/scores/externals/event-types`). Documented in OpenAPI when enabled for your organization.

    - **Developer Resources:** Published new integration examples and detailed identifier validation rules to streamline your implementation process.


    📖 **[Read the Q2 2026 changelog](https://docs.prewave.com/en/articles/699849-q2-2026-public-api-updates)**


    ### Q3 2026 — Scores Webhooks


    To support event-driven architectures and eliminate the need for continuous API polling, we are introducing webhooks for score state changes later this year.


    - **Event-Driven Architecture:** Register webhook URLs to receive real-time HTTP payloads whenever a supplier''s score updates, so you can drive immediate mitigation responses without polling the API.

    - **Availability:** Comprehensive OpenAPI specifications and payload schemas will be published closer to the release date.

    - **Note:** Schemas and behaviors are subject to refinement prior to general availability.


    Documentation updates will be provided prior to release.


    ### Q4 2026 — Feed V2


    We are enhancing Feed API v2 with additional capabilities on top of the existing `GET /public/v2/feed` contract (see Q1 changelog and OpenAPI for the current Feed v2 integration).


    - **Availability:** Details will be announced before release.

    - **Note:** Schemas and behaviors are subject to refinement prior to the official release.


    Documentation updates will be provided prior to release.


    ---


    ## Authentication

    Prewave’s public api uses *API tokens* to authenticate against our RESTful service. We’ll provide you an *API-token* that each

    endpoint needs present as a http header.


    To pass the token in a request, simply add it as a header-parameter with

    * key = X-Auth-Token

    * value = api-token


    See an example in curl below where the api-token would be 12345678-90ab-cdef-1234-567890abcdef

    ```

    curl --request GET \

    --url https://REPLACE_WITH_SERVER/public/v1/target/prewave/3975230/alerts \

    --header ''X-Auth-Token: 12345678-90ab-cdef-1234-567890abcdef''

    ```


    ---


    ## Manage API Tokens


    Before you can obtain your API token, you''ll need the credentials for your API user. These credentials will be

    sent to you as part of the company-onboarding. If you haven''t got your credentials yet, please reach out to

    your sales-contact at Prewave or contact us via info@prewave.ai


    To generate an API Token, navigate to https://www.prewave.com/management/api and log in with the

    credentials of your API user. Then click at the button "Create New" and use your new api-token authentication as a header parameter.


    You can create multiple API tokens and also remove existing API tokens on https://www.prewave.com/management/api.

    API tokens do not expire, therefore you have to maintain the list of API tokens you are using manually.


    ---


    ## Default Rate Limits


    We have two types of default rate limits. For increased access, please contact customer success.


    | Type                              | Requests per 10 seconds | Requests per Minute |

    |-----------------------------------|-------------------------|---------------------|

    | GET requests                      | 100                     | 500                 |

    | POST, PUT, PATCH, DELETE requests | 20                      | 100                 |


    '
  version: '1.0'
servers:
- url: https://api.prewave.com
  description: Production Environment
security:
- Token authentication: []
tags:
- name: Users
  description: 🆕 NEW - API to manage users in the public network. Available from February 2026.
paths:
  /public/v1/users:
    get:
      tags:
      - Users
      summary: Search and list users
      description: "\n### Overview\nRetrieve a comprehensive list of all users within your customer's scope. This endpoint is ideal for auditing, synchronization, or building user-management dashboards.\n\n### Use Cases\n- **Auditing**: Regularly export user lists to verify access levels.\n- **Synchronization**: Keep an external user directory in sync with Prewave.\n- **Management**: Build custom internal dashboards for your organization.\n\n### Filtering\nRefine your results using the following optional parameters:\n- **Search**: Matches against name or email (fuzzy matching).\n- **Active**: Filter by account status (active/deactivated).\n- **Confirmed**: Filter by whether the user has verified their account via email.\n\n### Pagination\nThis endpoint returns a paginated result. You can control the page size and offset using the `page` and `size` parameters.\n- **Default Size**: 100\n- **Max Size**: 1000\n\n    ### Related Operations\n    - **Retrieve Detail**: [GET /public/v1/users/{userId}](#operations-Users-getById)\n    - **Onboard User**: [POST /public/v1/users](#operations-Users-create)\n    - **Manage Roles**: [GET /public/v1/users/{userId}/roles](#operations-Users_-_Roles-read)\n    - **Update User**: [PATCH /public/v1/users/{userId}](#operations-Users-update)\n\n### Required Permission\n`access_public_users`\n    "
      operationId: get
      parameters:
      - name: search
        in: query
        description: Fuzzy search against **first name**, **last name**, or **email**.
        required: false
        schema:
          type: string
        example: john
      - name: active
        in: query
        description: Filter by account status. `true` for active users, `false` for deactivated ones.
        required: false
        schema:
          type: boolean
        example: true
      - name: confirmed
        in: query
        description: Filter by confirmation status. `true` for users who have verified their email.
        required: false
        schema:
          type: boolean
        example: false
      - name: page
        in: query
        description: Zero-based page index (0..N)
        required: false
        schema:
          minimum: 0
          type: integer
          default: 0
      - name: size
        in: query
        description: The size of the page to be returned
        required: false
        schema:
          minimum: 1
          type: integer
          default: 100
      responses:
        '200':
          description: Successfully retrieved the paginated list of users.
          content:
            application/json:
              schema:
                type: object
                properties:
                  content:
                    type: array
                    items:
                      $ref: '#/components/schemas/PublicUserResponse'
                  size:
                    type: integer
                    format: int32
                  number:
                    type: integer
                    format: int32
                  totalElements:
                    type: integer
                    format: int32
                  totalPages:
                    type: integer
                    format: int32
                  numberOfElements:
                    type: integer
                    format: int32
                  first:
                    type: boolean
                  last:
                    type: boolean
                  empty:
                    type: boolean
              examples:
                Paginated User List:
                  summary: Example of a successful paginated response
                  description: Paginated User List
                  value: '{"content":[{"id":123,"active":true,"confirmed":true,"firstname":"John","lastname":"Doe","email":"john.doe@company.com","customer":{"id":8797983,"name":"Prewave"},"organization":{"id":64573456,"name":"Prewave"},"plan":{"id":34345453,"name":"Admin","validFrom":1614616305.000000000},"teams":[],"roles":[{"id":1829,"name":"GRANT_USER_MANAGER_ACCESS","description":null}]}],"totalElements":1,"totalPages":1,"size":500,"number":0,"numberOfElements":1,"first":true,"last":true,"empty":false}'
        '403':
          description: '403 Forbidden - Authentication or authorization failure. This status code is returned when: (1) the request lacks valid authentication credentials (missing or invalid X-Auth-Token header), or (2) the authenticated user does not have the required permission to access this resource.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccessDeniedErrorDTO'
              examples:
                Access denied example:
                  summary: User lacks necessary permissions or authentication
                  value: "{\n        \"loggedIn\": true,\n        \"code\": \"access_denied\",\n        \"message\": \"Access denied: you don't have necessary permissions to access this resource\",\n        \"solution\": \"Contact support for appropriate permissions\"\n    }"
        '500':
          description: 500 Internal Server Error - An unexpected error occurred on the server. The request may or may not have been processed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDTO'
              examples:
                Error - Server Error:
                  summary: Unexpected server error
                  value: "{\n        \"code\": \"internal_error\",\n        \"message\": \"An unexpected error occurred\",\n        \"solution\": \"Please try again later or contact support\"\n    }"
        '429':
          description: '429 Too Many Requests - API rate limit exceeded. The request has been rejected because the rate limit for this endpoint has been exceeded. Default rate limits: GET requests - 100 per 10 seconds, 500 per minute; POST/PUT/PATCH/DELETE requests - 20 per 10 seconds, 100 per minute. For increased access, please contact customer success.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiRateLimitResponse'
              examples:
                Rate limit exceeded example:
                  summary: API rate limit exceeded
                  value: "{\n        \"error\": \"API rate limit exceeded\",\n        \"message\": \"You have reached the maximum allowed requests. Please try again later or upgrade your plan for increased access\",\n        \"requestLimit\": 100,\n        \"requestCount\": 100,\n        \"limits\": [\n            {\n                \"requestLimit\": 100,\n                \"timeInSeconds\": 10\n            },\n            {\n                \"requestLimit\": 500,\n                \"timeInSeconds\": 60\n            }\n        ],\n        \"currentTime\": \"2026-01-15T10:30:00\",\n        \"nextResetAt\": \"2026-01-15T10:30:10\"\n    }"
    post:
      tags:
      - Users
      summary: Invite and onboard a new user
      description: "\n### Overview\nOnboard a new member to your organization. This action triggers an automated invitation email.\n\n### Use Cases\n- **New Employee**: Onboard a new team member with their required access level.\n- **External Partner**: Invite a stakeholder to collaborate with specific roles.\n- **Automation**: Programmatically create users as part of your internal onboarding flow.\n\n### Invitation Lifecycle\n1. **Request**: You provide the user's email and initial configuration.\n2. **Created**: The user account is initialized with `confirmed: false`.\n3. **Activation**: The user receives an email to set their password and log in.\n4. **Completion**: Once logged in, the user's status changes to `confirmed: true`.\n\n### Workflow Tip\n- Use the `Location` header in the response to immediately access the new user's resource URI.\n- You can pre-assign **teams** and **roles** during the invitation to ensure the user has access from their first login.\n\n### Related Operations\n- **List Users**: [GET /public/v1/users](#operations-Users-get)\n- **Discover Roles**: [GET /public/v1/users/roles/available](#operations-Users_-_Roles-getAvailableRoles)\n- **Assign Roles**: [POST /public/v1/users/{userId}/roles](#operations-Users_-_Roles-add)\n\n### Required Permission\n`manage_public_users`\n    "
      operationId: invite
      requestBody:
        description: User configuration for invitation.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PublicCreateUserRequest'
            examples:
              Basic Invitation:
                summary: Minimum required data to invite a user
                description: Basic Invitation
                value: '{"email":"new.user@company.com","firstname":"New","lastname":"User","teamIds":[1,2],"roleNames":["ROLE_USER_MANAGER"],"planId":5}'
        required: true
      responses:
        '201':
          description: Created - Invitation sent successfully. See Location header.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicUserResponse'
              examples:
                Created User Response:
                  description: Created User Response
                  value: '{"id":4523345,"active":true,"confirmed":false,"firstname":"New","lastname":"User","email":"new.user@company.ai","customer":{"id":8797983,"name":"Prewave"},"organization":{"id":64573456,"name":"Prewave"},"plan":{"id":5,"name":"Admin","validFrom":1614616305.000000000},"teams":[],"roles":[{"id":1829,"name":"ROLE_USER_MANAGER","description":null}]}'
        '400':
          description: Bad Request - Validation error (e.g., invalid email format).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDTO'
              examples:
                Validation Error:
                  description: Validation Error
                  value: '{"code":"invalid_request","message":"Email must be a valid email address."}'
        '403':
          description: '403 Forbidden - Authentication or authorization failure. This status code is returned when: (1) the request lacks valid authentication credentials (missing or invalid X-Auth-Token header), or (2) the authenticated user does not have the required permission to access this resource.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccessDeniedErrorDTO'
              examples:
                Access denied example:
                  summary: User lacks necessary permissions or authentication
                  value: "{\n        \"loggedIn\": true,\n        \"code\": \"access_denied\",\n        \"message\": \"Access denied: you don't have necessary permissions to access this resource\",\n        \"solution\": \"Contact support for appropriate permissions\"\n    }"
        '500':
          description: 500 Internal Server Error - An unexpected error occurred on the server. The request may or may not have been processed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDTO'
              examples:
                Error - Server Error:
                  summary: Unexpected server error
                  value: "{\n        \"code\": \"internal_error\",\n        \"message\": \"An unexpected error occurred\",\n        \"solution\": \"Please try again later or contact support\"\n    }"
        '429':
          description: '429 Too Many Requests - API rate limit exceeded. The request has been rejected because the rate limit for this endpoint has been exceeded. Default rate limits: GET requests - 100 per 10 seconds, 500 per minute; POST/PUT/PATCH/DELETE requests - 20 per 10 seconds, 100 per minute. For increased access, please contact customer success.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiRateLimitResponse'
              examples:
                Rate limit exceeded example:
                  summary: API rate limit exceeded
                  value: "{\n        \"error\": \"API rate limit exceeded\",\n        \"message\": \"You have reached the maximum allowed requests. Please try again later or upgrade your plan for increased access\",\n        \"requestLimit\": 20,\n        \"requestCount\": 20,\n        \"limits\": [\n            {\n                \"requestLimit\": 20,\n                \"timeInSeconds\": 10\n            },\n            {\n                \"requestLimit\": 100,\n                \"timeInSeconds\": 60\n            }\n        ],\n        \"currentTime\": \"2026-01-15T10:30:00\",\n        \"nextResetAt\": \"2026-01-15T10:30:10\"\n    }"
  /public/v1/users/{userId}:
    get:
      tags:
      - Users
      summary: Retrieve detailed user profile
      description: "\n### Overview\nFetch the complete profile of a specific user. This includes organizational details, active subscriptions (plans), and assigned access controls.\n\n### Use Cases\n- **Profile Inspection**: Verify the current configuration of a specific user.\n- **Pre-Update Check**: Retrieve the current state before performing a partial update.\n- **Identity Verification**: Confirm the email and name associated with a numerical ID.\n\n### Identification\nThe `{userId}` is a unique numerical identifier.\n\n### Getting User ID\n- To find users and their numerical IDs, use the Users Management API:\n  - `GET /public/v1/users` - Retrieve all users with their `id` field.\n- The `id` field in the user response is the `{userId}` used in this endpoint's path parameter.\n\n    ### Related Operations\n    - **Update Profile**: [PATCH /public/v1/users/{userId}](#operations-Users-update)\n    - **Manage Roles**: [POST /public/v1/users/{userId}/roles](#operations-Users_-_Roles-add)\n\n### Required Permission\n`access_public_users`\n    "
      operationId: getById
      parameters:
      - name: userId
        in: path
        description: The unique numerical identifier of the target user. If you do not have this ID, you can find it by searching for the user via `GET /public/v1/users`.
        required: true
        schema:
          type: integer
          format: int32
        example: 4523345
      responses:
        '200':
          description: User details retrieved successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicUserResponse'
              examples:
                Full User Profile:
                  description: Full User Profile
                  value: '{"id":4523345,"active":true,"confirmed":true,"firstname":"Max","lastname":"Mustermann","email":"max.mustermann@prewave.ai","customer":{"id":8797983,"name":"Prewave"},"organization":{"id":64573456,"name":"Prewave"},"plan":{"id":34345453,"name":"Admin","validFrom":1614616305.000000000},"teams":[],"roles":[{"id":1829,"name":"ROLE_USER_MANAGER","description":null},{"id":98790,"name":"GRANT_TEAM_MANAGER_ACCESS","description":null}]}'
        '404':
          description: Not Found - User not found or outside organization scope.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDTO'
              examples:
                User Not Found:
                  description: User Not Found
                  value: '{"code":"user_not_found","message":"User with ID 4523345 could not be found."}'
        '403':
          description: '403 Forbidden - Authentication or authorization failure. This status code is returned when: (1) the request lacks valid authentication credentials (missing or invalid X-Auth-Token header), or (2) the authenticated user does not have the required permission to access this resource.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccessDeniedErrorDTO'
              examples:
                Access denied example:
                  summary: User lacks necessary permissions or authentication
                  value: "{\n        \"loggedIn\": true,\n        \"code\": \"access_denied\",\n        \"message\": \"Access denied: you don't have necessary permissions to access this resource\",\n        \"solution\": \"Contact support for appropriate permissions\"\n    }"
        '500':
          description: 500 Internal Server Error - An unexpected error occurred on the server. The request may or may not have been processed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDTO'
              examples:
                Error - Server Error:
                  summary: Unexpected server error
                  value: "{\n        \"code\": \"internal_error\",\n        \"message\": \"An unexpected error occurred\",\n        \"solution\": \"Please try again later or contact support\"\n    }"
        '429':
          description: '429 Too Many Requests - API rate limit exceeded. The request has been rejected because the rate limit for this endpoint has been exceeded. Default rate limits: GET requests - 100 per 10 seconds, 500 per minute; POST/PUT/PATCH/DELETE requests - 20 per 10 seconds, 100 per minute. For increased access, please contact customer success.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiRateLimitResponse'
              examples:
                Rate limit exceeded example:
                  summary: API rate limit exceeded
                  value: "{\n        \"error\": \"API rate limit exceeded\",\n        \"message\": \"You have reached the maximum allowed requests. Please try again later or upgrade your plan for increased access\",\n        \"requestLimit\": 100,\n        \"requestCount\": 100,\n        \"limits\": [\n            {\n                \"requestLimit\": 100,\n                \"timeInSeconds\": 10\n            },\n            {\n                \"requestLimit\": 500,\n                \"timeInSeconds\": 60\n            }\n        ],\n        \"currentTime\": \"2026-01-15T10:30:00\",\n        \"nextResetAt\": \"2026-01-15T10:30:10\"\n    }"
    patch:
      tags:
      - Users
      summary: Update user profile and status
      description: "\n### Overview\nModify profile details, subscription levels, or account status for an existing user.\n\n### Use Cases\n- **Profile Correction**: Correct a user's name or contact details.\n- **Plan Management**: Upgrade or downgrade a user's subscription (e.g., Enterprise vs. Basic).\n- **Status Management**: Activate or deactivate user access.\n- **Access Refinement**: Update team associations.\n\n### Identification\nThe `{userId}` is a unique numerical identifier.\n\n### Getting User ID\n- To find users and their numerical IDs, use the Users Management API:\n  - `GET /public/v1/users` - Retrieve all users with their `id` field.\n- The `id` field in the user response is the `{userId}` used in this endpoint's path parameter.\n\n### Partial Updates\nThis endpoint supports **partial updates**. Only the fields provided in the request body will be changed; omitted fields and fields set to null will retain their current values.\n\n### Related Operations\n- **Get Detail**: [GET /public/v1/users/{userId}](#operations-Users-getById)\n- **Manage Roles**: [POST /public/v1/users/{userId}/roles](#operations-Users_-_Roles-add)\n\n### Required Permission\n`manage_public_users`\n    "
      operationId: update
      parameters:
      - name: userId
        in: path
        description: The unique numerical identifier of the target user. If you do not have this ID, you can find it by searching for the user via `GET /public/v1/users`.
        required: true
        schema:
          type: integer
          format: int32
        example: 4523345
      requestBody:
        description: Fields to update. Omit fields to keep current values.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PublicUpdateUserRequest'
            examples:
              Profile, Plan & Status Update:
                summary: Update multiple fields including status
                description: Profile, Plan & Status Update
                value: '{"firstname":"Updated","lastname":"User","planId":1234,"active":true}'
              Deactivate User:
                summary: Disable user access
                description: Deactivate User
                value: '{"firstname":null,"lastname":null,"planId":null,"active":false}'
        required: true
      responses:
        '200':
          description: User profile and status successfully updated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicUserResponse'
              examples:
                Updated User Profile:
                  description: Updated User Profile
                  value: '{"id":4523345,"active":true,"confirmed":true,"firstname":"Updated","lastname":"User","email":"user@company.ai","customer":{"id":8797983,"name":"Prewave"},"organization":{"id":64573456,"name":"Prewave"},"plan":{"id":1234,"name":"Enterprise","validFrom":1614616305.000000000},"teams":[],"roles":[]}'
        '404':
          description: Not Found - The specified user does not exist.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDTO'
        '403':
          description: '403 Forbidden - Authentication or authorization failure. This status code is returned when: (1) the request lacks valid authentication credentials (missing or invalid X-Auth-Token header), or (2) the authenticated user does not have the required permission to access this resource.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccessDeniedErrorDTO'
              examples:
                Access denied example:
                  summary: User lacks necessary permissions or authentication
                  value: "{\n        \"loggedIn\": true,\n        \"code\": \"access_denied\",\n        \"message\": \"Access denied: you don't have necessary permissions to access this resource\",\n        \"solution\": \"Contact support for appropriate permissions\"\n    }"
        '500':
          description: 500 Internal Server Error - An unexpected error occurred on the server. The request may or may not have been processed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDTO'
              examples:
                Error - Server Error:
                  summary: Unexpected server error
                  value: "{\n        \"code\": \"internal_error\",\n        \"message\": \"An unexpected error occurred\",\n        \"solution\": \"Please try again later or contact support\"\n    }"
        '429':
          description: '429 Too Many Requests - API rate limit exceeded. The request has been rejected because the rate limit for this endpoint has been exceeded. Default rate limits: GET requests - 100 per 10 seconds, 500 per minute; POST/PUT/PATCH/DELETE requests - 20 per 10 seconds, 100 per minute. For increased access, please contact customer success.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiRateLimitResponse'
              examples:
                Rate limit exceeded example:
                  summary: API rate limit exceeded
                  value: "{\n        \"error\": \"API rate limit exceeded\",\n        \"message\": \"You have reached the maximum allowed requests. Please try again later or upgrade your plan for increased access\",\n        \"requestLimit\": 20,\n        \"requestCount\": 20,\n        \"limits\": [\n            {\n                \"requestLimit\": 20,\n                \"timeInSeconds\": 10\n            },\n            {\n                \"requestLimit\": 100,\n                \"timeInSeconds\": 60\n            }\n        ],\n        \"currentTime\": \"2026-01-15T10:30:00\",\n        \"nextResetAt\": \"2026-01-15T10:30:10\"\n    }"
components:
  schemas:
    PublicUserResponseTeamDTO:
      required:
      - id
      - name
      type: object
      properties:
        id:
          type: integer
          format: int32
          example: null
        name:
          type: string
          example: null
      example: null
    PublicUserResponseOrganizationDTO:
      required:
      - id
      - name
      type: object
      properties:
        id:
          type: integer
          format: int32
          example: null
        name:
          type: string
          example: null
      example: null
    PublicUserResponseCustomerDTO:
      required:
      - id
      - name
      type: object
      properties:
        id:
          type: integer
          format: int32
          example: null
        name:
          type: string
          example: null
      example: null
    PublicUserRoleDTO:
      required:
      - id
      - name
      type: object
      properties:
        id:
          type: integer
          format: int32
          example: null
        name:
          type: string
          example: null
        description:
          type: string
          nullable: true
          example: null
      example: null
    ErrorDTO:
      required:
      - code
      - message
      type: object
      properties:
        code:
          type: string
          description: Error code
          example: null
        message:
          type: string
          description: Error message
          example: null
        solution:
          type: string
          description: Possible solution to the error
          nullable: true
          example: null
      description: Error response
      example: null
    AccessDeniedErrorDTO:
      required:
      - code
      - loggedIn
      - message
      type: object
      properties:
        loggedIn:
          type: boolean
          example: null
        permission:
          type: string
          nullable: true
          example: null
        code:
          type: string
          description: Error code
          example: null
        message:
          type: string
          description: Error message
          example: null
        solution:
          type: string
          description: Possible solution to the error
          nullable: true
          example: null
      example: null
    PublicUserResponse:
      required:
      - active
      - confirmed
      - customer
      - id
      - roles
      - teams
      type: object
      properties:
        id:
          type: integer
          format: int32
          example: null
        active:
          type: boolean
          example: null
        confirmed:
          type: boolean
          example: null
        firstname:
          type: string
          nullable: true
          example: null
        lastname:
          type: string
          nullable: true
          example: null
        email:
          type: string
          nullable: true
          example: null
        customer:
          $ref: '#/components/schemas/PublicUserResponseCustomerDTO'
     

# --- truncated at 32 KB (36 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/prewave/refs/heads/main/openapi/prewave-users-api-openapi.yml