MVMNT Invoices API

AR invoice management operations. Invoices represent customer billing for shipment services.

Operations 11

POST /invoices/filter Filter invoices #
POST /invoices Create an invoice #
GET /invoices/{id} Get an invoice #
PATCH /invoices/{id} Update an invoice #
DELETE /invoices/{id} Void an invoice #
POST /invoices/{id}/mark-awaiting Mark invoice as awaiting payment #
POST /invoices/{id}/send Email invoice #
GET /invoices/{id}/payments Get invoice payments #
POST /invoices/batch-generate Batch generate invoices #
GET /invoices/aging-report Get aging report #
GET /invoices/{id}/available-credits Get available credits for invoice #

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/mvmnt-invoices-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

mvmnt-invoices-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: MVMNT Invoices API
  version: 1.0.0
  description: "The MVMNT API enables you to automate freight brokerage workflows by integrating\ndirectly with our Transportation Management System.\n\n## Authentication\n\nOAuth 2.0 client credentials flow. See [Authentication Guide](/getting-started/authentication)\nfor details.\n\n### Token Endpoint\n\n```\nPOST https://api.mvmnt.io/oauth2/token\n```\n\n#### Request\n\n**Headers:**\n```http\nContent-Type: application/x-www-form-urlencoded\n```\n\n**Body Parameters:**\n```\ngrant_type=client_credentials\nclient_id=YOUR_CLIENT_ID\nclient_secret=YOUR_CLIENT_SECRET\n```\n\n#### Example Request\n\n```bash\ncurl -X POST https://api.mvmnt.io/oauth2/token \\\n  -H \"Content-Type: application/x-www-form-urlencoded\" \\\n  -d \"grant_type=client_credentials\" \\\n  -d \"client_id=YOUR_CLIENT_ID\" \\\n  -d \"client_secret=YOUR_CLIENT_SECRET\"\n```\n\n#### Success Response\n\n**Status:** `200 OK`\n\n```json\n{\n  \"access_token\": \"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...\",\n  \"token_type\": \"Bearer\",\n  \"expires_in\": 3600\n}\n```\n\n**Response Fields:**\n- `access_token`: JWT Bearer token to use for API requests\n- `token_type`: Always `Bearer`\n- `expires_in`: Token lifetime in seconds (3600 = 1 hour)\n"
  contact:
    name: MVMNT Support
    email: support@mvmnt.io
    url: https://docs.mvmnt.io
  license:
    name: Proprietary
    url: https://mvmnt.io/legal/terms
  x-parsed-md-description:
    result:
    - $$mdtype: Node
      errors: []
      lines:
      - 0
      - 2
      inline: false
      attributes: {}
      children:
      - $$mdtype: Node
        errors: []
        lines:
        - 0
        - 2
        inline: false
        attributes: {}
        children:
        - $$mdtype: Node
          errors: []
          lines:
          - 0
          - 2
          inline: true
          attributes:
            content: The MVMNT API enables you to automate freight brokerage workflows by integrating
          children: []
          type: text
          annotations: []
          slots: {}
        - $$mdtype: Node
          errors: []
          lines:
          - 0
          - 2
          inline: true
          attributes: {}
          children: []
          type: softbreak
          annotations: []
          slots: {}
        - $$mdtype: Node
          errors: []
          lines:
          - 0
          - 2
          inline: true
          attributes:
            content: directly with our Transportation Management System.
          children: []
          type: text
          annotations: []
          slots: {}
        type: inline
        annotations: []
        slots: {}
      type: paragraph
      annotations: []
      slots: {}
    - $$mdtype: Node
      errors: []
      lines:
      - 3
      - 4
      inline: false
      attributes:
        level: 2
      children:
      - $$mdtype: Node
        errors: []
        lines:
        - 3
        - 4
        inline: false
        attributes: {}
        children:
        - $$mdtype: Node
          errors: []
          lines:
          - 3
          - 4
          inline: true
          attributes:
            content: Authentication
          children: []
          type: text
          annotations: []
          slots: {}
        type: inline
        annotations: []
        slots: {}
      type: heading
      annotations: []
      slots: {}
    - $$mdtype: Node
      errors: []
      lines:
      - 5
      - 6
      inline: false
      attributes: {}
      children:
      - $$mdtype: Node
        errors: []
        lines:
        - 5
        - 6
        inline: false
        attributes: {}
        children:
        - $$mdtype: Node
          errors: []
          lines:
          - 5
          - 6
          inline: true
          attributes:
            content: 'OAuth 2.0 client credentials flow. See '
          children: []
          type: text
          annotations: []
          slots: {}
        - $$mdtype: Node
          errors: []
          lines:
          - 5
          - 6
          inline: true
          attributes:
            href: /getting-started/authentication
          children:
          - $$mdtype: Node
            errors: []
            lines:
            - 5
            - 6
            inline: true
            attributes:
              content: Authentication Guide
            children: []
            type: text
            annotations: []
            slots: {}
          type: link
          annotations: []
          slots: {}
          redocly:::linkOriginal:href: /getting-started/authentication
        - $$mdtype: Node
          errors: []
          lines:
          - 5
          - 6
          inline: true
          attributes:
            content: ' for details.'
          children: []
          type: text
          annotations: []
          slots: {}
        type: inline
        annotations: []
        slots: {}
      type: paragraph
      annotations: []
      slots: {}
