Prewave EUDR - Customers - Origin Requests API

Allows you to manage customer origin requests for products, including creating, updating, closing requests, and viewing requests per product.

OpenAPI Specification

prewave-eudr-customers-origin-requests-api-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: Public Prewave Actions EUDR - Customers - Origin Requests 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: EUDR - Customers - Origin Requests
  description: Allows you to manage customer origin requests for products, including creating, updating, closing requests, and viewing requests per product.
paths:
  /public/v2/eudr/customers/origin-requests/{originRequestId}:
    put:
      tags:
      - EUDR - Customers - Origin Requests
      summary: Update origin request
      description: "\n\nUpdate an existing origin request. Only requests in `Requested` status can be updated.\nAt least one of `requestedWeight` or `endDate` must be provided.\n- `requestedWeight` — update the requested weight for the origin request.\n- `endDate` — update the end date for the origin request.\n\n\n**Required permission:** `access_public_products`\n        "
      operationId: updateOriginRequest
      parameters:
      - name: originRequestId
        in: path
        description: The ID of the origin request.
        required: true
        schema:
          type: integer
          format: int32
        example: 1001
      requestBody:
        description: Updated end date and/or requested weight. At least one field must be provided.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PublicUpdateOriginRequestPayload'
            examples:
              Update weight and end date:
                summary: Extend deadline and increase requested weight
                description: Update weight and end date
                value: '{"endDate":{"date":"2025-10-31","_datetype_":"Date"},"requestedWeight":1500.00}'
        required: true
      responses:
        '200':
          description: Origin request updated successfully.
        '400':
          description: Origin request cannot be updated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDTO'
              examples:
                Missing update fields:
                  description: Missing update fields
                  value:
                    code: invalid_request
                    message: At least one of 'requestedWeight' or 'endDate' must be provided for update.
                    solution: Fix the request
                Negative weight:
                  description: Negative weight
                  value:
                    code: invalid_request
                    message: Requested weight can not be zero or negative.
                    solution: Fix the request
                End date in the past:
                  description: End date in the past
                  value:
                    code: invalid_request
                    message: End date must be in the future.
                    solution: Fix the request
        '404':
          description: Origin request not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDTO'
              examples:
                Origin request not found:
                  description: Origin request not found
                  value:
                    code: resource_not_found
                    message: 'Origin request #123 not 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\": 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/v2/eudr/customers/origin-requests/{originRequestId}/close:
    put:
      tags:
      - EUDR - Customers - Origin Requests
      summary: Close origin request
      description: "\n\nThe request can be closed only if it is in `Requested` status.\nClosing the request prevents any further updates or actions on it.\nOnce closed, the request status is set to `Answered` or `Canceled`:\n- **Answered** — at least one origin has been provided for the request.\n- **Canceled** — no origins have been provided for the request.\n\n\n**Required permission:** `access_public_products`\n        "
      operationId: closeOriginRequest
      parameters:
      - name: originRequestId
        in: path
        description: The ID of the origin request.
        required: true
        schema:
          type: integer
          format: int32
        example: 1001
      responses:
        '200':
          description: Origin request closed successfully.
        '400':
          description: Origin request cannot be closed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDTO'
              examples:
                Not in Requested status:
                  description: Not in Requested status
                  value:
                    code: invalid_request
                    message: Origin request cannot be closed.
                    solution: Fix the request
                Cannot be canceled:
                  description: Cannot be canceled
                  value:
                    code: invalid_request
                    message: Origin request cannot be canceled.
                    solution: Fix the request
        '404':
          description: Origin request not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDTO'
              examples:
                Origin request not found:
                  description: Origin request not found
                  value:
                    code: resource_not_found
                    message: 'Origin request #6 not 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\": 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/v2/eudr/customers/origin-requests:
    post:
      tags:
      - EUDR - Customers - Origin Requests
      summary: Bulk request origins for products
      description: "\n\nSend origin requests for products to suppliers. Suppliers are notified by in-app notification and email.\nAdditional email CCs and a comment can be provided in the payload.\nEvery supplier must have at least one contact to be notified.\nTo manage and fetch contacts, use the connection-contact endpoints.\n\n\n**Required permission:** `access_public_products`\n        "
      operationId: requestOrigins
      requestBody:
        description: Origin request creation payload with one or more product items.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PublicCreateOriginRequestPayload'
            examples:
              Single product:
                summary: Full request with weight, contacts, and references
                description: Single product
                value: '{"items":[{"productId":123,"endDate":{"date":"2025-09-30","_datetype_":"Date"},"requestedWeight":1000.50,"connectionContactIds":[1,2],"comment":"Please provide origin information for this shipment","references":[{"reference":"PO-2025-001","referenceType":"PurchaseOrder"},{"reference":"SHP-2025-042","referenceType":"ShipmentNumber"}]}]}'
              Multiple products:
                summary: Bulk request for two products in one call
                description: Multiple products
                value: '{"items":[{"productId":123,"endDate":{"date":"2025-09-30","_datetype_":"Date"},"requestedWeight":1000.50,"connectionContactIds":[1],"comment":"Urgent request for product origin","references":null},{"productId":456,"endDate":{"date":"2025-10-15","_datetype_":"Date"},"requestedWeight":500.25,"connectionContactIds":[2,3],"comment":null,"references":[{"reference":"PO-2025-002","referenceType":"PurchaseOrder"}]}]}'
              Minimal:
                summary: Only required field (productId)
                description: Minimal
                value: '{"items":[{"productId":123,"endDate":null,"requestedWeight":null,"connectionContactIds":null,"comment":null,"references":null}]}'
        required: true
      responses:
        '200':
          description: Origin requests processed. Check `succeeded` and `failed` for per-item results.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicOriginRequestResult'
              examples:
                All succeeded:
                  summary: Every origin request was created
                  description: All succeeded
                  value: '{"succeeded":[{"id":1001,"productId":123,"createdAt":{"date":"2025-09-01T10:00:00","_datetype_":"DateTime"},"status":"Requested","references":[{"reference":"PO-2025-001","referenceType":"PurchaseOrder"}]},{"id":1002,"productId":456,"createdAt":{"date":"2025-09-01T10:00:00","_datetype_":"DateTime"},"status":"Requested","references":[]}],"failed":[],"status":"Succeeded"}'
                Partial success:
                  summary: Some requests succeeded; failed items include error messages
                  description: Partial success
                  value: '{"succeeded":[{"id":1001,"productId":123,"createdAt":{"date":"2025-09-01T10:00:00","_datetype_":"DateTime"},"status":"Requested","references":[{"reference":"PO-2025-001","referenceType":"PurchaseOrder"}]}],"failed":[{"value":{"productId":789,"endDate":{"date":"2025-09-30","_datetype_":"Date"},"requestedWeight":200.00,"connectionContactIds":[4],"comment":null,"references":null},"message":"Product is inactive or not an inbound product"}],"status":"PartlySucceeded"}'
        '422':
          description: Origin request product unsupported, e.g. product inactive or not inbound.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OriginRequestProductUnsupportedErrorDTO'
              examples:
                Product unsupported:
                  summary: Product is inactive or not an inbound product
                  description: Product unsupported
                  value:
                    code: origin_request_product_unsupported
                    message: Product with id 789 is inactive or not an inbound product
                    solution: Ensure the product is active and is an inbound product
        '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/v2/eudr/customers/products/{productId}/origin-requests:
    get:
      tags:
      - EUDR - Customers - Origin Requests
      summary: Fetch customer origin requests per inbound product
      description: "\nRetrieve a paginated list of origin requests for a specific inbound product.\n\nReturns origin requests created for the product, with optional filtering by reference and status.\nEach item includes status details when the request is answered, delayed, or rejected.\n\n**Use Cases**:\n- View all origin requests for a product\n- Track request status and supplier responses\n- Filter requests by reference or status\n\n**Pagination**:\n- Results are paginated (default: 10 items per page)\n- Use `page` and `size` query parameters to control pagination\n\n**Required permission:** `access_public_products` and `READ` on the product\n        "
      operationId: findCustomerOriginRequests
      parameters:
      - name: productId
        in: path
        description: The ID of the product.
        required: true
        schema:
          type: integer
          format: int32
        example: 301
      - name: page
        in: query
        description: Page number (0-based)
        required: false
        schema:
          type: integer
          default: 0
        example: 0
      - name: size
        in: query
        description: Page size
        required: false
        schema:
          type: integer
          default: 10
        example: 10
      - name: reference
        in: query
        description: Origin request reference
        required: false
        schema:
          type: string
        example: PO-2025-001
      - name: status
        in: query
        description: Origin request status
        required: false
        schema:
          type: string
          enum:
          - Requested
          - Delayed
          - Rejected
          - Canceled
          - Answered
      responses:
        '200':
          description: Paginated list of customer origin requests for the product.
          content:
            application/json:
              schema:
                type: object
                properties:
                  content:
                    type: array
                    items:
                      $ref: '#/components/schemas/PublicCustomerOriginRequest'
                  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:
                Origin requests page:
                  summary: Requested, answered, and delayed origin requests
                  description: Origin requests page
                  value: '{"content":[{"id":1001,"status":"Requested","createdAt":{"date":"2025-09-01T10:00:00","_datetype_":"DateTime"},"updatedAt":{"date":"2025-09-01T10:00:00","_datetype_":"DateTime"},"closedAt":null,"endDate":{"date":"2025-09-30","_datetype_":"Date"},"requestedWeight":1000.50,"providedWeight":null,"references":[{"reference":"PO-2025-001","referenceType":"PurchaseOrder"},{"reference":"SHP-2025-042","referenceType":"ShipmentNumber"}],"answeredStatusDetails":null,"delayedStatusDetails":null,"rejectStatusDetails":null},{"id":1002,"status":"Answered","createdAt":{"date":"2025-08-10T08:30:00","_datetype_":"DateTime"},"updatedAt":{"date":"2025-08-20T14:15:00","_datetype_":"DateTime"},"closedAt":{"date":"2025-08-20T14:15:00","_datetype_":"DateTime"},"endDate":{"date":"2025-08-31","_datetype_":"Date"},"requestedWeight":750.00,"providedWeight":720.25,"references":[{"reference":"PO-2025-002","referenceType":"PurchaseOrder"}],"answeredStatusDetails":{"originIds":[501,502],"supplierDDSReferences":["EU-SUP-67890","EU-SUP-67891"]},"delayedStatusDetails":null,"rejectStatusDetails":null},{"id":1003,"status":"Delayed","createdAt":{"date":"2025-09-05T09:00:00","_datetype_":"DateTime"},"updatedAt":{"date":"2025-09-12T11:30:00","_datetype_":"DateTime"},"closedAt":null,"endDate":{"date":"2025-10-15","_datetype_":"Date"},"requestedWeight":500.25,"providedWeight":null,"references":[{"reference":"PO-2025-003","referenceType":"PurchaseOrder"}],"answeredStatusDetails":null,"delayedStatusDetails":{"code":"LackOfInfo","reason":"Missing documents from supplier","comment":"Awaiting geolocation data and harvest period confirmation.","delayedUntil":{"date":"2025-10-05T12:00:00","_datetype_":"DateTime"}},"rejectStatusDetails":null}],"pageable":{"pageNumber":0,"pageSize":10,"sort":{"empty":true,"sorted":false,"unsorted":true},"offset":0,"paged":true,"unpaged":false},"totalPages":1,"totalElements":3,"last":true,"size":10,"number":0,"numberOfElements":3,"sort":{"empty":true,"sorted":false,"unsorted":true},"first":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    }"
