Opply App Orders API

The App Orders API from Opply — 126 operation(s) for app orders.

Operations 130

GET /api/v1/app-orders/admin/ App Orders admin endpoints #
GET /api/v1/app-orders/admin/{uuid}/ App Orders admin endpoints #
POST /api/v1/app-orders/admin/{uuid}/create-order-event/ Endpoint to add order event for app order #
GET /api/v1/app-orders/admin/{uuid}/documents/ Endpoint to list documents for an app order #
DELETE /api/v1/app-orders/admin/{uuid}/documents/{document_uuid}/ Endpoint to delete a specific document #
PUT /api/v1/app-orders/admin/{uuid}/edit/ Endpoint to edit order prices for supplier #
POST /api/v1/app-orders/admin/{uuid}/mark-order-as-paid/ Endpoint to mark order as paid #
POST /api/v1/app-orders/admin/{uuid}/mark-order-as-paid-out-to-supplier/ Endpoint to mark order as paid out to supplier #
GET /api/v1/app-orders/admin/{uuid}/order-events/ Endpoint to get order events #
GET /api/v1/app-orders/admin/{uuid}/pricing/ Endpoint to get order prices for Buyer #
POST /api/v1/app-orders/admin/{uuid}/upload-document/ Endpoint to upload a document for an app order #
GET /api/v1/app-orders/brand/ List all buyer orders #
GET /api/v1/app-orders/brand/{uuid}/ Brand endpoints for App Orders #
POST /api/v1/app-orders/brand/{uuid}/client-notified-as-paid/ Buyer notifies order as paid #
GET /api/v1/app-orders/brand/{uuid}/invoice-url/ Returns the invoice URL or PDF #
POST /api/v1/app-orders/brand/{uuid}/mark-as-delivered/ Buyer mark an order as delivered #
POST /api/v1/app-orders/brand/{uuid}/mark-as-picked-up/ Mark order as picked up (buyer path) #
GET /api/v1/app-orders/brand/{uuid}/order-activities/ List order activities #
GET /api/v1/app-orders/brand/{uuid}/purchase-order/pdf/ Generate and retrieve the purchase order PDF for an App Order #
POST /api/v1/app-orders/brand/{uuid}/repeat-spot-order/ Repeat an app spot order #
GET /api/v1/app-orders/brand/activity-statement/ Buyer activity statement with running outstanding balance #
GET /api/v1/app-orders/brand/aggregate/ Aggregate order totals across the filtered set in full precision #
GET /api/v1/app-orders/brand/all-order-activities/ List all order activities #
GET /api/v1/app-orders/brand/grouped-statements/ Buyer endpoints for Grouped Statements #
GET /api/v1/app-orders/brand/grouped-statements/{uuid}/ Retrieve a buyer grouped statement with nested orders and bank details #
GET /api/v1/app-orders/brand/grouped-statements/{uuid}/csv/ Download a buyer grouped statement as an Excel (.xlsx) file #
GET /api/v1/app-orders/brand/grouped-statements/{uuid}/invoices/ Download all of a buyer grouped statement's invoices as a .zip #
POST /api/v1/app-orders/brand/grouped-statements/{uuid}/mark-transfer-sent/ Mark a bank transfer as sent #
GET /api/v1/app-orders/brand/outstanding-payments-summary/ Buyer outstanding payments summary #
GET /api/v1/app-orders/brand/payment-analytics/ Buyer payment analytics #
GET /api/v1/app-orders/brand/payments/ List buyer payments by provider #
GET /api/v1/app-orders/brand/payments/available-sections/ Available payment sections #
GET /api/v1/app-orders/brand/payments/merchant-of-record/ Combined Merchant-of-Record payments listing #
GET /api/v1/app-orders/brand/payments/service-fees/ List buyer service fee invoices #
POST /api/v1/app-orders/brand/spot-buy-request/ Create a spot buy request #
GET /api/v1/app-orders/brand/spot-buy-requests/ List pending spot buy requests #
PATCH /api/v1/app-orders/brand/spot-buy-requests/{spot_buy_request_uuid}/cancel/ Cancel a spot buy request #
GET /api/v1/app-orders/brand/statements/{uuid}/ Retrieve a buyer service-fee statement with nested orders and bank details #
POST /api/v1/app-orders/brand/statements/{uuid}/client-notified-as-paid/ Brand endpoints for Statements #
GET /api/v1/app-orders/brand/statements/{uuid}/invoice-pdf/ Get statement invoice PDF URL #
GET /api/v1/app-orders/brand/statements/{uuid}/invoice-url/ Get statement invoice URL #
GET /api/v1/app-orders/brand/suppliers/ List suppliers for the buyer #
GET /api/v1/app-orders/brand/two-credit-information/ Get Two credit summary #
GET /api/v1/app-orders/merchant-of-record/ List orders for merchant of record company #
GET /api/v1/app-orders/merchant-of-record/{uuid}/ Merchant of Record app order endpoints #
POST /api/v1/app-orders/merchant-of-record/{uuid}/approve/ Approves an app order as merchant of record #
GET /api/v1/app-orders/merchant-of-record/{uuid}/buyer-purchase-order/pdf/ Generate and retrieve the merchant of record purchase order PDF for an App Order #
POST /api/v1/app-orders/merchant-of-record/{uuid}/change-payment-terms/ Change payment terms on a confirmed/forecasted order #
POST /api/v1/app-orders/merchant-of-record/{uuid}/confirm-shipping-responsibility/ Confirm shipping responsibility (from gathering quotes state) #
POST /api/v1/app-orders/merchant-of-record/{uuid}/create-order-event/ Endpoint to add order event for app order #
GET /api/v1/app-orders/merchant-of-record/{uuid}/documents/ Endpoint to list documents for an app order uploaded by merchant of record #
DELETE /api/v1/app-orders/merchant-of-record/{uuid}/documents/{document_uuid}/ Delete a document for an order #
POST /api/v1/app-orders/merchant-of-record/{uuid}/duplicate/ Duplicate an app order #
PUT /api/v1/app-orders/merchant-of-record/{uuid}/edit/ Endpoint to edit all fields for an app order as merchant of record #
POST /api/v1/app-orders/merchant-of-record/{uuid}/hold/ Place an order on hold #
GET /api/v1/app-orders/merchant-of-record/{uuid}/invoice-url/ Returns the invoice URL or PDF #
POST /api/v1/app-orders/merchant-of-record/{uuid}/line-item/{line_item_uuid}/ingredient-documents/ Upload a document for an order line item #
DELETE /api/v1/app-orders/merchant-of-record/{uuid}/line-item/{line_item_uuid}/ingredient-documents/{document_uuid}/ Delete a document for an order line item #
POST /api/v1/app-orders/merchant-of-record/{uuid}/mark-as-delivered/ Merchant of record mark an order as delivered on buyer's behalf #
POST /api/v1/app-orders/merchant-of-record/{uuid}/mark-as-picked-up/ Mark order as picked up (buyer path) #
POST /api/v1/app-orders/merchant-of-record/{uuid}/mark-awaiting-collection-details/ Mark order as awaiting collection details (buyer path) #
POST /api/v1/app-orders/merchant-of-record/{uuid}/mark-dispatch-scheduled/ Mark dispatch as scheduled (supplier path) #
POST /api/v1/app-orders/merchant-of-record/{uuid}/mark-forecasted/ Mark order as forecasted #
POST /api/v1/app-orders/merchant-of-record/{uuid}/mark-freight-ownership-pending/ Mark order as freight ownership pending (to be confirmed path) #
POST /api/v1/app-orders/merchant-of-record/{uuid}/mark-freight-scheduled/ Mark order as freight scheduled (MoR path) #
POST /api/v1/app-orders/merchant-of-record/{uuid}/mark-in-transit/ Mark order as in transit #
POST /api/v1/app-orders/merchant-of-record/{uuid}/mark-order-as-paid/ Endpoint to mark order as paid #
POST /api/v1/app-orders/merchant-of-record/{uuid}/mark-order-as-paid-out-to-supplier/ Endpoint to mark order as paid out to supplier #
PATCH /api/v1/app-orders/merchant-of-record/{uuid}/mark-order-dispatched/ Mark order as dispatched #
POST /api/v1/app-orders/merchant-of-record/{uuid}/mark-preparing-freight/ Mark order as preparing freight (MoR path) #
POST /api/v1/app-orders/merchant-of-record/{uuid}/mark-quotes-confirmed/ Mark freight quotes as confirmed (MoR path) #
POST /api/v1/app-orders/merchant-of-record/{uuid}/mark-ready-for-pickup/ Mark order as ready for pickup (buyer path) #
POST /api/v1/app-orders/merchant-of-record/{uuid}/move-lifecycle-intermediate-status/ Move order to intermediate lifecycle status #
GET /api/v1/app-orders/merchant-of-record/{uuid}/order-activities/ List order activities #
PATCH /api/v1/app-orders/merchant-of-record/{uuid}/order-activities/{activity_uuid}/update/ Update order activity #
POST /api/v1/app-orders/merchant-of-record/{uuid}/order-activities/create/ Create an order activity #
GET /api/v1/app-orders/merchant-of-record/{uuid}/order-events/ Endpoint to get order events #
POST /api/v1/app-orders/merchant-of-record/{uuid}/push-to-two/ Push order to Two #
POST /api/v1/app-orders/merchant-of-record/{uuid}/refund/ Process a refund (full or partial) for an order #
POST /api/v1/app-orders/merchant-of-record/{uuid}/reject/ Reject an app order as merchant of record #
POST /api/v1/app-orders/merchant-of-record/{uuid}/service-fee/invoice-sent/ Mark service fee as invoice sent #
POST /api/v1/app-orders/merchant-of-record/{uuid}/service-fee/paid/ Mark service fee as paid #
POST /api/v1/app-orders/merchant-of-record/{uuid}/start-gathering-quotes/ Start gathering quotes (to be confirmed path) #
GET /api/v1/app-orders/merchant-of-record/{uuid}/supplier-purchase-order/pdf/ Generate and retrieve the supplier purchase order PDF for an App Order #
GET /api/v1/app-orders/merchant-of-record/{uuid}/two-status/ Get Two order status #
POST /api/v1/app-orders/merchant-of-record/{uuid}/unhold/ Remove hold from an order #
POST /api/v1/app-orders/merchant-of-record/{uuid}/unmark-forecasted/ Unmark order as forecasted #
POST /api/v1/app-orders/merchant-of-record/{uuid}/upload-document/ Endpoint to upload a document for an app order #
GET /api/v1/app-orders/merchant-of-record/{uuid}/zendesk-tickets/ List Zendesk tickets for order #
GET /api/v1/app-orders/merchant-of-record/activity-feed/ MoR order activity feed #
GET /api/v1/app-orders/merchant-of-record/alerts/ List orders currently on hold #
GET /api/v1/app-orders/merchant-of-record/assignable-users/ Get users assignable to tasks in current MoR company #
GET /api/v1/app-orders/merchant-of-record/brand-users/ Get users who can be selected as ordered_by for orders #
GET /api/v1/app-orders/merchant-of-record/brand-users-by-company/{company_uuid}/ Get users from a specific brand company #
GET /api/v1/app-orders/merchant-of-record/buyer-balance/{buyer_uuid}/ Get buyer balance details grouped by currency #
GET /api/v1/app-orders/merchant-of-record/buyer-orders-by-month/ Service-fee orders grouped by dispatch month (per buyer) #
GET /api/v1/app-orders/merchant-of-record/buyers/ List buyers appearing on the MoR's orders #
GET /api/v1/app-orders/merchant-of-record/buyers/{buyer_uuid}/allianz-credit-information/ Get Allianz credit information for a buyer #
GET /api/v1/app-orders/merchant-of-record/buyers/{buyer_uuid}/allocated-credit/ Get allocated credit for a buyer #
POST /api/v1/app-orders/merchant-of-record/buyers/{buyer_uuid}/calculate-credit/ Calculate credit availability for a buyer #
GET /api/v1/app-orders/merchant-of-record/buyers/{buyer_uuid}/two-billing-account/ Get or create Two billing account for a buyer #
GET /api/v1/app-orders/merchant-of-record/buyers/{buyer_uuid}/two-credit-information/ Get Two credit information for a buyer #
GET /api/v1/app-orders/merchant-of-record/buyers/{buyer_uuid}/two-registration/ Check if a buyer is registered on Two #
POST /api/v1/app-orders/merchant-of-record/create/ Create a new app order #
GET /api/v1/app-orders/merchant-of-record/delivery-issue-types/ List all delivery issue types #
GET /api/v1/app-orders/merchant-of-record/grouped-statements/ MoR endpoints for Grouped Statements #
GET /api/v1/app-orders/merchant-of-record/grouped-statements/{uuid}/ MoR endpoints for Grouped Statements #
PATCH /api/v1/app-orders/merchant-of-record/grouped-statements/{uuid}/ MoR endpoints for Grouped Statements #
GET /api/v1/app-orders/merchant-of-record/line-items/{line_item_uuid}/otif-data/ Get OTIF data for a line item #
PUT /api/v1/app-orders/merchant-of-record/line-items/{line_item_uuid}/otif-data/ Replace OTIF data for a line item #
PATCH /api/v1/app-orders/merchant-of-record/line-items/{line_item_uuid}/otif-data/ Update OTIF data for a line item #
POST /api/v1/app-orders/merchant-of-record/payout-status-for-date/ Get payout state for a given due date #
GET /api/v1/app-orders/merchant-of-record/spot-buy-requests/ List spot buy requests for merchant of record #
PATCH /api/v1/app-orders/merchant-of-record/spot-buy-requests/{spot_buy_request_uuid}/ Update spot buy request status #
GET /api/v1/app-orders/merchant-of-record/staff-users/ Get staff users in current MoR company #
GET /api/v1/app-orders/merchant-of-record/statements/ MoR endpoints for Statements #
POST /api/v1/app-orders/merchant-of-record/statements/ MoR endpoints for Statements #
GET /api/v1/app-orders/merchant-of-record/statements/{uuid}/ MoR endpoints for Statements #
GET /api/v1/app-orders/merchant-of-record/statements/{uuid}/invoice-pdf/ Get statement invoice PDF URL #
GET /api/v1/app-orders/merchant-of-record/statements/{uuid}/invoice-url/ Get statement invoice URL #
POST /api/v1/app-orders/merchant-of-record/statements/{uuid}/mark-as-paid/ MoR endpoints for Statements #
GET /api/v1/app-orders/merchant-of-record/statements/disabled-months/ MoR endpoints for Statements #
GET /api/v1/app-orders/merchant-of-record/statements/summary/ MoR endpoints for Statements #
GET /api/v1/app-orders/merchant-of-record/statements/unified/ MoR endpoints for Statements #
GET /api/v1/app-orders/merchant-of-record/suppliers/ List suppliers appearing on the MoR's orders #
POST /api/v1/app-orders/merchant-of-record/update-two-status/ Two webhook (Svix-signed) #
GET /api/v1/app-orders/supplier/ Supplier endpoints for App Orders #
GET /api/v1/app-orders/supplier/{uuid}/ Supplier endpoints for App Orders #
PATCH /api/v1/app-orders/supplier/{uuid}/mark-order-dispatched/ Adds Shipping details to an app order & marks it as dispatched #
GET /api/v1/app-orders/supplier/{uuid}/purchase-order/pdf/ Generate and retrieve the purchase order PDF for an App Order #

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/opply-app-orders-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 form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

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