servers:
- url: https://api.mvmnt.io/v1
  description: Production
security:
- BearerAuth: []
tags:
- name: Invoices
  description: 'AR invoice management operations.

    Invoices represent customer billing for shipment services.

    '
paths:
  /invoices/filter:
    post:
      summary: Filter invoices
      description: 'Search for AR invoices using filter criteria.


        ## Common Filters


        - By customer: `{ "filter": { "customerId": { "equalTo": "uuid" } } }`

        - Unpaid: `{ "filter": { "status": { "in": ["AWAITING_PAYMENT", "PARTIALLY_PAID"] } } }`

        - Overdue: `{ "filter": { "overdue": true } }`

        - By shipment: `{ "filter": { "shipmentId": { "equalTo": "uuid" } } }`

        '
      operationId: filterInvoices
      tags:
      - Invoices
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InvoiceFilterRequest'
            examples:
              unpaidInvoices:
                summary: Unpaid invoices
                value:
                  filter:
                    status:
                      in:
                      - AWAITING_PAYMENT
                      - PARTIALLY_PAID
              overdueByCustomer:
                summary: Overdue invoices for customer
                value:
                  filter:
                    customerId:
                      equalTo: 550e8400-e29b-41d4-a716-446655440000
                    overdue: true
      responses:
        '200':
          description: Invoices matching filter criteria
          content:
            application/json:
              schema:
                type: object
                required:
                - data
                - pagination
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Invoice'
                  pagination:
                    $ref: '#/components/schemas/PaginationInfo'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '422':
          $ref: '#/components/responses/ValidationError'
  /invoices:
    post:
      summary: Create an invoice
      description: 'Create a new invoice for an order.


        ## What happens


        - Invoice record is created for the order

        - Order status updates to `DELIVERED_UNPAID`

        - Due date calculated from payment term if not provided


        ## Note


        Each shipment can have only one AR invoice. Use `POST /shipments/{id}/invoice/generate`

        to generate the invoice PDF document.

        '
      operationId: createInvoice
      tags:
      - Invoices
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InvoiceInput'
            examples:
              basic:
                summary: Create invoice
                value:
                  orderId: 550e8400-e29b-41d4-a716-446655440000
                  invoiceDate: '2025-01-15'
                  dueDate: '2025-02-14'
                  amount: 2500
                  currency: USD
              withTerm:
                summary: With payment term
                value:
                  orderId: 550e8400-e29b-41d4-a716-446655440000
                  invoiceDate: '2025-01-15'
                  amount: 2500
                  paymentTermId: 660e8400-e29b-41d4-a716-446655440001
      responses:
        '201':
          description: Invoice created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Invoice'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '409':
          description: Order already has an invoice
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
        '422':
          $ref: '#/components/responses/ValidationError'
  /invoices/{id}:
    get:
      summary: Get an invoice
      description: 'Retrieve an invoice by ID.


        The response includes payments, credits, and document info.

        '
      operationId: getInvoice
      tags:
      - Invoices
      parameters:
      - $ref: '#/components/parameters/IdOrClientKey'
      - $ref: '#/components/parameters/LookupBy'
      responses:
        '200':
          description: Invoice retrieved successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Invoice'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '404':
          $ref: '#/components/responses/NotFoundError'
    patch:
      summary: Update an invoice
      description: 'Update invoice fields.


        **Note:** Amount cannot be changed directly. Update order charges instead.

        '
      operationId: updateInvoice
      tags:
      - Invoices
      parameters:
      - $ref: '#/components/parameters/IdOrClientKey'
      - $ref: '#/components/parameters/LookupBy'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InvoicePatch'
            examples:
              updateDueDate:
                summary: Update due date
                value:
                  dueDate: '2025-02-28'
              updateReference:
                summary: Update reference
                value:
                  reference: INV-CUST-123-REV
      responses:
        '200':
          description: Invoice updated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Invoice'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '422':
          $ref: '#/components/responses/ValidationError'
    delete:
      summary: Void an invoice
      description: 'Void/cancel an invoice.


        ## Prerequisites


        - Invoice must not have any payments applied

        - Invoice must not be factored

        '
      operationId: voidInvoice
      tags:
      - Invoices
      parameters:
      - $ref: '#/components/parameters/IdOrClientKey'
      - $ref: '#/components/parameters/LookupBy'
      responses:
        '204':
          description: Invoice voided successfully
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '409':
          description: Cannot void - invoice has payments or is factored
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
  /invoices/{id}/mark-awaiting:
    post:
      summary: Mark invoice as awaiting payment
      description: 'Mark invoice as awaiting payment.


        ## What happens


        - Sets invoice date and due date

        - Updates order status to `DELIVERED_UNPAID`

        - Invoice is now ready for payment collection

        '
      operationId: markInvoiceAwaiting
      tags:
      - Invoices
      parameters:
      - $ref: '#/components/parameters/IdOrClientKey'
      - $ref: '#/components/parameters/LookupBy'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MarkAwaitingPaymentRequest'
            examples:
              withDates:
                summary: With dates
                value:
                  invoiceDate: '2025-01-15'
                  dueDate: '2025-02-14'
      responses:
        '200':
          description: Invoice marked as awaiting payment
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Invoice'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '404':
          $ref: '#/components/responses/NotFoundError'
  /invoices/{id}/send:
    post:
      summary: Email invoice
      description: 'Send invoice to customer via email.


        ## What happens


        - Generates invoice PDF if not already generated

        - Sends email with PDF attachment

        - Logs email in activity feed

        '
      operationId: sendInvoiceEmail
      tags:
      - Invoices
      parameters:
      - $ref: '#/components/parameters/IdOrClientKey'
      - $ref: '#/components/parameters/LookupBy'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SendInvoiceEmailRequest'
            examples:
              basic:
                summary: Basic email
                value:
                  toEmails:
                  - billing@customer.com
              withMessage:
                summary: With custom message
                value:
                  toEmails:
                  - billing@customer.com
                  ccEmails:
                  - accounts@broker.com
                  subject: Invoice INV-00001 for Shipment SHP-00123
                  message: Please find attached your invoice for recent shipment services.
      responses:
        '200':
          description: Email sent successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  emailId:
                    type: string
                    format: uuid
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '404':
          $ref: '#/components/responses/NotFoundError'
  /invoices/{id}/payments:
    get:
      summary: Get invoice payments
      description: List all payments applied to a specific invoice.
      operationId: getInvoicePayments
      tags:
      - Invoices
      parameters:
      - $ref: '#/components/parameters/IdOrClientKey'
      - $ref: '#/components/parameters/LookupBy'
      responses:
        '200':
          description: Payments retrieved successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/InvoicePayment'
                  totalPaid:
                    type: number
                  openBalance:
                    type: number
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '404':
          $ref: '#/components/responses/NotFoundError'
  /invoices/batch-generate:
    post:
      summary: Batch generate invoices
      description: 'Generate invoices for multiple shipments in a single request.


        ## What happens


        - Creates invoice records for each shipment

        - Generates PDF documents

        - Optionally sends emails grouped by customer


        ## Note


        Shipments that already have invoices or are missing requirements

        will be skipped and returned in the `failed` array.

        '
      operationId: batchGenerateInvoices
      tags:
      - Invoices
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BatchGenerateInvoicesRequest'
            examples:
              basic:
                summary: Generate only
                value:
                  shipmentIds:
                  - 550e8400-e29b-41d4-a716-446655440000
                  - 550e8400-e29b-41d4-a716-446655440001
              withEmail:
                summary: Generate and email
                value:
                  shipmentIds:
                  - 550e8400-e29b-41d4-a716-446655440000
                  - 550e8400-e29b-41d4-a716-446655440001
                  sendEmail: true
                  emailConfig:
                    groupByCustomer: true
      responses:
        '200':
          description: Batch generation completed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BatchGenerateInvoicesResponse'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
  /invoices/aging-report:
    get:
      summary: Get aging report
      description: 'Generate accounts receivable aging report.


        ## Report buckets


        By default: Current, 1-30, 31-60, 61-90, 90+ days


        ## Export formats


        - JSON (default)

        - CSV (set Accept header to text/csv)

        '
      operationId: getAgingReport
      tags:
      - Invoices
      parameters:
      - name: customerId
        in: query
        schema:
          type: string
          format: uuid
        description: Filter by specific customer
      - name: daysPerBucket
        in: query
        schema:
          type: integer
          default: 30
        description: Days per aging bucket
      - name: maxDays
        in: query
        schema:
          type: integer
          default: 120
        description: Maximum days to track
      responses:
        '200':
          description: Aging report generated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AgingReportResponse'
            text/csv:
              schema:
                type: string
        '401':
          $ref: '#/components/responses/UnauthorizedError'
  /invoices/{id}/available-credits:
    get:
      summary: Get available credits for invoice
      description: 'List credit memos that can be applied to an invoice.


        Returns credits for the same customer with remaining balance

        and matching currency.

        '
      operationId: getAvailableCreditsForInvoice
      tags:
      - Invoices
      parameters:
      - $ref: '#/components/parameters/IdOrClientKey'
      - $ref: '#/components/parameters/LookupBy'
      responses:
        '200':
          description: Available credits retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AvailableCreditsResponse'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '404':
          $ref: '#/components/responses/NotFoundError'