components:
  schemas:
    PublicOriginRequestDelayStatusDetails:
      required:
      - code
      - comment
      - delayedUntil
      - reason
      type: object
      properties:
        code:
          type: string
          description: Public origin request delay reason code.
          example: LegallyBinding
          enum:
          - LegallyBinding
          - LackOfInfo
          - ProductComplexity
          - Other
        reason:
          type: string
          description: Human-readable reason for the delay.
          example: Missing documents from supplier.
        comment:
          type: string
          description: Additional comment for the delay.
          example: Awaiting customs paperwork.
        delayedUntil:
          type: string
          description: Timestamp until which the request is delayed (UTC).
          format: date-time
          example: null
      description: Delay status details for a delayed origin request, including code, reason, comment, and delayed until timestamp.
      example: null
    PublicOriginRequestRefPayload:
      required:
      - referenceType
      type: object
      properties:
        reference:
          type: string
          description: Reference label.
          nullable: true
          example: PO-2025-001
        referenceType:
          type: string
          description: Public product reference type.
          example: PurchaseOrder
          enum:
          - PurchaseOrder
          - ShipmentNumber
          - Other
      description: Reference for an origin request, including label and type.
      example: null
    PublicOriginReque

# --- truncated at 32 KB (45 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/prewave/refs/heads/main/openapi/prewave-eudr-customers-origin-requests-api-openapi.yml