OpenAPI Specification

opply-app-orders-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Opply Activity Feed App Orders API
  version: 0.0.0
servers:
- url: https://api.opply.com
  description: Base URL declared by the provider in apis.yml (roadmap#122).
tags:
- name: App Orders
paths:
  /api/v1/app-orders/admin/:
    get:
      operationId: api_v1_app_orders_admin_list
      summary: App Orders admin endpoints
      parameters:
      - name: page
        required: false
        in: query
        description: A page number within the paginated result set.
        schema:
          type: integer
      - name: page_size
        required: false
        in: query
        description: Number of results to return per page.
        schema:
          type: integer
      tags:
      - App Orders
      security:
      - tokenAuth: []
      - cookieAuth: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedAdminAppOrderListList'
          description: ''
  /api/v1/app-orders/admin/{uuid}/:
    get:
      operationId: api_v1_app_orders_admin_retrieve
      summary: App Orders admin endpoints
      parameters:
      - in: path
        name: uuid
        schema:
          type: string
          format: uuid
        required: true
      tags:
      - App Orders
      security:
      - tokenAuth: []
      - cookieAuth: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdminAppOrderDetails'
          description: ''
  /api/v1/app-orders/admin/{uuid}/create-order-event/:
    post:
      operationId: api_v1_app_orders_admin_create_order_event_create
      summary: Endpoint to add order event for app order
      parameters:
      - in: path
        name: uuid
        schema:
          type: string
          format: uuid
        required: true
      tags:
      - App Orders
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AdminAppOrderEventCreate'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/AdminAppOrderEventCreate'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/AdminAppOrderEventCreate'
      security:
      - tokenAuth: []
      - cookieAuth: []
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdminAppOrderEvent'
          description: ''
  /api/v1/app-orders/admin/{uuid}/documents/:
    get:
      operationId: api_v1_app_orders_admin_documents_list
      summary: Endpoint to list documents for an app order
      parameters:
      - name: page
        required: false
        in: query
        description: A page number within the paginated result set.
        schema:
          type: integer
      - name: page_size
        required: false
        in: query
        description: Number of results to return per page.
        schema:
          type: integer
      - in: path
        name: uuid
        schema:
          type: string
          format: uuid
        required: true
      tags:
      - App Orders
      security:
      - tokenAuth: []
      - cookieAuth: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedAdminAppOrderDocumentList'
          description: ''
  /api/v1/app-orders/admin/{uuid}/documents/{document_uuid}/:
    delete:
      operationId: api_v1_app_orders_admin_documents_destroy
      summary: Endpoint to delete a specific document
      parameters:
      - in: path
        name: document_uuid
        schema:
          type: string
        required: true
      - in: path
        name: uuid
        schema:
          type: string
          format: uuid
        required: true
      tags:
      - App Orders
      security:
      - tokenAuth: []
      - cookieAuth: []
      responses:
        '204':
          description: No response body
  /api/v1/app-orders/admin/{uuid}/edit/:
    put:
      operationId: api_v1_app_orders_admin_edit_update
      summary: Endpoint to edit order prices for supplier
      parameters:
      - in: path
        name: uuid
        schema:
          type: string
          format: uuid
        required: true
      tags:
      - App Orders
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AdminAppOrderUpdate'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/AdminAppOrderUpdate'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/AdminAppOrderUpdate'
        required: true
      security:
      - tokenAuth: []
      - cookieAuth: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdminAppOrderDetails'
          description: ''
  /api/v1/app-orders/admin/{uuid}/mark-order-as-paid/:
    post:
      operationId: api_v1_app_orders_admin_mark_order_as_paid_create
      summary: Endpoint to mark order as paid
      parameters:
      - in: path
        name: uuid
        schema:
          type: string
          format: uuid
        required: true
      tags:
      - App Orders
      security:
      - tokenAuth: []
      - cookieAuth: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdminAppOrderDetails'
          description: ''
        '400':
          description: Stripe invoice is voided. Recreate the invoice before marking as paid.
        '500':
          description: An error occurred while marking the Stripe invoice as paid.
  /api/v1/app-orders/admin/{uuid}/mark-order-as-paid-out-to-supplier/:
    post:
      operationId: api_v1_app_orders_admin_mark_order_as_paid_out_to_supplier_create
      summary: Endpoint to mark order as paid out to supplier
      parameters:
      - in: path
        name: uuid
        schema:
          type: string
          format: uuid
        required: true
      tags:
      - App Orders
      security:
      - tokenAuth: []
      - cookieAuth: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdminAppOrderDetails'
          description: ''
  /api/v1/app-orders/admin/{uuid}/order-events/:
    get:
      operationId: api_v1_app_orders_admin_order_events_list
      summary: Endpoint to get order events
      parameters:
      - name: page
        required: false
        in: query
        description: A page number within the paginated result set.
        schema:
          type: integer
      - name: page_size
        required: false
        in: query
        description: Number of results to return per page.
        schema:
          type: integer
      - in: path
        name: uuid
        schema:
          type: string
          format: uuid
        required: true
      tags:
      - App Orders
      security:
      - tokenAuth: []
      - cookieAuth: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedAdminAppOrderEventList'
          description: ''
  /api/v1/app-orders/admin/{uuid}/pricing/:
    get:
      operationId: api_v1_app_orders_admin_pricing_retrieve
      summary: Endpoint to get order prices for Buyer
      parameters:
      - in: path
        name: uuid
        schema:
          type: string
          format: uuid
        required: true
      tags:
      - App Orders
      security:
      - tokenAuth: []
      - cookieAuth: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdminAppOrderPrice'
          description: ''
  /api/v1/app-orders/admin/{uuid}/upload-document/:
    post:
      operationId: api_v1_app_orders_admin_upload_document_create
      summary: Endpoint to upload a document for an app order
      parameters:
      - in: path
        name: uuid
        schema:
          type: string
          format: uuid
        required: true
      tags:
      - App Orders
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AdminAppOrderDocument'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/AdminAppOrderDocument'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/AdminAppOrderDocument'
        required: true
      security:
      - tokenAuth: []
      - cookieAuth: []
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdminAppOrderDocument'
          description: ''
  /api/v1/app-orders/brand/:
    get:
      operationId: api_v1_app_orders_brand_list
      description: Get a paginated list of all orders for the authenticated buyer company.
      summary: List all buyer orders
      parameters:
      - in: query
        name: delivery_date_from
        schema:
          type: string
          format: date
        description: 'Filter by estimated delivery date from (inclusive, format: YYYY-MM-DD)'
      - in: query
        name: delivery_date_to
        schema:
          type: string
          format: date
        description: 'Filter by estimated delivery date to (inclusive, format: YYYY-MM-DD)'
      - in: query
        name: delivery_state
        schema:
          type: string
        description: Filter by delivery state (e.g. 'delivered', 'in_transit', 'pending_dispatch'). Used by the Delivery Timeline view to fetch only completed orders for the lazy ✓ delivered section.
      - in: query
        name: delivery_status_group
        schema:
          type: string
        description: 'Filter by delivery status group: not_started, arranging_freight, pending_dispatch, ready, in_transit, delivered, payment_needed'
      - in: query
        name: exclude_delivery_state
        schema:
          type: string
        description: Exclude orders with this delivery state. Used by the Delivery Timeline view to fetch active (non-delivered) orders only.
      - in: query
        name: exclude_legacy
        schema:
          type: boolean
        description: When true, exclude orders linked to the legacy orders system (rows where legacy_order is set).
      - in: query
        name: lifecycle_state
        schema:
          type: string
        description: Filter by lifecycle state (e.g. 'confirmed', 'forecasted', 'pending_merchant_of_record_approval')
      - name: page
        required: false
        in: query
        description: A page number within the paginated result set.
        schema:
          type: integer
      - name: page_size
        required: false
        in: query
        description: Number of results to return per page.
        schema:
          type: integer
      - in: query
        name: payment_status
        schema:
          type: string
        description: Filter by payment status (not_started, due, overdue, paid)
      - in: query
        name: search
        schema:
          type: string
        description: Search across PO number, customer reference, supplier name, products, and delivery address fields
      - in: query
        name: supplier
        schema:
          type: string
          format: uuid
        description: Filter by supplier company UUID
      tags:
      - App Orders
      security:
      - tokenAuth: []
      - cookieAuth: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedBuyerAppOrderListList'
          description: ''
  /api/v1/app-orders/brand/{uuid}/:
    get:
      operationId: api_v1_app_orders_brand_retrieve
      summary: Brand endpoints for App Orders
      parameters:
      - in: path
        name: uuid
        schema:
          type: string
        required: true
      tags:
      - App Orders
      security:
      - tokenAuth: []
      - cookieAuth: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BuyerAppOrderDetails'
          description: ''
  /api/v1/app-orders/brand/{uuid}/client-notified-as-paid/:
    post:
      operationId: api_v1_app_orders_brand_client_notified_as_paid_create
      description: 'Buyer notifies that payment has been made.


        - **direct**: Marks both pay_in_state and payout_state as PAID.

        - **other providers**: Transitions pay_in_state to AWAITING_RECONCILIATION.


        Optionally accepts a `file_name` field to attach a proof of payment document.'
      summary: Buyer notifies order as paid
      parameters:
      - in: path
        name: uuid
        schema:
          type: string
        required: true
      tags:
      - App Orders
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BuyerClientNotifiedAsPaid'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/BuyerClientNotifiedAsPaid'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/BuyerClientNotifiedAsPaid'
      security:
      - tokenAuth: []
      - cookieAuth: []
      responses:
        '204':
          description: Order payment status updated
        '400':
          description: Invalid state transition
  /api/v1/app-orders/brand/{uuid}/invoice-url/:
    get:
      operationId: api_v1_app_orders_brand_invoice_url_retrieve
      description: 'Returns invoice based on payment provider:


        - **Stripe**: Returns JSON `{"url": "https://..."}`

        - **Two**: Returns PDF file directly with Content-Type: application/pdf

        - **Direct**: Returns JSON `{"url": "https://..."}` with supplier invoice document URL

        '
      summary: Returns the invoice URL or PDF
      parameters:
      - in: path
        name: uuid
        schema:
          type: string
        required: true
      tags:
      - App Orders
      security:
      - tokenAuth: []
      - cookieAuth: []
      responses:
        '200':
          description: Invoice PDF (Two orders) or JSON with URL (Stripe/Direct orders)
        '400':
          description: Error retrieving invoice from payment provider
        '404':
          description: Invoice missing when it should exist or access denied
  /api/v1/app-orders/brand/{uuid}/mark-as-delivered/:
    post:
      operationId: api_v1_app_orders_brand_mark_as_delivered_create
      description: 'Buyer-driven transition: confirm an order as delivered.'
      summary: Buyer mark an order as delivered
      parameters:
      - in: path
        name: uuid
        schema:
          type: string
        required: true
      tags:
      - App Orders
      security:
      - tokenAuth: []
      - cookieAuth: []
      responses:
        '200':
          description: Order has been marked as delivered
        '400':
          description: Error while marking an order as delivered
  /api/v1/app-orders/brand/{uuid}/mark-as-picked-up/:
    post:
      operationId: api_v1_app_orders_brand_mark_as_picked_up_create
      description: 'Buyer-driven transition: confirm an order as picked up, recording dispatched_at + tracking info.'
      summary: Mark order as picked up (buyer path)
      parameters:
      - in: path
        name: uuid
        schema:
          type: string
        required: true
      tags:
      - App Orders
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BuyerMarkAsPickedUp'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/BuyerMarkAsPickedUp'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/BuyerMarkAsPickedUp'
        required: true
      security:
      - tokenAuth: []
      - cookieAuth: []
      responses:
        '200':
          description: Order marked as picked up
        '400':
          description: Cannot transition order to this state
  /api/v1/app-orders/brand/{uuid}/order-activities/:
    get:
      operationId: api_v1_app_orders_brand_order_activities_list
      description: Returns a list of all order activities for the specified order.
      summary: List order activities
      parameters:
      - name: page
        required: false
        in: query
        description: A page number within the paginated result set.
        schema:
          type: integer
      - name: page_size
        required: false
        in: query
        description: Number of results to return per page.
        schema:
          type: integer
      - in: path
        name: uuid
        schema:
          type: string
        required: true
      tags:
      - App Orders
      security:
      - tokenAuth: []
      - cookieAuth: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedBuyerOrderActivityList'
          description: ''
  /api/v1/app-orders/brand/{uuid}/purchase-order/pdf/:
    get:
      operationId: api_v1_app_orders_brand_purchase_order_pdf_retrieve
      description: Generate the buyer-facing purchase-order PDF for this order and return its signed URL.
      summary: Generate and retrieve the purchase order PDF for an App Order
      parameters:
      - in: path
        name: uuid
        schema:
          type: string
        required: true
      tags:
      - App Orders
      security:
      - tokenAuth: []
      - cookieAuth: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PDFUrl'
          description: ''
  /api/v1/app-orders/brand/{uuid}/repeat-spot-order/:
    post:
      operationId: api_v1_app_orders_brand_repeat_spot_order_create
      description: Creates a new spot order with the same data as the original order but with fresh states and unique identifiers. This includes duplicating all order documents and line item documents.
      summary: Repeat an app spot order
      parameters:
      - in: path
        name: uuid
        schema:
          type: string
        required: true
      tags:
      - App Orders
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BuyerRepeatSpotOrderRequest'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/BuyerRepeatSpotOrderRequest'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/BuyerRepeatSpotOrderRequest'
        required: true
      security:
      - tokenAuth: []
      - cookieAuth: []
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BuyerRepeatSpotOrderResponse'
          description: ''
        '400':
          description: Error repeating order
        '403':
          description: User is not authorized to repeat this order
        '404':
          description: Order not found or cannot be repeated
  /api/v1/app-orders/brand/activity-statement/:
    get:
      operationId: api_v1_app_orders_brand_activity_statement_retrieve
      description: 'Activity statement for the buyer: their orders grouped by currency, each with the invoiced total, current payment status, and a server-computed cumulative outstanding balance per entry plus opening / closing balances. Outstanding is the same figure the finance / statements pages use, so the closing balance reconciles. Optionally bound the window with `date_from` / `date_to` (YYYY-MM-DD, inclusive); orders placed before `date_from` fold their outstanding into the opening balance. All monetary values are in cents.'
      summary: Buyer activity statement with running outstanding balance
      parameters:
      - in: query
        name: date_from
        schema:
          type: string
          format: date
        description: Include orders placed on or after this date (YYYY-MM-DD). Earlier orders fold their outstanding into the opening balance.
      - in: query
        name: date_to
        schema:
          type: string
          format: date
        description: Include activity on or before this date (YYYY-MM-DD).
      tags:
      - App Orders
      security:
      - tokenAuth: []
      - cookieAuth: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BuyerActivityStatement'
          description: ''
  /api/v1/app-orders/brand/aggregate/:
    get:
      operationId: api_v1_app_orders_brand_aggregate_retrieve
      description: Returns a per-currency aggregate (sum / avg / min / max) of `total_in_buyer_currency` over the filtered orders, computed in full-precision Decimal micro-units and rounded to integer cents once per currency. Use this for cross-order sum/total/average questions — the per-order totals returned by `list` are individually rounded and accrue visible rounding error when added in prose (SC-3627). Filters mirror the `list` endpoint exactly. Alternatively pass `order_uuids` (repeated query param) to aggregate over an explicit set of order UUIDs — the filters are ignored when uuids are present. Every UUID must resolve inside the caller's scope or the whole call is rejected with a 403.
      summary: Aggregate order totals across the filtered set in full precision
      parameters:
      - in: query
        name: agreement_uuid
        schema:
          type: string
          format: uuid
        description: Agreement (contract) UUID.
      - in: query
        name: delivery_date_from
        schema:
          type: string
          format: date
        description: Estimated delivery on/after this date (YYYY-MM-DD).
      - in: query
        name: delivery_date_to
        schema:
          type: string
          format: date
        description: Estimated delivery on/before this date (YYYY-MM-DD).
      - in: query
        name: delivery_state
        schema:
          type: string
        description: Filter by exact delivery state.
      - in: query
        name: delivery_status_group
        schema:
          type: string
        description: Filter by coarse delivery status group.
      - in: query
        name: exclude_delivery_state
        schema:
          type: string
        description: Exclude orders with this delivery state.
      - in: query
        name: exclude_legacy
        schema:
          type: boolean
        description: When true, exclude legacy-linked orders.
      - in: query
        name: field
        schema:
          type: string
          enum:
          - total_in_buyer_currency
        description: Numeric field to aggregate. Currently only `total_in_buyer_currency` is supported. Defaults to that value.
      - in: query
        name: lifecycle_state
        schema:
          type: string
        description: Filter by lifecycle state.
      - in: query
        name: operation
        schema:
          type: string
          enum:
          - avg
          - max
          - min
          - sum
        description: 'Aggregation operation. One of: sum, avg, min, max.'
        required: true
      - in: query
        name: order_uuids
        schema:
          type: array
          items:
            type: string
            format: uuid
        description: Optional explicit set of order UUIDs to aggregate. Pass as a repeated query param (`?order_uuids=<uuid>&order_uuids=<uuid>`). When present and non-empty, filters are ignored. Every UUID must resolve inside the caller's scope — otherwise the call is rejected with `403 forbidden` to avoid leaking which UUIDs the caller can see.
      - in: query
        name: payment_status
        schema:
          type: string
        description: Filter by payment status (pay_in_state).
      - in: query
        name: placed_date_from
        schema:
          type: string
          format: date
        description: Placed (created) on/after this date (YYYY-MM-DD).
      - in: query
        name: placed_date_to
        schema:
          type: string
          format: date
        description: Placed (created) on/before this date (YYYY-MM-DD).
      - in: query
        name: product
        schema:
          type: string
        description: Substring match on any line item's product name.
      - in: query
        name: search
        schema:
          type: string
        description: Ranked free-text search (order no., PO ref, supplier, address).
      - in: query
        name: supplier
        schema:
          type: string
          format: uuid
        description: Supplier company UUID (legacy alias of supplier_uuid).
      - in: query
        name: supplier_name
        schema:
          type: string
        description: Substring match on supplier company name.
      - in: query
        name: supplier_uuid
        schema:
          type: string
          format: uuid
        description: Supplier company UUID.
      tags:
      - App Orders
      security:
      - tokenAuth: []
      - cookieAuth: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BuyerOrderAggregateResult'
          description: ''
        '400':
          description: Invalid `operation`, `field`, or `order_uuids` query param.
        '403':
          description: One or more `order_uuids` are not in the caller's scope.
  /api/v1/app-orders/brand/all-order-activities/:
    get:
      operationId: api_v1_app_orders_brand_all_order_activities_list
      description: Returns a paginated list of all order activities from all orders for the buyer company.
      summary: List all order activities
      parameters:
      - name: page
        required: false
        in: query
        description: A page number within the paginated result set.
        schema:
          type: integer
      - name: page_size
        required: false
        in: query
        description: Number of results to return per page.
        schema:
          type: integer
      tags:
      - App Orders
      security:
      - tokenAuth: []
      - cookieAuth: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedBuyerOrderActivityWithOrderList'
          description: ''
  /api/v1/app-orders/brand/grouped-statements/:
    get:
      operationId: api_v1_app_orders_brand_grouped_statements_list
      description: 'Buyer-facing viewset for listing and retrieving grouped statements.


        GET  /brand/grouped-statements/         — paginated list with filters

        GET  /brand/grouped-statements/{uuid}/  — detail incl. nested orders and bank details

        POST /brand/grouped-statements/{uuid}/mark-transfer-sent/  — signal bank transfer sent'
      summary: Buyer endpoints for Grouped Statements
      parameters:
      - in: query
        name: month
        schema:
          type: string
        description: Filter by due date month in YYYY-MM format (e.g. '2026-05').
      - name: page
        required: false
        in: query
        description: A page number within the paginated result set.
        schema:
          type: integer
      - name: page_size
        required: false
        in: query
        description: Number of results to return per page.
        schema:
          type: integer
      - in: query
        name: search
        schema:
          type: string
        description: Free-text search across the statement identifier, the merchant-of-record company name, and any contributing order number.
      - in: query
        name: tab
        schema:
          type: string
          enum:
          - awaiting_reconciliation
          - cancelled
          - paid
          - pending
        description: Filter by tab. 'pending' groups DUE + OVERDUE.
      tags:
      - App Orders
      security:
      - tokenAuth: []
      - cookieAuth: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedBuyerGroupedStatementListList'
          description: ''
  /api/v1/app-orders/brand/grouped-statements/{uuid}/:
    get:
      operationId: api_v1_app_orders_brand_grouped_statements_retrieve
      description: 'Buyer-facing viewset for listing and retrieving grouped statements.


        GET  /brand/grouped-statements/         — paginated list with filters

        GET  /brand/grouped-statements/{uuid}/  — detail incl. nested orders and bank details

        POST /brand/grouped-statements/{uuid}/mark-transfer-sent/  — signal bank transfer sent'
      summary: Retrieve a buyer grouped statement with nested orders and bank details
      parameters:
      - in: path
        name: uuid
        schema:
          type: string
          format: uuid
        required: true
      tags:
      - App Orders
      security:
      - tokenAuth: []
      - cookieAuth: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BuyerGroupedStatementDetail'
          description: ''
  /api/v1/app-orders/brand/grouped-statements/{uuid}/csv/:
    get:
      operationId: api_v1_app_orders_brand_grouped_statements_csv_retrieve
      description: Returns the statement's contributing orders as an Excel workbook (one row per order plus a Total Amount Due summary row). Opens directly in Excel / Google Sheets with identifiers kept as text and amounts as numbers.
      summary: Download a buyer grouped statement as an Excel (.xlsx) file
      parameters:
      - in: path
        name: uuid
        schema:
          type: string
          format: uuid
        required: true
      tags:
      - App Orders
      security:
      - tokenAuth: []
      - cookieAuth: []
      responses:
        '200':
          content:
            application/vnd.openxmlformats-officedocument.spreadsheetml.sheet:
              schema:
                type: string
                format: binary
          description: ''
  /api/v1/app-orders/brand/grouped-statements/{uuid}/invoices/:
    get:
      operationId: api_v1_app_orders_brand_grouped_statements_invoices_retrieve
      description: Returns a .zip bundling each contributing order's Two invoice PDF (one `invoice_<order>.pdf` per order). This is invoices only — it contains no statement summary file. Orders whose invoice is not yet available from the payment provider, or that were skipped because the archive hit its size / time bound, are listed in a `missing-invoices.txt` manifest inside the archive (with the reason).
      summary: Download all of a buyer grouped statement's invoices as a .zip
      parameters:
      - in: path
        name: uuid
        schema:
          type: string
          format: uuid
        required: true
      tags:
      - App Orders
      security:
      - tokenAuth: []
      - cookieAuth: []
      responses:
        '200':
          content:
            application/zip:
              schema:
                type: string
                format: binary
          description: ''
  /api/v1/app-orders/brand/grouped-statements/{uuid}/mark-transfer-sent/:
    post:
      operationId: api_v1_app_orders_brand_grouped_statements_mark_transfer_sent_create
      description: Transitions the statement from DUE or OVERDUE to AWAITING_RECONCILIATION. Only valid when the statement status is DUE or OVERDUE. After a successful call the statement's `status` field will be `awaiting_reconciliation`; use `?tab=awaiting_reconciliation` on the list endpoint to confirm.
      summary: Mark a bank transfer as sent
      parameters:
      - in: path
        name: uuid
        schema:
          type: string
          format: uuid
        required: true
      tags:
      - App Orders
      security:
      - tokenAuth: []
      - cookieAuth: []
      response

# --- truncated at 32 KB (397 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/opply/refs/heads/main/openapi/opply-app-orders-api-openapi.yml