components:
  schemas:
    MarkAwaitingPaymentRequest:
      type: object
      properties:
        invoiceDate:
          type: string
          format: date
          description: Invoice date (defaults to today)
        dueDate:
          type: string
          format: date
          description: Due date (defaults based on payment term)
    PaymentTermReference:
      type: object
      description: 'Enhanced reference to a payment term resource (returned in responses).

        Includes full payment term details in addition to id/key.

        '
      required:
      - id
      - name
      - createdAt
      - updatedAt
      properties:
        id:
          type: string
          format: uuid
          description: Payment term UUID
          example: 550e8400-e29b-41d4-a716-446655440000
        key:
          type:
          - string
          - 'null'
          maxLength: 512
          description: Client-defined reference ID if set
          example: ERP-PAYTERM-NET30
        name:
          type: string
          description: Payment term name
          example: Net 30
        description:
          type:
          - string
          - 'null'
          description: Payment term description or notes
          example: Payment due 30 days from invoice date
        days:
          type:
          - integer
          - 'null'
          description: Number of days until payment is due
          example: 30
        quickPayFee:
          type:
          - number
          - 'null'
          format: float
          description: Quick pay fee percentage (e.g., 0.05 for 5%)
          example: 0.05
          x-parsed-md-description:
            result:
            - $$mdtype: Node
              errors: []
              lines:
              - 0
              - 1
              inline: false
              attributes: {}
              children:
              - $$mdtype: Node
                errors: []
                lines:
                - 0
                - 1
                inline: false
                attributes: {}
                children:
                - $$mdtype: Node
                  errors: []
                  lines:
                  - 0
                  - 1
                  inline: true
                  attributes:
                    content: Quick pay fee percentage (e.g., 0.05 for 5%)
                  children: []
                  type: text
                  annotations: []
                  slots: {}
                type: inline
                annotations: []
                slots: {}
              type: paragraph
              annotations: []
              slots: {}
        apOnly:
          type:
          - boolean
          - 'null'
          description: Whether this payment term is for accounts payable only
          example: false
        doNotUse:
          type:
          - boolean
          - 'null'
          description: Flag to prevent using this payment term for new transactions
          example: false
        createdAt:
          type: string
          format: date-time
          description: When the payment term was created
          example: '2025-01-15T10:00:00Z'
        updatedAt:
          type: string
          format: date-time
          description: When the payment term was last updated
          example: '2025-01-15T14:30:00Z'
        deletedAt:
          type:
          - string
          - 'null'
          format: date-time
          description: When the payment term was soft deleted (null if active)
          example: null
    AgingReportResponse:
      type: object
      required:
      - asOfDate
      - buckets
      - customers
      - totals
      properties:
        asOfDate:
          type: string
          format: date
        buckets:
          type: array
          items:
            type: string
          example:
          - Current
          - 1-30
          - 31-60
          - 61-90
          - 90+
        customers:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                format: uuid
              name:
                type: string
              friendlyId:
                type: string
              current:
                type: number
              days1to30:
                type: number
              days31to60:
                type: number
              days61to90:
                type: number
              over90:
                type: number
              total:
                type: number
        totals:
          type: object
          properties:
            current:
              type: number
            days1to30:
              type: number
            days31to60:
              type: number
            days61to90:
              type: number
            over90:
              type: number
            total:
              type: number
    InvoicePatch:
      type: object
      properties:
        dueDate:
          type:
          - string
          - 'null'
          format: date
        reference:
          type:
          - string
          - 'null'
        paymentTermId:
          type: string
          format: uuid
    UUIDFilter:
      type: object
      description: Filter options for UUID fields (all operations)
      properties:
        equalTo:
          type: string
          format: uuid
          description: Exact match
        notEqualTo:
          type: string
          format: uuid
          description: Not equal to
        in:
          type: array
          items:
            type: string
            format: uuid
          description: Matches any UUID in the array
        notIn:
          type: array
          items:
            type: string
            format: uuid
          description: Does not match any UUID in the array
        isNull:
          type: boolean
          description: Field is null (true) or not null (false)
    FloatFilter:
      type: object
      description: Filter options for float/number fields
      properties:
        equalTo:
          type: number
          format: float
          description: Exact match
        notEqualTo:
          type: number
          format: float
          description: Not equal to
        lessThan:
          type: number
          format: float
          description: Less than
        lessThanOrEqualTo:
          type: number
          format: float
          description: Less than or equal to
        greaterThan:
          type: number
          format: float
          description: Greater than
        greaterThanOrEqualTo:
          type: number
          format: float
          description: Greater than or equal to
        isNull:
          type: boolean
          description: Field is null (true) or not null (false)
    InvoiceStatusFilter:
      type: object
      properties:
        equalTo:
          $ref: '#/components/schemas/InvoiceStatus'
        notEqualTo:
          $ref: '#/components/schemas/InvoiceStatus'
        in:
          type: array
          items:
            $ref: '#/components/schemas/InvoiceStatus'
        notIn:
          type: array
          items:
            $ref: '#/components/schemas/InvoiceStatus'
    DatetimeFilter:
      type: object
      description: Filter options for datetime fields
      properties:
        equalTo:
          type: string
          format: date-time
          description: Exact match
        notEqualTo:
          type: string
          format: date-time
          description: Not equal to
        lessThan:
          type: string
          format: date-time
          description: Before this datetime
        lessThanOrEqualTo:
          type: string
          format: date-time
          description: On or before this datetime
        greaterThan:
          type: string
          format: date-time
          description: After this datetime
        greaterThanOrEqualTo:
          type: string
          format: date-time
          description: On or after this datetime
        isNull:
          type: boolean
          description: Field is null (true) or not null (false)
    InvoiceStatus:
      type: string
      enum:
      - DRAFT
      - AWAITING_PAYMENT
      - PARTIALLY_PAID
      - PAID
      - VOIDED
      description: 'Current status of the invoice.

        - `DRAFT`: Invoice record exists but not finalized

        - `AWAITING_PAYMENT`: Invoice finalized, awaiting payment

        - `PARTIALLY_PAID`: Some payments received, balance remains

        - `PAID`: Fully paid

        - `VOIDED`: Invoice cancelled/voided

        '
    InvoiceCredit:
      type: object
      properties:
        id:
          type: string
          format: uuid
        creditMemoId:
          type: string
          format: uuid
        creditMemoReference:
          type:
          - string
          - 'null'
        amount:
          type: number
          description: Credit amount applied
        appliedAt:
          type: string
          format: date-time
    Invoice:
      type: object
      required:
      - id
      - friendlyId
      - status
      - invoiceDate
      - amount
      - createdAt
      properties:
        id:
          type: string
          format: uuid
          example: 550e8400-e29b-41d4-a716-446655440000
        friendlyId:
          type: string
          description: Human-readable invoice ID
          example: INV-00001
        key:
          type:
          - string
          - 'null'
          description: Client-defined key
        orderId:
          type: string
          format: uuid
          description: Associated order ID
        orderKey:
          type:
          - string
          - 'null'
          description: Order friendly ID
        shipmentId:
          type: string
          format: uuid
          description: Associated shipment ID
        shipmentKey:
          type:
          - string
          - 'null'
          description: Shipment friendly ID
        customer:
          $ref: '#/components/schemas/CustomerReference'
        status:
          $ref: '#/components/schemas/InvoiceStatus'
        invoiceDate:
          type: string
          format: date
          description: Date invoice was issued
        dueDate:
          type:
          - string
          - 'null'
          format: date
          description: Payment due date
        amount:
          type: number
          description: Total invoice amount
        currency:
          type:
          - string
          - 'null'
          description: Currency code (USD, CAD)
          example: USD
        reference:
          type:
          - string
          - 'null'
          description: External reference number
        amountPaid:
          type: number
          description: Total payments received
        amountOwed:
          type: number
          description: Outstanding balance
        creditsApplied:
          type:
          - number
          - 'null'
          description: Total credits applied
        paymentTerm:
          $ref: '#/components/schemas/PaymentTermReference'
        payments:
          type: array
          items:
            $ref: '#/components/schemas/InvoicePayment'
          description: Payments applied to this invoice
        credits:
          type: array
          items:
            $ref: '#/components/schemas/InvoiceCredit'
          description: Credits applied to this invoice
        factorName:
          $ref: '#/components/schemas/FactoringProvider'
        factorJobId:
          type:
          - string
          - 'null'
          description: External factoring job ID
        factorStatus:
          type:
          - string
          - 'null'
          description: Current factoring status
        qboId:
          type:
          - string
          - 'null'
          description: QuickBooks Online invoice ID
        documentId:
          type:
          - string
          - 'null'
          format: uuid
          description: Generated invoice PDF document ID
        documentUrl:
          type:
          - string
          - 'null'
          description: Download URL for invoice PDF
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type:
          - string
          - 'null'
          format: date-time
    InvoiceInput:
      type: object
      required:
      - orderId
      - invoiceDate
      - amount
      properties:
        orderId:
          type: string
          format: uuid
          description: Order to invoice
        invoiceDate:
          type: string
          format: date
          description: Invoice date
        dueDate:
          type: string
          format: date
          description: Payment due date
        amount:
          type: number
          descri

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