Modern Treasury Counterparty API

The Counterparty API from Modern Treasury — 3 operation(s) for counterparty.

Operations 6

POST /api/counterparties/{id}/collect_account collect account details #
GET /api/counterparties list counterparties #
POST /api/counterparties create counterparty #
GET /api/counterparties/{id} show counterparty #
PATCH /api/counterparties/{id} update counterparty #
DELETE /api/counterparties/{id} delete counterparty #

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/modern-treasury-counterparty-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

modern-treasury-counterparty-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Modern Treasury AccountCapability Counterparty API
  version: v1
  contact:
    name: Modern Treasury Engineering Team
    url: https://moderntreasury.com
  description: The Modern Treasury REST API. Please see https://docs.moderntreasury.com for more details.
servers:
- url: http://localhost:3000
- url: https://app.moderntreasury.com
tags:
- name: Counterparty
paths:
  /api/counterparties/{id}/collect_account:
    post:
      summary: collect account details
      tags:
      - Counterparty
      operationId: collectAccountDetails
      description: Send an email requesting account details.
      security:
      - basic_auth: []
      parameters:
      - name: Idempotency-Key
        in: header
        required: false
        description: This key should be something unique, preferably something like an UUID.
        schema:
          type: string
      - name: id
        in: path
        schema:
          type: string
        description: counterparty id
        required: true
      responses:
        '200':
          description: successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/counterparty_collect_account_response'
        '422':
          description: unsuccessful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_message'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/counterparty_collect_account_request'
  /api/counterparties:
    get:
      summary: list counterparties
      tags:
      - Counterparty
      operationId: listCounterparties
      description: Get a paginated list of all counterparties.
      security:
      - basic_auth: []
      parameters:
      - name: after_cursor
        in: query
        schema:
          type:
          - string
          - 'null'
        required: false
      - name: per_page
        in: query
        required: false
        schema:
          type: integer
      - name: name
        in: query
        required: false
        description: Performs a partial string match of the name field. This is also case insensitive.
        schema:
          type: string
      - name: email
        in: query
        schema:
          type: string
          format: email
        required: false
        description: Performs a partial string match of the email field. This is also case insensitive.
      - name: external_id
        in: query
        schema:
          type: string
        required: false
        description: An optional user-defined 180 character unique identifier.
      - name: legal_entity_id
        in: query
        schema:
          type: string
        required: false
        description: Filters for counterparties with the given legal entity ID.
      - $ref: '#/components/parameters/metadata_query'
      - name: created_at_lower_bound
        in: query
        schema:
          type: string
          format: date-time
        required: false
        description: Used to return counterparties created after some datetime.
      - name: created_at_upper_bound
        in: query
        schema:
          type: string
          format: date-time
        required: false
        description: Used to return counterparties created before some datetime.
      responses:
        '200':
          description: successful
          headers:
            X-After-Cursor:
              schema:
                type:
                - string
                - 'null'
              required: false
              description: The cursor for the next page. Including this in a call as `after_cursor` will return the next page.
            X-Per-Page:
              schema:
                type:
                - integer
                - 'null'
              description: The current `per_page`.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/counterparty'
        '400':
          description: bad_request
        '401':
          description: unsuccessful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_message'
    post:
      summary: create counterparty
      tags:
      - Counterparty
      operationId: createCounterparty
      description: Create a new counterparty.
      security:
      - basic_auth: []
      parameters:
      - name: Idempotency-Key
        in: header
        required: false
        description: This key should be something unique, preferably something like an UUID.
        schema:
          type: string
      responses:
        '201':
          description: successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/counterparty'
        '415':
          description: unsuccessful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_message'
        '422':
          description: unsuccessful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_message'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/counterparty_create_request'
  /api/counterparties/{id}:
    parameters:
    - name: id
      in: path
      schema:
        type: string
      description: The id of an existing counterparty.
      required: true
    get:
      summary: show counterparty
      tags:
      - Counterparty
      operationId: getCounterparty
      description: Get details on a single counterparty.
      security:
      - basic_auth: []
      responses:
        '200':
          description: successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/counterparty'
        '404':
          description: not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_message'
    patch:
      summary: update counterparty
      tags:
      - Counterparty
      operationId: updateCounterparty
      description: Updates a given counterparty with new information.
      security:
      - basic_auth: []
      parameters: []
      responses:
        '200':
          description: successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/counterparty'
        '404':
          description: not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_message'
        '409':
          description: conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_message'
        '422':
          description: unsuccessful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_message'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/counterparty_update_request'
    delete:
      summary: delete counterparty
      tags:
      - Counterparty
      operationId: deleteCounterparty
      description: Deletes a given counterparty.
      security:
      - basic_auth: []
      responses:
        '204':
          description: successful
