Opply Agreements API

The Agreements API from Opply — 10 operation(s) for agreements.

OpenAPI Specification

opply-agreements-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Opply Activity Feed Agreements API
  version: 0.0.0
tags:
- name: Agreements
paths:
  /api/v1/agreements/brand/:
    get:
      operationId: api_v1_agreements_brand_list
      description: Returns a paginated list of all agreements where the current user's company is the buyer
      summary: List all agreements for the buyer's company
      parameters:
      - in: query
        name: agreement_number
        schema:
          type: string
        description: Case-insensitive exact match on the agreement number. Used by the buyer chat ContractNumberChip to resolve UUID-by-number.
      - in: query
        name: exclude_legacy
        schema:
          type: boolean
        description: When true, exclude agreements migrated from the legacy quotes system (rows where legacy_agreement is set).
      - 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: product
        schema:
          type: string
        description: Case-insensitive substring match against any line item's product name. E.g. `?product=sugar` returns contracts with a line item whose name contains "sugar".
      - in: query
        name: status
        schema:
          type: string
          enum:
          - active
          - draft
          - expired
          - renewal
        description: 'Filter by lifecycle status derived from contract dates: `active` (within dates), `renewal` (within dates and ending within 90 days), `expired` (end date in the past), `draft` (start date in the future).'
      - in: query
        name: supplier_company_uuid
        schema:
          type: string
        description: Filter to a specific supplier by their company UUID.
      tags:
      - Agreements
      security:
      - tokenAuth: []
      - cookieAuth: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedBuyerAgreementListList'
          description: ''
        '401':
          description: Authentication credentials were not provided or are invalid
        '403':
          description: User is not authorized to view these agreements
  /api/v1/agreements/brand/{uuid}/:
    get:
      operationId: api_v1_agreements_brand_retrieve
      description: Returns detailed information about a specific agreement
      summary: Retrieve a specific agreement
      parameters:
      - in: path
        name: uuid
        schema:
          type: string
        required: true
      tags:
      - Agreements
      security:
      - tokenAuth: []
      - cookieAuth: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BuyerAgreementDetails'
          description: ''
        '401':
          description: Authentication credentials were not provided or are invalid
        '403':
          description: User is not authorized to view this agreement
        '404':
          description: Agreement not found
  /api/v1/agreements/brand/{uuid}/place-order/:
    post:
      operationId: api_v1_agreements_brand_place_order_create
      description: Creates a new order based on the agreement with specified delivery details and line items.
      summary: Place an order from an agreement
      parameters:
      - in: path
        name: uuid
        schema:
          type: string
        required: true
      tags:
      - Agreements
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AgreementOrderCreate'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/AgreementOrderCreate'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/AgreementOrderCreate'
        required: true
      security:
      - tokenAuth: []
      - cookieAuth: []
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AgreementOrderResponse'
          description: ''
        '400':
          description: Invalid request data
        '404':
          description: Agreement or delivery address not found
  /api/v1/agreements/brand/aggregate/:
    get:
      operationId: api_v1_agreements_brand_aggregate_retrieve
      description: Returns a per-currency aggregate (sum / avg / min / max) of `total_in_buyer_currency` over the filtered agreements, computed in full-precision Decimal micro-units and rounded to integer cents once per currency. The per-agreement value matches what the list endpoint surfaces today — line-item totals computed at each agreement's per-order quantity (`AgreementLineItem.quantity` = `total_quantity_agreed / estimated_number_of_orders`) plus shipping and tax. Use this for cross-agreement sum/total/average questions so the answer isn't biased by the per-row rounding the list endpoint applies (SC-3627). Filters mirror the `list` endpoint exactly. Alternatively pass `agreement_uuids` (repeated query param) to aggregate over an explicit set of agreement UUIDs — 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 agreement totals across the filtered set in full precision
      parameters:
      - in: query
        name: agreement_number
        schema:
          type: string
        description: Exact (case-insensitive) contract number match.
      - in: query
        name: agreement_uuids
        schema:
          type: array
          items:
            type: string
            format: uuid
        description: Optional explicit set of agreement UUIDs to aggregate. Pass as a repeated query param (`?agreement_uuids=<uuid>&agreement_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: exclude_legacy
        schema:
          type: boolean
        description: When true, omit legacy-migrated agreements.
      - 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: operation
        schema:
          type: string
          enum:
          - avg
          - max
          - min
          - sum
        description: 'Aggregation operation. One of: sum, avg, min, max.'
        required: true
      - in: query
        name: product
        schema:
          type: string
        description: Substring match on any line item's product name.
      - in: query
        name: status
        schema:
          type: string
          enum:
          - active
          - draft
          - expired
          - renewal
        description: Lifecycle bucket from contract dates.
      - in: query
        name: supplier_company_uuid
        schema:
          type: string
          format: uuid
        description: Supplier company 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 (relational key alias).
      tags:
      - Agreements
      security:
      - tokenAuth: []
      - cookieAuth: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BuyerAgreementAggregateResult'
          description: ''
        '400':
          description: Invalid `operation`, `field`, or `agreement_uuids` query param.
        '403':
          description: One or more `agreement_uuids` are not in the caller's scope.
  /api/v1/agreements/merchant-of-record/:
    get:
      operationId: api_v1_agreements_merchant_of_record_list
      description: Returns a paginated list of all agreements where the current user's company is the merchant of record. Supports search by agreement_number, buyer_company name, or supplier_company name; buyer/supplier/date_after/date_before/active filters; and ordering by contract_start_date or contract_end_date.
      summary: List all agreements for the merchant of record company
      parameters:
      - in: query
        name: active
        schema:
          type: boolean
      - in: query
        name: buyer
        schema:
          type: string
          format: uuid
      - in: query
        name: date_after
        schema:
          type: string
          format: date
      - in: query
        name: date_before
        schema:
          type: string
          format: date
      - name: ordering
        required: false
        in: query
        description: Which field to use when ordering the results.
        schema:
          type: string
      - 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: product
        schema:
          type: string
      - name: search
        required: false
        in: query
        description: A search term.
        schema:
          type: string
      - in: query
        name: status
        schema:
          type: string
          enum:
          - active
          - draft
          - expired
          - renewal
        description: '* `active` - Active

          * `renewal` - Renewal

          * `expired` - Expired

          * `draft` - Draft'
      - in: query
        name: supplier
        schema:
          type: string
          format: uuid
      tags:
      - Agreements
      security:
      - tokenAuth: []
      - cookieAuth: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedMerchantOfRecordAgreementListList'
          description: ''
        '401':
          description: Authentication credentials were not provided or are invalid
        '403':
          description: User is not authorized to view these agreements
    post:
      operationId: api_v1_agreements_merchant_of_record_create
      description: Creates a new agreement as merchant of record. The buyer currency is always set to GBP.
      summary: Create a new agreement
      tags:
      - Agreements
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MerchantOfRecordAgreementCreate'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/MerchantOfRecordAgreementCreate'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/MerchantOfRecordAgreementCreate'
        required: true
      security:
      - tokenAuth: []
      - cookieAuth: []
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MerchantOfRecordAgreementDetails'
          description: ''
        '400':
          description: Validation error
  /api/v1/agreements/merchant-of-record/{uuid}/:
    get:
      operationId: api_v1_agreements_merchant_of_record_retrieve
      description: Returns detailed information about a specific agreement
      summary: Retrieve a specific agreement
      parameters:
      - in: path
        name: uuid
        schema:
          type: string
          format: uuid
        required: true
      tags:
      - Agreements
      security:
      - tokenAuth: []
      - cookieAuth: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MerchantOfRecordAgreementDetails'
          description: ''
        '401':
          description: Authentication credentials were not provided or are invalid
        '403':
          description: User is not authorized to view this agreement
        '404':
          description: Agreement not found
    put:
      operationId: api_v1_agreements_merchant_of_record_update
      summary: Merchant of Record endpoints for Agreements
      parameters:
      - in: path
        name: uuid
        schema:
          type: string
          format: uuid
        required: true
      tags:
      - Agreements
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MerchantOfRecordAgreementList'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/MerchantOfRecordAgreementList'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/MerchantOfRecordAgreementList'
        required: true
      security:
      - tokenAuth: []
      - cookieAuth: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MerchantOfRecordAgreementList'
          description: ''
    patch:
      operationId: api_v1_agreements_merchant_of_record_partial_update
      summary: Merchant of Record endpoints for Agreements
      parameters:
      - in: path
        name: uuid
        schema:
          type: string
          format: uuid
        required: true
      tags:
      - Agreements
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchedMerchantOfRecordAgreementList'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/PatchedMerchantOfRecordAgreementList'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/PatchedMerchantOfRecordAgreementList'
      security:
      - tokenAuth: []
      - cookieAuth: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MerchantOfRecordAgreementList'
          description: ''
    delete:
      operationId: api_v1_agreements_merchant_of_record_destroy
      summary: Merchant of Record endpoints for Agreements
      parameters:
      - in: path
        name: uuid
        schema:
          type: string
          format: uuid
        required: true
      tags:
      - Agreements
      security:
      - tokenAuth: []
      - cookieAuth: []
      responses:
        '204':
          description: No response body
  /api/v1/agreements/merchant-of-record/{uuid}/line-item/{line_item_uuid}/documents/:
    post:
      operationId: api_v1_agreements_merchant_of_record_line_item_documents_create
      description: Uploads a document (spec sheet or signed agreement) for a specific line item
      summary: Upload a document for an agreement line item
      parameters:
      - in: path
        name: line_item_uuid
        schema:
          type: string
        required: true
      - in: path
        name: uuid
        schema:
          type: string
          format: uuid
        required: true
      tags:
      - Agreements
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AgreementLineItemDocumentUpload'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/AgreementLineItemDocumentUpload'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/AgreementLineItemDocumentUpload'
        required: true
      security:
      - tokenAuth: []
      - cookieAuth: []
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AgreementLineItemDocument'
          description: ''
        '400':
          description: Validation error
        '403':
          description: User is not authorized to upload documents for this line item
        '404':
          description: Line item not found
  /api/v1/agreements/merchant-of-record/{uuid}/line-item/{line_item_uuid}/documents/{document_uuid}/:
    delete:
      operationId: api_v1_agreements_merchant_of_record_line_item_documents_destroy
      description: Deletes a document (spec sheet or signed agreement) for a specific line item
      summary: Delete a document for an agreement line item
      parameters:
      - in: path
        name: document_uuid
        schema:
          type: string
        required: true
      - in: path
        name: line_item_uuid
        schema:
          type: string
        required: true
      - in: path
        name: uuid
        schema:
          type: string
          format: uuid
        required: true
      tags:
      - Agreements
      security:
      - tokenAuth: []
      - cookieAuth: []
      responses:
        '204':
          description: Document deleted successfully
        '400':
          description: Validation error
        '403':
          description: User is not authorized to delete documents for this line item
        '404':
          description: Document not found
  /api/v1/agreements/merchant-of-record/{uuid}/orders/:
    get:
      operationId: api_v1_agreements_merchant_of_record_orders_list
      description: Returns the orders linked to this agreement (tenant-scoped to the MoR), newest first — powers the contract detail's Linked Orders table.
      summary: List orders placed against this agreement
      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:
      - Agreements
      security:
      - tokenAuth: []
      - cookieAuth: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedMerchantOfRecordAgreementLinkedOrderList'
          description: ''
        '401':
          description: Authentication credentials were not provided or are invalid
        '404':
          description: Agreement not found
  /api/v1/agreements/merchant-of-record/{uuid}/place-order/:
    post:
      operationId: api_v1_agreements_merchant_of_record_place_order_create
      description: 'Creates a new order from the contract on behalf of the buyer. Mirrors the buyer self-service flow: quantities + delivery date/address are supplied; prices, currencies, terms, shipping/fees and product details are derived from the contract. The buyer contact the order is placed for is given via `ordered_by_uuid`.'
      summary: Place an order from a contract (agreement)
      parameters:
      - in: path
        name: uuid
        schema:
          type: string
          format: uuid
        required: true
      tags:
      - Agreements
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MerchantOfRecordAgreementOrderCreate'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/MerchantOfRecordAgreementOrderCreate'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/MerchantOfRecordAgreementOrderCreate'
        required: true
      security:
      - tokenAuth: []
      - cookieAuth: []
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MerchantOfRecordAgreementOrderResponse'
          description: ''
        '400':
          description: Invalid request data
        '404':
          description: Contract or delivery address not found
components:
  schemas:
    LifecycleStateEnum:
      enum:
      - initializing
      - confirmed
      - canceled
      - pending_merchant_of_record_approval
      - order_received
      - order_sent_to_supplier
      - order_confirming_price
      - forecasted
      type: string
      description: '* `initializing` - Initializing

        * `confirmed` - Confirmed

        * `canceled` - Cancelled

        * `pending_merchant_of_record_approval` - Pending Merchant of Record Approval

        * `order_received` - Order Received

        * `order_sent_to_supplier` - Order Sent To Supplier

        * `order_confirming_price` - Order Confirming Price

        * `forecasted` - Forecasted'
    Country:
      enum:
      - AF
      - AX
      - AL
      - DZ
      - AS
      - AD
      - AO
      - AI
      - AQ
      - AG
      - AR
      - AM
      - AW
      - AU
      - AT
      - AZ
      - BS
      - BH
      - BD
      - BB
      - BY
      - BE
      - BZ
      - BJ
      - BM
      - BT
      - BO
      - BQ
      - BA
      - BW
      - BV
      - BR
      - IO
      - BN
      - BG
      - BF
      - BI
      - CV
      - KH
      - CM
      - CA
      - KY
      - CF
      - TD
      - CL
      - CN
      - CX
      - CC
      - CO
      - KM
      - CG
      - CD
      - CK
      - CR
      - CI
      - HR
      - CU
      - CW
      - CY
      - CZ
      - DK
      - DJ
      - DM
      - DO
      - EC
      - EG
      - SV
      - GQ
      - ER
      - EE
      - SZ
      - ET
      - FK
      - FO
      - FJ
      - FI
      - FR
      - GF
      - PF
      - TF
      - GA
      - GM
      - GE
      - DE
      - GH
      - GI
      - GR
      - GL
      - GD
      - GP
      - GU
      - GT
      - GG
      - GN
      - GW
      - GY
      - HT
      - HM
      - VA
      - HN
      - HK
      - HU
      - IS
      - IN
      - ID
      - IR
      - IQ
      - IE
      - IM
      - IL
      - IT
      - JM
      - JP
      - JE
      - JO
      - KZ
      - KE
      - KI
      - KW
      - KG
      - LA
      - LV
      - LB
      - LS
      - LR
      - LY
      - LI
      - LT
      - LU
      - MO
      - MG
      - MW
      - MY
      - MV
      - ML
      - MT
      - MH
      - MQ
      - MR
      - MU
      - YT
      - MX
      - FM
      - MD
      - MC
      - MN
      - ME
      - MS
      - MA
      - MZ
      - MM
      - NA
      - NR
      - NP
      - NL
      - NC
      - NZ
      - NI
      - NE
      - NG
      - NU
      - NF
      - KP
      - MK
      - XI
      - MP
      - 'NO'
      - OM
      - PK
      - PW
      - PS
      - PA
      - PG
      - PY
      - PE
      - PH
      - PN
      - PL
      - PT
      - PR
      - QA
      - RE
      - RO
      - RU
      - RW
      - BL
      - SH
      - KN
      - LC
      - MF
      - PM
      - VC
      - WS
      - SM
      - ST
      - SA
      - SN
      - RS
      - SC
      - SL
      - SG
      - SX
      - SK
      - SI
      - SB
      - SO
      - ZA
      - GS
      - KR
      - SS
      - ES
      - LK
      - SD
      - SR
      - SJ
      - SE
      - CH
      - SY
      - TW
      - TJ
      - TZ
      - TH
      - TL
      - TG
      - TK
      - TO
      - TT
      - TN
      - TR
      - TM
      - TC
      - TV
      - UG
      - UA
      - AE
      - GB
      - UM
      - US
      - UY
      - UZ
      - VU
      - VE
      - VN
      - VG
      - VI
      - WF
      - EH
      - YE
      - ZM
      - ZW
      type: string
      description: '* `AF` - Afghanistan

        * `AX` - Åland Islands

        * `AL` - Albania

        * `DZ` - Algeria

        * `AS` - American Samoa

        * `AD` - Andorra

        * `AO` - Angola

        * `AI` - Anguilla

        * `AQ` - Antarctica

        * `AG` - Antigua and Barbuda

        * `AR` - Argentina

        * `AM` - Armenia

        * `AW` - Aruba

        * `AU` - Australia

        * `AT` - Austria

        * `AZ` - Azerbaijan

        * `BS` - Bahamas

        * `BH` - Bahrain

        * `BD` - Bangladesh

        * `BB` - Barbados

        * `BY` - Belarus

        * `BE` - Belgium

        * `BZ` - Belize

        * `BJ` - Benin

        * `BM` - Bermuda

        * `BT` - Bhutan

        * `BO` - Bolivia

        * `BQ` - Bonaire, Sint Eustatius and Saba

        * `BA` - Bosnia and Herzegovina

        * `BW` - Botswana

        * `BV` - Bouvet Island

        * `BR` - Brazil

        * `IO` - British Indian Ocean Territory

        * `BN` - Brunei

        * `BG` - Bulgaria

        * `BF` - Burkina Faso

        * `BI` - Burundi

        * `CV` - Cabo Verde

        * `KH` - Cambodia

        * `CM` - Cameroon

        * `CA` - Canada

        * `KY` - Cayman Islands

        * `CF` - Central African Republic

        * `TD` - Chad

        * `CL` - Chile

        * `CN` - China

        * `CX` - Christmas Island

        * `CC` - Cocos (Keeling) Islands

        * `CO` - Colombia

        * `KM` - Comoros

        * `CG` - Congo

        * `CD` - Congo (the Democratic Republic of the)

        * `CK` - Cook Islands

        * `CR` - Costa Rica

        * `CI` - Côte d''Ivoire

        * `HR` - Croatia

        * `CU` - Cuba

        * `CW` - Curaçao

        * `CY` - Cyprus

        * `CZ` - Czechia

        * `DK` - Denmark

        * `DJ` - Djibouti

        * `DM` - Dominica

        * `DO` - Dominican Republic

        * `EC` - Ecuador

        * `EG` - Egypt

        * `SV` - El Salvador

        * `GQ` - Equatorial Guinea

        * `ER` - Eritrea

        * `EE` - Estonia

        * `SZ` - Eswatini

        * `ET` - Ethiopia

        * `FK` - Falkland Islands (Malvinas)

        * `FO` - Faroe Islands

        * `FJ` - Fiji

        * `FI` - Finland

        * `FR` - France

        * `GF` - French Guiana

        * `PF` - French Polynesia

        * `TF` - French Southern Territories

        * `GA` - Gabon

        * `GM` - Gambia

        * `GE` - Georgia

        * `DE` - Germany

        * `GH` - Ghana

        * `GI` - Gibraltar

        * `GR` - Greece

        * `GL` - Greenland

        * `GD` - Grenada

        * `GP` - Guadeloupe

        * `GU` - Guam

        * `GT` - Guatemala

        * `GG` - Guernsey

        * `GN` - Guinea

        * `GW` - Guinea-Bissau

        * `GY` - Guyana

        * `HT` - Haiti

        * `HM` - Heard Island and McDonald Islands

        * `VA` - Holy See

        * `HN` - Honduras

        * `HK` - Hong Kong

        * `HU` - Hungary

        * `IS` - Iceland

        * `IN` - India

        * `ID` - Indonesia

        * `IR` - Iran

        * `IQ` - Iraq

        * `IE` - Ireland

        * `IM` - Isle of Man

        * `IL` - Israel

        * `IT` - Italy

        * `JM` - Jamaica

        * `JP` - Japan

        * `JE` - Jersey

        * `JO` - Jordan

        * `KZ` - Kazakhstan

        * `KE` - Kenya

        * `KI` - Kiribati

        * `KW` - Kuwait

        * `KG` - Kyrgyzstan

        * `LA` - Laos

        * `LV` - Latvia

        * `LB` - Lebanon

        * `LS` - Lesotho

        * `LR` - Liberia

        * `LY` - Libya

        * `LI` - Liechtenstein

        * `LT` - Lithuania

        * `LU` - Luxembourg

        * `MO` - Macao

        * `MG` - Madagascar

        * `MW` - Malawi

        * `MY` - Malaysia

        * `MV` - Maldives

        * `ML` - Mali

        * `MT` - Malta

        * `MH` - Marshall Islands

        * `MQ` - Martinique

        * `MR` - Mauritania

        * `MU` - Mauritius

        * `YT` - Mayotte

        * `MX` - Mexico

        * `FM` - Micronesia

        * `MD` - Moldova

        * `MC` - Monaco

        * `MN` - Mongolia

        * `ME` - Montenegro

        * `MS` - Montserrat

        * `MA` - Morocco

        * `MZ` - Mozambique

        * `MM` - Myanmar

        * `NA` - Namibia

        * `NR` - Nauru

        * `NP` - Nepal

        * `NL` - Netherlands

        * `NC` - New Caledonia

        * `NZ` - New Zealand

        * `NI` - Nicaragua

        * `NE` - Niger

        * `NG` - Nigeria

        * `NU` - Niue

        * `NF` - Norfolk Island

        * `KP` - North Korea

        * `MK` - North Macedonia

        * `XI` - Northern Ireland

        * `MP` - Northern Mariana Islands

        * `NO` - Norway

        * `OM` - Oman

        * `PK` - Pakistan

        * `PW` - Palau

        * `PS` - Palestine, State of

        * `PA` - Panama

        * `PG` - Papua New Guinea

        * `PY` - Paraguay

        * `PE` - Peru

        * `PH` - Philippines

        * `PN` - Pitcairn

        * `PL` - Poland

        * `PT` - Portugal

        * `PR` - Puerto Rico

        * `QA` - Qatar

        * `RE` - Réunion

        * `RO` - Romania

        * `RU` - Russia

        * `RW` - Rwanda

        * `BL` - Saint Barthélemy

        * `SH` - Saint Helena, Ascension and Tristan da Cunha

        * `KN` - Saint Kitts and Nevis

        * `LC` - Saint Lucia

        * `MF` - Saint Martin (French part)

        * `PM` - Saint Pierre and Miquelon

        * `VC` - Saint Vincent and the Grenadines

        * `WS` - Samoa

        * `SM` - San Marino

        * `ST` - Sao Tome and Principe

        * `SA` - Saudi Arabia

        * `SN` - Senegal

        * `RS` - Serbia

        * `SC` - Seychelles

        * `SL` - Sierra Leone

        * `SG` - Singapore

        * `SX` - Sint Maarten (Dutch part)

        * `SK` - Slovakia

        * `SI` - Slovenia

        * `SB` - Solomon Islands

        * `SO` - Somalia

        * `ZA` - South Africa

        * `GS` - South Georgia and the South Sandwich Islands

        * `KR` - South Korea

        * `SS` - South Sudan

        * `ES` - Spain

        * `LK` - Sri Lanka

        * `SD` - Sudan

        * `SR` - Suriname

        * `SJ` - Svalbard and Jan Mayen

        * `SE` - Sweden

        * `CH` - Switzerland

        * `SY` - Syria

        * `TW` - Taiwan

        * `TJ` - Tajikistan

        * `TZ` - Tanzania

        * `TH` - Thailand

        * `TL` - Timor-Leste

        * `TG` - Togo

        * `TK` - Tokelau

        * `TO` - Tonga

        * `TT` - Trinidad and Tobago

        * `TN` - Tunisia

        * `TR` - Türkiye

        * `TM` - Turkmenistan

        * `TC` - Turks and Caicos Islands

        * `TV` - Tuvalu

        * `UG` - Uganda

        * `UA` - Ukraine

        * `AE` - United Arab Emirates

        * `GB` - United Kingdom

        * `UM` - United States Minor Outlying Islands

        * `US` - United States of America

        * `UY` - Uruguay

        * `UZ` - Uzbekistan

        * `VU` - Vanuatu

        * `VE` - Venezuela

        * `VN` - Vietnam

        * `VG` - Virgin Islands (British)

        * `VI` - Virgin Islands (U.S.)

        * `WF` - Wallis and Futuna

        * `EH` - Western Sahara

        * `YE` - Yemen

        * `ZM` - Zambia

        * `ZW` - Zimbabwe'
    PaginatedBuyerAgreementListList:
      type: object
      required:
      - count
      - results
      properties:
        count:
          type: integer
          example: 123
        next:
          type: string
          nullable: true
          format: uri
          example: http://api.example.org/accounts/?page=4
        previous:
          type: string
          nullable: true
          format: uri
          example: http://api.example.org/accounts/?page=2
        results:
          type: array
          items:
            $ref: '#/components/schemas/BuyerAgreementList'
    PaginatedMerchantOfRecordAgreementLinkedOrderList:
      type: object
      required:
      - count
      - results
      properties:
        count:
          type: integer
          example: 123
        next:
          type: string
          nullable: true
          format: uri
          example: http://api.example.org/accounts/?page=4
        previous:
          type: string
          nullable: true
          format: uri
          example: http://api.example.org/accounts/?page=2
        results:
          type

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