From 8886cc832ca4d77de1f8bb6fba89f7d0d01efffb Mon Sep 17 00:00:00 2001 From: shreyav Date: Thu, 13 Aug 2026 21:09:19 +0000 Subject: [PATCH 1/2] feat: add VASP directory endpoint --- .stainless/stainless.yml | 7 ++ mintlify/openapi.yaml | 95 +++++++++++++++++++ mintlify/style.css | 6 ++ openapi.yaml | 95 +++++++++++++++++++ openapi/components/schemas/vasps/Vasp.yaml | 18 ++++ .../schemas/vasps/VaspListResponse.yaml | 21 ++++ openapi/openapi.yaml | 6 ++ openapi/paths/vasps/vasps.yaml | 59 ++++++++++++ 8 files changed, 307 insertions(+) create mode 100644 openapi/components/schemas/vasps/Vasp.yaml create mode 100644 openapi/components/schemas/vasps/VaspListResponse.yaml create mode 100644 openapi/paths/vasps/vasps.yaml diff --git a/.stainless/stainless.yml b/.stainless/stainless.yml index 49100e04..dee2b01d 100644 --- a/.stainless/stainless.yml +++ b/.stainless/stainless.yml @@ -397,6 +397,13 @@ resources: methods: list: get /uma-providers + vasps: + models: + vasp: '#/components/schemas/Vasp' + vasp_list_response: '#/components/schemas/VaspListResponse' + methods: + list: get /vasps + tokens: models: permission: '#/components/schemas/Permission' diff --git a/mintlify/openapi.yaml b/mintlify/openapi.yaml index 6e4523f1..a005d318 100644 --- a/mintlify/openapi.yaml +++ b/mintlify/openapi.yaml @@ -33,6 +33,8 @@ tags: description: Internal account management endpoints for creating and managing internal accounts - name: External Accounts description: External account management endpoints for creating and managing external bank accounts + - name: VASPs + description: Directory of Virtual Asset Service Providers (exchanges and other custodial platforms) recognized for counterparty declarations. - name: Same-Currency Transfers description: Endpoints for transferring funds between internal and external accounts with the same currency - name: Cross-Currency Transfers @@ -5136,6 +5138,64 @@ paths: application/json: schema: $ref: '#/components/schemas/Error500' + /vasps: + get: + summary: List VASPs + description: | + Retrieve the directory of Virtual Asset Service Providers (exchanges and other custodial platforms) recognized for counterparty declarations. Search by name to find the VASP that custodies a counterparty account. + operationId: listVasps + tags: + - VASPs + security: + - BasicAuth: [] + parameters: + - name: search + in: query + description: Filter to VASPs whose name matches this string + required: false + schema: + type: string + example: kraken + - name: limit + in: query + description: Maximum number of results to return (default 20, max 100) + required: false + schema: + type: integer + minimum: 1 + maximum: 100 + default: 20 + - name: cursor + in: query + description: Cursor for pagination (returned from previous request) + required: false + schema: + type: string + responses: + '200': + description: Successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/VaspListResponse' + '400': + description: Bad request - Invalid parameters + content: + application/json: + schema: + $ref: '#/components/schemas/Error400' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error401' + '500': + description: Internal service error + content: + application/json: + schema: + $ref: '#/components/schemas/Error500' /tokens: post: summary: Create a new API token @@ -22395,6 +22455,41 @@ components: totalCount: type: integer description: Total number of transactions matching the criteria (excluding pagination) + Vasp: + type: object + required: + - id + - name + properties: + id: + type: string + description: Stable identifier for this VASP. Pass it as `vaspId` when declaring a VASP-hosted counterparty. + example: Vasp:019542f5-b3e7-1d02-0000-000000000001 + name: + type: string + description: Display name of the VASP + example: Kraken + description: A Virtual Asset Service Provider (VASP) — an exchange or other custodial platform — recognized for counterparty declarations. + VaspListResponse: + type: object + required: + - data + - hasMore + properties: + data: + type: array + description: List of VASPs matching the filter criteria + items: + $ref: '#/components/schemas/Vasp' + hasMore: + type: boolean + description: Indicates if more results are available beyond this page + nextCursor: + type: string + description: Cursor to retrieve the next page of results (only present if hasMore is true) + totalCount: + type: integer + description: Total number of results matching the criteria Permission: type: string enum: diff --git a/mintlify/style.css b/mintlify/style.css index 0131dfb6..74e0f4b5 100644 --- a/mintlify/style.css +++ b/mintlify/style.css @@ -1372,6 +1372,12 @@ ul.sidebar-group > li[data-title="Available UMA Providers"] > button::before { background-image: url('/images/icons/at.svg') !important; } +/* VASPs - globe */ +.sidebar-group > li[data-title="VASPs"] > button::before, +ul.sidebar-group > li[data-title="VASPs"] > button::before { + background-image: url('/images/icons/globe.svg') !important; +} + /* API Tokens - key */ .sidebar-group > li[data-title="API Tokens"] > button::before, ul.sidebar-group > li[data-title="API Tokens"] > button::before { diff --git a/openapi.yaml b/openapi.yaml index 6e4523f1..a005d318 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -33,6 +33,8 @@ tags: description: Internal account management endpoints for creating and managing internal accounts - name: External Accounts description: External account management endpoints for creating and managing external bank accounts + - name: VASPs + description: Directory of Virtual Asset Service Providers (exchanges and other custodial platforms) recognized for counterparty declarations. - name: Same-Currency Transfers description: Endpoints for transferring funds between internal and external accounts with the same currency - name: Cross-Currency Transfers @@ -5136,6 +5138,64 @@ paths: application/json: schema: $ref: '#/components/schemas/Error500' + /vasps: + get: + summary: List VASPs + description: | + Retrieve the directory of Virtual Asset Service Providers (exchanges and other custodial platforms) recognized for counterparty declarations. Search by name to find the VASP that custodies a counterparty account. + operationId: listVasps + tags: + - VASPs + security: + - BasicAuth: [] + parameters: + - name: search + in: query + description: Filter to VASPs whose name matches this string + required: false + schema: + type: string + example: kraken + - name: limit + in: query + description: Maximum number of results to return (default 20, max 100) + required: false + schema: + type: integer + minimum: 1 + maximum: 100 + default: 20 + - name: cursor + in: query + description: Cursor for pagination (returned from previous request) + required: false + schema: + type: string + responses: + '200': + description: Successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/VaspListResponse' + '400': + description: Bad request - Invalid parameters + content: + application/json: + schema: + $ref: '#/components/schemas/Error400' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error401' + '500': + description: Internal service error + content: + application/json: + schema: + $ref: '#/components/schemas/Error500' /tokens: post: summary: Create a new API token @@ -22395,6 +22455,41 @@ components: totalCount: type: integer description: Total number of transactions matching the criteria (excluding pagination) + Vasp: + type: object + required: + - id + - name + properties: + id: + type: string + description: Stable identifier for this VASP. Pass it as `vaspId` when declaring a VASP-hosted counterparty. + example: Vasp:019542f5-b3e7-1d02-0000-000000000001 + name: + type: string + description: Display name of the VASP + example: Kraken + description: A Virtual Asset Service Provider (VASP) — an exchange or other custodial platform — recognized for counterparty declarations. + VaspListResponse: + type: object + required: + - data + - hasMore + properties: + data: + type: array + description: List of VASPs matching the filter criteria + items: + $ref: '#/components/schemas/Vasp' + hasMore: + type: boolean + description: Indicates if more results are available beyond this page + nextCursor: + type: string + description: Cursor to retrieve the next page of results (only present if hasMore is true) + totalCount: + type: integer + description: Total number of results matching the criteria Permission: type: string enum: diff --git a/openapi/components/schemas/vasps/Vasp.yaml b/openapi/components/schemas/vasps/Vasp.yaml new file mode 100644 index 00000000..34f430d6 --- /dev/null +++ b/openapi/components/schemas/vasps/Vasp.yaml @@ -0,0 +1,18 @@ +type: object +required: + - id + - name +properties: + id: + type: string + description: >- + Stable identifier for this VASP. Pass it as `vaspId` when declaring a + VASP-hosted counterparty. + example: Vasp:019542f5-b3e7-1d02-0000-000000000001 + name: + type: string + description: Display name of the VASP + example: Kraken +description: >- + A Virtual Asset Service Provider (VASP) — an exchange or other custodial + platform — recognized for counterparty declarations. diff --git a/openapi/components/schemas/vasps/VaspListResponse.yaml b/openapi/components/schemas/vasps/VaspListResponse.yaml new file mode 100644 index 00000000..7ee8c214 --- /dev/null +++ b/openapi/components/schemas/vasps/VaspListResponse.yaml @@ -0,0 +1,21 @@ +type: object +required: + - data + - hasMore +properties: + data: + type: array + description: List of VASPs matching the filter criteria + items: + $ref: ./Vasp.yaml + hasMore: + type: boolean + description: Indicates if more results are available beyond this page + nextCursor: + type: string + description: >- + Cursor to retrieve the next page of results (only present if + hasMore is true) + totalCount: + type: integer + description: Total number of results matching the criteria diff --git a/openapi/openapi.yaml b/openapi/openapi.yaml index b6143351..2692ecc6 100644 --- a/openapi/openapi.yaml +++ b/openapi/openapi.yaml @@ -40,6 +40,10 @@ tags: description: Internal account management endpoints for creating and managing internal accounts - name: External Accounts description: External account management endpoints for creating and managing external bank accounts + - name: VASPs + description: >- + Directory of Virtual Asset Service Providers (exchanges and other + custodial platforms) recognized for counterparty declarations. - name: Same-Currency Transfers description: Endpoints for transferring funds between internal and external accounts with the same currency - name: Cross-Currency Transfers @@ -259,6 +263,8 @@ paths: $ref: paths/sandbox/sandbox_internal_accounts_{accountId}_fund.yaml /uma-providers: $ref: paths/uma_providers/uma_providers.yaml + /vasps: + $ref: paths/vasps/vasps.yaml /tokens: $ref: paths/tokens/tokens.yaml /tokens/{tokenId}: diff --git a/openapi/paths/vasps/vasps.yaml b/openapi/paths/vasps/vasps.yaml new file mode 100644 index 00000000..5afcd9f2 --- /dev/null +++ b/openapi/paths/vasps/vasps.yaml @@ -0,0 +1,59 @@ +get: + summary: List VASPs + description: > + Retrieve the directory of Virtual Asset Service Providers (exchanges and + other custodial platforms) recognized for counterparty declarations. + Search by name to find the VASP that custodies a counterparty account. + operationId: listVasps + tags: + - VASPs + security: + - BasicAuth: [] + parameters: + - name: search + in: query + description: Filter to VASPs whose name matches this string + required: false + schema: + type: string + example: kraken + - name: limit + in: query + description: Maximum number of results to return (default 20, max 100) + required: false + schema: + type: integer + minimum: 1 + maximum: 100 + default: 20 + - name: cursor + in: query + description: Cursor for pagination (returned from previous request) + required: false + schema: + type: string + responses: + '200': + description: Successful operation + content: + application/json: + schema: + $ref: ../../components/schemas/vasps/VaspListResponse.yaml + '400': + description: Bad request - Invalid parameters + content: + application/json: + schema: + $ref: ../../components/schemas/errors/Error400.yaml + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: ../../components/schemas/errors/Error401.yaml + '500': + description: Internal service error + content: + application/json: + schema: + $ref: ../../components/schemas/errors/Error500.yaml From e26f0476a8ac509481dc635e6114fd77a1533645 Mon Sep 17 00:00:00 2001 From: shreyav Date: Thu, 13 Aug 2026 21:36:24 +0000 Subject: [PATCH 2/2] Identify VASPs by canonical name, matching the discovery pattern --- mintlify/openapi.yaml | 21 +++++++++++++-------- openapi.yaml | 21 +++++++++++++-------- openapi/components/schemas/vasps/Vasp.yaml | 16 ++++++++-------- openapi/paths/vasps/vasps.yaml | 5 ++++- 4 files changed, 38 insertions(+), 25 deletions(-) diff --git a/mintlify/openapi.yaml b/mintlify/openapi.yaml index a005d318..0c60f619 100644 --- a/mintlify/openapi.yaml +++ b/mintlify/openapi.yaml @@ -5142,7 +5142,12 @@ paths: get: summary: List VASPs description: | - Retrieve the directory of Virtual Asset Service Providers (exchanges and other custodial platforms) recognized for counterparty declarations. Search by name to find the VASP that custodies a counterparty account. + Retrieve the directory of Virtual Asset Service Providers (exchanges and + other custodial platforms) recognized for counterparty declarations. + Search by name to find the VASP that custodies a counterparty account. + + The `vaspName` field in each result is the value to pass as `vaspName` + when declaring a VASP-hosted counterparty. operationId: listVasps tags: - VASPs @@ -22458,16 +22463,16 @@ components: Vasp: type: object required: - - id - - name + - vaspName + - displayName properties: - id: + vaspName: type: string - description: Stable identifier for this VASP. Pass it as `vaspId` when declaring a VASP-hosted counterparty. - example: Vasp:019542f5-b3e7-1d02-0000-000000000001 - name: + description: Canonical name for this VASP. Pass this value as `vaspName` when declaring a VASP-hosted counterparty. + example: Kraken + displayName: type: string - description: Display name of the VASP + description: Human-friendly display name for this VASP. example: Kraken description: A Virtual Asset Service Provider (VASP) — an exchange or other custodial platform — recognized for counterparty declarations. VaspListResponse: diff --git a/openapi.yaml b/openapi.yaml index a005d318..0c60f619 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -5142,7 +5142,12 @@ paths: get: summary: List VASPs description: | - Retrieve the directory of Virtual Asset Service Providers (exchanges and other custodial platforms) recognized for counterparty declarations. Search by name to find the VASP that custodies a counterparty account. + Retrieve the directory of Virtual Asset Service Providers (exchanges and + other custodial platforms) recognized for counterparty declarations. + Search by name to find the VASP that custodies a counterparty account. + + The `vaspName` field in each result is the value to pass as `vaspName` + when declaring a VASP-hosted counterparty. operationId: listVasps tags: - VASPs @@ -22458,16 +22463,16 @@ components: Vasp: type: object required: - - id - - name + - vaspName + - displayName properties: - id: + vaspName: type: string - description: Stable identifier for this VASP. Pass it as `vaspId` when declaring a VASP-hosted counterparty. - example: Vasp:019542f5-b3e7-1d02-0000-000000000001 - name: + description: Canonical name for this VASP. Pass this value as `vaspName` when declaring a VASP-hosted counterparty. + example: Kraken + displayName: type: string - description: Display name of the VASP + description: Human-friendly display name for this VASP. example: Kraken description: A Virtual Asset Service Provider (VASP) — an exchange or other custodial platform — recognized for counterparty declarations. VaspListResponse: diff --git a/openapi/components/schemas/vasps/Vasp.yaml b/openapi/components/schemas/vasps/Vasp.yaml index 34f430d6..42023cde 100644 --- a/openapi/components/schemas/vasps/Vasp.yaml +++ b/openapi/components/schemas/vasps/Vasp.yaml @@ -1,17 +1,17 @@ type: object required: - - id - - name + - vaspName + - displayName properties: - id: + vaspName: type: string description: >- - Stable identifier for this VASP. Pass it as `vaspId` when declaring a - VASP-hosted counterparty. - example: Vasp:019542f5-b3e7-1d02-0000-000000000001 - name: + Canonical name for this VASP. Pass this value as `vaspName` when + declaring a VASP-hosted counterparty. + example: Kraken + displayName: type: string - description: Display name of the VASP + description: Human-friendly display name for this VASP. example: Kraken description: >- A Virtual Asset Service Provider (VASP) — an exchange or other custodial diff --git a/openapi/paths/vasps/vasps.yaml b/openapi/paths/vasps/vasps.yaml index 5afcd9f2..119c53dc 100644 --- a/openapi/paths/vasps/vasps.yaml +++ b/openapi/paths/vasps/vasps.yaml @@ -1,9 +1,12 @@ get: summary: List VASPs - description: > + description: | Retrieve the directory of Virtual Asset Service Providers (exchanges and other custodial platforms) recognized for counterparty declarations. Search by name to find the VASP that custodies a counterparty account. + + The `vaspName` field in each result is the value to pass as `vaspName` + when declaring a VASP-hosted counterparty. operationId: listVasps tags: - VASPs