components:
  schemas:
    counterparty_create_request:
      type: object
      properties:
        name:
          type:
          - string
          - 'null'
          description: A human friendly name for this counterparty.
        accounts:
          type: array
          items:
            type: object
            properties:
              account_type:
                $ref: '#/components/schemas/external_account_type'
              party_type:
                type:
                - string
                - 'null'
                enum:
                - business
                - individual
                description: Either `individual` or `business`.
              party_address:
                $ref: '#/components/schemas/address_request'
                description: Required if receiving wire payments.
              name:
                type:
                - string
                - 'null'
                description: A nickname for the external account. This is only for internal usage and won't affect any payments
              account_details:
                type: array
                items:
                  type: object
                  properties:
                    account_number:
                      type: string
                    account_number_type:
                      type: string
                      enum:
                      - au_number
                      - base_address
                      - card_token
                      - clabe
                      - ethereum_address
                      - hk_number
                      - iban
                      - id_number
                      - nz_number
                      - other
                      - pan
                      - polygon_address
                      - sg_number
                      - solana_address
                      - wallet_address
                  required:
                  - account_number
              routing_details:
                type: array
                items:
                  type: object
                  properties:
                    routing_number:
                      type: string
                    routing_number_type:
                      type: string
                      enum:
                      - aba
                      - au_bsb
                      - br_codigo
                      - ca_cpa
                      - chips
                      - cnaps
                      - dk_interbank_clearing_code
                      - gb_sort_code
                      - hk_interbank_clearing_code
                      - hu_interbank_clearing_code
                      - id_sknbi_code
                      - il_bank_code
                      - in_ifsc
                      - jp_zengin_code
                      - my_branch_code
                      - mx_bank_identifier
                      - nz_national_clearing_code
                      - pl_national_clearing_code
                      - se_bankgiro_clearing_code
                      - sg_interbank_clearing_code
                      - swift
                      - za_national_clearing_code
                    payment_type:
                      type: string
                      enum:
                      - ach
                      - au_becs
                      - bacs
                      - book
                      - card
                      - chats
                      - check
                      - cross_border
                      - dk_nets
                      - eft
                      - gb_fps
                      - hu_ics
                      - interac
                      - masav
                      - mx_ccen
                      - neft
                      - nics
                      - nz_becs
                      - pl_elixir
                      - provxchange
                      - ro_sent
                      - rtp
                      - se_bankgirot
                      - sen
                      - sepa
                      - sg_giro
                      - sic
                      - signet
                      - sknbi
                      - stablecoin
                      - wire
                      - zengin
                  required:
                  - routing_number
                  - routing_number_type
              external_id:
                type:
                - string
                - 'null'
                description: An optional user-defined 180 character unique identifier.
              metadata:
                type: object
                additionalProperties:
                  type: string
                example:
                  key: value
                  foo: bar
                  modern: treasury
                description: Additional data represented as key-value pairs. Both the key and value must be strings.
              party_name:
                type: string
                description: If this value isn't provided, it will be inherited from the counterparty's name.
              party_identifier:
                type: string
              ledger_account:
                $ref: '#/components/schemas/ledger_account_create_request'
                description: Specifies a ledger account object that will be created with the external account. The resulting ledger account is linked to the external account for auto-ledgering Payment objects. See https://docs.moderntreasury.com/docs/linking-to-other-modern-treasury-objects for more details.
              plaid_processor_token:
                type: string
                description: If you've enabled the Modern Treasury + Plaid integration in your Plaid account, you can pass the processor token in this field.
              contact_details:
                type: array
                items:
                  $ref: '#/components/schemas/contact_detail_create_request'
          description: The accounts for this counterparty.
        email:
          type:
          - string
          - 'null'
          format: email
          description: The counterparty's email.
        legal_entity_id:
          type:
          - string
          - 'null'
          format: uuid
          description: The id of the legal entity.
        metadata:
          type: object
          additionalProperties:
            type: string
          example:
            key: value
            foo: bar
            modern: treasury
          description: Additional data represented as key-value pairs. Both the key and value must be strings.
        external_id:
          type:
          - string
          - 'null'
          description: An optional user-defined 180 character unique identifier.
        send_remittance_advice:
          type: boolean
          description: Send an email to the counterparty whenever an associated payment order is sent to the bank.
        verification_status:
          type: string
          deprecated: true
          description: The verification status of the counterparty.
        accounting:
          type: object
          deprecated: true
          properties:
            type:
              type: string
              enum:
              - customer
              - vendor
              description: An optional type to auto-sync the counterparty to your ledger. Either `customer` or `vendor`.
        ledger_type:
          type: string
          enum:
          - customer
          - vendor
          description: An optional type to auto-sync the counterparty to your ledger. Either `customer` or `vendor`.
          deprecated: true
        taxpayer_identifier:
          type: string
          description: Either a valid SSN or EIN.
        legal_entity:
          $ref: '#/components/schemas/legal_entity_create_request'
      required:
      - name
    contact_detail_create_request:
      type: object
      properties:
        contact_identifier:
          type: string
        contact_identifier_type:
          type: string
          enum:
          - email
          - phone_number
          - website
    legal_entity_industry_classification:
      type: object
      properties:
        id:
          type: string
          format: uuid
        object:
          type: string
        live_mode:
          type: boolean
          description: This field will be true if this object exists in the live environment or false if it exists in the test environment.
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
        discarded_at:
          type:
          - string
          - 'null'
          format: date-time
        classification_type:
          type: string
          enum:
          - anzsic
          - bics
          - gics
          - hsics
          - icb
          - isic
          - mgecs
          - nace
          - naics
          - rbics
          - sic
          - sni
          - trbc
          - uksic
          - unspsc
          description: The classification system of the classification codes.
        classification_codes:
          type: array
          items:
            type: string
          description: The industry classification codes for the legal entity.
      additionalProperties: false
      minProperties: 8
      required:
      - id
      - object
      - live_mode
      - created_at
      - updated_at
      - discarded_at
      - classification_type
      - classification_codes
    counterparty_collect_account_response:
      type: object
      properties:
        id:
          type: string
          description: The id of the existing counterparty.
        is_resend:
          type: boolean
          description: This field will be `true` if an email requesting account details has already been sent to this counterparty.
        form_link:
          type: string
          format: uri
          description: This is the link to the secure Modern Treasury form. By default, Modern Treasury will send an email to your counterparty that includes a link to this form. However, if `send_email` is passed as `false` in the body then Modern Treasury will not send the email and you can send it to the counterparty directly.
      additionalProperties: false
      minProperties: 3
      required:
      - id
      - is_resend
      - form_link
    address:
      type:
      - object
      - 'null'
      properties:
        id:
          type: string
          format: uuid
        object:
          type: string
        live_mode:
          type: boolean
          description: This field will be true if this object exists in the live environment or false if it exists in the test environment.
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
        line1:
          type:
          - string
          - 'null'
        line2:
          type:
          - string
          - 'null'
        locality:
          type:
          - string
          - 'null'
          description: Locality or City.
        region:
          type:
          - string
          - 'null'
          description: Region or State.
        postal_code:
          type:
          - string
          - 'null'
          description: The postal code of the address.
        country:
          type:
          - string
          - 'null'
          description: Country code conforms to [ISO 3166-1 alpha-2]
      additionalProperties: false
      minProperties: 11
      required:
      - id
      - object
      - live_mode
      - created_at
      - updated_at
      - line1
      - line2
      - locality
      - region
      - postal_code
      - country
    legal_entity_bank_setting:
      type: object
      properties:
        id:
          type: string
          format: uuid
        object:
          type: string
        live_mode:
          type: boolean
          description: This field will be true if this object exists in the live environment or false if it exists in the test environment.
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
        discarded_at:
          type:
          - string
          - 'null'
          format: date-time
        enable_backup_withholding:
          type:
          - boolean
          - 'null'
          description: Whether backup withholding is enabled. See more here - https://www.irs.gov/businesses/small-businesses-self-employed/backup-withholding.
        backup_withholding_percentage:
          type:
          - integer
          - 'null'
          description: The percentage of backup withholding to apply to the legal entity.
        privacy_opt_out:
          type:
          - boolean
          - 'null'
          description: Cross River Bank specific setting to opt out of privacy policy.
        regulation_o:
          type:
          - boolean
          - 'null'
          description: It covers, among other types of insider loans, extensions of credit by a member bank to an executive officer, director, or principal shareholder of the member bank; a bank holding company of which the member bank is a subsidiary; and any other subsidiary of that bank holding company.
      additionalProperties: false
      minProperties: 10
      required:
      - id
      - object
      - live_mode
      - created_at
      - updated_at
      - discarded_at
      - enable_backup_withholding
      - backup_withholding_percentage
      - privacy_opt_out
      - regulation_o
    address_request:
      type: object
      properties:
        line1:
          type:
          - string
          - 'null'
        line2:
          type:
          - string
          - 'null'
        locality:
          type:
          - string
          - 'null'
          description: Locality or City.
        region:
          type:
          - string
          - 'null'
          description: Region or State.
        postal_code:
          type:
          - string
          - 'null'
          description: The postal code of the address.
        country:
          type:
          - string
          - 'null'
          description: Country code conforms to [ISO 3166-1 alpha-2]
    contact_detail:
      type: object
      properties:
        id:
          type: string
          format: uuid
        object:
          type: string
        live_mode:
          type: boolean
          description: This field will be true if this object exists in the live environment or false if it exists in the test environment.
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
        discarded_at:
          type:
          - string
          - 'null'
          format: date-time
        contact_identifier:
          type: string
        contact_identifier_type:
          type: string
          enum:
          - email
          - phone_number
          - website
      additionalProperties: false
      minProperties: 8
      required:
      - id
      - object
      - live_mode
      - created_at
      - updated_at
      - discarded_at
      - contact_identifier
      - contact_identifier_type
    third_party_verification:
      type: object
      properties:
        vendor_verification_id:
          type: string
          description: The identification of the third party verification in `vendor`'s system.
        vendor:
          type: string
          enum:
          - persona
          - middesk
          - alloy
          - sumsub
          - veriff
          description: The vendor that performed the verification, e.g. `persona`.
        verification_category:
          type: string
          enum:
          - legal_name
          - date_of_birth
          - address
          - government_id_number
          - adverse_media
          description: The category of verification performed.
        verification_method:
          type: string
          description: The method used to perform the verification.
        comment:
          type:
          - string
          - 'null'
          description: An optional comment about the verification.
        outcome:
          type: string
          enum:
          - passed
          - failed
          description: The outcome of the verification. One of `passed` or `failed`.
        verification_time:
          type: string
          format: date-time
          description: The timestamp when the verification was performed.
      required:
      - vendor_verification_id
      - vendor
      - verification_category
      - verification_method
      - outcome
      - verification_time
      additionalProperties: false
    legal_entity_association_inline_create_request:
      type: object
      properties:
        relationship_types:
          type: array
          items:
            type: string
            enum:
            - authorized_signer
            - beneficial_owner
            - control_person
            description: A list of relationship types for how the child entity relates to parent entity.
        title:
          type:
          - string
          - 'null'
          description: The job title of the child entity at the parent entity.
        ownership_percentage:
          type:
          - integer
          - 'null'
          description: The child entity's ownership percentage iff they are a beneficial owner.
        child_legal_entity:
          $ref: '#/components/schemas/child_legal_entity_create'
          description: The child legal entity.
        child_legal_entity_id:
          type: string
          description: The ID of the child legal entity.
      required:
      - relationship_types
    account_detail:
      type: object
      properties:
        id:
          type: string
          format: uuid
        object:
          type: string
        live_mode:
          type: boolean
          description: This field will be true if this object exists in the live environment or false if it exists in the test environment.
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
        discarded_at:
          type:
          - string
          - 'null'
          format: date-time
        account_number:
          type: string
          description: The account number for the bank account.
        account_number_type:
          type: string
          enum:
          - au_number
          - base_address
          - card_token
          - clabe
          - ethereum_address
          - hk_number
          - iban
          - id_number
          - nz_number
          - other
          - pan
          - polygon_address
          - sg_number
          - solana_address
          - wallet_address
          description: One of `iban`, `clabe`, `wallet_address`, or `other`. Use `other` if the bank account number is in a generic format.
        account_number_safe:
          type: string
          description: The last 4 digits of the account_number.
      additionalProperties: false
      minProperties: 8
      maxProperties: 9
      required:
      - id
      - object
      - live_mode
      - created_at
      - updated_at
      - discarded_at
      - account_number_type
      - account_number_safe
    counterparty_update_request:
      type: object
      properties:
        name:
          type: string
          description: A new name for the counterparty. Will only update if passed.
        email:
          type: string
          format: email
          description: A new email for the counterparty.
        metadata:
          type: object
          additionalProperties:
            type: string
          description: Additional data in the form of key-value pairs. Pairs can be removed by passing an empty string or `null` as the value.
        send_remittance_advice:
          type: boolean
          description: If this is `true`, Modern Treasury will send an email to the counterparty whenever an associated payment order is sent to the bank.
        legal_entity_id:
          type:
          - string
          - 'null'
          format: uuid
          description: The id of the legal entity.
        taxpayer_identifier:
          type: string
          description: Either a valid SSN or EIN.
        external_id:
          type:
          - string
          - 'null'
          description: An optional user-defined 180 character unique identifier.
    identification_create_request:
      type: object
      properties:
        id_number:
          type: string
          description: The ID number of identification document.
        documents:
          type: array
          description: A list of documents to attach to the identification.
          items:
            type: object
            properties:
              document_type:
                type: string
                enum:
                - articles_of_incorporation
                - certificate_of_good_standing
                - ein_letter
                - generic
                - identification_back
                - identification_front
                - proof_of_address
                description: A category given to the document, can be `null`.
              file_data:
                type: string
                description: Base64-encoded file content for the document.
              filename:
                type: string
                description: The original filename of the document.
            required:
            - document_type
            - file_data
        id_type:
          type: string
          enum:
          - ar_cuil
          - ar_cuit
          - br_cnpj
          - br_cpf
          - ca_sin
          - cl_run
          - cl_rut
          - co_cedulas
          - co_nit
          - drivers_license
          - hn_id
          - hn_rtn
          - ie_pps
          - in_lei
          - kr_brn
          - kr_crn
          - kr_rrn
          - passport
          - sa_tin
          - sa_vat
          - us_ein
          - us_itin
          - us_ssn
          - vn_tin
          description: The type of ID number.
        expiration_date:
          type:
          - string
          - 'null'
          format: date
          description: The date when the Identification is no longer considered valid by the issuing authority.
        issuing_country:
          type:
          - string
          - 'null'
          description: The ISO 3166-1 alpha-2 country code of the country that issued the identification
        issuing_region:
          type:
          - string
          - 'null'
          description: The region in which the identifcation was issued.
      required:
      - id_number
      - id_type
    legal_entity_wealth_employment_detail:
      type: object
      properties:
        id:
          type: string
          format: uuid
        object:
          type: string
        live_mode:
          type: boolean
          description: This field will be true if this object exists in the live environment or false if it exists in the test environment.
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
        discarded_at:
          type:
          - string
          - 'null'
          format: date-time
        employment_status:
          type:
          - string
          - 'null'
          enum:
          - employed
          - retired
          - self_employed
          - student
          - unemployed
          description: The employment status of the individual.
        occupation:
          type:
          - string
          - 'null'
          enum:
          - consulting
          - executive
          - finance_accounting
          - food_services
          - government
          - healthcare
          - legal_services
          - manufacturing
          - other
          - sales
          - science_engineering
          - technology
          description: The occupation of the individual.
        industry:
          type:
          - string
          - 'null'
          enum:
          - accounting
          - agriculture
          - automotive
          - chemical_manufacturing
          - construction
          - educational_medical
          - food_service
          - finance
          - gasoline
          - health_stores
          - laundry
          - maintenance
          - manufacturing
          - merchant_wholesale
          - mining
          - performing_arts
          - professional_non_legal
          - public_administration
          - publishing
          - real_estate
          - recreation_gambling
          - religious_charity
          - rental_services
          - retail_clothing
          - retail_electronics
          - retail_food
          - retail_furnishing
          - retail_home
          - retail_non_store
          - retail_sporting
          - trans

# --- truncated at 32 KB (67 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/modern-treasury/refs/heads/main/openapi/modern-treasury-counterparty-api-openapi.yml