From 686593f067b2a919dfa37f0c57a9abe74c0514f3 Mon Sep 17 00:00:00 2001 From: Benjamin Bengfort Date: Mon, 2 Sep 2024 21:19:03 -0500 Subject: [PATCH] Update OpenAPI Docs (#173) --- docs/static/openapi/envoy.json | 13519 ++++++++++++++++++++++++++----- 1 file changed, 11614 insertions(+), 1905 deletions(-) diff --git a/docs/static/openapi/envoy.json b/docs/static/openapi/envoy.json index fbaa6f6..58dc153 100644 --- a/docs/static/openapi/envoy.json +++ b/docs/static/openapi/envoy.json @@ -1,635 +1,5570 @@ { - "openapi": "3.0.3", "info": { - "title": "TRISA Node API", - "description": "The TRISA Node API allows users to interact with the TRISA Self-Hosted Node in a programmatic fashion.\nIt is intended that this API is served on an internal IP address with routing only available to internal services.", - "termsOfService": "https://trisa.io/terms/", + "title": "TRISA Envoy API", + "description": "The TRISA Envoy API allows users to interact with their TRISA open source Envoy node in a programmatic fashion. The API allows users to manage server objects such as accounts and counterparties and to send and manage Travel Rule transactions without having to know the details of the TRISA or TRP protocols.", "contact": { - "email": "support@rotational.io" + "name": "Rotational Labs", + "email": "support@rotational.io", + "url": "https://rotational.io" }, "license": { "name": "MIT Licensed", - "url": "https://github.com/trisacrypto/trisa/blob/main/LICENSE" + "url": "https://github.com/trisacrypto/envoy/blob/main/LICENSE" }, - "version": "v0.1.1" - }, - "externalDocs": { - "description": "TRISA Developer Documentation", - "url": "https://trisa.dev" + "version": "v{{ .Version }}" }, + "openapi": "3.1.0", + "servers": [ + { + "url": "{{ .Origin }}", + "variables": {}, + "description": "{{ .Description }}" + } + ], "tags": [ { - "name": "authentication", - "description": "Allow for authentication against Envoy node." + "name": "Authentication", + "description": "API authentication is handled using JWT access and refresh tokens that can be obtained with an API key composed of a client ID and secret." + }, + { + "name": "Accounts", + "description": "Accounts store information about your users and their crypto wallets for compliance purposes." + }, + { + "name": "Crypto Addresses", + "description": "A resource nested under accounts for tracking which wallet addresses for which blockchain networks belong to which accounts." + }, + { + "name": "Counterparties", + "description": "Counterparties define remote VASP peers with whom you can exchange Travel Rule information for compliance purposes." + }, + { + "name": "Transactions", + "description": "Transactions refer to an instance of a travel rule information exchange related to a specific on-chain virtual asset transfer." }, { - "name": "account", - "description": "Stored information about your user/customer accounts." + "name": "Preparing Transactions", + "description": "The prepared transactions workflow allows you to easily create IVMS101 with a simplified form and create a transaction and send it in fewer steps than it would be to manually create a transaction and send a secure envelope to the counterparty." }, { - "name": "crypto_address", - "description": "Associate crypto addresses with user accounts." + "name": "Transaction Workflows", + "description": "These actions allow you to move a transaction through the travel rule compliance resolution workflow." }, { - "name": "transaction", - "description": "Travel Rule information exchanges for specific crypto asset transactions." + "name": "Secure Envelopes", + "description": "Secure envelopes store PII data in an encrypted fashion and record an audit log of information exchanges with a counterparty about a specific transaction." }, { - "name": "counterparty", - "description": "Counterparties to exchange travel rule information with using TRISA or TRP protocols." + "name": "Users", + "description": "Envoy user access management and identity control for compliance auditing purposes." }, { - "name": "secure_envelope", - "description": "Secure Envelopes provide an audit record of travel rule exchanges with a counterparty." + "name": "API Keys", + "description": "Envoy API client access management and identity control for compliance auditing purposes." }, { - "name": "user", - "description": "User management." + "name": "Utilities", + "description": "Other useful API methods and helper functionality not associated with a REST resource." }, { - "name": "utility", - "description": "Other useful methods." + "name": "Webhooks", + "description": "Webhooks for making callbacks to an API client system." } ], - "paths": { - "/v1/status": { - "get": { - "summary": "Heartbeat endpoint", - "description": "Allows users to check the status of the node", - "operationId": "status", - "tags": [ - "utility" + "externalDocs": { + "description": "TRISA Documentation", + "url": "https://trisa.dev" + }, + "security": [ + {} + ], + "components": { + "schemas": { + "Reply": { + "title": "Reply", + "type": "object", + "description": "A standard reply object that is used to indicate success with a JSON body if required.", + "properties": { + "success": { + "type": "boolean", + "description": "Set to true if the request was successful, false if there was an error.", + "example": true + } + }, + "required": [ + "success" ], - "responses": { - "200": { - "description": "Successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/StatusReply" - } - } - } + "example": { + "success": true + } + }, + "ErrorReply": { + "title": "ErrorReply", + "type": "object", + "description": "A general error reply that includes the details of why the request was bad.", + "properties": { + "success": { + "type": "boolean", + "description": "Set to true if the request was successful, false if there was an error (see reply).", + "example": false }, - "503": { - "description": "Unavailable", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/StatusReply" - } - } - } + "error": { + "type": "string", + "description": "A short description of the error intended to help the user fix the request and retry.", + "example": "resource not found" } - } - } - }, - "/v1/authenticate": { - "post": { - "tags": [ - "authentication" + }, + "required": [ + "success", + "error" ], - "summary": "Authenticate", - "operationId": "authenticate", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/APIAuthentication" + "example": { + "success": false, + "error": "resource not found" + } + }, + "FieldErrors": { + "title": "FieldErrors", + "type": "object", + "description": "A set of errors used to indicate problems with specific fields in the request body.", + "properties": { + "success": { + "type": "boolean", + "description": "Set to true if the request was successful, false if there was an error (see error reply).", + "example": false + }, + "error": { + "type": "string", + "description": "A quick description of how many errors occurred.", + "example": "4 validation errors occurred" + }, + "errors": { + "type": "array", + "description": "A list of the fields and their associated errors.", + "items": { + "type": "object", + "description": "An individual field error that specifies the name of the field and the validation error.", + "properties": { + "field": { + "type": "string", + "description": "The name of the field in the request body (may be \".\" delimited to indicate nested fields).", + "example": "country" + }, + "error": { + "type": "string", + "description": "A brief description of the validation error that occurred.", + "example": "not a valid ISO-3166-1 Alpha 2 country code" + } + }, + "example": { + "field": "country", + "error": "not a valid ISO-3166-1 Alpha 2 country code" } - } + }, + "example": [ + { + "field": "common_name", + "error": "common name must be a valid domain name with a correct tld" + }, + { + "field": "country", + "error": "not a valid ISO-3166-1 Alpha 2 country code" + } + ] } }, - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LoginReply" - } - } + "required": [ + "success", + "error", + "errors" + ], + "example": { + "success": false, + "error": "2 validation errors occurred", + "errors": [ + { + "field": "common_name", + "error": "common name must be a valid domain name with a correct tld" + }, + { + "field": "country", + "error": "not a valid ISO-3166-1 Alpha 2 country code" } + ] + } + }, + "PageInfo": { + "title": "PageInfo", + "type": "object", + "description": "The page info for the current page of a paginated list resource.", + "properties": { + "page_size": { + "type": "integer", + "example": 50, + "description": "The number of items on the current page, defaults to the page size requested in the page query." }, - "403": { - "description": "Invalid API credentials" + "next_page_token": { + "type": "string", + "format": "base64", + "description": "An encrypted handle that can be used in a page query to return the next page of results after this current page.", + "example": "eyJjIjogIjAxSjZESjlGNjkxQ0Y4RTlIMFYzRVQwTTBFIiwgInMiOiA1MCwgImUiOiAxNzI0ODgyOTU4fQ==" + }, + "prev_page_token": { + "type": "string", + "format": "base64", + "description": "An encrypted handle that can be used in a page query to return the previous page of results after this current page.", + "example": "eyJjIjogIjAxSjZESjlGNjkxQ0Y4RTlIMFYzRVQwTTBFIiwgInMiOiA1MCwgImUiOiAxNzI0ODgyOTU4fQ==" } + }, + "example": { + "page_size": 50, + "next_page_token": "eyJjIjogIjAxSjZESjlGNjkxQ0Y4RTlIMFYzRVQwTTBFIiwgInMiOiA1MCwgImUiOiAxNzI0ODgyOTU4fQ==" } - } - }, - "/v1/reauthenticate": { - "post": { - "tags": [ - "authentication" - ], - "summary": "Reauthenticate with refresh token", - "operationId": "reauthenticate", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ReauthenticateRequest" - } - } + }, + "APIAuthentication": { + "title": "APIAuthentication", + "type": "object", + "description": "Authenticate an API Key using its client ID and secret to receive a JWT bearer token.", + "properties": { + "client_id": { + "type": "string", + "description": "The client ID of the API Key for authentication.", + "example": "kbxiRmtYvLbkYKrlefJoSP" + }, + "client_secret": { + "type": "string", + "description": "The client secret of the API Key for authentication.", + "example": "R4OTqjvlGj02x4PvoPe6bxTopFjQ15QrISG8X3HqD5isWIng" } }, - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LoginReply" - } - } - } + "required": [ + "client_id", + "client_secret" + ], + "example": { + "client_id": "kbxiRmtYvLbkYKrlefJoSP", + "client_secret": "R4OTqjvlGj02x4PvoPe6bxTopFjQ15QrISG8X3HqD5isWIng" + } + }, + "LoginReply": { + "title": "LoginReply", + "type": "object", + "description": "Returns two JWT tokens. The access token should be used as a Bearer token in the Authorization header. The refresh token can be used to obtain a new access token when it expires to reauthenticate without having to post the client ID and secret again.", + "properties": { + "access_token": { + "type": "string", + "format": "JWT", + "description": "The access token with API key claims that should be used as the Bearer token in the Authorization header.", + "example": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjAxSFZINTBWWEs5MFJKWlI5WENNMENCRkJRIiwidHlwIjoiSldUIn0.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwMDAiLCJzdWIiOiJrMDFKNVkyUjBZQUZFU0ZUVzYzU1JTNTg4WjIiLCJhdWQiOlsiaHR0cDovL2xvY2FsaG9zdDo4MDAwIl0sImV4cCI6MTcyNDg4NjU1OCwibmJmIjoxNzI0ODgyOTU4LCJpYXQiOjE3MjQ4ODI5NTgsImp0aSI6IjAxSjZER0pFMFExMEcwQzY1U1NEUlQ3VDY3IiwiY2xpZW50SUQiOiJrYnhpUm10WXZMYmtZS3JsZWZKb1NQIiwicGVybWlzc2lvbnMiOlsidXNlcnM6bWFuYWdlIiwidXNlcnM6dmlldyIsImFwaWtleXM6bWFuYWdlIiwiYXBpa2V5czp2aWV3IiwiYXBpa2V5czpyZXZva2UiLCJjb3VudGVycGFydGllczptYW5hZ2UiLCJjb3VudGVycGFydGllczp2aWV3IiwiYWNjb3VudHM6bWFuYWdlIiwiYWNjb3VudHM6dmlldyIsInRyYXZlbHJ1bGU6bWFuYWdlIiwidHJhdmVscnVsZTpkZWxldGUiLCJ0cmF2ZWxydWxlOnZpZXciLCJjb25maWc6bWFuYWdlIiwiY29uZmlnOnZpZXciLCJwa2k6bWFuYWdlIiwicGtpOmRlbGV0ZSIsInBraTp2aWV3Il19.vZeoZ6UR9e2qOU2Zd64nlnPne4Hbm3t8QtX_uM72pyf8BRIEehruioQCQ8RfqNJpSyacRCfhAKovTKChnWIPd8Xdkzcl9_bHnhYKlTzhdPYlD5K1uCNkNSJHZVwEJeG3aHB7xE-MVrvXivia3xHfth_ZSQab3jVuL6q_fjG4yPNpf3yjXbO3OPaGpavcElMf2r-DdIMIIewCmNktjrkFNtiNPmJU3MzLzwxLQPm2WUkcKZ27e7KD_LL2ZgluyVSM0BRehcdkPXmOXGF5KCTvHu7Xo5evUg6DvftEIz5IjCd-6s1YkZEJSQqBlfymhXXsmW1tlK4RYhay10Lg_k16HtO-kByLB2vtW6V1090XBK6tvjAJNjSGrD2tTFWbRlEe2YdYQ3pQilnSeJW1hBSpSYb_Ty94FwcsMrq_NiULYmxh6dOYtzrANou0EKd0HoYjw4d0dQOlCqSBfFclOoMmftjms5QG6E93s_Bjp2nhpKs6fr7TQhwmVChiVWBV2eq5s1mTLngNQhgLdNddcDJ_DJiisSv_V3nD-2uLcQaq9ZQ60oW1jQzUoTaJY9uw3SEToUa7bGRNKmHnUYYxRxqyVVYceaOlklPqfyT58zEBKqblhZfAE39rtyVZKOCc3x_d9yyQ9YaV6ijpaxC0PKTW0tSEWzNesNv4wayH-pNaSJM" }, - "403": { - "description": "Invalid reauthentication credentials" + "refresh_token": { + "type": "string", + "format": "JWT", + "description": "The refresh token can be used to re-authenticate an expired access token, so long as the refresh token is still valid.", + "example": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjAxSFZINTBWWEs5MFJKWlI5WENNMENCRkJRIiwidHlwIjoiSldUIn0.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwMDAiLCJzdWIiOiJrMDFKNVkyUjBZQUZFU0ZUVzYzU1JTNTg4WjIiLCJhdWQiOlsiaHR0cDovL2xvY2FsaG9zdDo4MDAwIiwiaHR0cDovL2xvY2FsaG9zdDo4MDAwL3YxL3JlYXV0aGVudGljYXRlIl0sImV4cCI6MTcyNDg5MDE1OCwibmJmIjoxNzI0ODg1NjU4LCJpYXQiOjE3MjQ4ODI5NTgsImp0aSI6IjAxSjZER0pFMFExMEcwQzY1U1NEUlQ3VDY3In0.Mzey5MWS-GRVhVAfISXH6keebNpoQTYWUVDhOnD-mENfWNurtkBpWMgV_FivpAHyXlH72Mv-cC0oaaUMYNMVRg5yCN6XQyYdUqcZsynULLkUUPcD7PGJLDIMe8CngAHITDmDRzdZaUpbWB4F-Ad_qEqzGhz3-PRAQxM7-Gt3IFNFVfWHJXTZzAiKHP_xtE4rnVczUx2sMXKPQHhxDVTiahMSAGiMVUWvnfKzwtv36U69cmfOw3UbG2IVZ6-2zm8ICSNesUqtwpjn1c5B_pYoqJNJYbp8jCzjRS2xT4xT7eDmMAjeFIiJEe6wuTvzU3ZwwqsXhLPtj27VNwHNHHL2qqnn0wTLx30amHkrBoEU44Rbf9Lxof6y_WDhZJIt7SeG1bDZ378falQd0v5yTColbaTk20jlADsoSdm8IgYoH91k1_-bzfHQkRTNUQI7YxCQWeP9zj-QzKdA7c86gyvYuPbsk29St0tGvQdS-aWa5ZLpDL3R5OLzO9zhqgNeGQVomF5YJaFAaBe4Y_6dyvNmHJB9cdfgEgj6B9cTzKdZWfn-r48E3xt0n41FdvYKgyDjR1gRBe7T-f55GbH5N0fR2Twdclc4DqD5c2gp5U0BTK-Uc2OBdT710Ws6mqdVljKoaG6VZjI-eA17pv7Khzdr8NWpmSUMYUGbAKtHFA7atsc" } + }, + "example": { + "access_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjAxSFZINTBWWEs5MFJKWlI5WENNMENCRkJRIiwidHlwIjoiSldUIn0.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwMDAiLCJzdWIiOiJrMDFKNVkyUjBZQUZFU0ZUVzYzU1JTNTg4WjIiLCJhdWQiOlsiaHR0cDovL2xvY2FsaG9zdDo4MDAwIl0sImV4cCI6MTcyNDg4NjU1OCwibmJmIjoxNzI0ODgyOTU4LCJpYXQiOjE3MjQ4ODI5NTgsImp0aSI6IjAxSjZER0pFMFExMEcwQzY1U1NEUlQ3VDY3IiwiY2xpZW50SUQiOiJrYnhpUm10WXZMYmtZS3JsZWZKb1NQIiwicGVybWlzc2lvbnMiOlsidXNlcnM6bWFuYWdlIiwidXNlcnM6dmlldyIsImFwaWtleXM6bWFuYWdlIiwiYXBpa2V5czp2aWV3IiwiYXBpa2V5czpyZXZva2UiLCJjb3VudGVycGFydGllczptYW5hZ2UiLCJjb3VudGVycGFydGllczp2aWV3IiwiYWNjb3VudHM6bWFuYWdlIiwiYWNjb3VudHM6dmlldyIsInRyYXZlbHJ1bGU6bWFuYWdlIiwidHJhdmVscnVsZTpkZWxldGUiLCJ0cmF2ZWxydWxlOnZpZXciLCJjb25maWc6bWFuYWdlIiwiY29uZmlnOnZpZXciLCJwa2k6bWFuYWdlIiwicGtpOmRlbGV0ZSIsInBraTp2aWV3Il19.vZeoZ6UR9e2qOU2Zd64nlnPne4Hbm3t8QtX_uM72pyf8BRIEehruioQCQ8RfqNJpSyacRCfhAKovTKChnWIPd8Xdkzcl9_bHnhYKlTzhdPYlD5K1uCNkNSJHZVwEJeG3aHB7xE-MVrvXivia3xHfth_ZSQab3jVuL6q_fjG4yPNpf3yjXbO3OPaGpavcElMf2r-DdIMIIewCmNktjrkFNtiNPmJU3MzLzwxLQPm2WUkcKZ27e7KD_LL2ZgluyVSM0BRehcdkPXmOXGF5KCTvHu7Xo5evUg6DvftEIz5IjCd-6s1YkZEJSQqBlfymhXXsmW1tlK4RYhay10Lg_k16HtO-kByLB2vtW6V1090XBK6tvjAJNjSGrD2tTFWbRlEe2YdYQ3pQilnSeJW1hBSpSYb_Ty94FwcsMrq_NiULYmxh6dOYtzrANou0EKd0HoYjw4d0dQOlCqSBfFclOoMmftjms5QG6E93s_Bjp2nhpKs6fr7TQhwmVChiVWBV2eq5s1mTLngNQhgLdNddcDJ_DJiisSv_V3nD-2uLcQaq9ZQ60oW1jQzUoTaJY9uw3SEToUa7bGRNKmHnUYYxRxqyVVYceaOlklPqfyT58zEBKqblhZfAE39rtyVZKOCc3x_d9yyQ9YaV6ijpaxC0PKTW0tSEWzNesNv4wayH-pNaSJM", + "refresh_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjAxSFZINTBWWEs5MFJKWlI5WENNMENCRkJRIiwidHlwIjoiSldUIn0.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwMDAiLCJzdWIiOiJrMDFKNVkyUjBZQUZFU0ZUVzYzU1JTNTg4WjIiLCJhdWQiOlsiaHR0cDovL2xvY2FsaG9zdDo4MDAwIiwiaHR0cDovL2xvY2FsaG9zdDo4MDAwL3YxL3JlYXV0aGVudGljYXRlIl0sImV4cCI6MTcyNDg5MDE1OCwibmJmIjoxNzI0ODg1NjU4LCJpYXQiOjE3MjQ4ODI5NTgsImp0aSI6IjAxSjZER0pFMFExMEcwQzY1U1NEUlQ3VDY3In0.Mzey5MWS-GRVhVAfISXH6keebNpoQTYWUVDhOnD-mENfWNurtkBpWMgV_FivpAHyXlH72Mv-cC0oaaUMYNMVRg5yCN6XQyYdUqcZsynULLkUUPcD7PGJLDIMe8CngAHITDmDRzdZaUpbWB4F-Ad_qEqzGhz3-PRAQxM7-Gt3IFNFVfWHJXTZzAiKHP_xtE4rnVczUx2sMXKPQHhxDVTiahMSAGiMVUWvnfKzwtv36U69cmfOw3UbG2IVZ6-2zm8ICSNesUqtwpjn1c5B_pYoqJNJYbp8jCzjRS2xT4xT7eDmMAjeFIiJEe6wuTvzU3ZwwqsXhLPtj27VNwHNHHL2qqnn0wTLx30amHkrBoEU44Rbf9Lxof6y_WDhZJIt7SeG1bDZ378falQd0v5yTColbaTk20jlADsoSdm8IgYoH91k1_-bzfHQkRTNUQI7YxCQWeP9zj-QzKdA7c86gyvYuPbsk29St0tGvQdS-aWa5ZLpDL3R5OLzO9zhqgNeGQVomF5YJaFAaBe4Y_6dyvNmHJB9cdfgEgj6B9cTzKdZWfn-r48E3xt0n41FdvYKgyDjR1gRBe7T-f55GbH5N0fR2Twdclc4DqD5c2gp5U0BTK-Uc2OBdT710Ws6mqdVljKoaG6VZjI-eA17pv7Khzdr8NWpmSUMYUGbAKtHFA7atsc" } - } - }, - "/v1/transactions": { - "get": { - "tags": [ - "transaction" - ], - "summary": "List transactions", - "description": "Paginated list of all transactions", - "operationId": "listTransactions", - "security": [ - { - "bearer-auth": [] + }, + "ReauthenticateRequest": { + "title": "ReauthenticateRequest", + "type": "object", + "description": "Reauthenticate an expired `access_token` to receive a new access token without having to authenticate with your API key credentials.", + "properties": { + "refresh_token": { + "type": "string", + "description": "The JWT refresh token for re-authentication", + "format": "JWT", + "example": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjAxSFZINTBWWEs5MFJKWlI5WENNMENCRkJRIiwidHlwIjoiSldUIn0.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwMDAiLCJzdWIiOiJrMDFKNVkyUjBZQUZFU0ZUVzYzU1JTNTg4WjIiLCJhdWQiOlsiaHR0cDovL2xvY2FsaG9zdDo4MDAwIiwiaHR0cDovL2xvY2FsaG9zdDo4MDAwL3YxL3JlYXV0aGVudGljYXRlIl0sImV4cCI6MTcyNDg5MDE1OCwibmJmIjoxNzI0ODg1NjU4LCJpYXQiOjE3MjQ4ODI5NTgsImp0aSI6IjAxSjZER0pFMFExMEcwQzY1U1NEUlQ3VDY3In0.Mzey5MWS-GRVhVAfISXH6keebNpoQTYWUVDhOnD-mENfWNurtkBpWMgV_FivpAHyXlH72Mv-cC0oaaUMYNMVRg5yCN6XQyYdUqcZsynULLkUUPcD7PGJLDIMe8CngAHITDmDRzdZaUpbWB4F-Ad_qEqzGhz3-PRAQxM7-Gt3IFNFVfWHJXTZzAiKHP_xtE4rnVczUx2sMXKPQHhxDVTiahMSAGiMVUWvnfKzwtv36U69cmfOw3UbG2IVZ6-2zm8ICSNesUqtwpjn1c5B_pYoqJNJYbp8jCzjRS2xT4xT7eDmMAjeFIiJEe6wuTvzU3ZwwqsXhLPtj27VNwHNHHL2qqnn0wTLx30amHkrBoEU44Rbf9Lxof6y_WDhZJIt7SeG1bDZ378falQd0v5yTColbaTk20jlADsoSdm8IgYoH91k1_-bzfHQkRTNUQI7YxCQWeP9zj-QzKdA7c86gyvYuPbsk29St0tGvQdS-aWa5ZLpDL3R5OLzO9zhqgNeGQVomF5YJaFAaBe4Y_6dyvNmHJB9cdfgEgj6B9cTzKdZWfn-r48E3xt0n41FdvYKgyDjR1gRBe7T-f55GbH5N0fR2Twdclc4DqD5c2gp5U0BTK-Uc2OBdT710Ws6mqdVljKoaG6VZjI-eA17pv7Khzdr8NWpmSUMYUGbAKtHFA7atsc" } + }, + "required": [ + "refresh_token" ], - "parameters": [ - { - "name": "page_size", - "in": "query", - "schema": { - "type": "integer" - } + "example": { + "refresh_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjAxSFZINTBWWEs5MFJKWlI5WENNMENCRkJRIiwidHlwIjoiSldUIn0.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwMDAiLCJzdWIiOiJrMDFKNVkyUjBZQUZFU0ZUVzYzU1JTNTg4WjIiLCJhdWQiOlsiaHR0cDovL2xvY2FsaG9zdDo4MDAwIiwiaHR0cDovL2xvY2FsaG9zdDo4MDAwL3YxL3JlYXV0aGVudGljYXRlIl0sImV4cCI6MTcyNDg5MDE1OCwibmJmIjoxNzI0ODg1NjU4LCJpYXQiOjE3MjQ4ODI5NTgsImp0aSI6IjAxSjZER0pFMFExMEcwQzY1U1NEUlQ3VDY3In0.Mzey5MWS-GRVhVAfISXH6keebNpoQTYWUVDhOnD-mENfWNurtkBpWMgV_FivpAHyXlH72Mv-cC0oaaUMYNMVRg5yCN6XQyYdUqcZsynULLkUUPcD7PGJLDIMe8CngAHITDmDRzdZaUpbWB4F-Ad_qEqzGhz3-PRAQxM7-Gt3IFNFVfWHJXTZzAiKHP_xtE4rnVczUx2sMXKPQHhxDVTiahMSAGiMVUWvnfKzwtv36U69cmfOw3UbG2IVZ6-2zm8ICSNesUqtwpjn1c5B_pYoqJNJYbp8jCzjRS2xT4xT7eDmMAjeFIiJEe6wuTvzU3ZwwqsXhLPtj27VNwHNHHL2qqnn0wTLx30amHkrBoEU44Rbf9Lxof6y_WDhZJIt7SeG1bDZ378falQd0v5yTColbaTk20jlADsoSdm8IgYoH91k1_-bzfHQkRTNUQI7YxCQWeP9zj-QzKdA7c86gyvYuPbsk29St0tGvQdS-aWa5ZLpDL3R5OLzO9zhqgNeGQVomF5YJaFAaBe4Y_6dyvNmHJB9cdfgEgj6B9cTzKdZWfn-r48E3xt0n41FdvYKgyDjR1gRBe7T-f55GbH5N0fR2Twdclc4DqD5c2gp5U0BTK-Uc2OBdT710Ws6mqdVljKoaG6VZjI-eA17pv7Khzdr8NWpmSUMYUGbAKtHFA7atsc" + } + }, + "Account": { + "title": "Account", + "type": "object", + "description": "An account of a customer whose identity information is required for compliance. Accounts are also associated with crypto wallet addresses.", + "properties": { + "id": { + "type": "string", + "format": "ULID", + "description": "The unique identifier of the account on your Envoy node.", + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" }, - { - "name": "next_page_token", - "in": "query", - "schema": { - "type": "string" - } + "customer_id": { + "type": "string", + "description": "An internal customer ID associated with the account that links it to your customer management system.", + "example": "674907513" }, - { - "name": "prev_page_token", - "in": "query", - "schema": { - "type": "string" - } + "first_name": { + "type": "string", + "description": "The first or \"secondary\" name of the customer account.", + "example": "James" + }, + "last_name": { + "type": "string", + "description": "The last or \"primary\" name of the customer account, often a family name. This name is used to sort accounts.", + "example": "Bond" + }, + "ivms101": { + "type": "string", + "format": "base64", + "description": "The base64 encoded representation of a JSON or protocol buffer IVMS101 record for the natural person on the account.", + "example": "CjwKEQoPCgRCb25kEgVKYW1lcxgCKiMKCjE5MjAtMTEtMTESFVdhdHRlbnNjaGVpZCwgR2VybWFueTICR0I" + }, + "travel_address": { + "type": "string", + "format": "TravelAddress", + "description": "The customer account travel address that allows counterparties to send this account travel rule inquiries.", + "example": "taLg4sBFp3cWhB9wN7qqPwDzq32bWwhibhFvADbiYp5fMR7asAxbqNrPuUyT4VzZa98oPk6dHcdKhov9jiraNrcZ7yQdikXcwbv" + }, + "crypto_addresses": { + "type": "array", + "description": "A list of crypto addresses associated with the account.", + "items": { + "$ref": "#/components/schemas/CryptoAddress" + }, + "example": [] + }, + "created": { + "type": "string", + "format": "date-time", + "description": "The date and time when the account record was created.", + "example": "2024-08-28T10:14:43-05:00" + }, + "modified": { + "type": "string", + "format": "date-time", + "description": "The date and time when the account record was last modified.", + "example": "2024-08-28T12:23:24-05:00" } - ], - "responses": { - "200": { - "description": "Successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TransactionsList" - } - } + }, + "example": { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "customer_id": "674907513", + "first_name": "James", + "last_name": "Bond", + "travel_address": "taLg4sBFp3cWhB9wN7qqPwDzq32bWwhibhFvADbiYp5fMR7asAxbqNrPuUyT4VzZa98oPk6dHcdKhov9jiraNrcZ7yQdikXcwbv", + "ivms101": "CjwKEQoPCgRCb25kEgVKYW1lcxgCKiMKCjE5MjAtMTEtMTESFVdhdHRlbnNjaGVpZCwgR2VybWFueTICR0I", + "crypto_addresses": [ + { + "id": "01J6FRB1EGJCEZXRMQGW1FM0BR", + "crypto_address": "0x9268102451DE47C536C3AD92203D4E9692941E06", + "network": "ETH", + "travel_address": "ta5TXL58tSWo9eeNP1C4iSsybuX1KMeLiqeprHtF5XP69YEctxHMPwa7YTEU3QjKcC2RY9Jqjd4VsCsj396YMZvVCfFaYjDR7P", + "created": "2024-08-29T14:05:31-05:00", + "modified": "2024-08-30T18:39:02-05:00" + }, + { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "crypto_address": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "network": "BTC", + "travel_address": "ta5TXL58tSWo9eeNP1C4iSsybuX1KMeLiqeprHtF5WTaDe5fEN9vFTCtNxb2bv1HegpR8RcuV4EAhxtvKt8wfx4SnH414o6eWU", + "created": "2024-08-28T10:14:43-05:00", + "modified": "2024-08-28T12:23:24-05:00" } - } + ], + "created": "2024-08-28T10:14:43-05:00", + "modified": "2024-08-28T12:23:24-05:00" } }, - "post": { - "tags": [ - "transaction" - ], - "summary": "Create transaction", - "description": "Create a new transaction", - "operationId": "createTransaction", - "security": [ - { - "bearer-auth": [] + "AccountForm": { + "title": "AccountForm", + "type": "object", + "description": "The editable fields in a customer account object.", + "properties": { + "customer_id": { + "type": "string", + "description": "The internal customer ID can be changed at any time, thought it is not recommended.", + "example": "674907513" + }, + "first_name": { + "type": "string", + "description": "The first or \"secondary\" name of the customer account can be modified.", + "example": "James" + }, + "last_name": { + "type": "string", + "description": "The last or \"primary\" name of the customer account, often a family name, can be modified.", + "example": "Bond" + }, + "ivms101": { + "type": "string", + "format": "base64", + "description": "The base64 encoded representation of a JSON or protocol buffer IVMS101 record for the natural person on the account can be modified but must be parseable.", + "example": "CjwKEQoPCgRCb25kEgVKYW1lcxgCKiMKCjE5MjAtMTEtMTESFVdhdHRlbnNjaGVpZCwgR2VybWFueTICR0I" } + }, + "required": [ + "last_name" ], - "requestBody": { - "description": "Create a new transaction", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Transaction" - } - } + "example": { + "customer_id": "674907513", + "first_name": "James", + "last_name": "Bond", + "ivms101": "CjwKEQoPCgRCb25kEgVKYW1lcxgCKiMKCjE5MjAtMTEtMTESFVdhdHRlbnNjaGVpZCwgR2VybWFueTICR0I" + } + }, + "AccountSummary": { + "title": "AccountSummary", + "type": "object", + "description": "A summary of customer account details that is used in account lists to minimize data transfer.", + "properties": { + "id": { + "type": "string", + "format": "ULID", + "description": "The unique identifier of the account on your Envoy node - used to construct the detail URL.", + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" }, - "required": true - }, - "responses": { - "201": { - "description": "Transaction created", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Transaction" - } - } - } + "customer_id": { + "type": "string", + "description": "An internal customer ID associated with the account to reference in your customer management system.", + "example": "674907513" }, - "400": { - "description": "Invalid input" + "first_name": { + "type": "string", + "description": "The first or \"secondary\" name of the natural person associated with the customer account.", + "example": "James" }, - "422": { - "description": "Validation exception or missing field" - } - } - } - }, - "/v1/transactions/{transactionID}": { - "get": { - "tags": [ - "transaction" - ], - "summary": "Find transaction by ID", - "description": "Returns a single transaction if found", - "operationId": "transactionDetail", - "security": [ - { - "bearer-auth": [] - } - ], - "parameters": [ - { - "name": "transactionID", - "in": "path", - "description": "ID of transaction to return", - "required": true, - "schema": { - "type": "string", - "format": "UUID" - } - } - ], - "responses": { - "200": { - "description": "Successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Transaction" - } - } - } + "last_name": { + "type": "string", + "description": "The last or \"primary\" name of the natural person assoociated customer account. This name is used to sort accounts.", + "example": "Bond" }, - "404": { - "description": "Transaction not found" + "travel_address": { + "type": "string", + "format": "TravelAddress", + "description": "A travel address that the customer can send to request payment using virtual assets.", + "example": "taLg4sBFp3cWhB9wN7qqPwDzq32bWwhibhFvADbiYp5fMR7asAxbqNrPuUyT4VzZa98oPk6dHcdKhov9jiraNrcZ7yQdikXcwbv" + }, + "created": { + "type": "string", + "format": "date-time", + "description": "The date and time when the account record was created in the database.", + "example": "2024-08-28T10:14:43-05:00" + }, + "modified": { + "type": "string", + "format": "date-time", + "description": "The date and time when the account record was last modified in the database.", + "example": "2024-08-28T12:23:24-05:00" } + }, + "example": { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "customer_id": "674907513", + "first_name": "James", + "last_name": "Bond", + "travel_address": "taLg4sBFp3cWhB9wN7qqPwDzq32bWwhibhFvADbiYp5fMR7asAxbqNrPuUyT4VzZa98oPk6dHcdKhov9jiraNrcZ7yQdikXcwbv", + "created": "2024-08-28T10:14:43-05:00", + "modified": "2024-08-28T12:23:24-05:00" } }, - "put": { - "tags": [ - "transaction" - ], - "summary": "Updates a transaction record", - "description": "Update a transaction record (does not patch, all fields are required)", - "operationId": "updateTransaction", - "security": [ - { - "bearer-auth": [] - } - ], - "parameters": [ - { - "name": "transactionID", - "in": "path", - "description": "ID of transaction to update", - "required": true, - "schema": { - "type": "string", - "format": "UUID" - } - } - ], - "requestBody": { - "description": "Updated transaction record", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Transaction" - } - } + "AccountList": { + "title": "AccountList", + "type": "object", + "description": "A list of Account objects, returned in a paginated fashion.", + "properties": { + "page": { + "$ref": "#/components/schemas/PageInfo" }, - "required": true - }, - "responses": { - "200": { - "description": "Successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Transaction" - } + "accounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AccountSummary" + }, + "example": [ + { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "customer_id": "674907513", + "first_name": "James", + "last_name": "Bond", + "travel_address": "taLg4sBFp3cWhB9wN7qqPwDzq32bWwhibhFvADbiYp5fMR7asAxbqNrPuUyT4VzZa98oPk6dHcdKhov9jiraNrcZ7yQdikXcwbv", + "created": "2024-08-28T10:14:43-05:00", + "modified": "2024-08-28T12:23:24-05:00" + }, + { + "id": "01J6FRR2NSTQ0TC7DDMAR91MG7", + "customer_id": "39910432", + "first_name": "Twilda", + "last_name": "Swansong", + "travel_address": "taLg4sBFp3cWhB9wN7qsiUF8pxo7JXtVShYkv5ix1wG2kX5y4pRiJ3TRHmeD8H67TLLm5wHyDktVw1onfDeQfESumf91mjRTMbi", + "created": "2024-08-29T14:09:21-05:00", + "modified": "2024-08-29T14:10:50-05:00" } + ] + } + }, + "example": { + "page": { + "page_size": 50 + }, + "accounts": [ + { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "customer_id": "674907513", + "first_name": "James", + "last_name": "Bond", + "travel_address": "taLg4sBFp3cWhB9wN7qqPwDzq32bWwhibhFvADbiYp5fMR7asAxbqNrPuUyT4VzZa98oPk6dHcdKhov9jiraNrcZ7yQdikXcwbv", + "created": "2024-08-28T10:14:43-05:00", + "modified": "2024-08-28T12:23:24-05:00" + }, + { + "id": "01J6FRR2NSTQ0TC7DDMAR91MG7", + "customer_id": "39910432", + "first_name": "Twilda", + "last_name": "Swansong", + "travel_address": "taLg4sBFp3cWhB9wN7qsiUF8pxo7JXtVShYkv5ix1wG2kX5y4pRiJ3TRHmeD8H67TLLm5wHyDktVw1onfDeQfESumf91mjRTMbi", + "created": "2024-08-29T14:09:21-05:00", + "modified": "2024-08-29T14:10:50-05:00" } + ] + } + }, + "CryptoAddress": { + "title": "CryptoAddress", + "type": "object", + "description": "A record of a crypto wallet address and the blockchain network that wallet belongs to.", + "properties": { + "id": { + "type": "string", + "format": "ULID", + "description": "The unique identifier of the crypto address on your Envoy node.", + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" }, - "400": { - "description": "Invalid input" + "crypto_address": { + "type": "string", + "description": "The crypto or wallet address for the blockchain network.", + "example": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i" }, - "422": { - "description": "Validation exception or missing field" + "network": { + "type": "string", + "description": "The network the crypto wallet address belongs to in SLIP-0044 three-character encoding.", + "example": "BTC" + }, + "asset_type": { + "type": "string", + "description": "If the network supports multiple asset types, the description of the asset type managed by the wallet.", + "example": "BCH" + }, + "tag": { + "type": "string", + "description": "The memo or destination tag associated with the crypto wallet address if required by the network.", + "example": "dt=1234567890" + }, + "travel_address": { + "type": "string", + "format": "TravelAddress", + "description": "The wallet specific travel address that allows counterparties to send travel rule inquiries associated with the wallet.", + "example": "ta5TXL58tSWo9eeNP1C4iSsybuX1KMeLiqeprHtF5WTaDe5fEN9vFTCtNxb2bv1HegpR8RcuV4EAhxtvKt8wfx4SnH414o6eWU" + }, + "created": { + "type": "string", + "format": "date-time", + "description": "The date and time when the crypto address record was created.", + "example": "2024-08-28T10:14:43-05:00" + }, + "modified": { + "type": "string", + "format": "date-time", + "description": "The date and time when the crypto address record was last modified.", + "example": "2024-08-28T12:23:24-05:00" } + }, + "example": { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "crypto_address": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "network": "BTC", + "travel_address": "ta5TXL58tSWo9eeNP1C4iSsybuX1KMeLiqeprHtF5WTaDe5fEN9vFTCtNxb2bv1HegpR8RcuV4EAhxtvKt8wfx4SnH414o6eWU", + "created": "2024-08-28T10:14:43-05:00", + "modified": "2024-08-28T12:23:24-05:00" } }, - "delete": { - "tags": [ - "transaction" - ], - "summary": "Deletes a transaction", - "description": "Deletes a transaction", - "operationId": "deleteTransaction", - "security": [ - { - "bearer-auth": [] - } - ], - "parameters": [ - { - "name": "transactionID", - "in": "path", - "description": "ID of transaction to delete", - "required": true, - "schema": { - "type": "string", - "format": "UUID" - } - } - ], - "responses": { - "200": { - "description": "Successful operation" + "CryptoAddressList": { + "title": "CryptoAddressList", + "type": "object", + "description": "A list of CryptoAddress objects, returned in a paginated fashion.", + "properties": { + "page": { + "$ref": "#/components/schemas/PageInfo" }, - "404": { - "description": "Transaction not found" - } - } - } - }, - "/v1/transactions/prepare": { - "post": { - "tags": [ - "transaction" - ], - "summary": "Prepare transaction data for sending", - "description": "Prepare transaction data for sending to a counterparty", - "operationId": "prepareTransaction", - "security": [ - { - "bearer-auth": [] - } - ], - "requestBody": { - "description": "Transaction data to prepare", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Prepare" + "crypto_addresses": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CryptoAddress" + }, + "example": [ + { + "id": "01J6FRB1EGJCEZXRMQGW1FM0BR", + "crypto_address": "0x9268102451DE47C536C3AD92203D4E9692941E06", + "network": "ETH", + "travel_address": "ta5TXL58tSWo9eeNP1C4iSsybuX1KMeLiqeprHtF5XP69YEctxHMPwa7YTEU3QjKcC2RY9Jqjd4VsCsj396YMZvVCfFaYjDR7P", + "created": "2024-08-29T14:05:31-05:00", + "modified": "2024-08-30T18:39:02-05:00" + }, + { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "crypto_address": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "network": "BTC", + "travel_address": "ta5TXL58tSWo9eeNP1C4iSsybuX1KMeLiqeprHtF5WTaDe5fEN9vFTCtNxb2bv1HegpR8RcuV4EAhxtvKt8wfx4SnH414o6eWU", + "created": "2024-08-28T10:14:43-05:00", + "modified": "2024-08-28T12:23:24-05:00" } - } - }, - "required": true + ] + } }, - "responses": { - "200": { - "description": "Successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Prepared" - } - } + "example": { + "page": { + "page_size": 50 + }, + "crypto_addresses": [ + { + "id": "01J6FRB1EGJCEZXRMQGW1FM0BR", + "crypto_address": "0x9268102451DE47C536C3AD92203D4E9692941E06", + "network": "ETH", + "travel_address": "ta5TXL58tSWo9eeNP1C4iSsybuX1KMeLiqeprHtF5XP69YEctxHMPwa7YTEU3QjKcC2RY9Jqjd4VsCsj396YMZvVCfFaYjDR7P", + "created": "2024-08-29T14:05:31-05:00", + "modified": "2024-08-30T18:39:02-05:00" + }, + { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "crypto_address": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "network": "BTC", + "travel_address": "ta5TXL58tSWo9eeNP1C4iSsybuX1KMeLiqeprHtF5WTaDe5fEN9vFTCtNxb2bv1HegpR8RcuV4EAhxtvKt8wfx4SnH414o6eWU", + "created": "2024-08-28T10:14:43-05:00", + "modified": "2024-08-28T12:23:24-05:00" } + ] + } + }, + "CryptoAddressForm": { + "title": "CryptoAddressForm", + "type": "object", + "description": "The editable fields of a crypto wallet address for create and update.", + "properties": { + "crypto_address": { + "type": "string", + "description": "The crypto or wallet address for the blockchain network (required).", + "example": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i" }, - "400": { - "description": "Invalid input" + "network": { + "type": "string", + "description": "The network the crypto wallet address belongs to in SLIP-0044 three-character encoding (required).", + "example": "BTC" }, - "422": { - "description": "Validation exception or missing field" - } - } - } - }, - "/v1/transactions/send-prepared": { - "post": { - "tags": [ - "transaction" - ], - "summary": "Send prepared transaction data to counterparty", - "description": "Send prepared transaction data to a counterparty", - "operationId": "sendPreparedTransaction", - "security": [ - { - "bearer-auth": [] - } - ], - "requestBody": { - "description": "Prepared transaction data to send", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Prepared" - } - } + "asset_type": { + "type": "string", + "description": "If the network supports multiple asset types, the description of the asset type managed by the wallet. This field is not validated.", + "example": "BCH" }, - "required": true + "tag": { + "type": "string", + "description": "The memo or destination tag associated with the crypto wallet address if required by the network. This field is not validated.", + "example": "dt=1234567890" + } }, - "responses": { - "200": { - "description": "Successful operation", - "content": { + "required": [ + "crypto_address", + "network" + ], + "example": { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "crypto_address": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "network": "BTC" + } + }, + "Counterparty": { + "title": "Counterparty", + "type": "object", + "description": "Defines remote VASPs with whom you can exchange Travel Rule information and how to connect to them using a peer-to-peer network.", + "properties": { + "id": { + "type": "string", + "format": "ULID", + "description": "The unique identifier of the counterparty on your Envoy node.", + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" + }, + "source": { + "type": "string", + "enum": [ + "gds", + "user", + "peer" + ], + "description": "the source of the counterparty, e.g. gds means the record was created from the TRISA global directory service.", + "example": "gds" + }, + "directory_id": { + "type": "string", + "format": "uuid", + "description": "the unique identifier of the counterparty on the registered directory service.", + "example": "5154a0aa-502c-4179-a6f2-8b143d59edce" + }, + "registered_directory": { + "type": "string", + "description": "the name of the directory service the counterparty is registered with if the source is gds.", + "example": "trisatest.net" + }, + "protocol": { + "type": "string", + "enum": [ + "trisa", + "trp", + "email" + ], + "description": "the travel rule protocol used to connect to the counterparty with.", + "example": "trisa" + }, + "common_name": { + "type": "string", + "format": "domain", + "description": "the common name of the travel rule domain of the counterparty; used for uniquely identifying the counterparty.", + "example": "api.alice.vaspbot.net" + }, + "endpoint": { + "type": "string", + "format": "url", + "description": "the URL endpoint to connect to using the travel rule protocol. For TRISA this will be host:port and for TRP will be a URL.", + "example": "api.alice.vaspbot.net:443" + }, + "travel_address": { + "type": "string", + "format": "TravelAddress", + "description": "The counterparty travel address that allows the user to identify which counterparty to use in a transfer.", + "example": "taYgWCfsnPN8hsqUAZWm4TW7WrHU5qZT3GiBPpfSApGSqoPMH1D6kiNRzST5Gz" + }, + "name": { + "type": "string", + "description": "The name of the counterparty, usually the counterparty's legal or trading name.", + "example": "AliceCoin" + }, + "website": { + "type": "string", + "format": "url", + "description": "The website of the counterparty, used to lookup the counterparty's online information.", + "example": "https://example.com" + }, + "country": { + "type": "string", + "format": "ISO 3166-1 alpha-2", + "description": "The 2 character country code of the country that the counterparty is registered in or primarily operates in.", + "example": "JP" + }, + "business_category": { + "type": "string", + "enum": [ + "UNKNOWN_ENTITY", + "PRIVATE_ORGANIZATION", + "GOVERNMENT_ENTITY", + "BUSINESS_ENTITY", + "NON_COMMERCIAL_ENTITY", + "NON_VASP_ENTITY" + ], + "description": "The business category defined by the VASP in their TRIXO form for TRISA registration.", + "example": "PRIVATE_ORGANIZATION" + }, + "vasp_categories": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "Exchange", + "DEX", + "P2P", + "Kiosk", + "Custodian", + "OTC", + "Fund", + "Project", + "Gambling", + "Miner", + "Mixer", + "Individual", + "Other", + "Unknown" + ], + "description": "Self reported virtual asset services provided by the counterparty.", + "example": "Kiosk" + }, + "example": [ + "Exchange", + "Custodian", + "Miner" + ] + }, + "verified_on": { + "type": "string", + "format": "date-time", + "description": "The date and time when the counterparty record was verified as being a TRISA member on the network your node is connected to.", + "example": "2024-08-28T10:14:43-05:00" + }, + "ivms101": { + "type": "string", + "format": "base64", + "description": "The base64 encoded representation of a JSON or protocol buffer IVMS101 record for the legal person of the counterparty.", + "example": "EmcKLwoeChpBbGljZSBUcmFkaW5nIENvbXBhbnksIExURBABCg0KCUFsaWNlQ29pbhADEjAIAiILTWFpbiBTdHJlZXQqAzEyM1IFNTU4ODBaClNtYWxsdmlsbGVqAktZggECVVMqAkRF" + }, + "created": { + "type": "string", + "format": "date-time", + "description": "The date and time when the counterparty record was created.", + "example": "2024-08-28T10:14:43-05:00" + }, + "modified": { + "type": "string", + "format": "date-time", + "description": "The date and time when the counterparty record was last modified.", + "example": "2024-08-28T12:23:24-05:00" + } + }, + "example": { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "source": "gds", + "directory_id": "5154a0aa-502c-4179-a6f2-8b143d59edce", + "registered_directory": "trisatest.net", + "protocol": "trisa", + "common_name": "api.alice.vaspbot.net", + "endpoint": "api.alice.vaspbot.net:443", + "travel_address": "taYgWCfsnPN8hsqUAZWm4TW7WrHU5qZT3GiBPpfSApGSqoPMH1D6kiNRzST5Gz", + "name": "AliceCoin", + "website": "https://alice.vaspbot.net", + "country": "GB", + "business_category": "NON_VASP_ENTITY", + "vasp_categories": [ + "Other" + ], + "ivms101": "EmcKLwoeChpBbGljZSBUcmFkaW5nIENvbXBhbnksIExURBABCg0KCUFsaWNlQ29pbhADEjAIAiILTWFpbiBTdHJlZXQqAzEyM1IFNTU4ODBaClNtYWxsdmlsbGVqAktZggECVVMqAkRF", + "verified_on": "2024-08-28T10:14:43-05:00", + "created": "2024-08-28T10:14:43-05:00", + "modified": "2024-08-28T12:23:24-05:00" + } + }, + "CounterpartyForm": { + "title": "CounterpartyForm", + "type": "object", + "description": "Defines the editable fields to create or update counterparty record. Note that only counterparties created with the user or peer source may be edited.", + "properties": { + "protocol": { + "type": "string", + "enum": [ + "trisa", + "trp", + "email" + ], + "description": "Specify the travel rule protocol used to connect to the counterparty with; this will likely be TRP or email since TRISA counterparties are fetched from the GDS.", + "example": "trp" + }, + "common_name": { + "type": "string", + "format": "domain", + "description": "Specify the common name of the travel rule domain of the counterparty; used for uniquely identifying the counterparty.", + "example": "api.alice.vaspbot.net" + }, + "endpoint": { + "type": "string", + "format": "url", + "description": "Specify the URL endpoint to connect to using the travel rule protocol.", + "example": "api.alice.vaspbot.net:443" + }, + "name": { + "type": "string", + "description": "The name of the counterparty, usually the counterparty's legal or trading name -- for identying counterparty VASPs with search.", + "example": "AliceCoin" + }, + "website": { + "type": "string", + "format": "url", + "description": "The website of the counterparty, used to lookup the counterparty's online information or reference their online presence.", + "example": "https://example.com" + }, + "country": { + "type": "string", + "format": "ISO 3166-1 alpha-2", + "description": "Specify the 2 character country code of the country that the counterparty is registered in or primarily operates in.", + "example": "JP" + }, + "business_category": { + "type": "string", + "enum": [ + "UNKNOWN_ENTITY", + "PRIVATE_ORGANIZATION", + "GOVERNMENT_ENTITY", + "BUSINESS_ENTITY", + "NON_COMMERCIAL_ENTITY", + "NON_VASP_ENTITY" + ], + "description": "Specify a business category for the VASP for local compliance reference.", + "example": "PRIVATE_ORGANIZATION" + }, + "vasp_categories": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "Exchange", + "DEX", + "P2P", + "Kiosk", + "Custodian", + "OTC", + "Fund", + "Project", + "Gambling", + "Miner", + "Mixer", + "Individual", + "Other", + "Unknown" + ], + "description": "Specify the known virtual asset services provided by the counterparty for compliance purposes.", + "example": "Kiosk" + }, + "example": [ + "Exchange", + "Custodian", + "Miner" + ] + }, + "ivms101": { + "type": "string", + "format": "base64", + "description": "The base64 encoded representation of a JSON or protocol buffer IVMS101 record for the legal person of the counterparty can be modified but must be parseable.", + "example": "EmcKLwoeChpBbGljZSBUcmFkaW5nIENvbXBhbnksIExURBABCg0KCUFsaWNlQ29pbhADEjAIAiILTWFpbiBTdHJlZXQqAzEyM1IFNTU4ODBaClNtYWxsdmlsbGVqAktZggECVVMqAkRF" + } + }, + "required": [ + "protocol", + "common_name", + "endpoint", + "name", + "country" + ], + "example": { + "protocol": "trp", + "common_name": "trp.alice.vaspbot.net", + "endpoint": "https://trp.alice.vaspbot.net", + "name": "AliceCoin", + "website": "https://alice.vaspbot.net", + "country": "GB", + "business_category": "NON_VASP_ENTITY", + "vasp_categories": [ + "Other" + ], + "ivms101": "EmcKLwoeChpBbGljZSBUcmFkaW5nIENvbXBhbnksIExURBABCg0KCUFsaWNlQ29pbhADEjAIAiILTWFpbiBTdHJlZXQqAzEyM1IFNTU4ODBaClNtYWxsdmlsbGVqAktZggECVVMqAkRF" + } + }, + "CounterpartySummary": { + "title": "CounterpartySummary", + "type": "object", + "description": "A summary of counterparty fields to return in counterparty lists to conserve memory.", + "properties": { + "id": { + "type": "string", + "format": "ULID", + "description": "The unique identifier of the counterparty on your Envoy node - used to construct the detail url.", + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" + }, + "source": { + "type": "string", + "enum": [ + "gds", + "user", + "peer" + ], + "description": "The source of the counterparty, used to filter the returned list.", + "example": "gds" + }, + "protocol": { + "type": "string", + "enum": [ + "trisa", + "trp", + "email" + ], + "description": "the travel rule protocol used to connect to the counterparty with, used to filter the returned list.", + "example": "trisa" + }, + "endpoint": { + "type": "string", + "format": "url", + "description": "the URL endpoint to connect to using the travel rule protocol.", + "example": "api.alice.vaspbot.net:443" + }, + "name": { + "type": "string", + "description": "The name of the counterparty, usually the counterparty's legal or trading name, for quick identification of a counterparty.", + "example": "AliceCoin" + }, + "website": { + "type": "string", + "format": "url", + "description": "The website of the counterparty, used to identify the counterparty based on domain records.", + "example": "https://example.com" + }, + "country": { + "type": "string", + "format": "ISO 3166-1 alpha-2", + "description": "The 2 character country code of the country that the counterparty is registered in or primarily operates in to assist in counterparty identification.", + "example": "JP" + }, + "created": { + "type": "string", + "format": "date-time", + "description": "The date and time when the counterparty record was created for ordering purposes.", + "example": "2024-08-28T10:14:43-05:00" + } + }, + "example": { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "source": "gds", + "protocol": "trisa", + "endpoint": "api.alice.vaspbot.net:443", + "name": "AliceCoin", + "website": "https://alice.vaspbot.net", + "country": "GB", + "created": "2024-08-28T10:14:43-05:00" + } + }, + "CounterpartyList": { + "title": "CounterpartyList", + "type": "object", + "description": "A list of Counterparty objects, returned in a paginated fashion.", + "properties": { + "page": { + "$ref": "#/components/schemas/PageInfo" + }, + "counterparties": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CounterpartySummary" + }, + "example": [ + { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "source": "gds", + "protocol": "trisa", + "endpoint": "api.alice.vaspbot.net:443", + "name": "AliceCoin", + "website": "https://alice.vaspbot.net", + "country": "GB", + "created": "2024-08-28T10:14:43-05:00" + }, + { + "id": "01J6G3BE4QRY6355ZJ998SATXA", + "source": "gds", + "protocol": "trisa", + "endpoint": "api.bob.vaspbot.net:443", + "name": "BobVASP", + "website": "https://bob.vaspbot.net", + "country": "US", + "created": "2024-08-29T17:15:54-05:00" + } + ] + } + }, + "example": { + "page": { + "page_size": 50 + }, + "counterparties": [ + { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "source": "gds", + "protocol": "trisa", + "endpoint": "api.alice.vaspbot.net:443", + "name": "AliceCoin", + "website": "https://alice.vaspbot.net", + "country": "GB", + "created": "2024-08-28T10:14:43-05:00" + }, + { + "id": "01J6G3BE4QRY6355ZJ998SATXA", + "source": "gds", + "protocol": "trisa", + "endpoint": "api.bob.vaspbot.net:443", + "name": "BobVASP", + "website": "https://bob.vaspbot.net", + "country": "US", + "created": "2024-08-29T17:15:54-05:00" + } + ] + } + }, + "Transaction": { + "title": "Transaction", + "type": "object", + "description": "A transaction is a travel rule information exchange related to an on-chain transfer of virtual assets for compliance purposes. The Envoy node stores the transaction information in a decrypted form for indexing and search, but the PII of a transaction is stored in secure envelopes, which are encrypted and exchanged with the counterparty.", + "externalDocs": { + "description": "Transaction States", + "url": "https://trisa.dev/envoy/workflows/index.html#transaction-states-and-actions" + }, + "properties": { + "id": { + "type": "string", + "format": "uuid", + "description": "The transaction ID, also the TRISA envelope ID (must be a UUID).", + "example": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5" + }, + "source": { + "type": "string", + "enum": [ + "unknown", + "local", + "remote" + ], + "description": "The originating source of the transaction; \"local\" if this was an outgoing transaction from this Envoy node, \"remote\" if this is an incoming transaction from a counterparty.", + "example": "remote" + }, + "status": { + "type": "string", + "enum": [ + "unspecified", + "draft", + "pending", + "review", + "repair", + "accepted", + "completed", + "rejected" + ], + "description": "The current status of the travel rule transaction, which defines the actions the compliance officer should take.", + "example": "accepted" + }, + "counterparty": { + "type": "string", + "description": "The name or common name of the counterparty as determined by the Envoy node.", + "example": "AliceCoin" + }, + "counterparty_id": { + "type": "string", + "format": "ulid", + "description": "The ID of the counterparty in the counterparties table of the Envoy node.", + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" + }, + "originator": { + "type": "string", + "description": "The name of the originator as determined by the Envoy node.", + "example": "James Bond" + }, + "originator_address": { + "type": "string", + "description": "The crypto wallet address of the originator as determined by the Envoy node.", + "example": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i" + }, + "beneficiary": { + "type": "string", + "description": "The name of the beneficiary as determined by the Envoy node.", + "example": "Twilda Swansong" + }, + "beneficiary_address": { + "type": "string", + "description": "The crypto wallet address of the beneficiary as determined by the Envoy node.", + "example": "mtWVpHEcFcCGG9cuj1rUxhTGQZ1gEazxs6" + }, + "virtual_asset": { + "type": "string", + "description": "A representation of the network and virtual asset that defines the on-chain transaction.", + "example": "BTC" + }, + "amount": { + "type": "number", + "description": "The amount of the on-chain transaction as defined by the smallest unit of that virtual asset.", + "example": 1.23e-6 + }, + "last_update": { + "type": "string", + "format": "date-time", + "description": "The timestamp of the last activity on the transaction; usually a secure envelope sent or received.", + "example": "2024-08-30T12:41:14-05:00" + }, + "envelope_count": { + "type": "integer", + "description": "The number of envelopes sent back and forth between your node and the counterparty.", + "example": 8 + }, + "created": { + "type": "string", + "format": "date-time", + "description": "The timestamp that the transaction record was created.", + "example": "2024-08-30T11:14:55-05:00" + }, + "modified": { + "type": "string", + "format": "date-time", + "description": "The timestamp that the transaction record was last modified.", + "example": "2024-08-30T12:41:14-05:00" + } + }, + "example": { + "id": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5", + "source": "remote", + "status": "accepted", + "counterparty": "AliceCoin", + "counterparty_id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "originator": "James Bond", + "originator_address": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "beneficiary": "Twilda Swansong", + "beneficiary_address": "mtWVpHEcFcCGG9cuj1rUxhTGQZ1gEazxs6", + "virtual_asset": "BTC", + "amount": 1.23e-6, + "last_update": "2024-08-30T12:41:14-05:00", + "envelope_count": 8, + "created": "2024-08-30T11:14:55-05:00", + "modified": "2024-08-30T12:41:14-05:00" + } + }, + "TransactionForm": { + "title": "TransactionForm", + "type": "object", + "description": "The editable fields that can be used to create or modify a transaction record.", + "properties": { + "source": { + "type": "string", + "enum": [ + "unknown", + "local", + "remote" + ], + "description": "The originating source of the transaction; generally if using the create method, you should specify \"local\".", + "example": "remote" + }, + "status": { + "type": "string", + "enum": [ + "unspecified", + "draft", + "pending", + "review", + "repair", + "accepted", + "completed", + "rejected" + ], + "description": "The current status of the travel rule transaction, which should be set based on actions taken by compliance officers or the remote counterparty.", + "example": "accepted" + }, + "counterparty": { + "type": "string", + "description": "The name or common name of the counterparty for filtering and searching.", + "example": "AliceCoin" + }, + "counterparty_id": { + "type": "string", + "format": "ulid", + "description": "The ID of the counterparty for better counterparty lookup.", + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" + }, + "originator": { + "type": "string", + "description": "The name of the originator of the transaction.", + "example": "James Bond" + }, + "originator_address": { + "type": "string", + "description": "The crypto wallet address of the originator of the transaction.", + "example": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i" + }, + "beneficiary": { + "type": "string", + "description": "The name of the beneficiary the transfer is going to.", + "example": "Twilda Swansong" + }, + "beneficiary_address": { + "type": "string", + "description": "The crypto wallet address of the beneficiary the transfer is going to.", + "example": "mtWVpHEcFcCGG9cuj1rUxhTGQZ1gEazxs6" + }, + "virtual_asset": { + "type": "string", + "description": "The network and virtual asset of the on-chain transaction.", + "example": "BTC" + }, + "amount": { + "type": "number", + "description": "The amount of the the smallest unit of the virtual asset for the blockchain.", + "example": 1.23e-6 + } + }, + "required": [ + "source", + "status", + "counterparty", + "virtual_asset", + "amount" + ], + "example": { + "source": "remote", + "status": "accepted", + "counterparty": "AliceCoin", + "counterparty_id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "originator": "James Bond", + "originator_address": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "beneficiary": "Twilda Swansong", + "beneficiary_address": "mtWVpHEcFcCGG9cuj1rUxhTGQZ1gEazxs6", + "virtual_asset": "BTC", + "amount": 1.23e-6 + } + }, + "TransactionList": { + "title": "TransactionList", + "type": "object", + "description": "A list of transaction objects, returned in a paginated fashion.", + "properties": { + "page": { + "$ref": "#/components/schemas/PageInfo" + }, + "transactions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Transaction" + }, + "example": [ + { + "id": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5", + "source": "remote", + "status": "accepted", + "counterparty": "AliceCoin", + "counterparty_id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "originator": "James Bond", + "originator_address": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "beneficiary": "Twilda Swansong", + "beneficiary_address": "mtWVpHEcFcCGG9cuj1rUxhTGQZ1gEazxs6", + "virtual_asset": "BTC", + "amount": 1.23e-6, + "last_update": "2024-08-30T12:41:14-05:00", + "envelope_count": 8, + "created": "2024-08-30T11:14:55-05:00", + "modified": "2024-08-30T12:41:14-05:00" + }, + { + "id": "a1edfdf3-a0b2-423a-b293-dd597a3664c0", + "source": "local", + "status": "pending", + "counterparty": "BobVASP", + "counterparty_id": "01J6JC3YZ207WZ9Y9RJQAWB9E6", + "originator": "Marcell Aven", + "originator_address": "0x435A6EA4EAFF2ACC2717F51AF55D7EC1528CA5C0", + "beneficiary": "Francine Le'vint", + "beneficiary_address": "0x79099D52D6FC37F1BEE10BA20EE5F8D86FFAB95D", + "virtual_asset": "ETH", + "amount": 628, + "last_update": "2024-08-30T14:28:46-05:00", + "envelope_count": 2, + "created": "2024-08-30T14:28:38-05:00", + "modified": "2024-08-30T14:28:46-05:00" + } + ] + } + }, + "example": { + "page": { + "page_size": 50 + }, + "transactions": [ + { + "id": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5", + "source": "remote", + "status": "accepted", + "counterparty": "AliceCoin", + "counterparty_id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "originator": "James Bond", + "originator_address": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "beneficiary": "Twilda Swansong", + "beneficiary_address": "mtWVpHEcFcCGG9cuj1rUxhTGQZ1gEazxs6", + "virtual_asset": "BTC", + "amount": 1.23e-6, + "last_update": "2024-08-30T12:41:14-05:00", + "envelope_count": 8, + "created": "2024-08-30T11:14:55-05:00", + "modified": "2024-08-30T12:41:14-05:00" + }, + { + "id": "a1edfdf3-a0b2-423a-b293-dd597a3664c0", + "source": "local", + "status": "pending", + "counterparty": "BobVASP", + "counterparty_id": "01J6JC3YZ207WZ9Y9RJQAWB9E6", + "originator": "Marcell Aven", + "originator_address": "0x435A6EA4EAFF2ACC2717F51AF55D7EC1528CA5C0", + "beneficiary": "Francine Le'vint", + "beneficiary_address": "0x79099D52D6FC37F1BEE10BA20EE5F8D86FFAB95D", + "virtual_asset": "ETH", + "amount": 628, + "last_update": "2024-08-30T14:28:46-05:00", + "envelope_count": 2, + "created": "2024-08-30T14:28:38-05:00", + "modified": "2024-08-30T14:28:46-05:00" + } + ] + } + }, + "SecureEnvelope": { + "title": "SecureEnvelope", + "type": "object", + "description": "A secure envelope holds an encrypted payload that contains the PII compliance information related to a transaction. The goal of a TRISA transaction is for both counterparties to have identical secure envelope payloads, encrypted so that only each counterparty may view the payload. TRP messages are also stored in secure envelopes, though there is no guarantee of how the data is being stored on the counterparty.", + "properties": { + "id": { + "type": "string", + "format": "ulid", + "description": "The unique ID of this secure envelope in the Envoy database.", + "example": "01J6S9G7GDGNKETY6YDJQC3Z47" + }, + "envelope_id": { + "type": "string", + "format": "uuid", + "description": "The transaction ID that the secure envelope is associated with; referred to as the envelope ID because it is the ID used in secure envelope TRISA exchanges with the counterparty.", + "example": "cb9a92a3-dfa6-4ecc-a4cc-c1f8fa94d3fe" + }, + "direction": { + "type": "string", + "enum": [ + "out", + "in", + "any" + ], + "description": "The send direction of the secure envelope; out refers to a secure envelope sent from the local Envoy node to the remote counterparty; in refers to a secure envelope that was received from a remote counterparty.", + "example": "out" + }, + "remote": { + "type": "string", + "description": "The common name or mTLS certificate identification of the remote counterparty to whom the secure envelope was being sent.", + "example": "api.alice.vaspbot.net" + }, + "reply_to": { + "type": "string", + "format": "ulid", + "description": "TRISA secure envelopes come in pairs because the RPC mechanism request is a secure envelope and the reply is also a secure envelope. If this field is populated, it refers to the secure envelope this envelope was a reply to.", + "example": "01J6S9RJ2APF7C6M10C8NTYVGX" + }, + "payload": { + "type": "string", + "format": "base64", + "description": "The encrypted payload data. This is the data that was encrypted using the encryption algorithm and key specified in the secure envelope and the data upon which the HMAC signature was computed upon.", + "example": "bB42PZaunlTiYPPzrSqytFQN8oCpQNj9CklXNGmgAcejnuDL8gH6WpdNOO+nWYurnI7DnPwSORl8bD2xHcFQ10cph7nPOoU4FZ+6AdFvBvpF7tJrW+zx9XqwKiUqLdQsYKl1kp4TVKNMOdDQCf3fuYrbfz8NL2e5k5RItHy/AGtf3/BDgVKzMFgKkgZntpeXSRaJjDfH3aaPIJtPq1OoNXDhkzPmQW63Fx30LjxquBbnkBHp7BF12IelNdc/5rYsV2YiTAMSxdwlXudewZUVfHYS1OMbaDXF2tmrlWIc0W/4XnxBG1Baku5A8J2Y5+w+AKkPS4vV4erEgVASGkoOgIQLOKkRdB5W72s9aF3jpwm/Bl3tQ6whT28xICf36buf9ovB0bQA5qm46OfrZGIcNpGPLwWId2kUbZIH87V+ICxcCkSqiFdvl9jGOodK9Chf9lIbFafEjdGSbJ47erDEbTD3n8Ch4LMjMRgR/WmtBHkmAg0+ZtP9IZ+dIJ0jPVo+UohdEpjf6dTfDTHQ4om5+yMnkFzxi2qEc3VXfmhGpFbyEck8yUu1FJHgSijI3mmDLGGOCED2+Ljt4TIgeFOz8qhKP+NK/aPI1nGrrtcbZw3YYN5wDAzMC55x9fu3onefQQchuHMsknuRYZZqd8ywFqgY9qaxglwGStK4eWsusG/ko6BvcPflbZZDTnK48PU1LlePNaXQU13lTgMldGNIl39SJ8soJKj7dycggCIEYoRDYWKofF/vjwqI17YaO57tx9i6frPExBVFVIwfvQ37DXJMLNHdo5vGv2rm6Hrp9Dz/xgTSsxk46zHQOz/QETnchunMDKYdyhgScff8tDbKii0u+J+wcOC45q/QgGYVxQMDgu5LGZHDABXEnKrm2MVrjzzsqpACBf4GzJjJCq0SK/OfQcdicFCGffgZXngwxGrEwa896NiwGoMj28udpInXmvlT5Wc0tSf+7sJrUROaMr2pP62AoxVqKPnfNXXucuelzFL+Y6B7jZVju4QbET0+6PF56KkrsMxXuV5Xv37Sxq+STXoPgR1VhZBC24e4uPXIYt4cf3Wq67k2HGnq43ltN2oYAhGC22n8/fa7vjEDXjYFBg5pZCV3MgxNfmgflQU14hLN0jdgyFZlQtzC1Fi7+KOI2cksV7vQ/gQwzIwZ63VaXKRg2UjMNjYyE/J1ZDBOgAwFeSAdYETOrKOVyYCJeBECOBmUdfwNkx6Gib4XabbrwB456mPpm1SWtmai3yk5YnPRcjDo6vlJTXhI3QzX5DvXoMuR4NLrrVlaUAUWbMpl/VnijzrFTZyKCl4zRI+MXOF5xgf8dQ1vQdhquLJGSeiSI4w8dl4g7l2nZY6Ck8hwJ9CAym6PerD/PboxjQDKVxetW3mkG9o8F4Scb2trH8YADaE/ogm+ccTPP7qaQveSyD07Vgb9vv23uQvhvj2nY2PJhYxJxzNnhLSxIJ5jf9p83fItcIoEXnQvQo8YzPPx7oU+TEvlE0xUSTQCiXP4IdBFX0zYKflptWudkoKUKk0hwPZTA+/p8mi1KfHrxPKulebGDey6rW4Bt2++7hiVjaVrQHgpLareyyWjtwFZhElDaCMyM6P3Nsh6jOXGpSI8B4rI2jV6ikbds9A=" + }, + "encryption_key": { + "type": "string", + "format": "base64", + "description": "The encryption key, encrypted using the public keys specified by the public key signature. To decrypt the payload, you must first decrypt the encryption key using your private keys.", + "example": "Dyi0QAJKwJSMBXppgTBaFbY9rOAWssn25BC+lujipYNYIdvUNqEEkNUOkfQw1wYWWl7z3W8Hd9oogCFUucQ/D3K+pr2CpnGW4owmKyzCwdFrtkUrxdmgus4PzCYQHtRoMadpkj1Z/DRjroMyUotjQY2uou2W34F6xe70US91Dq6QS9/EuRlENzsF0XAdRcgP3TZKIlfi2d5x5Il1RMkzGCCFw30607j/8Yxbik9g0b8ncUk9I4yC8WT4P6JFftEmlxovVJ5qmUUcQmywEqA/0Y2rFt9ycQZRau65uySAEc6qkNIhTQpzLW6wkruCCWmYWbzEil/a//MVs9zYhmKfwqT2ELCnmyEszhUDNXbx4ZMobEF5QSMhYT6oYsu9njboifP9QY5xsUrmCrKzhG3cv33ObR2hojy1GeMXbM/rbl5YPTTfMP/pUQRil4tT2FJv4C6RUkU6dvlK6eiieZR0L7o2lnP+5TQTzuGcqcRt0QF7eTyZ+Ovt0S5w0FA351Xq6DwP4ZeLC/Ce7EHLRfBOiwcg6fGsDfrb9GRlC9yEV/jZL8nTBqjTIeyCsrW2+gzzKrvMXRkjlXXNQzelLO7g+zisAhn7iP9b+lXauaEw+xFiJNMIMLxDGZRi28524W/cCqjNYMDKCNgwvR+4JrTVeOsqYiO08G2K4nPmURBZeMU=" + }, + "encryption_algorithm": { + "type": "string", + "description": "The name of the encryption algorithm used to encrypt the payload.", + "example": "AES256-GCM" + }, + "valid_hmac": { + "type": "boolean", + "description": "Set to true if the HMAC was validated upon receipt of the secure envelope. False if the HMAC is not valid or the secure envelope only contains an error and no payload.", + "example": true + }, + "hmac": { + "type": "string", + "format": "base64", + "description": "The HMAC signature of the payload using the HMAC secret and HMAC algorithm. The HMAC is used to cryptographically guarantee that the payload has not been tampered with or modified either in-flight or during compliance long term storage.", + "example": "4jFyAEqQgEZ95Q/gllFaznN7ZVcXq9TFM2rrcq+1a+E=" + }, + "hmac_secret": { + "type": "string", + "format": "base64", + "description": "The hmac secret, encrypted using the public keys specified by the public key signature. To verify the HMAC signature, you must first decrypt the hmac secret using your private keys.", + "example": "dBwAMuFpP6EticvuDY5ikVYlyuT7RM+mS6MOX5QVC2xNtSgmewrAnzP1qPOy6inpBe5JdfWU8N99aacXU6DtkPDrU7SdDny+XLbdgxTRFRPowrA0ADIylnwUfiRigJjuo8Uu8Sg8roVnc/y0ibeVX5KV/h1J043TzcIbQtdJ4SfjVnBpPxOa+mmQr4K4MCSDWinNQPiF8Y+dxANc5Kx31MFii1txPpZJo+BdniASsh2YWBKsqTe6FUVlGnpAnzSmCv9vXRnX5TvTcZsZPOdXJOQDJMpnwoQtP4GuTxCD6Qv08gH2G93M8gwj6N+P4C96rmHjmO/tsqPMasjHcwTgeBSQ8AlTa6+c9uS/Q+woGrOwWdJfPhq2TRdaARAJeMFkCfi2afVK6WoJh5vjjUYpcjWYSNxX683LpdXMOEyMhZF5xeHOk/P1e+mtZO9xGniK8j8ylobybwd8dfXoy3hhHq0MeKQsvUJUPqNoZ0uzfnPkdYe3BFziMg9hhcv2+KX4nifTfBH8ffus+ECR2DFwMeUZI3b7hmtY+LKZy+SNtqAkXKC8ownwcp7zxUFgBIVPnWwFLMa5Dlar1sV2+dOUTVG7WcgxWab47nGLmhVChZmsD13FUBgBR+08fuyTzJ9Gdw7qLhc16lCRrV6JoOoCOgvc1Mi+M7N3y2Ws7Vduq/M=" + }, + "hmac_algorithm": { + "type": "string", + "description": "The name of the hmac algorithm used to sign the payload.", + "example": "HMAC-SHA256" + }, + "is_error": { + "type": "boolean", + "description": "TRISA secure envelopes can contain either errors (in which case the Error field is populated) or secure payloads (in which case the payload and cryptography fields are populated).", + "example": false + }, + "error": { + "$ref": "#/components/schemas/TRISAError" + }, + "timestamp": { + "type": "string", + "format": "date-time", + "description": "The RFC3339 timestamp that the secure envelope was sent.", + "example": "2024-09-02T07:12:34-05:00" + }, + "sealed": { + "type": "boolean", + "description": "If true, the encryption key and hmac secret are encrypted with the public keys specified by the public key signature; if false these fields are in plain text and can be used directly.", + "example": true + }, + "public_key_signature": { + "$ref": "#/components/schemas/PublicKeySignature" + }, + "transfer_state": { + "$ref": "#/components/schemas/TransferState" + }, + "original": { + "type": "string", + "format": "base64", + "description": "The original protocol buffer data for the secure envelope for local storage.", + "example": "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" + } + }, + "example": { + "id": "01J6S9G7GDGNKETY6YDJQC3Z47", + "envelope_id": "cb9a92a3-dfa6-4ecc-a4cc-c1f8fa94d3fe", + "direction": "out", + "remote": "api.alice.vaspbot.net", + "reply_to": "01J6S9RJ2APF7C6M10C8NTYVGX", + "payload": "Omjx7x69RRFOcheWgESMKph5befzbENJoFXjgno74FCrCeZx5EoR3w515lR76X0pOqghaXErNir14/GisfSKuyZnwD4re7hbFrQn3nIjqqirKvkFRKf4QIOQv/0DfK/ofc8/3+OLN5YP9Js/5vMp3DcFWqYzB8AvCDGC6AtcNh+7Y6arHlCCXzQfxeI1BZeMN5QGeMSL8Ad3od6Nqy92KVCeSksNv858x7XDiYKTh72Rn/z+11UVw5wc4cKdf536vZQ87v38SNV3k7ASfmT+a8+19HnE2aPy/bYtmEQd94Q2w0+JPF4lB9C8DooMS7ctnOUDSIiY++v4xX4Ty40iOFQOns77E9itfAYQwYyVHoLXJVA9SR5aBYDJse0mhRlJ5KHf0cY7CPQlvtcCRu+rwdYu7U2XFXYXCjYS2a6mB+ozUaZMepcPst1XPqQRW2ZMKP8Q9sCa/0r2XIO9yHksaPt3AbbjfHczEvl44f2NkdpfBAtTYYGUfO441EBieO3NhE6XTWbAHaj8Sxo4DUpvibaENbIuMNksme3WCM6ZJRHJ70us+9PJSA9VEiGRHR64YbZn95iBcH7HAVWPJdPAmfSuRQ0i4LbdFdq33LZG33uJWLP0sK6ncFM+0e1G1S6hRN3hXEEdFhHxuOOq90Vq29mQHbgzrZiHgIKqasutXYU/Tbxcqi1oUZdRAMXIySfAVFVT9672DsQpAoFalKGeSu3kbNTfYTYBpvDFVFxJI/cvn/D64AOzg8feo/9KtJgSPG9QijCyD1hbkii75/ssu1Z8X9mj0Y4kRxS41EimihmQzTE47dxYjGy+W3X9s0H8AMyDmlvTU++5x8qyxLht9s6R83L8sXH+J9/4mLebgIccaaKYqJQZ7pWJoqrujuO1InYBWCUGPdRpHPlKmuMHjhc13j8PhGOrc4ylanOfdxUumUI4nLNlluKpijAZ/lwpNnixNbAu/ZpZUXLGcpgOZgqgBljcLOWq+PKteLhH2SIxt9+bIO8HoWzfpkVRWumuTi1xKQmkrOHW140uYez831Mz0ZDwB4u6aiHouSAu+MAGp/VzA0DmfjTGqD8KccxYZg+Cxye2e2CXJe6xw+AgUTg5bSeAIgwEafZU56BlV5tjdYMrXlcchS4ORGUV1ysMGBc0KIxYuvmciV17aD7R6wUbvgntvSGfvPvcbFqTY06sECgcWVVs8QB5avB7v4nYCDYnTay6Zc6ETE6EO9t+94bKljvAto3RefiFQeCfDnkbFWKHY37ofsTn3Crc+iesMmAzGJvOPkzgcxEjhpoFV7XYPiG0ke31dNFOrb9cZpTZJfi80XZjE6Z/ugQYWrfKjXauPYRbJWAts7TAaz28PxpjTjbdCO3wMCzKlYKnk+yCYwZe2c1Hdz4VEmNFNe30Uf7AH3dW2Q5tjKzn/ghj/zVeVI2bQLwfSKaEQI78Sqg5gXETwgkMCuzjp2850AMndNaep5W1JQ4PcWkLEonMPcdZF9CMIX7WaYFHRkbOuJC5ncC3icnyD0qEC/XWsvEQTR6rzY4vTIIZOgDMbKoZDK4C5kOj5pewohNOuYySQwB6A5hcNtW6Z/uJ4V9vGX+EPzwjTaHbe8GDj++NlzG+FQi1GozS+6vqJU5FCTdhTMzelg5blkozihiUGkkABFsMcn8R2uMvjJ/WebjkeQC3pkRkc+qfyAH+Q2uhSASfVAsKkalBFh3Y9uwwuY1Tl4aHMvmAWvBpbIpP/PI90JhW", + "encryption_key": "vSdEaKmbQUA4hUfbpx2LAi7rfYK3YwVPMt7w0M0wHWI6sPTlLI863Bgagja7pP3TAq6dTuwXnT0jxbW/I6i2LYshvUbkHJIl/6nddGbJiJzJNboFvVZNFlNYCRDm2T/lOx0PPcuuficHQpVrqZUTT8g9jB3gwkSvCQMVt41g4aKnNGmxze1nVLi3LlmILNfownTxWRkPP4ASbBVZ204qi4c/1EA3AKI0vuSB1I4Sjk2D77/Ui67QTVc5xqdk+AGUON/hkFAa4RSC0DXmNqKBLobPkY3RhK1n1SqmCifjGBsqMdpXPnfAZlibxeB5UssZKK+1Lcj2viKY3FUPZFCNm5GgUhzxyXH5BCHgpgbpS4JQ9+8uyiUxyG5MpRZrdRowz252b1QiZ12u5lnxDO6RKQGcwRvs2mEst6ikkTHIIoZ13q4aZHsW7VWP3+ogZj/o3EnLxcYJO2PNkoHhLcQya6NSvxxgA8x6oRDObOLnzspavNw7tHf2LwORrd3PYJylNgllpoFK1qUIIdYulESkLuE6jqURIgP8WYUZ3nhMEAaHJbB4G66KoDGam0cmxTKiHGG11QU8SUNVdU8w/eb1NmR5ZSQIJdQA7RyREklZdjsW+mmcHgygxynHjzBe7kiXBNYBWz2CVQxGE+TySIi4ZHE2rxLpSCFAKl3KtLIVG4o=", + "encryption_algorithm": "AES256-GCM", + "valid_hmac": true, + "hmac": "HBzhe6ltfH0cfJ4rQCl8G6LX/eD6aJShh+9mYJ4ExHU=", + "hmac_secret": "KxPZDbLAu7c5ASYiuOLWQwnQi2r7L7925x0MBuNaNQs1vcGa79y3+IF6uprD9MwwYIqZ/5CBaAJusUuVXJ9KXSWVu4SD8yGv6M1HkEPzic7pvywcH6zqjBYupjhWGcit9IfB1oWGMPG7T7s7Ctl7eBLpVyfSI2veXLFYViFoXlUPNovcQ1MgnPNAVaIuAlmHsEC6JIeSsHb1uhpYxapBWvZPYT9g/QKWggyCZDQWohYrscRq+iPa1YpMuJJ77R6Bb3hJzDwE9onZwz8Vnl3V2uY7JNw1WSyGu/chpBO4yMrTvYcvThsoo+lWbnoSmImWX3jHbVK/6+hxlyEnQJ+9YnZHk7a7b21UXOB/lmm58InK5FEaB2wotDSlrwJB7wLT5Y2PtqyamqRYlOtc14owfrfbHcSWe7RoGOhKzRILqgV8zFZv0sg/+uZU5dYm5ef/mRDeLBpfs4qbOHSsNm1CVQSK64SrEyv0wdFL+OSS5l9Vq/CEEgYG7Q7qz+m/ahCurI2o6GoIDvkEfA+5TfoJ3ZUU/l1DGlUiJx5YxQClktVoWfL2W790D5u5uHrI+Qzy00lJ/o/ffx4cgCZiJF+E4xuxNi7ZPByiftciNpXk2a1nyTE9HuB90UULBLwnr8mVzFrwfgkMbof4XlgAxOIsTv6PUPkyOq7Ol4H6B4zY27s=", + "hmac_algorithm": "HMAC-SHA256", + "is_error": false, + "timestamp": "2024-09-02T07:12:34-05:00", + "sealed": true, + "public_key_signature": "SHA256:n/iTnE9b0sP1DQkaDMricHqPKYj0n00IjiaJ7lUmcAs", + "transfer_state": "STARTED", + "original": "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" + } + }, + "SecureEnvelopeSummary": { + "title": "SecureEnvelopeSummary", + "type": "object", + "description": "The subset of secure envelope fields that are returned as a summary for lists of secure envelopes to minimize data transfer.", + "properties": { + "id": { + "type": "string", + "format": "ulid", + "description": "The unique ID of the secure envelope.", + "example": "01J6S9G7GDGNKETY6YDJQC3Z47" + }, + "envelope_id": { + "type": "string", + "format": "uuid", + "description": "The transaction ID that the secure envelope is associated with.", + "example": "cb9a92a3-dfa6-4ecc-a4cc-c1f8fa94d3fe" + }, + "direction": { + "type": "string", + "enum": [ + "out", + "in", + "any" + ], + "description": "The send direction of the secure envelope.", + "example": "out" + }, + "remote": { + "type": "string", + "description": "The common name of the remote counterparty.", + "example": "api.alice.vaspbot.net" + }, + "reply_to": { + "type": "string", + "format": "ulid", + "description": "If this field is populated, it refers to the secure envelope this envelope was a reply to.", + "example": "01J6S9RJ2APF7C6M10C8NTYVGX" + }, + "encryption_algorithm": { + "type": "string", + "description": "The name of the encryption algorithm.", + "example": "AES256-GCM" + }, + "valid_hmac": { + "type": "boolean", + "description": "Set to true if the HMAC was validated upon receipt of the secure envelope.", + "example": true + }, + "hmac_algorithm": { + "type": "string", + "description": "The name of the hmac algorithm.", + "example": "HMAC-SHA256" + }, + "is_error": { + "type": "boolean", + "description": "If the envelope contains an error instead of a payload.", + "example": false + }, + "error": { + "$ref": "#/components/schemas/TRISAError" + }, + "timestamp": { + "type": "string", + "format": "date-time", + "description": "The RFC3339 timestamp logging when the secure envelope was sent.", + "example": "2024-09-02T07:12:34-05:00" + }, + "sealed": { + "type": "boolean", + "description": "Whether the secure envelope is sealed or not.", + "example": true + }, + "public_key_signature": { + "$ref": "#/components/schemas/PublicKeySignature" + }, + "transfer_state": { + "$ref": "#/components/schemas/TransferState" + } + }, + "example": { + "id": "01J6S9G7GDGNKETY6YDJQC3Z47", + "envelope_id": "cb9a92a3-dfa6-4ecc-a4cc-c1f8fa94d3fe", + "direction": "out", + "remote": "api.alice.vaspbot.net", + "reply_to": "01J6S9RJ2APF7C6M10C8NTYVGX", + "encryption_algorithm": "AES256-GCM", + "valid_hmac": true, + "hmac_algorithm": "HMAC-SHA256", + "is_error": false, + "timestamp": "2024-09-02T07:12:34-05:00", + "sealed": true, + "public_key_signature": "SHA256:n/iTnE9b0sP1DQkaDMricHqPKYj0n00IjiaJ7lUmcAs", + "transfer_state": "STARTED" + } + }, + "Envelope": { + "title": "Envelope", + "type": "object", + "description": "An envelope is a decrypted version of a secure envelope and is used either to allow the Envoy node to perform decryption on behalf of the API client or for the API client to send data to the Envoy node for conversion into a secure envelope. The envelope will either contain an Error (is_error=True) or it will contain a Payload (is_error=false) consisting of the identity, sent_at, and received_at timestamps and either the transaction or pending payload (not both).", + "properties": { + "id": { + "type": "string", + "format": "ulid", + "description": "The unique ID of the secure envelope this envelope was decrypted from.", + "example": "01J6S9G7GDGNKETY6YDJQC3Z47" + }, + "envelope_id": { + "type": "string", + "format": "uuid", + "description": "The transaction ID that the envelope is associated with; referred to as the envelope ID because it is the ID used in secure envelope TRISA exchanges with the counterparty.", + "example": "cb9a92a3-dfa6-4ecc-a4cc-c1f8fa94d3fe" + }, + "direction": { + "type": "string", + "enum": [ + "out", + "in", + "any" + ], + "description": "The send direction of the decrypted envelope; out refers to an envelope sent from the local Envoy node to the remote counterparty; in refers to an envelope that was received from a remote counterparty.", + "example": "out" + }, + "remote": { + "type": "string", + "description": "The common name or mTLS certificate identification of the remote counterparty to whom the envelope was being sent.", + "example": "api.alice.vaspbot.net" + }, + "reply_to": { + "type": "string", + "format": "ulid", + "description": "TRISA envelopes come in pairs because the RPC mechanism request is a secure envelope and the reply is also a secure envelope. If this field is populated, it refers to the secure envelope this decrypted envelope was a reply to.", + "example": "01J6S9RJ2APF7C6M10C8NTYVGX" + }, + "is_error": { + "type": "boolean", + "description": "TRISA decrypted envelopes can contain either errors (in which case the Error field is populated) or secure payloads (in which case the payload fields are populated).", + "example": false + }, + "error": { + "$ref": "#/components/schemas/TRISAError" + }, + "identity": { + "$ref": "#/components/schemas/IdentityPayload" + }, + "transaction": { + "$ref": "#/components/schemas/TransactionPayload" + }, + "pending": { + "$ref": "#/components/schemas/PendingPayload" + }, + "sent_at": { + "type": "string", + "format": "date-time", + "description": "The RFC3339 timestamp that the travel rule information exchange was started for compliance purposes.", + "example": "2024-09-02T07:12:33-05:00" + }, + "received_at": { + "type": "string", + "format": "date-time", + "description": "The RFC3339 timestamp that the travel rule information exchange was concluded for compliance purposes.", + "example": "2024-09-06T19:04:21-05:00" + }, + "timestamp": { + "type": "string", + "format": "date-time", + "description": "The RFC3339 timestamp that the envelope was sent.", + "example": "2024-09-02T07:12:34-05:00" + }, + "public_key_signature": { + "$ref": "#/components/schemas/PublicKeySignature" + }, + "transfer_state": { + "$ref": "#/components/schemas/TransferState" + }, + "secure_envelope": { + "$ref": "#/components/schemas/SecureEnvelope" + } + }, + "example": { + "id": "01J6S9G7GDGNKETY6YDJQC3Z47", + "envelope_id": "cb9a92a3-dfa6-4ecc-a4cc-c1f8fa94d3fe", + "direction": "in", + "remote": "trisa.example.jp", + "reply_to": "01J6S9RJ2APF7C6M10C8NTYVGX", + "is_error": false, + "identity": { + "originator": { + "originatorPersons": [ + { + "naturalPerson": { + "name": { + "nameIdentifier": [ + { + "primaryIdentifier": "Bond", + "secondaryIdentifier": "James", + "nameIdentifierType": "LEGL" + } + ] + }, + "geographicAddress": [ + { + "addressType": "HOME", + "streetName": "High Street", + "buildingNumber": "7b", + "townName": "London", + "postCode": "SE1 2QH", + "country": "GB" + } + ], + "nationalIdentification": { + "nationalIdentifierType": "DRLC", + "nationalIdentifier": "BOND9211110JA9OB", + "countryOfIssue": "GB" + }, + "customerIdentification": "01J6DJ9F691CF8E9H0V3ET0M0E", + "dateAndPlaceOfBirth": { + "dateOfBirth": "1920-11-11", + "placeOfBirth": "Wattenscheid, Germany" + }, + "countryOfResidence": "GB" + } + } + ], + "accountNumber": [ + "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i" + ] + }, + "beneficiary": { + "beneficiaryPersons": [ + { + "naturalPerson": { + "name": { + "nameIdentifier": [ + { + "primaryIdentifier": "Miura", + "secondaryIdentifier": "Kentaro", + "nameIdentifierType": "LEGL" + } + ], + "localNameIdentifier": [ + { + "primaryIdentifier": "三浦", + "secondaryIdentifier": "建太郎", + "nameIdentifierType": "LEGL" + } + ] + }, + "geographicAddress": [ + { + "addressType": "HOME", + "streetName": "Shimohirakawa", + "buildingNumber": "1536-2", + "townName": "菊川市", + "countrySubDivision": "静岡県", + "postCode": "437-1514", + "country": "JP" + } + ], + "nationalIdentification": { + "nationalIdentifierType": "SOCS", + "nationalIdentifier": "0537-73-2271", + "countryOfIssue": "JP" + }, + "customerIdentification": "01J6QNPGSKN2HZGC2F33F3QQRF", + "dateAndPlaceOfBirth": { + "dateOfBirth": "1979-02-14", + "placeOfBirth": "Tokyo, Japan" + }, + "countryOfResidence": "JP" + } + } + ], + "accountNumber": [ + "mtLmjWt1DDxjGhMRmnxcgQqPNGPUzXuDHw" + ] + }, + "originatingVASP": { + "originatingVASP": { + "legalPerson": { + "name": { + "nameIdentifier": [ + { + "legalPersonName": "High Street Capital Management, LTD", + "legalPersonNameIdentifierType": "LEGL" + }, + { + "legalPersonName": "PubCoin", + "legalPersonNameIdentifierType": "TRAD" + } + ] + }, + "geographicAddress": [ + { + "addressType": "BIZZ", + "streetName": "Abbey St.", + "buildingNumber": "51", + "townName": "Nottingham", + "postCode": "NG7 2NZ", + "country": "GB" + } + ], + "nationalIdentification": { + "nationalIdentifier": "GKUH00AIM6DCRXGXVU75", + "nationalIdentifierType": "LEIX" + }, + "countryOfRegistration": "GB" + } + } + }, + "beneficiaryVASP": { + "beneficiaryVASP": { + "legalPerson": { + "name": { + "nameIdentifier": [ + { + "legalPersonName": "Nippon Crypto Exchange, KK", + "legalPersonNameIdentifierType": "LEGL" + } + ], + "localNameIdentifier": [ + { + "legalPersonName": "日本仮想通貨取引所株式会社", + "legalPersonNameIdentifierType": "LEGL" + } + ], + "phoneticNameIdentifier": [ + { + "legalPersonName": "Nihon kasō tsūka torihikisho kabushikigaisha", + "legalPersonNameIdentifierType": "LEGL" + } + ] + }, + "geographicAddress": [ + { + "addressType": "BIZZ", + "addressLine": [ + "滋賀県大津市水明1-34-2", + "520-0531" + ], + "country": "JP" + }, + { + "addressType": "BIZZ", + "addressLine": [ + "1-34-2 SUIMEI OTSU SHI SHIGA KEN", + "520-0531 JAPAN" + ], + "country": "JP" + } + ], + "nationalIdentification": { + "nationalIdentifier": "84-1234567", + "nationalIdentifierType": "TXID", + "registrationAuthority": "RA777777" + }, + "countryOfRegistration": "JP" + } + } + } + }, + "transaction": { + "txid": "44e25bc0ed840f9bf0e58d6227db15192d5b89e79ba4304da16b09703f68ceaf", + "originator": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "beneficiary": "mtCoa72PhLznu2dw639xXfBjC8SUCpyrTv", + "amount": 0.46602501, + "network": "BTC", + "timestamp": "2024-09-01T16:22:41-05:00", + "extra_json": "eyJ2YWx1ZV93aGVuX3RyYW5zYWN0ZWQiOiAiVVNEICQzMiwzODYuNjEifQ==" + }, + "sent_at": "2024-09-01T16:22:41-05:00", + "received_at": "2024-09-06T07:14:29-05:00", + "timestamp": "2024-09-06T07:14:30-05:00", + "public_key_signature": "SHA256:n/iTnE9b0sP1DQkaDMricHqPKYj0n00IjiaJ7lUmcAs", + "transfer_state": "STARTED", + "secure_envelope": { + "id": "01J6S9G7GDGNKETY6YDJQC3Z47", + "envelope_id": "cb9a92a3-dfa6-4ecc-a4cc-c1f8fa94d3fe", + "direction": "out", + "remote": "api.alice.vaspbot.net", + "reply_to": "01J6S9RJ2APF7C6M10C8NTYVGX", + "payload": "Omjx7x69RRFOcheWgESMKph5befzbENJoFXjgno74FCrCeZx5EoR3w515lR76X0pOqghaXErNir14/GisfSKuyZnwD4re7hbFrQn3nIjqqirKvkFRKf4QIOQv/0DfK/ofc8/3+OLN5YP9Js/5vMp3DcFWqYzB8AvCDGC6AtcNh+7Y6arHlCCXzQfxeI1BZeMN5QGeMSL8Ad3od6Nqy92KVCeSksNv858x7XDiYKTh72Rn/z+11UVw5wc4cKdf536vZQ87v38SNV3k7ASfmT+a8+19HnE2aPy/bYtmEQd94Q2w0+JPF4lB9C8DooMS7ctnOUDSIiY++v4xX4Ty40iOFQOns77E9itfAYQwYyVHoLXJVA9SR5aBYDJse0mhRlJ5KHf0cY7CPQlvtcCRu+rwdYu7U2XFXYXCjYS2a6mB+ozUaZMepcPst1XPqQRW2ZMKP8Q9sCa/0r2XIO9yHksaPt3AbbjfHczEvl44f2NkdpfBAtTYYGUfO441EBieO3NhE6XTWbAHaj8Sxo4DUpvibaENbIuMNksme3WCM6ZJRHJ70us+9PJSA9VEiGRHR64YbZn95iBcH7HAVWPJdPAmfSuRQ0i4LbdFdq33LZG33uJWLP0sK6ncFM+0e1G1S6hRN3hXEEdFhHxuOOq90Vq29mQHbgzrZiHgIKqasutXYU/Tbxcqi1oUZdRAMXIySfAVFVT9672DsQpAoFalKGeSu3kbNTfYTYBpvDFVFxJI/cvn/D64AOzg8feo/9KtJgSPG9QijCyD1hbkii75/ssu1Z8X9mj0Y4kRxS41EimihmQzTE47dxYjGy+W3X9s0H8AMyDmlvTU++5x8qyxLht9s6R83L8sXH+J9/4mLebgIccaaKYqJQZ7pWJoqrujuO1InYBWCUGPdRpHPlKmuMHjhc13j8PhGOrc4ylanOfdxUumUI4nLNlluKpijAZ/lwpNnixNbAu/ZpZUXLGcpgOZgqgBljcLOWq+PKteLhH2SIxt9+bIO8HoWzfpkVRWumuTi1xKQmkrOHW140uYez831Mz0ZDwB4u6aiHouSAu+MAGp/VzA0DmfjTGqD8KccxYZg+Cxye2e2CXJe6xw+AgUTg5bSeAIgwEafZU56BlV5tjdYMrXlcchS4ORGUV1ysMGBc0KIxYuvmciV17aD7R6wUbvgntvSGfvPvcbFqTY06sECgcWVVs8QB5avB7v4nYCDYnTay6Zc6ETE6EO9t+94bKljvAto3RefiFQeCfDnkbFWKHY37ofsTn3Crc+iesMmAzGJvOPkzgcxEjhpoFV7XYPiG0ke31dNFOrb9cZpTZJfi80XZjE6Z/ugQYWrfKjXauPYRbJWAts7TAaz28PxpjTjbdCO3wMCzKlYKnk+yCYwZe2c1Hdz4VEmNFNe30Uf7AH3dW2Q5tjKzn/ghj/zVeVI2bQLwfSKaEQI78Sqg5gXETwgkMCuzjp2850AMndNaep5W1JQ4PcWkLEonMPcdZF9CMIX7WaYFHRkbOuJC5ncC3icnyD0qEC/XWsvEQTR6rzY4vTIIZOgDMbKoZDK4C5kOj5pewohNOuYySQwB6A5hcNtW6Z/uJ4V9vGX+EPzwjTaHbe8GDj++NlzG+FQi1GozS+6vqJU5FCTdhTMzelg5blkozihiUGkkABFsMcn8R2uMvjJ/WebjkeQC3pkRkc+qfyAH+Q2uhSASfVAsKkalBFh3Y9uwwuY1Tl4aHMvmAWvBpbIpP/PI90JhW", + "encryption_key": "vSdEaKmbQUA4hUfbpx2LAi7rfYK3YwVPMt7w0M0wHWI6sPTlLI863Bgagja7pP3TAq6dTuwXnT0jxbW/I6i2LYshvUbkHJIl/6nddGbJiJzJNboFvVZNFlNYCRDm2T/lOx0PPcuuficHQpVrqZUTT8g9jB3gwkSvCQMVt41g4aKnNGmxze1nVLi3LlmILNfownTxWRkPP4ASbBVZ204qi4c/1EA3AKI0vuSB1I4Sjk2D77/Ui67QTVc5xqdk+AGUON/hkFAa4RSC0DXmNqKBLobPkY3RhK1n1SqmCifjGBsqMdpXPnfAZlibxeB5UssZKK+1Lcj2viKY3FUPZFCNm5GgUhzxyXH5BCHgpgbpS4JQ9+8uyiUxyG5MpRZrdRowz252b1QiZ12u5lnxDO6RKQGcwRvs2mEst6ikkTHIIoZ13q4aZHsW7VWP3+ogZj/o3EnLxcYJO2PNkoHhLcQya6NSvxxgA8x6oRDObOLnzspavNw7tHf2LwORrd3PYJylNgllpoFK1qUIIdYulESkLuE6jqURIgP8WYUZ3nhMEAaHJbB4G66KoDGam0cmxTKiHGG11QU8SUNVdU8w/eb1NmR5ZSQIJdQA7RyREklZdjsW+mmcHgygxynHjzBe7kiXBNYBWz2CVQxGE+TySIi4ZHE2rxLpSCFAKl3KtLIVG4o=", + "encryption_algorithm": "AES256-GCM", + "valid_hmac": true, + "hmac": "HBzhe6ltfH0cfJ4rQCl8G6LX/eD6aJShh+9mYJ4ExHU=", + "hmac_secret": "KxPZDbLAu7c5ASYiuOLWQwnQi2r7L7925x0MBuNaNQs1vcGa79y3+IF6uprD9MwwYIqZ/5CBaAJusUuVXJ9KXSWVu4SD8yGv6M1HkEPzic7pvywcH6zqjBYupjhWGcit9IfB1oWGMPG7T7s7Ctl7eBLpVyfSI2veXLFYViFoXlUPNovcQ1MgnPNAVaIuAlmHsEC6JIeSsHb1uhpYxapBWvZPYT9g/QKWggyCZDQWohYrscRq+iPa1YpMuJJ77R6Bb3hJzDwE9onZwz8Vnl3V2uY7JNw1WSyGu/chpBO4yMrTvYcvThsoo+lWbnoSmImWX3jHbVK/6+hxlyEnQJ+9YnZHk7a7b21UXOB/lmm58InK5FEaB2wotDSlrwJB7wLT5Y2PtqyamqRYlOtc14owfrfbHcSWe7RoGOhKzRILqgV8zFZv0sg/+uZU5dYm5ef/mRDeLBpfs4qbOHSsNm1CVQSK64SrEyv0wdFL+OSS5l9Vq/CEEgYG7Q7qz+m/ahCurI2o6GoIDvkEfA+5TfoJ3ZUU/l1DGlUiJx5YxQClktVoWfL2W790D5u5uHrI+Qzy00lJ/o/ffx4cgCZiJF+E4xuxNi7ZPByiftciNpXk2a1nyTE9HuB90UULBLwnr8mVzFrwfgkMbof4XlgAxOIsTv6PUPkyOq7Ol4H6B4zY27s=", + "hmac_algorithm": "HMAC-SHA256", + "is_error": false, + "timestamp": "2024-09-02T07:12:34-05:00", + "sealed": true, + "public_key_signature": "SHA256:n/iTnE9b0sP1DQkaDMricHqPKYj0n00IjiaJ7lUmcAs", + "transfer_state": "STARTED", + "original": "CiQwNTFlZTQyMC0wMzM3LTQ4YWUtYjBkNS1kMjIxMmUzYjViZjESzQlsHjY9lq6eVOJg8/OtKrK0VA3ygKlA2P0KSVc0aaABx6Oe4MvyAfpal00476dZi6ucjsOc/BI5GXxsPbEdwVDXRymHuc86hTgVn7oB0W8G+kXu0mtb7PH1erAqJSot1CxgqXWSnhNUo0w50NAJ/d+5itt/Pw0vZ7mTlEi0fL8Aa1/f8EOBUrMwWAqSBme2l5dJFomMN8fdpo8gm0+rU6g1cOGTM+ZBbrcXHfQuPGq4FueQEensEXXYh6U11z/mtixXZiJMAxLF3CVe517BlRV8dhLU4xtoNcXa2auVYhzRb/hefEEbUFqS7kDwnZjn7D4AqQ9Li9Xh6sSBUBIaSg6AhAs4qRF0Hlbvaz1oXeOnCb8GXe1DrCFPbzEgJ/fpu5/2i8HRtADmqbjo5+tkYhw2kY8vBYh3aRRtkgfztX4gLFwKRKqIV2+X2MY6h0r0KF/2UhsVp8SN0ZJsnjt6sMRtMPefwKHgsyMxGBH9aa0EeSYCDT5m0/0hn50gnSM9Wj5SiF0SmN/p1N8NMdDiibn7IyeQXPGLaoRzdVd+aEakVvIRyTzJS7UUkeBKKMjeaYMsYY4IQPb4uO3hMiB4U7PyqEo/40r9o8jWcauu1xtnDdhg3nAMDMwLnnH1+7eid59BByG4cyySe5Fhlmp3zLAWqBj2prGCXAZK0rh5ay6wb+SjoG9w9+VtlkNOcrjw9TUuV481pdBTXeVOAyV0Y0iXf1InyygkqPt3JyCAIgRihENhYqh8X++PCojXtho7nu3H2Lp+s8TEFUVUjB+9DfsNckws0d2jm8a/auboeun0PP/GBNKzGTjrMdA7P9AROdyG6cwMph3KGBJx9/y0NsqKLS74n7Bw4Ljmr9CAZhXFAwOC7ksZkcMAFcScqubYxWuPPOyqkAIF/gbMmMkKrRIr859Bx2JwUIZ9+BleeDDEasTBrz3o2LAagyPby52kidea+VPlZzS1J/7uwmtRE5oyvak/rYCjFWoo+d81de5y56XMUv5joHuNlWO7hBsRPT7o8XnoqSuwzFe5Xle/ftLGr5JNeg+BHVWFkELbh7i49chi3hx/darruTYcaerjeW03ahgCEYLbafz99ru+MQNeNgUGDmlkJXcyDE1+aB+VBTXiEs3SN2DIVmVC3MLUWLv4o4jZySxXu9D+BDDMjBnrdVpcpGDZSMw2NjIT8nVkME6ADAV5IB1gRM6so5XJgIl4EQI4GZR1/A2THoaJvhdptuvAHjnqY+mbVJa2ZqLfKTlic9FyMOjq+UlNeEjdDNfkO9egy5Hg0uutWVpQBRZsymX9WeKPOsVNnIoKXjNEj4xc4XnGB/x1DW9B2Gq4skZJ6JIjjDx2XiDuXadljoKTyHAn0IDKbo96sP89ujGNAMpXF61beaQb2jwXhJxva2sfxgANoT+iCb5xxM8/uppC95LIPTtWBv2+/be5C+G+PadjY8mFjEnHM2eEtLEgnmN/2nzd8i1wigRedC9CjxjM8/HuhT5MS+UTTFRJNAKJc/gh0EVfTNgp+Wm1a52SgpQqTSHA9lMD7+nyaLUp8evE8q6V5sYN7LqtbgG3b77uGJWNpWtAeCktqt7LJaO3AVmESUNoIzIzo/c2yHqM5calIjwHisjaNXqKRt2z0BqABHANAo7Ayo3xyGeOqZOb7urckMB0jf8RvxQJXtSRkhQbEdjYFLgYcZFopdDAyTOJVgYTgZKWMRkpXljYqcuhEmcG26dHfVW59Y5ZzprW/UZALHmU8kVAFT3KIMecFI1caXVEufgqO9YEeiHqpBX1K2iQrtGics0hUOAV+EGPRleLJD6ChVX8D6f6olr7+bq6g0VK9hibZCdzDmZ36JXZMzbiNy/a0VJ/3oRq2mpPNpXx4Bgt8RoikxtQRWCXnO1+9p00DMMvja9TV1E02ijC+D4IkyPoVZe97J8ZW9OaFKXLiaqP+PvnJREDEPLGDzHDO/T8K7Zd+1tpPFNqGmDkJrav1dYH+UV8HGc9O+MVAQeF6E1HmZS6nafZBsW3Bs7PMxJNC63vdOrx+AndwiZWCH91Cjru1opmqA70/8Q2qAqkAX23iX4d3JlTx9xqXt+jE8q6SFT1wl4tq1xsi/GoRq87EWFWqinWRP82RdJbIbvtLJOyG9WceTG07wuEuYLTtk3dCMr9AL3fqIKnEnojO896crOh2QtCkK1u9KM0DhK7TkBTU+ANhTeCl3sXwM2ZCLaT93zgfJQqA7i6iSkNAtIpEBf8rgG/5e98ocJY9gTC0+7/oDClNxnrVjAWsvg13YrtZVhg5abGqRfoYKcAuGJbaD5lcIsHaiI0pHF7hVkHIgpBRVMyNTYtR0NNKiDiMXIASpCARn3lD+CWUVrOc3tlVxer1MUzautyr7Vr4TKABHW0IhgLaJjYFvUqHCsxJxf31VOQfS+NiZOLbX+oTKkPIGknxsUvoohRnEcau/azIl5Iz3wEjD7OFnsm38N524IRW0326y4GN1JPb0PlrtcdN6gJZOeckuBBbfmB5uL0wD0YSfaQ38VWobAvT6ew0R2gsOQ927BEnb1adKeyNktzQbkGFpEjcdxhegFcl/pIqVkWONUEbYEVC1ycHeHk+WImTSodywJKxPk81/GIKEda5HJwoD2vqtPErtKqh6qHXDtHX1RIm1B2qmcQdYMa+UwW0HqndseIQ/XM4W/9xtlj+lUlnBaoukj8i2TSxNJzpWokWD5X5BZUzUj4ZHEhOgFianasrcTgHqO722E+REz3UlBR6YtAt8HUkAvq+DFKGkmv9FjIQ+4fwOTJZd7Rji6ztzY3b6oIAkNihwySgn7H+xDLDr/GbasMtghyibN4IHT3Pbh+Imp8iGPlXQosYRrI5Le00OR3f6xBC6JL80FYiRj8oiG+rCVevBwpOUmKvVOhRoncYuToK3QN1PdQq6NZGN1KQ7N2unOQBX5kexsjgReSa5U/wXOihVDD59g6BHgoZeYTP2dsComzwm/KMnke2MhOxnZ6MKrN/VTyZ3Ofso82bdGfVbslm5+oUTfExU1VH/oB0UHAVrzN6f8Ixd6td7oUY1QltQQgaWKpNTwzOgtITUFDLVNIQTI1NlIeMjAyNC0wOC0yNVQwOTo0MjowOS4zNTcwMTQ0NjdaWAFiMlNIQTI1NjorQk5WYnBKQUxXQnpsUUlEbytROEdjMmNSL3RRNXcvNEZLckdJK3BDOUJraAI=" + } + } + }, + "EnvelopeSummary": { + "title": "EnvelopeSummary", + "type": "object", + "description": "The subset of envelope fields that provide a summary for envelope list requests to minimize data transfer.", + "properties": { + "id": { + "type": "string", + "format": "ulid", + "description": "The unique ID of the envelope.", + "example": "01J6S9G7GDGNKETY6YDJQC3Z47" + }, + "envelope_id": { + "type": "string", + "format": "uuid", + "description": "The transaction ID that the decrypted envelope is associated with.", + "example": "cb9a92a3-dfa6-4ecc-a4cc-c1f8fa94d3fe" + }, + "direction": { + "type": "string", + "enum": [ + "out", + "in", + "any" + ], + "description": "The send direction of the decrypted envelope.", + "example": "out" + }, + "remote": { + "type": "string", + "description": "The common name of the remote counterparty in the exchange.", + "example": "api.alice.vaspbot.net" + }, + "reply_to": { + "type": "string", + "format": "ulid", + "description": "If this field is populated, it refers to the envelope this decrypted envelope was a reply to.", + "example": "01J6S9RJ2APF7C6M10C8NTYVGX" + }, + "is_error": { + "type": "boolean", + "description": "If true this envelope contains a TRISA error rather than a payload.", + "example": false + }, + "error": { + "$ref": "#/components/schemas/TRISAError" + }, + "sent_at": { + "type": "string", + "format": "date-time", + "description": "The RFC3339 timestamp that the travel rule information exchange was started.", + "example": "2024-09-02T07:12:33-05:00" + }, + "received_at": { + "type": "string", + "format": "date-time", + "description": "The RFC3339 timestamp that the travel rule information exchange was concluded.", + "example": "2024-09-06T19:04:21-05:00" + }, + "timestamp": { + "type": "string", + "format": "date-time", + "description": "The RFC3339 timestamp that the decrypted envelope was sent.", + "example": "2024-09-02T07:12:34-05:00" + }, + "public_key_signature": { + "$ref": "#/components/schemas/PublicKeySignature" + }, + "transfer_state": { + "$ref": "#/components/schemas/TransferState" + } + }, + "example": { + "id": "01J6S9G7GDGNKETY6YDJQC3Z47", + "envelope_id": "cb9a92a3-dfa6-4ecc-a4cc-c1f8fa94d3fe", + "direction": "in", + "remote": "trisa.example.jp", + "reply_to": "01J6S9RJ2APF7C6M10C8NTYVGX", + "is_error": false, + "sent_at": "2024-09-01T16:22:41-05:00", + "received_at": "2024-09-06T07:14:29-05:00", + "timestamp": "2024-09-06T07:14:30-05:00", + "public_key_signature": "SHA256:n/iTnE9b0sP1DQkaDMricHqPKYj0n00IjiaJ7lUmcAs", + "transfer_state": "STARTED" + } + }, + "EnvelopeList": { + "title": "EnvelopeList", + "type": "object", + "description": "A list of either secure envelopes or [decrypted] envelopes, returned in a paginated fashion.", + "properties": { + "page": { + "$ref": "#/components/schemas/PageInfo" + }, + "is_decrypted": { + "type": "boolean", + "description": "If true then the decrypted_envelopes field is populated otherwise the secure_envelopes list is populated.", + "example": true + }, + "secure_envelopes": { + "type": "array", + "description": "If the decrypt query is omitted or false then the encrypted secure envelope summaries are returned.", + "items": { + "$ref": "#/components/schemas/SecureEnvelopeSummary" + }, + "example": [ + { + "id": "01J6S9G7GDGNKETY6YDJQC3Z47", + "envelope_id": "cb9a92a3-dfa6-4ecc-a4cc-c1f8fa94d3fe", + "direction": "in", + "remote": "trisa.example.jp", + "reply_to": "01J6S9RJ2APF7C6M10C8NTYVGX", + "encryption_algorithm": "AES256-GCM", + "valid_hmac": true, + "hmac_algorithm": "HMAC-SHA256", + "is_error": false, + "timestamp": "2024-09-01T16:22:05-05:00", + "sealed": true, + "public_key_signature": "SHA256:n/iTnE9b0sP1DQkaDMricHqPKYj0n00IjiaJ7lUmcAs", + "transfer_state": "PENDING" + }, + { + "id": "01J6S9RJ2APF7C6M10C8NTYVGX", + "envelope_id": "cb9a92a3-dfa6-4ecc-a4cc-c1f8fa94d3fe", + "direction": "out", + "remote": "trisa.example.jp", + "encryption_algorithm": "AES256-GCM", + "valid_hmac": true, + "hmac_algorithm": "HMAC-SHA256", + "is_error": false, + "timestamp": "2024-09-01T16:22:04-05:00", + "sealed": true, + "public_key_signature": "SHA256:PlW1lnoStGti2umBuaiuPVVkCb16fdKtc1HRtZuOuWM", + "transfer_state": "STARTED" + } + ] + }, + "decrypted_envelopes": { + "type": "array", + "description": "If the decrypt query is set and true then the decrypted envelope summaries are returned.", + "items": { + "$ref": "#/components/schemas/EnvelopeSummary" + }, + "example": [ + { + "id": "01J6S9G7GDGNKETY6YDJQC3Z47", + "envelope_id": "cb9a92a3-dfa6-4ecc-a4cc-c1f8fa94d3fe", + "direction": "in", + "remote": "trisa.example.jp", + "reply_to": "01J6S9RJ2APF7C6M10C8NTYVGX", + "is_error": false, + "sent_at": "2024-09-01T16:21:41-05:00", + "timestamp": "2024-09-01T16:22:05-05:00", + "public_key_signature": "SHA256:n/iTnE9b0sP1DQkaDMricHqPKYj0n00IjiaJ7lUmcAs", + "transfer_state": "PENDING" + }, + { + "id": "01J6S9RJ2APF7C6M10C8NTYVGX", + "envelope_id": "cb9a92a3-dfa6-4ecc-a4cc-c1f8fa94d3fe", + "direction": "out", + "remote": "trisa.example.jp", + "is_error": false, + "sent_at": "2024-09-01T16:21:41-05:00", + "timestamp": "2024-09-01T16:22:04-05:00", + "public_key_signature": "SHA256:PlW1lnoStGti2umBuaiuPVVkCb16fdKtc1HRtZuOuWM", + "transfer_state": "PENDING" + } + ] + } + }, + "example": { + "page": { + "page_size": 50 + }, + "is_decrypted": true, + "decrypted_envelopes": [ + { + "id": "01J6S9G7GDGNKETY6YDJQC3Z47", + "envelope_id": "cb9a92a3-dfa6-4ecc-a4cc-c1f8fa94d3fe", + "direction": "in", + "remote": "trisa.example.jp", + "reply_to": "01J6S9RJ2APF7C6M10C8NTYVGX", + "is_error": false, + "sent_at": "2024-09-01T16:21:41-05:00", + "timestamp": "2024-09-01T16:22:05-05:00", + "public_key_signature": "SHA256:n/iTnE9b0sP1DQkaDMricHqPKYj0n00IjiaJ7lUmcAs", + "transfer_state": "PENDING" + }, + { + "id": "01J6S9RJ2APF7C6M10C8NTYVGX", + "envelope_id": "cb9a92a3-dfa6-4ecc-a4cc-c1f8fa94d3fe", + "direction": "out", + "remote": "trisa.example.jp", + "is_error": false, + "sent_at": "2024-09-01T16:21:41-05:00", + "timestamp": "2024-09-01T16:22:04-05:00", + "public_key_signature": "SHA256:PlW1lnoStGti2umBuaiuPVVkCb16fdKtc1HRtZuOuWM", + "transfer_state": "PENDING" + } + ] + } + }, + "Rejection": { + "title": "Rejection", + "type": "object", + "description": "A rejection is used to send a TRISA error back to the counterparty. There are two types of errors. A \"Rejection\" (reply=false) informs the counterparty that the on-chain transaction should not proceed because compliance requirements could not be met. A \"Repair\" (reply=true) informs the counterparty that there is some issue with the compliance information that needs to be fixed before the on-chain transaction can proceed.", + "properties": { + "code": { + "type": "string", + "description": "The error code defining why the transaction is rejected or needs repair. See: https://trisa.dev/api/errors/index.html for a list of the error codes.", + "example": "INCOMPLETE_IDENTITY" + }, + "message": { + "type": "string", + "description": "A specific message that explains what needs to be done to repair a message or why the travel rule transfer has been rejected.", + "example": "Our jurisdiction requires national identification for both the originator and beneficiary for AML compliance purposes." + }, + "retry": { + "type": "boolean", + "description": "If true, this message is a repair message that requests the counterparty make changes to the identity or transaction payloads and send again. If false, this message is a rejection that implies the counterparty should halt the transaction.", + "example": true + } + }, + "example": { + "code": "INCOMPLETE_IDENTITY", + "message": "Our jurisdiction requires national identification for both the originator and beneficiary for AML compliance purposes.", + "retry": true + } + }, + "Repair": { + "title": "Repair", + "type": "object", + "description": "A repair object sends the transaction data along with the repair message from the counterparty so that the API client can make fixes to appropriately conclude the travel rule transaction.", + "properties": { + "error": { + "$ref": "#/components/schemas/Rejection" + }, + "envelope": { + "$ref": "#/components/schemas/Envelope" + } + }, + "example": { + "error": { + "code": "INCOMPLETE_IDENTITY", + "message": "Our jurisdiction requires national identification for both the originator and beneficiary for AML compliance purposes.", + "retry": true + }, + "envelope": { + "id": "01J6S9G7GDGNKETY6YDJQC3Z47", + "envelope_id": "cb9a92a3-dfa6-4ecc-a4cc-c1f8fa94d3fe", + "direction": "in", + "remote": "trisa.example.jp", + "reply_to": "01J6S9RJ2APF7C6M10C8NTYVGX", + "is_error": false, + "identity": { + "originator": { + "originatorPersons": [ + { + "naturalPerson": { + "name": { + "nameIdentifier": [ + { + "primaryIdentifier": "Bond", + "secondaryIdentifier": "James", + "nameIdentifierType": "LEGL" + } + ] + }, + "dateAndPlaceOfBirth": { + "dateOfBirth": "1920-11-11", + "placeOfBirth": "Wattenscheid, Germany" + }, + "countryOfResidence": "GB" + } + } + ], + "accountNumber": [ + "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i" + ] + }, + "beneficiary": { + "beneficiaryPersons": [ + { + "naturalPerson": { + "name": { + "nameIdentifier": [ + { + "primaryIdentifier": "Miura", + "secondaryIdentifier": "Kentaro", + "nameIdentifierType": "LEGL" + } + ], + "localNameIdentifier": [ + { + "primaryIdentifier": "三浦", + "secondaryIdentifier": "建太郎", + "nameIdentifierType": "LEGL" + } + ] + }, + "dateAndPlaceOfBirth": { + "dateOfBirth": "1979-02-14", + "placeOfBirth": "Tokyo, Japan" + }, + "countryOfResidence": "JP" + } + } + ], + "accountNumber": [ + "mtLmjWt1DDxjGhMRmnxcgQqPNGPUzXuDHw" + ] + }, + "originatingVASP": { + "originatingVASP": { + "legalPerson": { + "name": { + "nameIdentifier": [ + { + "legalPersonName": "High Street Capital Management, LTD", + "legalPersonNameIdentifierType": "LEGL" + }, + { + "legalPersonName": "PubCoin", + "legalPersonNameIdentifierType": "TRAD" + } + ] + }, + "geographicAddress": [ + { + "addressType": "BIZZ", + "streetName": "Abbey St.", + "buildingNumber": "51", + "townName": "Nottingham", + "postCode": "NG7 2NZ", + "country": "GB" + } + ], + "nationalIdentification": { + "nationalIdentifier": "GKUH00AIM6DCRXGXVU75", + "nationalIdentifierType": "LEIX" + }, + "countryOfRegistration": "GB" + } + } + }, + "beneficiaryVASP": { + "beneficiaryVASP": { + "legalPerson": { + "name": { + "nameIdentifier": [ + { + "legalPersonName": "Nippon Crypto Exchange, KK", + "legalPersonNameIdentifierType": "LEGL" + } + ], + "localNameIdentifier": [ + { + "legalPersonName": "日本仮想通貨取引所株式会社", + "legalPersonNameIdentifierType": "LEGL" + } + ], + "phoneticNameIdentifier": [ + { + "legalPersonName": "Nihon kasō tsūka torihikisho kabushikigaisha", + "legalPersonNameIdentifierType": "LEGL" + } + ] + }, + "geographicAddress": [ + { + "addressType": "BIZZ", + "addressLine": [ + "滋賀県大津市水明1-34-2", + "520-0531" + ], + "country": "JP" + }, + { + "addressType": "BIZZ", + "addressLine": [ + "1-34-2 SUIMEI OTSU SHI SHIGA KEN", + "520-0531 JAPAN" + ], + "country": "JP" + } + ], + "nationalIdentification": { + "nationalIdentifier": "84-1234567", + "nationalIdentifierType": "TXID", + "registrationAuthority": "RA777777" + }, + "countryOfRegistration": "JP" + } + } + } + }, + "transaction": { + "txid": "44e25bc0ed840f9bf0e58d6227db15192d5b89e79ba4304da16b09703f68ceaf", + "originator": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "beneficiary": "mtCoa72PhLznu2dw639xXfBjC8SUCpyrTv", + "amount": 0.46602501, + "network": "BTC", + "timestamp": "2024-09-01T16:22:41-05:00", + "extra_json": "eyJ2YWx1ZV93aGVuX3RyYW5zYWN0ZWQiOiAiVVNEICQzMiwzODYuNjEifQ==" + }, + "sent_at": "2024-09-01T16:22:41-05:00", + "received_at": "2024-09-06T07:14:29-05:00", + "timestamp": "2024-09-06T07:14:30-05:00", + "public_key_signature": "SHA256:n/iTnE9b0sP1DQkaDMricHqPKYj0n00IjiaJ7lUmcAs", + "transfer_state": "STARTED", + "secure_envelope": { + "id": "01J6S9G7GDGNKETY6YDJQC3Z47", + "envelope_id": "cb9a92a3-dfa6-4ecc-a4cc-c1f8fa94d3fe", + "direction": "out", + "remote": "api.alice.vaspbot.net", + "reply_to": "01J6S9RJ2APF7C6M10C8NTYVGX", + "payload": "Omjx7x69RRFOcheWgESMKph5befzbENJoFXjgno74FCrCeZx5EoR3w515lR76X0pOqghaXErNir14/GisfSKuyZnwD4re7hbFrQn3nIjqqirKvkFRKf4QIOQv/0DfK/ofc8/3+OLN5YP9Js/5vMp3DcFWqYzB8AvCDGC6AtcNh+7Y6arHlCCXzQfxeI1BZeMN5QGeMSL8Ad3od6Nqy92KVCeSksNv858x7XDiYKTh72Rn/z+11UVw5wc4cKdf536vZQ87v38SNV3k7ASfmT+a8+19HnE2aPy/bYtmEQd94Q2w0+JPF4lB9C8DooMS7ctnOUDSIiY++v4xX4Ty40iOFQOns77E9itfAYQwYyVHoLXJVA9SR5aBYDJse0mhRlJ5KHf0cY7CPQlvtcCRu+rwdYu7U2XFXYXCjYS2a6mB+ozUaZMepcPst1XPqQRW2ZMKP8Q9sCa/0r2XIO9yHksaPt3AbbjfHczEvl44f2NkdpfBAtTYYGUfO441EBieO3NhE6XTWbAHaj8Sxo4DUpvibaENbIuMNksme3WCM6ZJRHJ70us+9PJSA9VEiGRHR64YbZn95iBcH7HAVWPJdPAmfSuRQ0i4LbdFdq33LZG33uJWLP0sK6ncFM+0e1G1S6hRN3hXEEdFhHxuOOq90Vq29mQHbgzrZiHgIKqasutXYU/Tbxcqi1oUZdRAMXIySfAVFVT9672DsQpAoFalKGeSu3kbNTfYTYBpvDFVFxJI/cvn/D64AOzg8feo/9KtJgSPG9QijCyD1hbkii75/ssu1Z8X9mj0Y4kRxS41EimihmQzTE47dxYjGy+W3X9s0H8AMyDmlvTU++5x8qyxLht9s6R83L8sXH+J9/4mLebgIccaaKYqJQZ7pWJoqrujuO1InYBWCUGPdRpHPlKmuMHjhc13j8PhGOrc4ylanOfdxUumUI4nLNlluKpijAZ/lwpNnixNbAu/ZpZUXLGcpgOZgqgBljcLOWq+PKteLhH2SIxt9+bIO8HoWzfpkVRWumuTi1xKQmkrOHW140uYez831Mz0ZDwB4u6aiHouSAu+MAGp/VzA0DmfjTGqD8KccxYZg+Cxye2e2CXJe6xw+AgUTg5bSeAIgwEafZU56BlV5tjdYMrXlcchS4ORGUV1ysMGBc0KIxYuvmciV17aD7R6wUbvgntvSGfvPvcbFqTY06sECgcWVVs8QB5avB7v4nYCDYnTay6Zc6ETE6EO9t+94bKljvAto3RefiFQeCfDnkbFWKHY37ofsTn3Crc+iesMmAzGJvOPkzgcxEjhpoFV7XYPiG0ke31dNFOrb9cZpTZJfi80XZjE6Z/ugQYWrfKjXauPYRbJWAts7TAaz28PxpjTjbdCO3wMCzKlYKnk+yCYwZe2c1Hdz4VEmNFNe30Uf7AH3dW2Q5tjKzn/ghj/zVeVI2bQLwfSKaEQI78Sqg5gXETwgkMCuzjp2850AMndNaep5W1JQ4PcWkLEonMPcdZF9CMIX7WaYFHRkbOuJC5ncC3icnyD0qEC/XWsvEQTR6rzY4vTIIZOgDMbKoZDK4C5kOj5pewohNOuYySQwB6A5hcNtW6Z/uJ4V9vGX+EPzwjTaHbe8GDj++NlzG+FQi1GozS+6vqJU5FCTdhTMzelg5blkozihiUGkkABFsMcn8R2uMvjJ/WebjkeQC3pkRkc+qfyAH+Q2uhSASfVAsKkalBFh3Y9uwwuY1Tl4aHMvmAWvBpbIpP/PI90JhW", + "encryption_key": "vSdEaKmbQUA4hUfbpx2LAi7rfYK3YwVPMt7w0M0wHWI6sPTlLI863Bgagja7pP3TAq6dTuwXnT0jxbW/I6i2LYshvUbkHJIl/6nddGbJiJzJNboFvVZNFlNYCRDm2T/lOx0PPcuuficHQpVrqZUTT8g9jB3gwkSvCQMVt41g4aKnNGmxze1nVLi3LlmILNfownTxWRkPP4ASbBVZ204qi4c/1EA3AKI0vuSB1I4Sjk2D77/Ui67QTVc5xqdk+AGUON/hkFAa4RSC0DXmNqKBLobPkY3RhK1n1SqmCifjGBsqMdpXPnfAZlibxeB5UssZKK+1Lcj2viKY3FUPZFCNm5GgUhzxyXH5BCHgpgbpS4JQ9+8uyiUxyG5MpRZrdRowz252b1QiZ12u5lnxDO6RKQGcwRvs2mEst6ikkTHIIoZ13q4aZHsW7VWP3+ogZj/o3EnLxcYJO2PNkoHhLcQya6NSvxxgA8x6oRDObOLnzspavNw7tHf2LwORrd3PYJylNgllpoFK1qUIIdYulESkLuE6jqURIgP8WYUZ3nhMEAaHJbB4G66KoDGam0cmxTKiHGG11QU8SUNVdU8w/eb1NmR5ZSQIJdQA7RyREklZdjsW+mmcHgygxynHjzBe7kiXBNYBWz2CVQxGE+TySIi4ZHE2rxLpSCFAKl3KtLIVG4o=", + "encryption_algorithm": "AES256-GCM", + "valid_hmac": true, + "hmac": "HBzhe6ltfH0cfJ4rQCl8G6LX/eD6aJShh+9mYJ4ExHU=", + "hmac_secret": "KxPZDbLAu7c5ASYiuOLWQwnQi2r7L7925x0MBuNaNQs1vcGa79y3+IF6uprD9MwwYIqZ/5CBaAJusUuVXJ9KXSWVu4SD8yGv6M1HkEPzic7pvywcH6zqjBYupjhWGcit9IfB1oWGMPG7T7s7Ctl7eBLpVyfSI2veXLFYViFoXlUPNovcQ1MgnPNAVaIuAlmHsEC6JIeSsHb1uhpYxapBWvZPYT9g/QKWggyCZDQWohYrscRq+iPa1YpMuJJ77R6Bb3hJzDwE9onZwz8Vnl3V2uY7JNw1WSyGu/chpBO4yMrTvYcvThsoo+lWbnoSmImWX3jHbVK/6+hxlyEnQJ+9YnZHk7a7b21UXOB/lmm58InK5FEaB2wotDSlrwJB7wLT5Y2PtqyamqRYlOtc14owfrfbHcSWe7RoGOhKzRILqgV8zFZv0sg/+uZU5dYm5ef/mRDeLBpfs4qbOHSsNm1CVQSK64SrEyv0wdFL+OSS5l9Vq/CEEgYG7Q7qz+m/ahCurI2o6GoIDvkEfA+5TfoJ3ZUU/l1DGlUiJx5YxQClktVoWfL2W790D5u5uHrI+Qzy00lJ/o/ffx4cgCZiJF+E4xuxNi7ZPByiftciNpXk2a1nyTE9HuB90UULBLwnr8mVzFrwfgkMbof4XlgAxOIsTv6PUPkyOq7Ol4H6B4zY27s=", + "hmac_algorithm": "HMAC-SHA256", + "is_error": false, + "timestamp": "2024-09-02T07:12:34-05:00", + "sealed": true, + "public_key_signature": "SHA256:n/iTnE9b0sP1DQkaDMricHqPKYj0n00IjiaJ7lUmcAs", + "transfer_state": "STARTED", + "original": "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" + } + } + } + }, + "Prepare": { + "title": "Prepare", + "type": "object", + "description": "The prepare object is a simplified representation of an IVMS101 identity and transaction payload that is packaged in a secure envelope and sent to the counterparty. This object is used to more easily create a travel rule transaction using the prepare endpoint.", + "properties": { + "travel_address": { + "type": "string", + "format": "TravelAddress", + "description": "The travel address of the receipient or counterparty VASP -- used to identify the counterparty to add their IVMS101 legal person information.", + "example": "taLg4sBFp3cWhB9wN7qsiUF8pxo7JXtVShYkv5ix1wG2kX5y4pRiJ3TRHmeD8H67TLLm5wHyDktVw1onfDeQfESumf91mjRTMbi" + }, + "originator": { + "type": "object", + "description": "The personal identity information of the originator account holder of the virtual asset transaction.", + "properties": { + "first_name": { + "type": "string", + "description": "The first (or secondary) legal name of the originator person.", + "example": "James" + }, + "last_name": { + "type": "string", + "description": "The last (or primary/family) legal name of the originator person.", + "example": "Bond" + }, + "customer_id": { + "type": "string", + "description": "An internal customer id that identifies the originator person in your system.", + "example": "674907513" + }, + "identification": { + "type": "object", + "description": "The state issued identification details of the originator person.", + "properties": { + "type_code": { + "type": "string", + "description": "The type of identification issued to the originator person.", + "enum": [ + "MISC", + "ARNU", + "CCPT", + "RAID", + "DRLC", + "FIIN", + "TXID", + "SOCS", + "IDCD", + "LEIX" + ], + "example": "DRLC" + }, + "number": { + "type": "string", + "description": "The identification number of the state issued ID assigned to the originator person.", + "example": "BOND9211110JA9OB" + }, + "country": { + "type": "string", + "format": "ISO-3166-1 Alpha-2", + "description": "The country that issued the originator person's identification.", + "example": "GB" + }, + "dob": { + "type": "string", + "format": "date", + "description": "The date of birth of the originator person.", + "example": "1920-11-11" + }, + "birth_place": { + "type": "string", + "description": "The city, state or province, and country where the originator person was born.", + "example": "Wattenscheid, Germany" + } + }, + "example": { + "type_code": "DRLC", + "number": "BOND9211110JA9OB", + "country": "GB", + "dob": "1920-11-11", + "birth_place": "Wattenscheid, Germany" + } + }, + "addr_line_1": { + "type": "string", + "description": "The first line of a geographic address (e.g. home address) of the originator person.", + "example": "1 High Street" + }, + "addr_line_2": { + "type": "string", + "description": "The second line of a geographic address (e.g. home address) of the originator person.", + "example": "Apt. 007" + }, + "city": { + "type": "string", + "description": "The city of the geographic address (e.g. home address) of the originator person.", + "example": "London" + }, + "state": { + "type": "string", + "description": "The state or province of the geographic address (e.g. home address) of the originator person.", + "example": "Greater London" + }, + "post_code": { + "type": "string", + "description": "The postal code of the geographic address (e.g. home address) of the originator person.", + "example": "SE1 2QH" + }, + "country": { + "type": "string", + "format": "ISO-3166-1 Alpha-2", + "description": "The country of the geographic address (e.g. home address) of the originator person.", + "example": "GB" + }, + "crypto_address": { + "type": "string", + "description": "The crypto wallet address of the originator person where the virtual assets will be transfered from.", + "example": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i" + } + }, + "required": [ + "last_name", + "crypto_address" + ], + "example": { + "first_name": "James", + "last_name": "Bond", + "customer_id": "674907513", + "identification": { + "type_code": "DRLC", + "number": "BOND9211110JA9OB", + "country": "GB", + "dob": "1920-11-11", + "birth_place": "Wattenscheid, Germany" + }, + "addr_line_1": "1 High Street", + "city": "London", + "post_code": "SE1 2QH", + "country": "GB", + "crypto_address": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i" + } + }, + "beneficiary": { + "type": "object", + "description": "The personal identity information of the beneficiary account holder of the virtual asset transaction.", + "properties": { + "first_name": { + "type": "string", + "description": "The first (or secondary) legal name of the beneficiary person.", + "example": "Twilda" + }, + "last_name": { + "type": "string", + "description": "The last (or primary/family) legal name of the beneficiary person.", + "example": "Swansong" + }, + "customer_id": { + "type": "string", + "description": "An internal customer id that identifies the beneficiary person in your system.", + "example": "39910432" + }, + "identification": { + "type": "object", + "description": "The state issued identification details of the beneficiary person.", + "properties": { + "type_code": { + "type": "string", + "description": "The type of identification issued to the beneficiary person.", + "enum": [ + "MISC", + "ARNU", + "CCPT", + "RAID", + "DRLC", + "FIIN", + "TXID", + "SOCS", + "IDCD", + "LEIX" + ], + "example": "SOCS" + }, + "number": { + "type": "string", + "description": "The identification number of the state issued ID assigned to the beneficiary person.", + "example": "880-02-22213" + }, + "country": { + "type": "string", + "format": "ISO-3166-1 Alpha-2", + "description": "The country that issued the beneficiary person's identification.", + "example": "US" + }, + "dob": { + "type": "string", + "format": "date", + "description": "The date of birth of the beneficiary person.", + "example": "1978-02-14" + }, + "birth_place": { + "type": "string", + "description": "The city, state or province, and country where the beneficiary person was born.", + "example": "Toronto, Ontario, Canada" + } + }, + "example": { + "type_code": "SOCS", + "number": "880-02-22213", + "country": "US", + "dob": "1978-02-14", + "birth_place": "Toronto, Ontario, Canada" + } + }, + "addr_line_1": { + "type": "string", + "description": "The first line of a geographic address (e.g. home address) of the beneficiary person.", + "example": "123 Main Street" + }, + "addr_line_2": { + "type": "string", + "description": "The second line of a geographic address (e.g. home address) of the beneficiary person.", + "example": "Suite 300" + }, + "city": { + "type": "string", + "description": "The city of the geographic address (e.g. home address) of the beneficiary person.", + "example": "Casper" + }, + "state": { + "type": "string", + "description": "The state or province of the geographic address (e.g. home address) of the beneficiary person.", + "example": "WY" + }, + "post_code": { + "type": "string", + "description": "The postal code of the geographic address (e.g. home address) of the beneficiary person.", + "example": "82604" + }, + "country": { + "type": "string", + "format": "ISO-3166-1 Alpha-2", + "description": "The country of the geographic address (e.g. home address) of the beneficiary person.", + "example": "US" + }, + "crypto_address": { + "type": "string", + "description": "The crypto wallet address of the beneficiary person where the virtual assets will be transfered from.", + "example": "mtCoa72PhLznu2dw639xXfBjC8SUCpyrTv" + } + }, + "required": [ + "last_name", + "crypto_address" + ], + "example": { + "first_name": "Twilda", + "last_name": "Swansong", + "customer_id": "39910432", + "identification": { + "type_code": "SOCS", + "number": "880-02-22213", + "country": "US", + "dob": "1978-02-14", + "birth_place": "Toronto, Ontario, Canada" + }, + "addr_line_1": "123 Main Street", + "city": "Casper", + "state": "WY", + "post_code": "82604", + "country": "US", + "crypto_address": "mtCoa72PhLznu2dw639xXfBjC8SUCpyrTv" + } + }, + "transfer": { + "type": "object", + "description": "The details of the virtual asset transfer related to the travel rule compliance exchange.", + "properties": { + "amount": { + "type": "number", + "description": "The amount of the smallest denomination of the virtual asset that is being transfered from the originator to the beneficiary.", + "example": 0.0007 + }, + "network": { + "type": "string", + "format": "SLIP-0044 Network Code", + "description": "The three character network code describing the chain the virtual asset belongs to.", + "example": "BTC" + }, + "asset_type": { + "type": "string", + "description": "If the network hosts multiple asset types, the identifier of the asset type being transferred.", + "example": "GAS" + }, + "transaction_id": { + "type": "string", + "format": "hex", + "description": "If the transaction has already been completed on the chain, the transaction ID or hash that identifies the block.", + "example": "44e25bc0ed840f9bf0e58d6227db15192d5b89e79ba4304da16b09703f68ceaf" + }, + "tag": { + "type": "string", + "description": "the memo or destination tag related to the beneficiary wallet for transfer purposes.", + "example": "dt=1234567890" + } + }, + "required": [ + "amount", + "network" + ], + "example": { + "amount": 0.0007, + "network": "BTC" + } + } + }, + "required": [ + "travel_address", + "originator", + "beneficiary", + "transfer" + ], + "example": { + "travel_address": "taLg4sBFp3cWhB9wN7qsiUF8pxo7JXtVShYkv5ix1wG2kX5y4pRiJ3TRHmeD8H67TLLm5wHyDktVw1onfDeQfESumf91mjRTMbi", + "originator": { + "first_name": "James", + "last_name": "Bond", + "customer_id": "674907513", + "identification": { + "type_code": "DRLC", + "number": "BOND9211110JA9OB", + "country": "GB", + "dob": "1920-11-11", + "birth_place": "Wattenscheid, Germany" + }, + "addr_line_1": "1 High Street", + "city": "London", + "post_code": "SE1 2QH", + "country": "GB", + "crypto_address": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i" + }, + "beneficiary": { + "first_name": "Twilda", + "last_name": "Swansong", + "customer_id": "39910432", + "identification": { + "type_code": "SOCS", + "number": "880-02-22213", + "country": "US", + "dob": "1978-02-14", + "birth_place": "Toronto, Ontario, Canada" + }, + "addr_line_1": "123 Main Street", + "city": "Casper", + "state": "WY", + "post_code": "82604", + "country": "US", + "crypto_address": "mtCoa72PhLznu2dw639xXfBjC8SUCpyrTv" + }, + "transfer": { + "amount": 0.0007, + "network": "BTC" + } + } + }, + "Prepared": { + "title": "Prepared", + "type": "object", + "description": "The prepared object is the data representation that you need to start a new travel rule transaction. It can be created using a Prepare, and then this payload can be sent to the send-prepared endpoint to initiate a travel rule transfer by creating a transaction and sending a secure envelope with the payload to the counterparty.", + "properties": { + "travel_address": { + "type": "string", + "format": "TravelAddress", + "description": "The travel address of the receipient or counterparty VASP -- used to identify the counterparty and route the travel rule transfer/inquiry.", + "example": "taLg4sBFp3cWhB9wN7qsiUF8pxo7JXtVShYkv5ix1wG2kX5y4pRiJ3TRHmeD8H67TLLm5wHyDktVw1onfDeQfESumf91mjRTMbi" + }, + "identity": { + "$ref": "#/components/schemas/IdentityPayload" + }, + "transaction": { + "$ref": "#/components/schemas/TransactionPayload" + } + }, + "required": [ + "travel_address", + "identity", + "transaction" + ], + "example": { + "travel_address": "taLg4sBFp3cWhB9wN7qsiUF8pxo7JXtVShYkv5ix1wG2kX5y4pRiJ3TRHmeD8H67TLLm5wHyDktVw1onfDeQfESumf91mjRTMbi", + "identity": { + "originator": { + "originatorPersons": [ + { + "naturalPerson": { + "name": { + "nameIdentifier": [ + { + "primaryIdentifier": "Bond", + "secondaryIdentifier": "James", + "nameIdentifierType": "LEGL" + } + ] + }, + "geographicAddress": [ + { + "addressType": "HOME", + "streetName": "High Street", + "buildingNumber": "7b", + "townName": "London", + "postCode": "SE1 2QH", + "country": "GB" + } + ], + "nationalIdentification": { + "nationalIdentifierType": "DRLC", + "nationalIdentifier": "BOND9211110JA9OB", + "countryOfIssue": "GB" + }, + "customerIdentification": "01J6DJ9F691CF8E9H0V3ET0M0E", + "dateAndPlaceOfBirth": { + "dateOfBirth": "1920-11-11", + "placeOfBirth": "Wattenscheid, Germany" + }, + "countryOfResidence": "GB" + } + } + ], + "accountNumber": [ + "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i" + ] + }, + "beneficiary": { + "beneficiaryPersons": [ + { + "naturalPerson": { + "name": { + "nameIdentifier": [ + { + "primaryIdentifier": "Miura", + "secondaryIdentifier": "Kentaro", + "nameIdentifierType": "LEGL" + } + ], + "localNameIdentifier": [ + { + "primaryIdentifier": "三浦", + "secondaryIdentifier": "建太郎", + "nameIdentifierType": "LEGL" + } + ] + }, + "geographicAddress": [ + { + "addressType": "HOME", + "streetName": "Shimohirakawa", + "buildingNumber": "1536-2", + "townName": "菊川市", + "countrySubDivision": "静岡県", + "postCode": "437-1514", + "country": "JP" + } + ], + "nationalIdentification": { + "nationalIdentifierType": "SOCS", + "nationalIdentifier": "0537-73-2271", + "countryOfIssue": "JP" + }, + "customerIdentification": "01J6QNPGSKN2HZGC2F33F3QQRF", + "dateAndPlaceOfBirth": { + "dateOfBirth": "1979-02-14", + "placeOfBirth": "Tokyo, Japan" + }, + "countryOfResidence": "JP" + } + } + ], + "accountNumber": [ + "mtLmjWt1DDxjGhMRmnxcgQqPNGPUzXuDHw" + ] + }, + "originatingVASP": { + "originatingVASP": { + "legalPerson": { + "name": { + "nameIdentifier": [ + { + "legalPersonName": "High Street Capital Management, LTD", + "legalPersonNameIdentifierType": "LEGL" + }, + { + "legalPersonName": "PubCoin", + "legalPersonNameIdentifierType": "TRAD" + } + ] + }, + "geographicAddress": [ + { + "addressType": "BIZZ", + "streetName": "Abbey St.", + "buildingNumber": "51", + "townName": "Nottingham", + "postCode": "NG7 2NZ", + "country": "GB" + } + ], + "nationalIdentification": { + "nationalIdentifier": "GKUH00AIM6DCRXGXVU75", + "nationalIdentifierType": "LEIX" + }, + "countryOfRegistration": "GB" + } + } + }, + "beneficiaryVASP": { + "beneficiaryVASP": { + "legalPerson": { + "name": { + "nameIdentifier": [ + { + "legalPersonName": "Nippon Crypto Exchange, KK", + "legalPersonNameIdentifierType": "LEGL" + } + ], + "localNameIdentifier": [ + { + "legalPersonName": "日本仮想通貨取引所株式会社", + "legalPersonNameIdentifierType": "LEGL" + } + ], + "phoneticNameIdentifier": [ + { + "legalPersonName": "Nihon kasō tsūka torihikisho kabushikigaisha", + "legalPersonNameIdentifierType": "LEGL" + } + ] + }, + "geographicAddress": [ + { + "addressType": "BIZZ", + "addressLine": [ + "滋賀県大津市水明1-34-2", + "520-0531" + ], + "country": "JP" + }, + { + "addressType": "BIZZ", + "addressLine": [ + "1-34-2 SUIMEI OTSU SHI SHIGA KEN", + "520-0531 JAPAN" + ], + "country": "JP" + } + ], + "nationalIdentification": { + "nationalIdentifier": "84-1234567", + "nationalIdentifierType": "TXID", + "registrationAuthority": "RA777777" + }, + "countryOfRegistration": "JP" + } + } + } + }, + "transaction": { + "txid": "44e25bc0ed840f9bf0e58d6227db15192d5b89e79ba4304da16b09703f68ceaf", + "originator": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "beneficiary": "mtCoa72PhLznu2dw639xXfBjC8SUCpyrTv", + "amount": 0.46602501, + "network": "BTC", + "timestamp": "2024-09-01T16:22:41-05:00", + "extra_json": "eyJ2YWx1ZV93aGVuX3RyYW5zYWN0ZWQiOiAiVVNEICQzMiwzODYuNjEifQ==" + } + } + }, + "IdentityPayload": { + "title": "IdentityPayload", + "type": "object", + "externalDocs": { + "description": "IVMS101", + "url": "https://www.intervasp.org/" + }, + "description": "The identity payload implements the IVMS101 spec for inter-VASP messaging of travel rule compliance information. For TRP compatibility purposes, this object uses camelCase JSON fields instead of the snake_case fields that the rest of the API uses. Note that the identity payload is stored as protocol buffers in the Envoy database for compatibility with TRISA transfers. Be aware also that the identity payload is extremely verbose and is intended for use across national boundaries and languages. For more information on the spec and validating the spec, please go to intervasp.org.", + "properties": { + "originator": { + "$ref": "#/components/schemas/Originator" + }, + "beneficiary": { + "$ref": "#/components/schemas/Beneficiary" + }, + "originatingVASP": { + "$ref": "#/components/schemas/OriginatingVASP" + }, + "beneficiaryVASP": { + "$ref": "#/components/schemas/BeneficiaryVASP" + }, + "transferPath": { + "$ref": "#/components/schemas/TransferPath" + }, + "payloadMetadata": { + "$ref": "#/components/schemas/PayloadMetadata" + } + }, + "example": { + "originator": { + "originatorPersons": [ + { + "naturalPerson": { + "name": { + "nameIdentifier": [ + { + "primaryIdentifier": "Bond", + "secondaryIdentifier": "James", + "nameIdentifierType": "LEGL" + } + ] + }, + "geographicAddress": [ + { + "addressType": "HOME", + "streetName": "High Street", + "buildingNumber": "7b", + "townName": "London", + "postCode": "SE1 2QH", + "country": "GB" + } + ], + "nationalIdentification": { + "nationalIdentifierType": "DRLC", + "nationalIdentifier": "BOND9211110JA9OB", + "countryOfIssue": "GB" + }, + "customerIdentification": "01J6DJ9F691CF8E9H0V3ET0M0E", + "dateAndPlaceOfBirth": { + "dateOfBirth": "1920-11-11", + "placeOfBirth": "Wattenscheid, Germany" + }, + "countryOfResidence": "GB" + } + } + ], + "accountNumber": [ + "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i" + ] + }, + "beneficiary": { + "beneficiaryPersons": [ + { + "naturalPerson": { + "name": { + "nameIdentifier": [ + { + "primaryIdentifier": "Miura", + "secondaryIdentifier": "Kentaro", + "nameIdentifierType": "LEGL" + } + ], + "localNameIdentifier": [ + { + "primaryIdentifier": "三浦", + "secondaryIdentifier": "建太郎", + "nameIdentifierType": "LEGL" + } + ] + }, + "geographicAddress": [ + { + "addressType": "HOME", + "streetName": "Shimohirakawa", + "buildingNumber": "1536-2", + "townName": "菊川市", + "countrySubDivision": "静岡県", + "postCode": "437-1514", + "country": "JP" + } + ], + "nationalIdentification": { + "nationalIdentifierType": "SOCS", + "nationalIdentifier": "0537-73-2271", + "countryOfIssue": "JP" + }, + "customerIdentification": "01J6QNPGSKN2HZGC2F33F3QQRF", + "dateAndPlaceOfBirth": { + "dateOfBirth": "1979-02-14", + "placeOfBirth": "Tokyo, Japan" + }, + "countryOfResidence": "JP" + } + } + ], + "accountNumber": [ + "mtLmjWt1DDxjGhMRmnxcgQqPNGPUzXuDHw" + ] + }, + "originatingVASP": { + "originatingVASP": { + "legalPerson": { + "name": { + "nameIdentifier": [ + { + "legalPersonName": "High Street Capital Management, LTD", + "legalPersonNameIdentifierType": "LEGL" + }, + { + "legalPersonName": "PubCoin", + "legalPersonNameIdentifierType": "TRAD" + } + ] + }, + "geographicAddress": [ + { + "addressType": "BIZZ", + "streetName": "Abbey St.", + "buildingNumber": "51", + "townName": "Nottingham", + "postCode": "NG7 2NZ", + "country": "GB" + } + ], + "nationalIdentification": { + "nationalIdentifier": "GKUH00AIM6DCRXGXVU75", + "nationalIdentifierType": "LEIX" + }, + "countryOfRegistration": "GB" + } + } + }, + "beneficiaryVASP": { + "beneficiaryVASP": { + "legalPerson": { + "name": { + "nameIdentifier": [ + { + "legalPersonName": "Nippon Crypto Exchange, KK", + "legalPersonNameIdentifierType": "LEGL" + } + ], + "localNameIdentifier": [ + { + "legalPersonName": "日本仮想通貨取引所株式会社", + "legalPersonNameIdentifierType": "LEGL" + } + ], + "phoneticNameIdentifier": [ + { + "legalPersonName": "Nihon kasō tsūka torihikisho kabushikigaisha", + "legalPersonNameIdentifierType": "LEGL" + } + ] + }, + "geographicAddress": [ + { + "addressType": "BIZZ", + "addressLine": [ + "滋賀県大津市水明1-34-2", + "520-0531" + ], + "country": "JP" + }, + { + "addressType": "BIZZ", + "addressLine": [ + "1-34-2 SUIMEI OTSU SHI SHIGA KEN", + "520-0531 JAPAN" + ], + "country": "JP" + } + ], + "nationalIdentification": { + "nationalIdentifier": "84-1234567", + "nationalIdentifierType": "TXID", + "registrationAuthority": "RA777777" + }, + "countryOfRegistration": "JP" + } + } + } + } + }, + "Originator": { + "title": "Originator", + "type": "object", + "description": "Originator describes the account holder who allows the virtual asset transfer from that account, or, where there is no account, the natural or legal person that places the order with the originating VASP to perform the virtual asset transfer.", + "properties": { + "originatorPersons": { + "type": "array", + "description": "The natural or legal person(s) that describe the Originator.", + "items": { + "$ref": "#/components/schemas/Person" + }, + "example": [] + }, + "accountNumber": { + "type": "array", + "description": "The identifier of an account (a crypto wallet address) for each originator person in the same sequential order.", + "items": { + "type": "string", + "description": "Identifier of an account that is used to process the transaction (usually a crypto wallet address).", + "example": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i" + }, + "example": [ + "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i" + ] + } + }, + "required": [ + "originatorPersons" + ], + "example": { + "originatorPersons": [ + { + "naturalPerson": { + "name": { + "nameIdentifier": [ + { + "primaryIdentifier": "Bond", + "secondaryIdentifier": "James", + "nameIdentifierType": "LEGL" + } + ] + }, + "geographicAddress": [ + { + "addressType": "HOME", + "streetName": "High Street", + "buildingNumber": "7b", + "townName": "London", + "postCode": "SE1 2QH", + "country": "GB" + } + ], + "nationalIdentification": { + "nationalIdentifierType": "DRLC", + "nationalIdentifier": "BOND9211110JA9OB", + "countryOfIssue": "GB" + }, + "customerIdentification": "01J6DJ9F691CF8E9H0V3ET0M0E", + "dateAndPlaceOfBirth": { + "dateOfBirth": "1920-11-11", + "placeOfBirth": "Wattenscheid, Germany" + }, + "countryOfResidence": "GB" + } + } + ], + "accountNumber": [ + "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i" + ] + } + }, + "Beneficiary": { + "title": "Beneficiary", + "type": "object", + "description": "Beneficiary describes the natural or legal person arrangement who is identified by the originator as the receiver of the requested virtual asset transfer.", + "properties": { + "beneficiaryPersons": { + "type": "array", + "description": "The natural or legal person(s) that describe the Beneficiary.", + "items": { + "$ref": "#/components/schemas/Person" + }, + "example": [] + }, + "accountNumber": { + "type": "array", + "description": "The identifier of an account (a crypto wallet address) for each beneficiary person in the same sequential order.", + "items": { + "type": "string", + "description": "Identifier of an account that is used to process the incoming transaction (usually a crypto wallet address).", + "example": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i" + }, + "example": [ + "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i" + ] + } + }, + "required": [ + "beneficiaryPersons" + ], + "example": { + "beneficiaryPersons": [ + { + "naturalPerson": { + "name": { + "nameIdentifier": [ + { + "primaryIdentifier": "Miura", + "secondaryIdentifier": "Kentaro", + "nameIdentifierType": "LEGL" + } + ], + "localNameIdentifier": [ + { + "primaryIdentifier": "三浦", + "secondaryIdentifier": "建太郎", + "nameIdentifierType": "LEGL" + } + ] + }, + "geographicAddress": [ + { + "addressType": "HOME", + "streetName": "Shimohirakawa", + "buildingNumber": "1536-2", + "townName": "菊川市", + "countrySubDivision": "静岡県", + "postCode": "437-1514", + "country": "JP" + } + ], + "nationalIdentification": { + "nationalIdentifierType": "SOCS", + "nationalIdentifier": "0537-73-2271", + "countryOfIssue": "JP" + }, + "customerIdentification": "01J6QNPGSKN2HZGC2F33F3QQRF", + "dateAndPlaceOfBirth": { + "dateOfBirth": "1979-02-14", + "placeOfBirth": "Tokyo, Japan" + }, + "countryOfResidence": "JP" + } + } + ], + "accountNumber": [ + "mtLmjWt1DDxjGhMRmnxcgQqPNGPUzXuDHw" + ] + } + }, + "OriginatingVASP": { + "title": "OriginatingVASP", + "type": "object", + "description": "The OriginatingVASP describes the VASP that initiates the virtual asset transfer, and transfers the virtual asset upon receiving the request for a virtual asset on behalf of the originator.", + "properties": { + "originatingVASP": { + "$ref": "#/components/schemas/Person" + } + }, + "required": [ + "originatingVASP" + ], + "example": { + "originatingVASP": { + "legalPerson": { + "name": { + "nameIdentifier": [ + { + "legalPersonName": "High Street Capital Management, LTD", + "legalPersonNameIdentifierType": "LEGL" + }, + { + "legalPersonName": "PubCoin", + "legalPersonNameIdentifierType": "TRAD" + } + ] + }, + "geographicAddress": [ + { + "addressType": "BIZZ", + "streetName": "Abbey St.", + "buildingNumber": "51", + "townName": "Nottingham", + "postCode": "NG7 2NZ", + "country": "GB" + } + ], + "nationalIdentification": { + "nationalIdentifier": "GKUH00AIM6DCRXGXVU75", + "nationalIdentifierType": "LEIX" + }, + "countryOfRegistration": "GB" + } + } + } + }, + "BeneficiaryVASP": { + "title": "BeneficiaryVASP", + "type": "object", + "description": "The BeneficiaryVASP describes the VASP which receives the transfer of a virtual asset from the originating VASP directly or through an intermediary VASP and makes the funds available to the beneficiary.", + "properties": { + "beneficiaryVASP": { + "$ref": "#/components/schemas/Person" + } + }, + "required": [ + "beneficiaryVASP" + ], + "example": { + "beneficiaryVASP": { + "legalPerson": { + "name": { + "nameIdentifier": [ + { + "legalPersonName": "Nippon Crypto Exchange, KK", + "legalPersonNameIdentifierType": "LEGL" + } + ], + "localNameIdentifier": [ + { + "legalPersonName": "日本仮想通貨取引所株式会社", + "legalPersonNameIdentifierType": "LEGL" + } + ], + "phoneticNameIdentifier": [ + { + "legalPersonName": "Nihon kasō tsūka torihikisho kabushikigaisha", + "legalPersonNameIdentifierType": "LEGL" + } + ] + }, + "geographicAddress": [ + { + "addressType": "BIZZ", + "addressLine": [ + "滋賀県大津市水明1-34-2", + "520-0531" + ], + "country": "JP" + }, + { + "addressType": "BIZZ", + "addressLine": [ + "1-34-2 SUIMEI OTSU SHI SHIGA KEN", + "520-0531 JAPAN" + ], + "country": "JP" + } + ], + "nationalIdentification": { + "nationalIdentifier": "84-1234567", + "nationalIdentifierType": "TXID", + "registrationAuthority": "RA777777" + }, + "countryOfRegistration": "JP" + } + } + } + }, + "TransferPath": { + "title": "TransferPath", + "type": "object", + "description": "The transfer path refers to the intermediary VASP(s) participating in a serial chain that receive(s) and retransmit(s) a virtual asset transfer on behalf of the originating VASP and the beneficiary VASP, or another intermediary VASP, together with their corresponding sequence number.", + "properties": { + "transferPath": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IntermediaryVASP" + }, + "example": [ + { + "intermediaryVASP": { + "legalPerson": { + "name": { + "nameIdentifier": [ + { + "legalPersonName": "AliceCoin, Ltd", + "legalPersonNameTypeCode": "LEGL" + } + ], + "geographicAddress": [ + { + "addressType": "BIZZ", + "streetName": "Main Street", + "buildingNumber": 123, + "townName": "Charleston", + "countrySubDivision": "KY", + "postCode": 51220, + "country": "US" + } + ], + "nationalIdentification": { + "nationalIdentifier": "5IVG006EPHCVSF9WXV86", + "nationalIdentifierType": "LEIX" + }, + "countryOfRegistration": "US" + } + } + }, + "sequence": 1 + } + ] + } + }, + "example": { + "transferPath": [ + { + "intermediaryVASP": { + "legalPerson": { + "name": { + "nameIdentifier": [ + { + "legalPersonName": "AliceCoin, Ltd", + "legalPersonNameTypeCode": "LEGL" + } + ], + "geographicAddress": [ + { + "addressType": "BIZZ", + "streetName": "Main Street", + "buildingNumber": 123, + "townName": "Charleston", + "countrySubDivision": "KY", + "postCode": 51220, + "country": "US" + } + ], + "nationalIdentification": { + "nationalIdentifier": "5IVG006EPHCVSF9WXV86", + "nationalIdentifierType": "LEIX" + }, + "countryOfRegistration": "US" + } + } + }, + "sequence": 1 + } + ] + } + }, + "IntermediaryVASP": { + "title": "IntermediaryVASP", + "type": "object", + "description": "The VASP in a serial chain that receives and retransmits a VA transfer on behalf of the originating VASP and the beneficiary VASP, or another intermediary VASP.", + "properties": { + "intermediaryVASP": { + "$ref": "#/components/schemas/Person" + }, + "sequence": { + "type": "integer", + "description": "the sequence in a serial chain at which the corresponding intermediary VASP participates in the transfer.", + "example": 1 + } + }, + "example": { + "intermediaryVASP": { + "legalPerson": { + "name": { + "nameIdentifier": [ + { + "legalPersonName": "AliceCoin, Ltd", + "legalPersonNameTypeCode": "LEGL" + } + ], + "geographicAddress": [ + { + "addressType": "BIZZ", + "streetName": "Main Street", + "buildingNumber": 123, + "townName": "Charleston", + "countrySubDivision": "KY", + "postCode": 51220, + "country": "US" + } + ], + "nationalIdentification": { + "nationalIdentifier": "5IVG006EPHCVSF9WXV86", + "nationalIdentifierType": "LEIX" + }, + "countryOfRegistration": "US" + } + } + }, + "sequence": 1 + } + }, + "PayloadMetadata": { + "title": "PayloadMetadata", + "type": "object", + "description": "Data describing the contents of the identity payload.", + "properties": { + "transliterationMethod": { + "type": "array", + "description": "The method used to map from a national system of writing to Latin script.", + "items": { + "type": "string", + "description": "Identifies the national script from which transliteration to Latin script is applied.", + "enum": [ + "OTHR", + "ARAB", + "ARAN", + "ARMN", + "CYRL", + "DEVA", + "GEOR", + "GREK", + "HANI", + "HEBR", + "KANA", + "KORE", + "THAI" + ], + "example": "HEBR" + }, + "example": [ + "GREK", + "HEBR" + ] + } + }, + "example": { + "transliterationMethod": [ + "GREK", + "HEBR" + ] + } + }, + "Person": { + "title": "Person", + "type": "object", + "description": "A Person is either a Natural Person (a uniquely distinguishable individual) or a Legal Person (any other entity besides a natural person that can establish a permenant customer relationship with an affected entity or otherwise own property).", + "properties": { + "naturalPerson": { + "$ref": "#/components/schemas/NaturalPerson" + }, + "legalPerson": { + "$ref": "#/components/schemas/LegalPerson" + } + }, + "example": { + "naturalPerson": { + "name": { + "nameIdentifier": [ + { + "primaryIdentifier": "Miura", + "secondaryIdentifier": "Kentaro", + "nameIdentifierType": "LEGL" + } + ], + "localNameIdentifier": [ + { + "primaryIdentifier": "三浦", + "secondaryIdentifier": "建太郎", + "nameIdentifierType": "LEGL" + } + ] + }, + "geographicAddress": [ + { + "addressType": "HOME", + "streetName": "Shimohirakawa", + "buildingNumber": "1536-2", + "townName": "菊川市", + "countrySubDivision": "静岡県", + "postCode": "437-1514", + "country": "JP" + } + ], + "nationalIdentification": { + "nationalIdentifierType": "SOCS", + "nationalIdentifier": "0537-73-2271", + "countryOfIssue": "JP" + }, + "customerIdentification": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "dateAndPlaceOfBirth": { + "dateOfBirth": "1979-02-14", + "placeOfBirth": "Tokyo, Japan" + }, + "countryOfResidence": "JP" + } + } + }, + "LegalPerson": { + "title": "LegalPerson", + "description": "An entity other than a natural person that can establish a permenant customer releationship with an affected entityh or otherwise own property. This can include companies, bodies corporate, foundations, anstalt, partnerships, or associations and other relevantly similar entities.", + "type": "object", + "properties": { + "name": { + "$ref": "#/components/schemas/LegalPersonName" + }, + "geographicAddress": { + "type": "array", + "description": "The address of the legal person.", + "items": { + "$ref": "#/components/schemas/Address" + }, + "example": [ + { + "addressType": "GEOG", + "addressLine": [ + "4904 Mara Island", + "Abu Dhabi Emirate, Al Dhafrah Region", + "Western Mahadir" + ], + "country": "AE" + } + ] + }, + "customerNumber": { + "type": "string", + "description": "The unique identification number applied by the VASP to the customer.", + "example": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i" + }, + "nationalIdentification": { + "$ref": "#/components/schemas/NationalIdentification" + }, + "countryOfRegistration": { + "type": "string", + "description": "The country in which the legal person is registered.", + "format": "ISO-3166-1 Alpha-2", + "example": "AE" + } + }, + "example": { + "name": { + "nameIdentifier": [ + { + "legalPersonName": "Tabadul al'Bitakwin", + "legalPersonNameIdentifierType": "LEGL" + } + ], + "localNameIdentifier": [ + { + "legalPersonName": "تبادل البيتكوين", + "legalPersonNameIdentifierType": "LEGL" + } + ] + }, + "geographicAddress": [ + { + "addressType": "GEOG", + "addressLine": [ + "4904 Mara Island", + "Abu Dhabi Emirate, Al Dhafrah Region", + "Western Mahadir" + ], + "country": "AE" + } + ], + "customerNumber": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "nationalIdentification": { + "nationalIdentifier": "H7M600ZKXTMEJ8V2ZK52", + "nationalIdentifierType": "LEIX" + }, + "countryOfRegistration": "AE" + } + }, + "LegalPersonName": { + "title": "LegalPersonName", + "description": "The name of the legal person; at least one occurence of the legal person name identifier type must have the value LEGL specified.", + "type": "object", + "properties": { + "nameIdentifier": { + "type": "array", + "description": "The name and type of name by which the legal person is known.", + "items": { + "$ref": "#/components/schemas/LegalPersonNameID" + }, + "example": [ + { + "legalPersonName": "Tabadul al'Bitakwin", + "legalPersonNameIdentifierType": "LEGL" + } + ] + }, + "localNameIdentifier": { + "type": "array", + "description": "The name and type of name by which the legal person is known using local characters.", + "items": { + "$ref": "#/components/schemas/LocalLegalPersonNameID" + }, + "example": [ + { + "legalPersonName": "tbaːdl ʔlbjtkwjn", + "legalPersonNameIdentifierType": "LEGL" + } + ] + }, + "phoneticNameIdentifier": { + "type": "array", + "description": "An alternate representation of the name of a legal person that corresponds to the manner the name is pronounced.", + "items": { + "$ref": "#/components/schemas/LocalLegalPersonNameID" + }, + "example": [ + { + "legalPersonName": "tbaːdl ʔlbjtkwjn", + "legalPersonNameIdentifierType": "LEGL" + } + ] + } + }, + "example": { + "nameIdentifier": [ + { + "legalPersonName": "Tabadul al'Bitakwin", + "legalPersonNameIdentifierType": "LEGL" + } + ], + "localNameIdentifier": [ + { + "legalPersonName": "تبادل البيتكوين", + "legalPersonNameIdentifierType": "LEGL" + } + ] + } + }, + "LegalPersonNameID": { + "title": "LegalPersonNameID", + "description": "The name and type of name by which the legal person is known using latin characters.", + "properties": { + "legalPersonName": { + "type": "string", + "description": "The name which the legal person is known.", + "example": "Tabadul al'Bitakwin" + }, + "legalPersonNameIdentifierType": { + "$ref": "#/components/schemas/LegalPersonNameTypeCode" + } + }, + "type": "object", + "example": { + "legalPersonName": "Tabadul al'Bitakwin", + "legalPersonNameIdentifierType": "SHRT" + } + }, + "LocalLegalPersonNameID": { + "title": "LocalLegalPersonNameID", + "description": "The name and type of name by which the legal person is known using local characters or an alternate represesentation of a name that corresponds to the manner in which the name is pronounced.", + "properties": { + "legalPersonName": { + "type": "string", + "description": "The name which the legal person is known using local characters or a phonetic representation.", + "example": "tbaːdl ʔlbjtkwjn" + }, + "legalPersonNameIdentifierType": { + "$ref": "#/components/schemas/LegalPersonNameTypeCode" + } + }, + "type": "object", + "example": { + "legalPersonName": "تبادل البيتكوين", + "legalPersonNameIdentifierType": "LEGL" + } + }, + "LegalPersonNameTypeCode": { + "title": "LegalPersonNameTypeCode", + "description": "A single value corresponding to the nature of name being specified for the legal person. LEGL refers to the official name under which an organization is registered. SHRT specifies a short name of the organization. TRAD is a name used by a business for commercial purposes, although its registered legal name, used for contracts and other formal sitautions, may be another.", + "type": "string", + "enum": [ + "MISC", + "LEGL", + "SHRT", + "TRAD" + ], + "example": "LEGL" + }, + "NaturalPerson": { + "title": "NaturalPerson", + "description": "A uniquely distinguishable individual; one single person.", + "type": "object", + "properties": { + "name": { + "$ref": "#/components/schemas/NaturalPersonName" + }, + "geographicAddress": { + "type": "array", + "description": "The particulars of a location at which a person may be communicated with (zero or more).", + "items": { + "$ref": "#/components/schemas/Address" + }, + "example": [ + { + "addressType": "HOME", + "streetName": "Shimohirakawa", + "buildingNumber": "1536-2", + "townName": "菊川市", + "countrySubDivision": "静岡県", + "postCode": "437-1514", + "country": "JP" + } + ] + }, + "nationalIdentification": { + "$ref": "#/components/schemas/NationalIdentification" + }, + "customerIdentification": { + "type": "string", + "description": "A distinct identifier that uniquely identifes the person to the institution in context; often a crypto wallet address or customer account number.", + "example": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i" + }, + "dateAndPlaceOfBirth": { + "$ref": "#/components/schemas/DateAndPlaceOfBirth" + }, + "countryOfResidence": { + "type": "string", + "format": "ISO-3166-1 Alpha-2", + "description": "Country in which a person resides (the place of a person's home).", + "example": "JP" + } + }, + "required": [ + "name" + ], + "example": { + "name": { + "nameIdentifier": [ + { + "primaryIdentifier": "Miura", + "secondaryIdentifier": "Kentaro", + "nameIdentifierType": "LEGL" + } + ], + "localNameIdentifier": [ + { + "primaryIdentifier": "三浦", + "secondaryIdentifier": "建太郎", + "nameIdentifierType": "LEGL" + } + ] + }, + "geographicAddress": [ + { + "addressType": "HOME", + "streetName": "Shimohirakawa", + "buildingNumber": "1536-2", + "townName": "菊川市", + "countrySubDivision": "静岡県", + "postCode": "437-1514", + "country": "JP" + } + ], + "nationalIdentification": { + "nationalIdentifierType": "SOCS", + "nationalIdentifier": "0537-73-2271", + "countryOfIssue": "JP" + }, + "customerIdentification": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "dateAndPlaceOfBirth": { + "dateOfBirth": "1979-02-14", + "placeOfBirth": "Tokyo, Japan" + }, + "countryOfResidence": "JP" + } + }, + "NaturalPersonName": { + "title": "NaturalPersonName", + "description": "The distinct words used as identification for an individual. At least one occurrence of a natural person's name ID must have the value LEGL specified as the natural person name identifier type. At least one name identifier is required, and zero or more local and phonetic name identifiers can be added for ease of identification.", + "type": "object", + "properties": { + "nameIdentifier": { + "type": "array", + "description": "Full name separated into primary and secondary identifiers (at least one required and at least one must have the LEGL type).", + "items": { + "$ref": "#/components/schemas/NaturalPersonNameID" + }, + "example": [ + { + "primaryIdentifier": "Miura", + "secondaryIdentifier": "Kentaro", + "nameIdentifierType": "LEGL" + }, + { + "primaryIdentifier": "Miura", + "secondaryIdentifier": "Satoshi", + "nameIdentifierType": "BIRT" + } + ] + }, + "localNameIdentifier": { + "type": "array", + "description": "Full name separated into primary and secondary identifiers using local characters.", + "items": { + "$ref": "#/components/schemas/LocalNaturalPersonNameID" + }, + "example": [ + { + "primaryIdentifier": "三浦", + "secondaryIdentifier": "建太郎", + "nameIdentifierType": "LEGL" + } + ] + }, + "phoneticNameIdentifier": { + "type": "array", + "description": "Alternate representation of a name that corresponds to the manner the name is pronounced.", + "items": { + "$ref": "#/components/schemas/LocalNaturalPersonNameID" + }, + "example": [ + { + "primaryIdentifier": "mɪjʉ́ːrə", + "secondaryIdentifier": "kɛntˈɑː͡ɹɹo͡ʊ", + "nameIdentifierType": "LEGL" + }, + { + "primaryIdentifier": "Mee-Rhaa", + "secondaryIdentifier": "KehNTaa-ROW", + "nameIdentifierType": "LEGL" + } + ] + } + }, + "required": [ + "nameIdentifier" + ], + "example": { + "nameIdentifier": [ + { + "primaryIdentifier": "Miura", + "secondaryIdentifier": "Kentaro", + "nameIdentifierType": "LEGL" + } + ], + "localNameIdentifier": [ + { + "primaryIdentifier": "三浦", + "secondaryIdentifier": "建太郎", + "nameIdentifierType": "LEGL" + } + ] + } + }, + "NaturalPersonNameID": { + "title": "NaturalPersonNameID", + "description": "A full name separated into primary and secondary identifiers using latin characters transliterated using an appropriate script.", + "type": "object", + "properties": { + "primaryIdentifier": { + "type": "string", + "description": "This may be the family name, the maiden name or the married name, the main name, the surname, and in some cases, the entire name where the natural person's name cannot be divided into two parts, or where the sender is unable to divide the natural person's name into two parts.", + "example": "Miura" + }, + "secondaryIdentifier": { + "type": "string", + "description": "These may be the forenames, familiar names, given names, initials, prefixes, suffixes, or Roman numerals (where considered to be legally part of the name) or any oither secondary names.", + "example": "Kentaro" + }, + "nameIdentifierType": { + "$ref": "#/components/schemas/NaturalPersonNameTypeCode" + } + }, + "required": [ + "primaryIdentifier", + "nameIdentifierType" + ], + "example": { + "primaryIdentifier": "Miura", + "secondaryIdentifier": "Kentaro", + "nameIdentifierType": "LEGL" + } + }, + "LocalNaturalPersonNameID": { + "title": "LocalNaturalPersonNameID", + "description": "Either a full name separated into primary and secondary identifiers using local characters or an Alternate representation of a name that corresponds to the manner the name is pronounced.", + "type": "object", + "properties": { + "primaryIdentifier": { + "type": "string", + "description": "This may be the family name, the maiden name or the married name, the main name, the surname, and in some cases, the entire name where the natural person's name cannot be divided into two parts, or where the sender is unable to divide the natural person's name into two parts. This name should be represented in local characters or as a phonetic pronounciation.", + "example": "mɪjʉ́ːrə" + }, + "secondaryIdentifier": { + "type": "string", + "description": "These may be the forenames, familiar names, given names, initials, prefixes, suffixes, or Roman numerals (where considered to be legally part of the name) or any oither secondary names. This name should be represented in local characters or as a phonetic pronounciation.", + "example": "KehNTaa-ROW" + }, + "nameIdentifierType": { + "$ref": "#/components/schemas/NaturalPersonNameTypeCode" + } + }, + "required": [ + "primaryIdentifier", + "nameIdentifierType" + ], + "example": { + "primaryIdentifier": "三浦", + "secondaryIdentifier": "建太郎", + "nameIdentifierType": "LEGL" + } + }, + "NaturalPersonNameTypeCode": { + "title": "NaturalPersonNameTypeCode", + "description": "A single value corresponding to the nature of name being adopted for identification. ALIA refers to an alias name other than the legal name by which a natural person is also known. BIRT is a name aassigned a natural person at birth. MAID is the original maiden name of the natural person who has changed their name after marraige. LEGL is a legal name that identifies a natural person for legal, official, or administrative purposes.", + "type": "string", + "enum": [ + "MISC", + "ALIA", + "BIRT", + "MAID", + "LEGL" + ], + "example": "LEGL" + }, + "Address": { + "title": "Address", + "description": "A valid address that identifies the natural or legal person. There must be at least one occurrence of the element addressLine or the occurrence of streetName and buildingName and/or buildingNumber.", + "type": "object", + "properties": { + "addressType": { + "$ref": "#/components/schemas/AddressTypeCode" + }, + "department": { + "type": "string", + "description": "Identification of a division of a large oraganization or building.", + "example": "College of Natural Sciences" + }, + "subDepartment": { + "type": "string", + "description": "Indentification of a sub-division of a large organization or building.", + "example": "History Department" + }, + "streetName": { + "type": "string", + "description": "Name of a street or thoroughfare.", + "example": "High Street" + }, + "buildingNumber": { + "type": "string", + "description": "Number that identifies the position of a building on a street.", + "example": "12" + }, + "buildingName": { + "type": "string", + "description": "Name of the building or house.", + "example": "Cromwell House" + }, + "floor": { + "type": "string", + "description": "Floor or storey within a building.", + "example": "Floor 21" + }, + "postBox": { + "type": "string", + "description": "Numbered box in a post office, assigned to a person or organization, where letters are kept until called for.", + "example": "PO Box 1248" + }, + "room": { + "type": "string", + "description": "Building room number.", + "example": "AVW 3224" + }, + "postCode": { + "type": "string", + "description": "Identifier consisting of a grup of letters and/or numbers that is added to a postal address to assist in sorting of mail.", + "example": "OX2 6HY" + }, + "townName": { + "type": "string", + "description": "Name of a built-up area, with defined boundaries and a local government.", + "example": "London" + }, + "townLocationName": { + "type": "string", + "description": "Specific location name within the town.", + "example": "Southwark" + }, + "districtName": { + "type": "string", + "description": "Identifies a subdivision within a country subdivision.", + "example": "Howard County" + }, + "countrySubDivision": { + "type": "string", + "description": "Identifies a subdivision of a country for example, state, region, province, départment or county.", + "example": "MD" + }, + "addressLine": { + "type": "array", + "description": "Information that locates and identifies a specific address, as defined by postal services, presented in free format text.", + "items": { + "type": "string", + "description": "A single address line", + "example": "123 Main Street" + }, + "example": [ + "123 Main Street", + "Suite 200", + "Charleston, KY 52212" + ] + }, + "country": { + "type": "string", + "format": "ISO-3166-1 Alpha-2", + "description": "Country code of the country location of the address.", + "example": "US" + } + }, + "required": [ + "addressType", + "country" + ], + "example": { + "addressType": "BIZZ", + "streetName": "High Street", + "buildingNumber": "143", + "department": "Suite 41", + "floor": "23", + "townName": "London", + "postCode": "SX1 3H2", + "country": "GB" + } + }, + "AddressTypeCode": { + "title": "AddressTypeCode", + "description": "Identifies the nature of the address. HOME implies a residential home address; BIZZ a business address; and GEOG is an unspecified physical address sutable for identification of a natural or legal person.", + "type": "string", + "enum": [ + "MISC", + "HOME", + "BIZZ", + "GEOG" + ], + "example": "HOME" + }, + "DateAndPlaceOfBirth": { + "title": "DateAndPlaceOfBirth", + "description": "Detailed information about a natural person used to specifically distinguish that person from others with similar names. The primary constraint is that the date of birth must be in the past.", + "type": "object", + "properties": { + "dateOfBirth": { + "type": "string", + "format": "date", + "description": "Date on which a person is born", + "example": "1920-11-11" + }, + "placeOfBirth": { + "type": "string", + "description": "The town and/or the city and/or the suburb and/or the country subdivision and/or the country where the person was born.", + "example": "Wattenscheid, Germany" + } + }, + "example": { + "dateOfBirth": "1920-11-11", + "placeOfBirth": "Wattenscheid, Germany" + } + }, + "NationalIdentification": { + "title": "NationalIdentification", + "description": "Valid national identification for the person. Natural persons must specify the national identifier, national identifier type, and country of issue. Legal persons must not have a value for country of issue and must have a value for registration authority if the type is not LEIX.", + "type": "object", + "properties": { + "nationalIdentifier": { + "type": "string", + "description": "An identifier issued by an appropriate issuing authority", + "example": "BOND9211110JA9OB" + }, + "nationalIdentifierType": { + "$ref": "#/components/schemas/NationalIdentifierTypeCode" + }, + "countryOfIssue": { + "type": "string", + "format": "ISO-3166-1 Alpha-2", + "description": "Country of the issuing authority", + "example": "GB" + }, + "registrationAuthority": { + "type": "string", + "description": "A code specifying the registration authority from the GLEIF Registration Authorities List.", + "example": "RA777777" + } + }, + "example": { + "nationalIdentifier": "H7M600ZKXTMEJ8V2ZK52", + "nationalIdentifierType": "LEIX" + } + }, + "NationalIdentifierTypeCode": { + "title": "NationalIdentifierTypeCode", + "description": "Identifies the national identification type. Natural persons can use the identifiers \"ARNU\" (alien registration number), \"CCPT\" (passport number), \"DRLC\" (driver's license number), \"FIIN\" (foreign investment identity number), \"SOCS\" (social security number), or \"IDCD\" (identity card number). Legal persons can use the identifiers \"RAID\" (registration authority identifier), \"FIIN\", \"TXID\" (tax identification number), or \"LEIX\" (legal entity identifier) where \"LEIX\" is preferred for legal persons.", + "type": "string", + "enum": [ + "MISC", + "ARNU", + "CCPT", + "RAID", + "DRLC", + "FIIN", + "TXID", + "SOCS", + "IDCD", + "LEIX" + ], + "example": "DRLC" + }, + "TransactionPayload": { + "title": "TransactionPayload", + "description": "A TRISA message that assists the compliance officer in identifying a virtual asset transaction on the chain. The goal of this payload is to provide enough information to link travel rule compliance information in the identity payload with a transaction on the blockchain or network.", + "type": "object", + "properties": { + "txid": { + "type": "string", + "description": "A transaction ID or hash unique to the chain/network", + "example": "44e25bc0ed840f9bf0e58d6227db15192d5b89e79ba4304da16b09703f68ceaf" + }, + "originator": { + "type": "string", + "description": "the crypto wallet address of the originator", + "example": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i" + }, + "beneficiary": { + "type": "string", + "description": "the crypto wallet address of the beneficiary", + "example": "mtCoa72PhLznu2dw639xXfBjC8SUCpyrTv" + }, + "amount": { + "type": "number", + "description": "the amount of the transaction in the smallest unit to the available network/asset type", + "example": 0.46602501 + }, + "network": { + "type": "string", + "format": "SLIP-0044", + "description": "The three character SLIP-0044 network code describing the chain the virtual asset belongs to. Coming Soon: DTI.", + "example": "BTC" + }, + "timestamp": { + "type": "string", + "format": "date-time", + "description": "The RFC3339 formatted timestamp of when the on-chain transaction occurred.", + "example": "2024-09-01T16:22:41-05:00" + }, + "extra_json": { + "type": "string", + "format": "base64", + "description": "any extra transaction related compliance data as a base64 formatted JSON object.", + "example": "eyJ2YWx1ZV93aGVuX3RyYW5zYWN0ZWQiOiAiVVNEICQzMiwzODYuNjEifQ==" + }, + "asset_type": { + "type": "string", + "description": "If the blockchain network hosts multiple asset types, the identifier of the asset type being transferred.", + "example": "GAS" + }, + "tag": { + "type": "string", + "description": "An optional memo or destination tag related to the beneficiary wallet for transfer purposes.", + "example": "dt=1234567890" + } + }, + "required": [ + "originator", + "beneficiary", + "network" + ], + "example": { + "txid": "44e25bc0ed840f9bf0e58d6227db15192d5b89e79ba4304da16b09703f68ceaf", + "originator": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "beneficiary": "mtCoa72PhLznu2dw639xXfBjC8SUCpyrTv", + "amount": 0.46602501, + "network": "BTC", + "timestamp": "2024-09-01T16:22:41-05:00", + "extra_json": "eyJ2YWx1ZV93aGVuX3RyYW5zYWN0ZWQiOiAiVVNEICQzMiwzODYuNjEifQ==" + } + }, + "PendingPayload": { + "title": "PendingPayload", + "description": "A control flow message to support asynchronous TRISA transfers. Pending messages can be returned as an intermediate response during a compliance transfer if further processing is required before a response can be sent.", + "type": "object", + "properties": { + "envelope_id": { + "type": "string", + "format": "uuid", + "description": "The TRISA envelope ID that refers to the compliance communication.", + "example": "148ed35f-fc65-4d5f-aa15-0d231cc534b6" + }, + "received_by": { + "type": "string", + "description": "The name of the recipient compliance officer or recipient VASP.", + "example": "AliceCoin" + }, + "received_at": { + "type": "string", + "format": "date-time", + "description": "The RFC3339 formatted timestamp when the request was received.", + "example": "2024-09-01T16:45:06-05:00" + }, + "message": { + "type": "string", + "description": "an optional message to respond with to the counterparty.", + "example": "This transaction is under compliance review." + }, + "reply_not_after": { + "type": "string", + "format": "date-time", + "description": "The RFC3339 timestamp when the response will be returned by.", + "example": "2024-09-06T16:00:00-05:00" + }, + "reply_not_before": { + "type": "string", + "format": "date-time", + "description": "The RFC3339 timestamp before which not to expect a response.", + "example": "2024-09-01T17:00:00-05:00" + }, + "extra_json": { + "type": "string", + "format": "base64", + "description": "Any extra data as a base64 encoded JSON object.", + "example": "eyJjb21wbGlhbmNlX29mZmljZXIiOiAiQnJlbmRhIEJyYWRsZXkiLCAiZW1haWwiOiAiYnJlbmRhQGV4YW1wbGUuY29tIn0=" + }, + "transaction": { + "$ref": "#/components/schemas/TransactionPayload" + } + }, + "example": { + "envelope_id": "148ed35f-fc65-4d5f-aa15-0d231cc534b6", + "received_by": "AliceCoin", + "received_at": "2024-09-01T16:45:06-05:00", + "message": "This transaction is under compliance review.", + "reply_not_after": "2024-09-06T16:00:00-05:00", + "extra_json": "eyJjb21wbGlhbmNlX29mZmljZXIiOiAiQnJlbmRhIEJyYWRsZXkiLCAiZW1haWwiOiAiYnJlbmRhQGV4YW1wbGUuY29tIn0", + "transaction": { + "originator": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "beneficiary": "mtCoa72PhLznu2dw639xXfBjC8SUCpyrTv", + "amount": 0.46602501, + "network": "BTC" + } + } + }, + "TRISAError": { + "title": "TRISAError", + "description": "A rejection or repair error that is stored in a SecureEnvelope. There are two types of errors. A \"Rejection\" (reply=false) informs the counterparty that the on-chain transaction should not proceed because compliance requirements could not be met. A \"Repair\" (reply=true) informs the counterparty that there is some issue with the compliance information that needs to be fixed before the on-chain transaction can proceed.", + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "The TRISA error code as defined by the TRISA specification. See https://trisa.dev/api/errors/index.html for the complete list of codes. Some common codes are included here as enums.", + "enum": [ + "REJECTED", + "UNKNOWN_WALLET_ADDRESS", + "UNKNOWN_ORIGINATOR", + "UNKOWN_BENEFICIARY", + "UNSUPPORTED_CURRENCY", + "EXCEEDED_TRADING_VOLUME", + "COMPLIANCE_CHECK_FAIL", + "NO_COMPLIANCE", + "HIGH_RISK", + "OUT_OF_NETWORK", + "BAD_REQUEST", + "UNPARSEABLE_IDENTITY", + "PRIVATE_INFO_WRONG_FORMAT", + "UNPARSEABLE_TRANSACTION", + "MISSING_FIELDS", + "INCOMPLETE_IDENTITY", + "VALIDATION_ERROR", + "COMPLIANCE_PERIOD_EXCEEDED", + "CANCELED" + ], + "example": "INCOMPLETE_IDENTITY" + }, + "message": { + "type": "string", + "description": "A human readable message stating the reason for the error. This message should be loggable and actionable.", + "example": "Our jurisdiction requires date and place of birth as part of the identity payload." + }, + "retry": { + "type": "boolean", + "description": "If the message that caused the error should be retried with a fix (repair) then set to true. Otherwise set to false if the rejection is permenant and the request should not be retried nor should the on-chain transaction take place.", + "example": true + } + }, + "required": [ + "code", + "message", + "retry" + ], + "example": { + "code": "INCOMPLETE_IDENTITY", + "message": "Our jurisdiction requires date and place of birth as part of the identity payload.", + "retry": true + } + }, + "PublicKeySignature": { + "title": "PublicKeySignature", + "type": "string", + "description": "The signature of the public key used to encrypt the secure envelope; used for identifying the keys required for decryption and for auditing the HMAC signature and validation of the secure envelope payload.", + "example": "SHA256:DIvHCo8bcx5YR44CldvxojVAerYMGwA81L2GIUxxghw" + }, + "TransferState": { + "title": "TransferState", + "description": "The transfer_state signals to the counterparty (the recipient of the secure envelope) the intent of the current transfer message. This state is used to determine and update the transaction state (which is slightly different). See https://trisa.dev/api/workflows/index.html for more.", + "type": "string", + "enum": [ + "UNSPECIFIED", + "STARTED", + "PENDING", + "REVIEW", + "REPAIR", + "ACCEPTED", + "COMPLETED", + "REJECTED" + ], + "example": "REVIEW" + }, + "User": { + "title": "User", + "description": "A user of the Envoy system that has access for compliance or administrative purposes.", + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "ulid", + "description": "The unique identifier of the user on your Envoy node.", + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" + }, + "name": { + "type": "string", + "description": "The full name of the user for display purposes.", + "example": "John Nolan" + }, + "email": { + "type": "string", + "format": "email", + "description": "The professional email of the user for login.", + "example": "jnolan@example.com" + }, + "password": { + "type": "string", + "description": "When creating a user an alphanumeric password is created and returned in the create response. The password will not be returned on any other request.", + "example": "Rf2H6NEzVktb" + }, + "role": { + "type": "string", + "description": "The name of the role assigned to the user. Admin users have full access and all permisions. Compliance users can manage transactions, counterparties, and customer accounts but not node settings. Observers have read only access.", + "enum": [ + "Admin", + "Compliance", + "Observer" + ], + "example": "Compliance" + }, + "last_login": { + "type": "string", + "format": "date-time", + "description": "The timestamp that the user last logged in or null if they have never logged in.", + "example": "2024-09-02T17:53:58-05:00" + }, + "created": { + "type": "string", + "format": "date-time", + "description": "The date and time when the user record was created.", + "example": "2024-08-28T10:14:43-05:00" + }, + "modified": { + "type": "string", + "format": "date-time", + "description": "The date and time when the user record was last modified.", + "example": "2024-08-28T12:23:24-05:00" + } + }, + "example": { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "name": "John Nolan", + "email": "jnolan@example.com", + "role": "Compliance", + "last_login": "2024-09-02T17:53:58-05:00", + "created": "2024-08-28T10:14:43-05:00", + "modified": "2024-08-28T12:23:24-05:00" + } + }, + "UserForm": { + "title": "UserForm", + "description": "Defines the editable fields to create or update a user record.", + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Set the full name of the user for display purposes.", + "example": "John Nolan" + }, + "email": { + "type": "string", + "format": "email", + "description": "Set the professional email of the user for login.", + "example": "jnolan@example.com" + }, + "role": { + "type": "string", + "description": "The name of the role to assign to the user. Admin users have full access and all permisions. Compliance users can manage transactions, counterparties, and customer accounts but not node settings. Observers have read only access.", + "enum": [ + "Admin", + "Compliance", + "Observer" + ], + "example": "Compliance" + } + }, + "example": { + "name": "John Nolan", + "email": "jnolan@example.com", + "role": "Compliance" + } + }, + "UserList": { + "title": "UserList", + "description": "A list of User objects, returned in a paginated fashion.", + "type": "object", + "properties": { + "page": { + "$ref": "#/components/schemas/PageInfo" + }, + "users": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AccountSummary" + }, + "example": [ + { + "id": "01J6TFMSS0P5FWH8MVZDH23D5A", + "name": "Delores Clark", + "email": "dclark@example.com", + "role": "Observer", + "last_login": null, + "created": "2024-09-02T18:03:55-05:00", + "modified": "2024-09-02T18:03:55-05:00" + }, + { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "name": "John Nolan", + "email": "jnolan@example.com", + "role": "Compliance", + "last_login": "2024-09-02T17:53:58-05:00", + "created": "2024-08-28T10:14:43-05:00", + "modified": "2024-08-28T12:23:24-05:00" + } + ] + } + }, + "example": { + "page": { + "page_size": 50 + }, + "users": [ + { + "id": "01J6TFMSS0P5FWH8MVZDH23D5A", + "name": "Delores Clark", + "email": "dclark@example.com", + "role": "Observer", + "last_login": null, + "created": "2024-09-02T18:03:55-05:00", + "modified": "2024-09-02T18:03:55-05:00" + }, + { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "name": "John Nolan", + "email": "jnolan@example.com", + "role": "Compliance", + "last_login": "2024-09-02T17:53:58-05:00", + "created": "2024-08-28T10:14:43-05:00", + "modified": "2024-08-28T12:23:24-05:00" + } + ] + } + }, + "UserPassword": { + "title": "UserPassword", + "description": "A form to reset a user's password.", + "type": "object", + "properties": { + "password": { + "type": "string", + "description": "The password to reset for the user.", + "example": "supersecretpassword" + }, + "send_email": { + "type": "boolean", + "description": "If true then an email with the password is sent to the user.", + "example": true + } + }, + "example": { + "password": "supersecretpassword", + "send_email": false + } + }, + "APIKey": { + "title": "APIKey", + "description": "API client access to the Envoy system for machine access to compliance or administrative tasks.", + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "ulid", + "description": "The unique identifier of the api key on your Envoy node. Either this ID or the client ID can be used for key identification.", + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" + }, + "description": { + "type": "string", + "description": "A human readable description of what the API keys are used for (for tracking and auditing purposes).", + "example": "Bob's Local Development Keys" + }, + "client_id": { + "type": "string", + "description": "A random alphanumeric string that identifies the key during authentication.", + "example": "kbxiRmtYvLbkYKrlefJoSB" + }, + "last_seen": { + "type": "string", + "format": "date-time", + "description": "The timestamp that the API key was last authenticated to the node; null if it has never been used.", + "example": "2024-09-02T19:11:04-05:00" + }, + "permissions": { + "type": "array", + "description": "The permissions assigned to the API key", + "items": { + "type": "string", + "description": "a permission identifier in the form of 'resource:action'", + "example": "travelrule:manage" + }, + "example": [ + "users:view", + "apikeys:view", + "counterparties:manage", + "counterparties:view", + "accounts:manage", + "accounts:view", + "travelrule:manage", + "travelrule:view", + "config:view", + "pki:view" + ] + }, + "created": { + "type": "string", + "format": "date-time", + "description": "The date and time when the api key record was created.", + "example": "2024-08-28T10:14:43-05:00" + }, + "modified": { + "type": "string", + "format": "date-time", + "description": "The date and time when the api key record was last modified.", + "example": "2024-08-28T12:23:24-05:00" + } + }, + "example": { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "description": "Bob's Local Development Keys", + "client_id": "kbxiRmtYvLbkYKrlefJoSB", + "permissions": [ + "users:view", + "apikeys:view", + "counterparties:manage", + "counterparties:view", + "accounts:manage", + "accounts:view", + "travelrule:manage", + "travelrule:view", + "config:view", + "pki:view" + ], + "last_seen": "2024-09-02T19:11:04-05:00", + "created": "2024-08-28T10:14:43-05:00", + "modified": "2024-08-28T12:23:24-05:00" + } + }, + "APIKeyForm": { + "title": "APIKeyForm", + "description": "Defines the editable fields to create or update an api key record.", + "type": "object", + "properties": { + "description": { + "type": "string", + "description": "Set the human readable description of what the API keys are used for (for tracking and auditing purposes).", + "example": "Bob's Local Development Keys" + }, + "permissions": { + "type": "array", + "description": "Assign permissions to the API key (only available on create, not on update).", + "items": { + "type": "string", + "description": "an identifier in the form of 'resource:action' describing the permission.", + "example": "travelrule:manage" + }, + "example": [ + "users:view", + "apikeys:view", + "counterparties:manage", + "counterparties:view", + "accounts:manage", + "accounts:view", + "travelrule:manage", + "travelrule:view", + "config:view", + "pki:view" + ] + } + }, + "example": { + "description": "Katies's Local Development Keys", + "permissions": [ + "users:view", + "apikeys:view", + "counterparties:manage", + "counterparties:view", + "accounts:manage", + "accounts:view", + "travelrule:manage", + "travelrule:view", + "config:view", + "pki:view" + ] + } + }, + "APIKeyCreated": { + "title": "APIKeyCreated", + "description": "After an API Key is created a secret is created for API client access and that secret is returned ass part of the payload. This is the only time the secret is shown to the user; if the secret is lost the API key must be revoked and re-created.", + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "ulid", + "description": "The unique identifier of the api key that was just created.", + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" + }, + "description": { + "type": "string", + "description": "A human readable description of what the API keys are used for.", + "example": "Bob's Local Development Keys" + }, + "client_id": { + "type": "string", + "description": "A random alphanumeric string that identifies the key during authentication; generated during create.", + "example": "kbxiRmtYvLbkYKrlefJoSB" + }, + "client_secret": { + "type": "string", + "description": "A random alphanumeric string that is used to authenticate the api keys; generated during create.", + "example": "R4OTqjvlGj02x4PvoPe6bxTopFjQ15QrISG8X3HqD5isWIng" + }, + "permissions": { + "type": "array", + "description": "The permissions assigned to the API key by the request.", + "items": { + "type": "string", + "description": "a permission identifier", + "example": "travelrule:manage" + }, + "example": [ + "users:view", + "apikeys:view", + "counterparties:manage", + "counterparties:view", + "accounts:manage", + "accounts:view", + "travelrule:manage", + "travelrule:view", + "config:view", + "pki:view" + ] + }, + "created": { + "type": "string", + "format": "date-time", + "description": "The date and time when the api key record was created (now).", + "example": "2024-08-28T10:14:43-05:00" + }, + "modified": { + "type": "string", + "format": "date-time", + "description": "The date and time when the api key record was last modified (same as created).", + "example": "2024-08-28T12:23:24-05:00" + } + }, + "example": { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "description": "Bob's Local Development Keys", + "client_id": "kbxiRmtYvLbkYKrlefJoSB", + "client_secret": "R4OTqjvlGj02x4PvoPe6bxTopFjQ15QrISG8X3HqD5isWIng", + "permissions": [ + "users:view", + "apikeys:view", + "counterparties:manage", + "counterparties:view", + "accounts:manage", + "accounts:view", + "travelrule:manage", + "travelrule:view", + "config:view", + "pki:view" + ], + "created": "2024-08-28T10:14:43-05:00", + "modified": "2024-08-28T10:14:43-05:00" + } + }, + "APIKeyList": { + "title": "APIKeyList", + "description": "A list of API Key objects, returned in a paginated fashion.", + "type": "object", + "properties": { + "page": { + "$ref": "#/components/schemas/PageInfo" + }, + "api_keys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/APIKey" + }, + "example": [ + { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "description": "Chuck's Local Development Keys", + "client_id": "kbxiRmtYvLbkYKrlefJoSB", + "permissions": [ + "users:view", + "apikeys:view", + "counterparties:manage", + "counterparties:view", + "accounts:manage", + "accounts:view", + "travelrule:manage", + "travelrule:view", + "config:view", + "pki:view" + ], + "last_seen": "2024-09-02T19:11:04-05:00", + "created": "2024-08-28T10:14:43-05:00", + "modified": "2024-08-28T12:23:24-05:00" + }, + { + "id": "01J6TM56VAFMZ6YCKXHTG5P407", + "description": "Read Only Keys", + "client_id": "fhXdLh5CmMh6ooqm1RP7AA", + "permissions": [ + "users:view", + "apikeys:view", + "counterparties:view", + "accounts:view", + "travelrule:view", + "config:view", + "pki:view" + ], + "last_seen": "2024-09-02T19:23:28-05:00", + "created": "2024-08-28T10:14:43-05:00", + "modified": "2024-08-28T12:23:24-05:00" + } + ] + } + }, + "example": { + "page": { + "page_size": 50 + }, + "api_keys": [ + { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "description": "Sarah's Local Development Keys", + "client_id": "kbxiRmtYvLbkYKrlefJoSB", + "permissions": [ + "users:view", + "apikeys:view", + "counterparties:manage", + "counterparties:view", + "accounts:manage", + "accounts:view", + "travelrule:manage", + "travelrule:view", + "config:view", + "pki:view" + ], + "last_seen": "2024-09-02T19:11:04-05:00", + "created": "2024-08-28T10:14:43-05:00", + "modified": "2024-08-28T12:23:24-05:00" + }, + { + "id": "01J6TM56VAFMZ6YCKXHTG5P407", + "description": "Observer Keys", + "client_id": "fhXdLh5CmMh6ooqm1RP7AA", + "permissions": [ + "users:view", + "apikeys:view", + "counterparties:view", + "accounts:view", + "travelrule:view", + "config:view", + "pki:view" + ], + "last_seen": "2024-09-02T19:23:28-05:00", + "created": "2024-08-28T10:14:43-05:00", + "modified": "2024-08-28T12:23:24-05:00" + } + ] + } + }, + "StatusReply": { + "title": "StatusReply", + "description": "A status response that describes the current state of the server.", + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "The current health status of the server.", + "enum": [ + "ok", + "not ready", + "unhealthy", + "maintenance" + ], + "example": "ok" + }, + "version": { + "type": "string", + "format": "semver", + "description": "The current version of the Envoy node.", + "example": "1.0.0" + }, + "uptime": { + "type": "string", + "description": "The amount of time that has passed since the server started.", + "example": "537h4m32.628679622s" + } + }, + "example": { + "status": "ok", + "uptime": "537h4m32.628679622s", + "version": "1.0.0" + } + }, + "TravelAddress": { + "title": "TravelAddress", + "description": "Used as a request and a response to the travel address utility.", + "type": "object", + "properties": { + "encoded": { + "type": "string", + "format": "TravelAddress", + "description": "A travel address encoded according to the OpenVASP spec.", + "example": "ta32sgxYnHqYMeJSfyng1wA3s7zCw5Q48v" + }, + "decoded": { + "type": "string", + "format": "url", + "description": "A decoded travel address; a url without the https scheme and the ?t=i query params", + "example": "beneficiary.com?t=i" + } + }, + "example": { + "encoded": "ta32sgxYnHqYMeJSfyng1wA3s7zCw5Q48v", + "decoded": "beneficiary.com?t=i" + } + } + }, + "securitySchemes": { + "bearerAuth": { + "type": "http", + "scheme": "bearer", + "bearerFormat": "JWT", + "description": "Authentication with JWT bearer token obtained using an API key and the authenticate endpoint." + } + }, + "parameters": { + "page_size": { + "name": "page_size", + "in": "query", + "description": "Specify the page size for a paginated list request, e.g. the number of records to return in a single request.", + "schema": { + "type": "integer", + "example": 50 + }, + "example": 50 + }, + "next_page_token": { + "name": "next_page_token", + "in": "query", + "description": "Used to specify the next page in a series of paginated list requests. Page tokens expire, so make sure to use them in a sequence of requests to retrieve a large list.", + "schema": { + "type": "string", + "format": "base64", + "example": "eyJjIjogIjAxSjZESjlGNjkxQ0Y4RTlIMFYzRVQwTTBFIiwgInMiOiA1MCwgImUiOiAxNzI0ODgyOTU4fQ==" + }, + "example": "eyJjIjogIjAxSjZESjlGNjkxQ0Y4RTlIMFYzRVQwTTBFIiwgInMiOiA1MCwgImUiOiAxNzI0ODgyOTU4fQ==" + }, + "prev_page_token": { + "name": "prev_page_token", + "in": "query", + "description": "Used to specify the previous page in a series of paginated list requests. Although reverse iteration is not necessarily supported, this token can allow refresh of a previous page fetched during paginated iteration.", + "schema": { + "type": "string", + "format": "base64", + "example": "eyJjIjogIjAxSjZESjlGNjkxQ0Y4RTlIMFYzRVQwTTBFIiwgInMiOiA1MCwgImUiOiAxNzI0ODgyOTU4fQ==" + }, + "example": "eyJjIjogIjAxSjZESjlGNjkxQ0Y4RTlIMFYzRVQwTTBFIiwgInMiOiA1MCwgImUiOiAxNzI0ODgyOTU4fQ==" + }, + "query": { + "name": "query", + "in": "query", + "description": "The name of the vasp to search for. The best bet is to use the shortest search query possible to return the most results.", + "required": true, + "schema": { + "type": "string", + "example": "Coin" + }, + "example": "Coin" + }, + "limit": { + "name": "limit", + "in": "query", + "description": "Limit the number of records to return in a single search query.", + "schema": { + "type": "integer", + "example": 10, + "default": 10 + }, + "example": 10 + }, + "decrypt": { + "name": "decrypt", + "in": "query", + "description": "If specified and true then the secure envelope(s) are decrypted before returning them in the response. If the envelope(s) are not able to be decrypted either partial data is sent back or an error.", + "required": false, + "schema": { + "type": "boolean", + "example": true + }, + "example": true + }, + "archives": { + "name": "archives", + "in": "query", + "description": "If specified and true then any archived secure envelope(s) are also returned (otherwise they would be omitted from list results or a 404 would be returned on a detail request).", + "required": false, + "schema": { + "type": "boolean", + "example": true + }, + "example": true + } + } + }, + "paths": { + "/v1/authenticate": { + "post": { + "summary": "Authenticate", + "description": "Authenticate your client with your API Key and receive a JWT claims package that can be used as a Bearer token to authenticate future requests.", + "operationId": "authenticate", + "tags": [ + "Authentication" + ], + "requestBody": { + "required": true, + "description": "An API authentication JSON payload with the API key client id and secret.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/APIAuthentication" + }, + "example": { + "client_id": "kbxiRmtYvLbkYKrlefJoSP", + "client_secret": "R4OTqjvlGj02x4PvoPe6bxTopFjQ15QrISG8X3HqD5isWIng" + } + } + } + }, + "responses": { + "200": { + "description": "Authentication Successful", + "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Transaction" + "$ref": "#/components/schemas/LoginReply" + }, + "example": { + "access_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjAxSFZINTBWWEs5MFJKWlI5WENNMENCRkJRIiwidHlwIjoiSldUIn0.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwMDAiLCJzdWIiOiJrMDFKNVkyUjBZQUZFU0ZUVzYzU1JTNTg4WjIiLCJhdWQiOlsiaHR0cDovL2xvY2FsaG9zdDo4MDAwIl0sImV4cCI6MTcyNDg4NjU1OCwibmJmIjoxNzI0ODgyOTU4LCJpYXQiOjE3MjQ4ODI5NTgsImp0aSI6IjAxSjZER0pFMFExMEcwQzY1U1NEUlQ3VDY3IiwiY2xpZW50SUQiOiJrYnhpUm10WXZMYmtZS3JsZWZKb1NQIiwicGVybWlzc2lvbnMiOlsidXNlcnM6bWFuYWdlIiwidXNlcnM6dmlldyIsImFwaWtleXM6bWFuYWdlIiwiYXBpa2V5czp2aWV3IiwiYXBpa2V5czpyZXZva2UiLCJjb3VudGVycGFydGllczptYW5hZ2UiLCJjb3VudGVycGFydGllczp2aWV3IiwiYWNjb3VudHM6bWFuYWdlIiwiYWNjb3VudHM6dmlldyIsInRyYXZlbHJ1bGU6bWFuYWdlIiwidHJhdmVscnVsZTpkZWxldGUiLCJ0cmF2ZWxydWxlOnZpZXciLCJjb25maWc6bWFuYWdlIiwiY29uZmlnOnZpZXciLCJwa2k6bWFuYWdlIiwicGtpOmRlbGV0ZSIsInBraTp2aWV3Il19.vZeoZ6UR9e2qOU2Zd64nlnPne4Hbm3t8QtX_uM72pyf8BRIEehruioQCQ8RfqNJpSyacRCfhAKovTKChnWIPd8Xdkzcl9_bHnhYKlTzhdPYlD5K1uCNkNSJHZVwEJeG3aHB7xE-MVrvXivia3xHfth_ZSQab3jVuL6q_fjG4yPNpf3yjXbO3OPaGpavcElMf2r-DdIMIIewCmNktjrkFNtiNPmJU3MzLzwxLQPm2WUkcKZ27e7KD_LL2ZgluyVSM0BRehcdkPXmOXGF5KCTvHu7Xo5evUg6DvftEIz5IjCd-6s1YkZEJSQqBlfymhXXsmW1tlK4RYhay10Lg_k16HtO-kByLB2vtW6V1090XBK6tvjAJNjSGrD2tTFWbRlEe2YdYQ3pQilnSeJW1hBSpSYb_Ty94FwcsMrq_NiULYmxh6dOYtzrANou0EKd0HoYjw4d0dQOlCqSBfFclOoMmftjms5QG6E93s_Bjp2nhpKs6fr7TQhwmVChiVWBV2eq5s1mTLngNQhgLdNddcDJ_DJiisSv_V3nD-2uLcQaq9ZQ60oW1jQzUoTaJY9uw3SEToUa7bGRNKmHnUYYxRxqyVVYceaOlklPqfyT58zEBKqblhZfAE39rtyVZKOCc3x_d9yyQ9YaV6ijpaxC0PKTW0tSEWzNesNv4wayH-pNaSJM", + "refresh_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjAxSFZINTBWWEs5MFJKWlI5WENNMENCRkJRIiwidHlwIjoiSldUIn0.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwMDAiLCJzdWIiOiJrMDFKNVkyUjBZQUZFU0ZUVzYzU1JTNTg4WjIiLCJhdWQiOlsiaHR0cDovL2xvY2FsaG9zdDo4MDAwIiwiaHR0cDovL2xvY2FsaG9zdDo4MDAwL3YxL3JlYXV0aGVudGljYXRlIl0sImV4cCI6MTcyNDg5MDE1OCwibmJmIjoxNzI0ODg1NjU4LCJpYXQiOjE3MjQ4ODI5NTgsImp0aSI6IjAxSjZER0pFMFExMEcwQzY1U1NEUlQ3VDY3In0.Mzey5MWS-GRVhVAfISXH6keebNpoQTYWUVDhOnD-mENfWNurtkBpWMgV_FivpAHyXlH72Mv-cC0oaaUMYNMVRg5yCN6XQyYdUqcZsynULLkUUPcD7PGJLDIMe8CngAHITDmDRzdZaUpbWB4F-Ad_qEqzGhz3-PRAQxM7-Gt3IFNFVfWHJXTZzAiKHP_xtE4rnVczUx2sMXKPQHhxDVTiahMSAGiMVUWvnfKzwtv36U69cmfOw3UbG2IVZ6-2zm8ICSNesUqtwpjn1c5B_pYoqJNJYbp8jCzjRS2xT4xT7eDmMAjeFIiJEe6wuTvzU3ZwwqsXhLPtj27VNwHNHHL2qqnn0wTLx30amHkrBoEU44Rbf9Lxof6y_WDhZJIt7SeG1bDZ378falQd0v5yTColbaTk20jlADsoSdm8IgYoH91k1_-bzfHQkRTNUQI7YxCQWeP9zj-QzKdA7c86gyvYuPbsk29St0tGvQdS-aWa5ZLpDL3R5OLzO9zhqgNeGQVomF5YJaFAaBe4Y_6dyvNmHJB9cdfgEgj6B9cTzKdZWfn-r48E3xt0n41FdvYKgyDjR1gRBe7T-f55GbH5N0fR2Twdclc4DqD5c2gp5U0BTK-Uc2OBdT710Ws6mqdVljKoaG6VZjI-eA17pv7Khzdr8NWpmSUMYUGbAKtHFA7atsc" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FieldErrors" + }, + "example": { + "success": false, + "error": "2 validation errors occurred", + "errors": [ + { + "field": "client_id", + "error": "missing client_id: this field is required" + }, + { + "field": "client_secret", + "error": "missing client_secret: this field is required" + } + ] + } + } + } + }, + "403": { + "description": "Invalid API Credentials", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "invalid api credentials" + } + } + } + } + } + } + }, + "/v1/reauthenticate": { + "post": { + "summary": "Reauthenticate", + "description": "The JWT `access_token` will eventually expire and can no longer be used to authenticate requests. The `refresh_token` can be used to reauthenticate your client without having to post the client ID and secret again. Note that reauthenticate will only work after the refresh token's `nbf` (not before) claim and before the tokens' `exp` (expires) claim.", + "operationId": "reauthenticate", + "tags": [ + "Authentication" + ], + "requestBody": { + "required": true, + "description": "A JSON payload with the refresh token as the primary element.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReauthenticateRequest" + }, + "example": { + "refresh_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjAxSFZINTBWWEs5MFJKWlI5WENNMENCRkJRIiwidHlwIjoiSldUIn0.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwMDAiLCJzdWIiOiJrMDFKNVkyUjBZQUZFU0ZUVzYzU1JTNTg4WjIiLCJhdWQiOlsiaHR0cDovL2xvY2FsaG9zdDo4MDAwIiwiaHR0cDovL2xvY2FsaG9zdDo4MDAwL3YxL3JlYXV0aGVudGljYXRlIl0sImV4cCI6MTcyNDg5MDE1OCwibmJmIjoxNzI0ODg1NjU4LCJpYXQiOjE3MjQ4ODI5NTgsImp0aSI6IjAxSjZER0pFMFExMEcwQzY1U1NEUlQ3VDY3In0.Mzey5MWS-GRVhVAfISXH6keebNpoQTYWUVDhOnD-mENfWNurtkBpWMgV_FivpAHyXlH72Mv-cC0oaaUMYNMVRg5yCN6XQyYdUqcZsynULLkUUPcD7PGJLDIMe8CngAHITDmDRzdZaUpbWB4F-Ad_qEqzGhz3-PRAQxM7-Gt3IFNFVfWHJXTZzAiKHP_xtE4rnVczUx2sMXKPQHhxDVTiahMSAGiMVUWvnfKzwtv36U69cmfOw3UbG2IVZ6-2zm8ICSNesUqtwpjn1c5B_pYoqJNJYbp8jCzjRS2xT4xT7eDmMAjeFIiJEe6wuTvzU3ZwwqsXhLPtj27VNwHNHHL2qqnn0wTLx30amHkrBoEU44Rbf9Lxof6y_WDhZJIt7SeG1bDZ378falQd0v5yTColbaTk20jlADsoSdm8IgYoH91k1_-bzfHQkRTNUQI7YxCQWeP9zj-QzKdA7c86gyvYuPbsk29St0tGvQdS-aWa5ZLpDL3R5OLzO9zhqgNeGQVomF5YJaFAaBe4Y_6dyvNmHJB9cdfgEgj6B9cTzKdZWfn-r48E3xt0n41FdvYKgyDjR1gRBe7T-f55GbH5N0fR2Twdclc4DqD5c2gp5U0BTK-Uc2OBdT710Ws6mqdVljKoaG6VZjI-eA17pv7Khzdr8NWpmSUMYUGbAKtHFA7atsc" + } + } + } + }, + "responses": { + "200": { + "description": "Reauthentication Successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LoginReply" + }, + "example": { + "access_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjAxSFZINTBWWEs5MFJKWlI5WENNMENCRkJRIiwidHlwIjoiSldUIn0.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwMDAiLCJzdWIiOiJrMDFKNVkyUjBZQUZFU0ZUVzYzU1JTNTg4WjIiLCJhdWQiOlsiaHR0cDovL2xvY2FsaG9zdDo4MDAwIl0sImV4cCI6MTcyNDg4NjU1OCwibmJmIjoxNzI0ODgyOTU4LCJpYXQiOjE3MjQ4ODI5NTgsImp0aSI6IjAxSjZER0pFMFExMEcwQzY1U1NEUlQ3VDY3IiwiY2xpZW50SUQiOiJrYnhpUm10WXZMYmtZS3JsZWZKb1NQIiwicGVybWlzc2lvbnMiOlsidXNlcnM6bWFuYWdlIiwidXNlcnM6dmlldyIsImFwaWtleXM6bWFuYWdlIiwiYXBpa2V5czp2aWV3IiwiYXBpa2V5czpyZXZva2UiLCJjb3VudGVycGFydGllczptYW5hZ2UiLCJjb3VudGVycGFydGllczp2aWV3IiwiYWNjb3VudHM6bWFuYWdlIiwiYWNjb3VudHM6dmlldyIsInRyYXZlbHJ1bGU6bWFuYWdlIiwidHJhdmVscnVsZTpkZWxldGUiLCJ0cmF2ZWxydWxlOnZpZXciLCJjb25maWc6bWFuYWdlIiwiY29uZmlnOnZpZXciLCJwa2k6bWFuYWdlIiwicGtpOmRlbGV0ZSIsInBraTp2aWV3Il19.vZeoZ6UR9e2qOU2Zd64nlnPne4Hbm3t8QtX_uM72pyf8BRIEehruioQCQ8RfqNJpSyacRCfhAKovTKChnWIPd8Xdkzcl9_bHnhYKlTzhdPYlD5K1uCNkNSJHZVwEJeG3aHB7xE-MVrvXivia3xHfth_ZSQab3jVuL6q_fjG4yPNpf3yjXbO3OPaGpavcElMf2r-DdIMIIewCmNktjrkFNtiNPmJU3MzLzwxLQPm2WUkcKZ27e7KD_LL2ZgluyVSM0BRehcdkPXmOXGF5KCTvHu7Xo5evUg6DvftEIz5IjCd-6s1YkZEJSQqBlfymhXXsmW1tlK4RYhay10Lg_k16HtO-kByLB2vtW6V1090XBK6tvjAJNjSGrD2tTFWbRlEe2YdYQ3pQilnSeJW1hBSpSYb_Ty94FwcsMrq_NiULYmxh6dOYtzrANou0EKd0HoYjw4d0dQOlCqSBfFclOoMmftjms5QG6E93s_Bjp2nhpKs6fr7TQhwmVChiVWBV2eq5s1mTLngNQhgLdNddcDJ_DJiisSv_V3nD-2uLcQaq9ZQ60oW1jQzUoTaJY9uw3SEToUa7bGRNKmHnUYYxRxqyVVYceaOlklPqfyT58zEBKqblhZfAE39rtyVZKOCc3x_d9yyQ9YaV6ijpaxC0PKTW0tSEWzNesNv4wayH-pNaSJM", + "refresh_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjAxSFZINTBWWEs5MFJKWlI5WENNMENCRkJRIiwidHlwIjoiSldUIn0.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwMDAiLCJzdWIiOiJrMDFKNVkyUjBZQUZFU0ZUVzYzU1JTNTg4WjIiLCJhdWQiOlsiaHR0cDovL2xvY2FsaG9zdDo4MDAwIiwiaHR0cDovL2xvY2FsaG9zdDo4MDAwL3YxL3JlYXV0aGVudGljYXRlIl0sImV4cCI6MTcyNDg5MDE1OCwibmJmIjoxNzI0ODg1NjU4LCJpYXQiOjE3MjQ4ODI5NTgsImp0aSI6IjAxSjZER0pFMFExMEcwQzY1U1NEUlQ3VDY3In0.Mzey5MWS-GRVhVAfISXH6keebNpoQTYWUVDhOnD-mENfWNurtkBpWMgV_FivpAHyXlH72Mv-cC0oaaUMYNMVRg5yCN6XQyYdUqcZsynULLkUUPcD7PGJLDIMe8CngAHITDmDRzdZaUpbWB4F-Ad_qEqzGhz3-PRAQxM7-Gt3IFNFVfWHJXTZzAiKHP_xtE4rnVczUx2sMXKPQHhxDVTiahMSAGiMVUWvnfKzwtv36U69cmfOw3UbG2IVZ6-2zm8ICSNesUqtwpjn1c5B_pYoqJNJYbp8jCzjRS2xT4xT7eDmMAjeFIiJEe6wuTvzU3ZwwqsXhLPtj27VNwHNHHL2qqnn0wTLx30amHkrBoEU44Rbf9Lxof6y_WDhZJIt7SeG1bDZ378falQd0v5yTColbaTk20jlADsoSdm8IgYoH91k1_-bzfHQkRTNUQI7YxCQWeP9zj-QzKdA7c86gyvYuPbsk29St0tGvQdS-aWa5ZLpDL3R5OLzO9zhqgNeGQVomF5YJaFAaBe4Y_6dyvNmHJB9cdfgEgj6B9cTzKdZWfn-r48E3xt0n41FdvYKgyDjR1gRBe7T-f55GbH5N0fR2Twdclc4DqD5c2gp5U0BTK-Uc2OBdT710Ws6mqdVljKoaG6VZjI-eA17pv7Khzdr8NWpmSUMYUGbAKtHFA7atsc" } } } }, "400": { - "description": "Invalid input" + "description": "Bad Reauthentication Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FieldErrors" + }, + "example": { + "success": false, + "error": "1 validation errors occurred", + "errors": [ + { + "field": "refresh_token", + "error": "missing refresh_token: this field is required" + } + ] + } + } + } }, - "422": { - "description": "Validation exception or missing field" + "403": { + "description": "Invalid Refresh Token", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "invalid reauthentication credentials" + } + } + } } } } }, - "/v1/transactions/{transactionID}/preview": { + "/v1/accounts": { "get": { + "summary": "List Accounts", + "description": "Return a paginated list of customer accounts stored on the Envoy node.", + "operationId": "listAccounts", "tags": [ - "transaction" + "Accounts" ], - "summary": "Preview transaction envelope", - "description": "Preview the transaction envelope for a specific transaction", - "operationId": "previewTransaction", "security": [ { - "bearer-auth": [] + "bearerAuth": [] } ], "parameters": [ { - "name": "transactionID", - "in": "path", - "description": "ID of transaction to preview", - "required": true, - "schema": { - "type": "string", - "format": "UUID" - } + "$ref": "#/components/parameters/page_size" + }, + { + "$ref": "#/components/parameters/next_page_token" + }, + { + "$ref": "#/components/parameters/prev_page_token" } ], "responses": { "200": { - "description": "Successful operation", + "description": "Successful Account Page Response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Envelope" + "$ref": "#/components/schemas/AccountList" + }, + "example": { + "page": { + "page_size": 50 + }, + "accounts": [ + { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "customer_id": "674907513", + "first_name": "James", + "last_name": "Bond", + "travel_address": "taLg4sBFp3cWhB9wN7qqPwDzq32bWwhibhFvADbiYp5fMR7asAxbqNrPuUyT4VzZa98oPk6dHcdKhov9jiraNrcZ7yQdikXcwbv", + "created": "2024-08-28T10:14:43-05:00", + "modified": "2024-08-28T12:23:24-05:00" + }, + { + "id": "01J6FRR2NSTQ0TC7DDMAR91MG7", + "customer_id": "39910432", + "first_name": "Twilda", + "last_name": "Swansong", + "travel_address": "taLg4sBFp3cWhB9wN7qsiUF8pxo7JXtVShYkv5ix1wG2kX5y4pRiJ3TRHmeD8H67TLLm5wHyDktVw1onfDeQfESumf91mjRTMbi", + "created": "2024-08-29T14:09:21-05:00", + "modified": "2024-08-29T14:10:50-05:00" + } + ] } } } }, - "404": { - "description": "Transaction not found" + "400": { + "description": "Bad Accounts Page Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "could not parse page query request" + } + } + } + }, + "401": { + "description": "Not Authorized to View Accounts", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this endpoint requires authentication" + } + } + } } } - } - }, - "/v1/transactions/{transactionID}/send": { + }, "post": { + "summary": "Create Account", + "description": "Create a new customer account record.", + "operationId": "createAccount", "tags": [ - "transaction" + "Accounts" ], - "summary": "Send transaction envelope", - "description": "Send the transaction envelope for a specific transaction", - "operationId": "sendTransaction", "security": [ { - "bearer-auth": [] - } - ], - "parameters": [ - { - "name": "transactionID", - "in": "path", - "description": "ID of transaction to send", - "required": true, - "schema": { - "type": "string", - "format": "UUID" - } + "bearerAuth": [] } ], "requestBody": { - "description": "Transaction envelope to send", + "required": true, + "description": "Account information that includes all required writeable fields and no crypto addresses.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Envelope" + "$ref": "#/components/schemas/AccountForm" + }, + "example": { + "customer_id": "674907513", + "first_name": "James", + "last_name": "Bond", + "ivms101": "CjwKEQoPCgRCb25kEgVKYW1lcxgCKiMKCjE5MjAtMTEtMTESFVdhdHRlbnNjaGVpZCwgR2VybWFueTICR0I" } } - }, - "required": true + } }, "responses": { - "200": { - "description": "Successful operation", + "201": { + "description": "Account Created", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Envelope" + "$ref": "#/components/schemas/Account" + }, + "example": { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "customer_id": "674907513", + "first_name": "James", + "last_name": "Bond", + "travel_address": "taLg4sBFp3cWhB9wN7qqPwDzq32bWwhibhFvADbiYp5fMR7asAxbqNrPuUyT4VzZa98oPk6dHcdKhov9jiraNrcZ7yQdikXcwbv", + "ivms101": "CjwKEQoPCgRCb25kEgVKYW1lcxgCKiMKCjE5MjAtMTEtMTESFVdhdHRlbnNjaGVpZCwgR2VybWFueTICR0I", + "crypto_addresses": [], + "created": "2024-08-28T10:14:43-05:00", + "modified": "2024-08-28T12:23:24-05:00" + } + } + } + }, + "400": { + "description": "Bad Create Account Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "could not parse account data" + } + } + } + }, + "401": { + "description": "Not Authorized to Manage Accounts", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this endpoint requires authentication" + } + } + } + }, + "422": { + "description": "Account Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FieldErrors" + }, + "example": { + "success": false, + "error": "2 validation errors occurred", + "errors": [ + { + "field": "id", + "error": "field id is a read only field" + }, + { + "field": "travel_address", + "error": "field travel address is a read only field" + } + ] } } } - }, - "404": { - "description": "Transaction not found" } } } }, - "/v1/transactions/{transactionID}/accept": { - "post": { + "/v1/accounts/{accountID}": { + "get": { + "summary": "Account Detail", + "description": "Return a detailed record of a single customer account object.", + "operationId": "accountDetail", "tags": [ - "transaction" + "Accounts" ], - "summary": "Accept incoming transaction envelope", - "description": "Accept the incoming transaction envelope for a specific transaction", - "operationId": "acceptTransaction", "security": [ { - "bearer-auth": [] + "bearerAuth": [] } ], "parameters": [ { - "name": "transactionID", + "name": "accountID", "in": "path", - "description": "ID of transaction to accept", + "description": "The ID of the account to fetch a detailed record of.", "required": true, "schema": { "type": "string", - "format": "UUID" - } + "format": "ULID", + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" + }, + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" } ], "responses": { "200": { - "description": "Successful operation", + "description": "Account Retrieved", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Envelope" + "$ref": "#/components/schemas/Account" + }, + "example": { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "customer_id": "674907513", + "first_name": "James", + "last_name": "Bond", + "travel_address": "taLg4sBFp3cWhB9wN7qqPwDzq32bWwhibhFvADbiYp5fMR7asAxbqNrPuUyT4VzZa98oPk6dHcdKhov9jiraNrcZ7yQdikXcwbv", + "ivms101": "CjwKEQoPCgRCb25kEgVKYW1lcxgCKiMKCjE5MjAtMTEtMTESFVdhdHRlbnNjaGVpZCwgR2VybWFueTICR0I", + "crypto_addresses": [ + { + "id": "01J6FRB1EGJCEZXRMQGW1FM0BR", + "crypto_address": "0x9268102451DE47C536C3AD92203D4E9692941E06", + "network": "ETH", + "travel_address": "ta5TXL58tSWo9eeNP1C4iSsybuX1KMeLiqeprHtF5XP69YEctxHMPwa7YTEU3QjKcC2RY9Jqjd4VsCsj396YMZvVCfFaYjDR7P", + "created": "2024-08-29T14:05:31-05:00", + "modified": "2024-08-30T18:39:02-05:00" + }, + { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "crypto_address": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "network": "BTC", + "travel_address": "ta5TXL58tSWo9eeNP1C4iSsybuX1KMeLiqeprHtF5WTaDe5fEN9vFTCtNxb2bv1HegpR8RcuV4EAhxtvKt8wfx4SnH414o6eWU", + "created": "2024-08-28T10:14:43-05:00", + "modified": "2024-08-28T12:23:24-05:00" + } + ], + "created": "2024-08-28T10:14:43-05:00", + "modified": "2024-08-28T12:23:24-05:00" } } } }, - "404": { - "description": "Transaction not found" + "401": { + "description": "Not Authorized to View Account Detail", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this endpoint requires authentication" + } + } + } }, - "501": { - "description": "Not implemented" + "404": { + "description": "Account Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "account not found" + } + } + } } } - } - }, - "/v1/transactions/{transactionID}/reject": { - "post": { + }, + "put": { + "summary": "Update Account", + "description": "Update an account record with new information.", + "operationId": "updateAccount", "tags": [ - "transaction" + "Accounts" ], - "summary": "Reject incoming transaction envelope", - "description": "Reject the incoming transaction envelope for a specific transaction", - "operationId": "rejectTransaction", "security": [ { - "bearer-auth": [] + "bearerAuth": [] } ], "parameters": [ { - "name": "transactionID", + "name": "accountID", "in": "path", - "description": "ID of transaction to reject", + "description": "The ID of the account to update.", "required": true, "schema": { "type": "string", - "format": "UUID" - } + "format": "ULID", + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" + }, + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" } ], "requestBody": { - "description": "Reason for rejection", + "description": "A complete account record that should reflect the state of the account after the operation.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Rejection" + "$ref": "#/components/schemas/AccountForm" + }, + "example": { + "customer_id": "674907513", + "first_name": "James", + "last_name": "Bond", + "ivms101": "CjwKEQoPCgRCb25kEgVKYW1lcxgCKiMKCjE5MjAtMTEtMTESFVdhdHRlbnNjaGVpZCwgR2VybWFueTICR0I" } } }, @@ -637,222 +5572,262 @@ }, "responses": { "200": { - "description": "Successful operation", + "description": "Account Updated", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Envelope" + "$ref": "#/components/schemas/Account" + }, + "example": { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "customer_id": "674907513", + "first_name": "James", + "last_name": "Bond", + "travel_address": "taLg4sBFp3cWhB9wN7qqPwDzq32bWwhibhFvADbiYp5fMR7asAxbqNrPuUyT4VzZa98oPk6dHcdKhov9jiraNrcZ7yQdikXcwbv", + "ivms101": "CjwKEQoPCgRCb25kEgVKYW1lcxgCKiMKCjE5MjAtMTEtMTESFVdhdHRlbnNjaGVpZCwgR2VybWFueTICR0I", + "crypto_addresses": [ + { + "id": "01J6FRB1EGJCEZXRMQGW1FM0BR", + "crypto_address": "0x9268102451DE47C536C3AD92203D4E9692941E06", + "network": "ETH", + "travel_address": "ta5TXL58tSWo9eeNP1C4iSsybuX1KMeLiqeprHtF5XP69YEctxHMPwa7YTEU3QjKcC2RY9Jqjd4VsCsj396YMZvVCfFaYjDR7P", + "created": "2024-08-29T14:05:31-05:00", + "modified": "2024-08-30T18:39:02-05:00" + }, + { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "crypto_address": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "network": "BTC", + "travel_address": "ta5TXL58tSWo9eeNP1C4iSsybuX1KMeLiqeprHtF5WTaDe5fEN9vFTCtNxb2bv1HegpR8RcuV4EAhxtvKt8wfx4SnH414o6eWU", + "created": "2024-08-28T10:14:43-05:00", + "modified": "2024-08-28T12:23:24-05:00" + } + ], + "created": "2024-08-28T10:14:43-05:00", + "modified": "2024-08-28T12:23:24-05:00" } } } }, - "404": { - "description": "Transaction not found" - } - } - } - }, - "/v1/transactions/{transactionID}/secure-envelopes": { - "get": { - "tags": [ - "secure_envelope" - ], - "summary": "List secure envelopes for transaction", - "description": "Paginated list of all secure envelopes for the specified transaction", - "operationId": "listSecureEnvelopes", - "security": [ - { - "bearer-auth": [] - } - ], - "parameters": [ - { - "name": "transactionID", - "in": "path", - "description": "ID of transaction to return secure envelopes for", - "required": true, - "schema": { - "type": "string", - "format": "UUID" - } - }, - { - "name": "page_size", - "in": "query", - "schema": { - "type": "integer" + "401": { + "description": "Not Authorized to Update Account", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this endpoint requires authentication" + } + } } }, - { - "name": "next_page_token", - "in": "query", - "schema": { - "type": "string" + "404": { + "description": "Account Not Found (Cannot Update)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "account not found" + } + } } }, - { - "name": "prev_page_token", - "in": "query", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful operation", + "422": { + "description": "Account Update Validation Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EnvelopesList" + "$ref": "#/components/schemas/FieldErrors" + }, + "example": { + "success": false, + "error": "2 validation errors occurred", + "errors": [ + { + "field": "id", + "error": "field id is a read only field" + }, + { + "field": "travel_address", + "error": "field travel address is a read only field" + } + ] } } } } } - } - }, - "/v1/transactions/{transactionID}/secure-envelopes/{envelopeID}": { - "get": { + }, + "delete": { + "summary": "Delete Account", + "description": "Delete an account with the specified ID.", + "operationId": "deleteAccount", "tags": [ - "secure_envelope" + "Accounts" ], - "summary": "Lookup a specific secure envelope", - "description": "Returns detailed information about the specified secure envelope", - "operationId": "envelopeDetail", "security": [ { - "bearer-auth": [] + "bearerAuth": [] } ], "parameters": [ { - "name": "transactionID", - "in": "path", - "description": "ID of transaction to return secure envelope for", - "required": true, - "schema": { - "type": "string", - "format": "UUID" - } - }, - { - "name": "envelopeID", + "name": "accountID", "in": "path", - "description": "ID of secure envelope to return", + "description": "The ID of the account to delete.", "required": true, "schema": { "type": "string", - "format": "ULID" - } + "format": "ULID", + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" + }, + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" } ], "responses": { "200": { - "description": "Successful operation", + "description": "Account Deleted", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SecureEnvelope" + "$ref": "#/components/schemas/Reply" + }, + "example": { + "success": true + } + } + } + }, + "401": { + "description": "Not Authorized to Delete Account", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this endpoint requires authentication" } } } }, "404": { - "description": "Secure envelope not found" + "description": "Account Not Found (Cannot Delete)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "account not found" + } + } + } } } - }, - "delete": { + } + }, + "/v1/accounts/{accountID}/crypto-addresses": { + "get": { + "summary": "List Crypto Addresses", + "description": "Return a paginated list of crypto wallet addresses associated with the specified account", + "operationId": "listCryptoAddresses", "tags": [ - "secure_envelope" + "Crypto Addresses" ], - "summary": "Delete a specific secure envelope", - "description": "Deletes the specified secure envelope", - "operationId": "deleteSecureEnvelope", "security": [ { - "bearer-auth": [] + "bearerAuth": [] } ], "parameters": [ { - "name": "transactionID", + "name": "accountID", "in": "path", - "description": "ID of transaction of the secure envelope to be deleted", + "description": "The ID of the account to fetch the crypto addresses for.", "required": true, "schema": { "type": "string", - "format": "UUID" - } + "format": "ULID", + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" + }, + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" }, { - "name": "envelopeID", - "in": "path", - "description": "ID of secure envelope to delete", - "required": true, - "schema": { - "type": "string", - "format": "ULID" - } - } - ], - "responses": { - "200": { - "description": "Successful operation" + "$ref": "#/components/parameters/page_size" }, - "404": { - "description": "Secure envelope not found" + { + "$ref": "#/components/parameters/next_page_token" }, - "501": { - "description": "Not implemented" - } - } - } - }, - "/v1/accounts": { - "get": { - "tags": [ - "account" - ], - "summary": "List customer accounts", - "description": "Paginated list of all stored customer accounts", - "operationId": "listAccounts", - "security": [ { - "bearer-auth": [] + "$ref": "#/components/parameters/prev_page_token" } ], - "parameters": [ - { - "name": "page_size", - "in": "query", - "schema": { - "type": "integer" + "responses": { + "200": { + "description": "Successful Crypto Addresses Page Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CryptoAddressList" + }, + "example": { + "page": { + "page_size": 50 + }, + "crytpo_addresses": [ + { + "id": "01J6FRB1EGJCEZXRMQGW1FM0BR", + "crypto_address": "0x9268102451DE47C536C3AD92203D4E9692941E06", + "network": "ETH", + "travel_address": "ta5TXL58tSWo9eeNP1C4iSsybuX1KMeLiqeprHtF5XP69YEctxHMPwa7YTEU3QjKcC2RY9Jqjd4VsCsj396YMZvVCfFaYjDR7P", + "created": "2024-08-29T14:05:31-05:00", + "modified": "2024-08-30T18:39:02-05:00" + }, + { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "crypto_address": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "network": "BTC", + "travel_address": "ta5TXL58tSWo9eeNP1C4iSsybuX1KMeLiqeprHtF5WTaDe5fEN9vFTCtNxb2bv1HegpR8RcuV4EAhxtvKt8wfx4SnH414o6eWU", + "created": "2024-08-28T10:14:43-05:00", + "modified": "2024-08-28T12:23:24-05:00" + } + ] + } + } } }, - { - "name": "next_page_token", - "in": "query", - "schema": { - "type": "string" + "400": { + "description": "Bad Crypto Addresses Page Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "could not parse page query request" + } + } } }, - { - "name": "prev_page_token", - "in": "query", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful operation", + "401": { + "description": "Not Authorized to View Crypto Addresses", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AccountList" + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this endpoint requires authentication" } } } @@ -860,119 +5835,262 @@ } }, "post": { + "summary": "Create Crypto Address", + "description": "Create a new crypto wallet address record for the specified account.", + "operationId": "createCryptoAddress", "tags": [ - "account" + "Crypto Addresses" ], - "summary": "Create customer account", - "description": "Create a new customer account", - "operationId": "createAccount", "security": [ { - "bearer-auth": [] + "bearerAuth": [] + } + ], + "parameters": [ + { + "name": "accountID", + "in": "path", + "description": "The ID of the account to create the crypto addresses for.", + "required": true, + "schema": { + "type": "string", + "format": "ULID", + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" + }, + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" } ], "requestBody": { - "description": "Create a new customer account", + "required": true, + "description": "Crypto wallet address information that includes all required writeable fields.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Account" + "$ref": "#/components/schemas/CryptoAddressForm" + }, + "example": { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "crypto_address": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "network": "BTC" } } - }, - "required": true + } }, "responses": { "201": { - "description": "Account created", + "description": "Crypto Address Created", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Account" + "$ref": "#/components/schemas/CryptoAddress" + }, + "example": { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "crypto_address": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "network": "BTC", + "travel_address": "ta5TXL58tSWo9eeNP1C4iSsybuX1KMeLiqeprHtF5WTaDe5fEN9vFTCtNxb2bv1HegpR8RcuV4EAhxtvKt8wfx4SnH414o6eWU", + "created": "2024-08-28T10:14:43-05:00", + "modified": "2024-08-28T12:23:24-05:00" } } } }, "400": { - "description": "Invalid input" + "description": "Bad Create Crypto Address Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "could not parse account data" + } + } + } + }, + "401": { + "description": "Not Authorized to Manage Crypto Addresses", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this endpoint requires authentication" + } + } + } }, "422": { - "description": "Validation exception or missing field" + "description": "Crypto Address Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FieldErrors" + }, + "example": { + "success": false, + "error": "3 validation errors occurred", + "errors": [ + { + "field": "crypto_address", + "error": "missing crypto_address: this field is required" + }, + { + "field": "network", + "error": "could not parse network as a SLIP-0044 string" + }, + { + "field": "travel_address", + "error": "field travel address is a read only field" + } + ] + } + } + } } } } }, - "/v1/account/{accountID}": { + "/v1/accounts/{accountID}/crypto-addresses/{cryptoAddressID}": { "get": { + "summary": "Crypto Address Detail", + "description": "Return a detailed record of a crypto address record for an account.", + "operationId": "cryptoAddressesDetail", "tags": [ - "account" + "Crypto Addresses" ], - "summary": "Find account by ID", - "description": "Returns a single account if found", - "operationId": "accountDetail", "security": [ { - "bearer-auth": [] + "bearerAuth": [] } ], "parameters": [ { "name": "accountID", "in": "path", - "description": "ID of account to return", + "description": "The ID of the account to fetch the crypto address for.", "required": true, "schema": { "type": "string", - "format": "ULID" - } + "format": "ULID", + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" + }, + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" + }, + { + "name": "cryptoAddressID", + "in": "path", + "description": "The ID of the crypto address to fetch a detailed record of.", + "required": true, + "schema": { + "type": "string", + "format": "ULID", + "example": "01J6FRB1EGJCEZXRMQGW1FM0BR" + }, + "example": "01J6FRB1EGJCEZXRMQGW1FM0BR" } ], "responses": { "200": { - "description": "Successful operation", + "description": "Crypto Address Retrieved", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Account" + "$ref": "#/components/schemas/CryptoAddress" + }, + "example": { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "crypto_address": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "network": "BTC", + "travel_address": "ta5TXL58tSWo9eeNP1C4iSsybuX1KMeLiqeprHtF5WTaDe5fEN9vFTCtNxb2bv1HegpR8RcuV4EAhxtvKt8wfx4SnH414o6eWU", + "created": "2024-08-28T10:14:43-05:00", + "modified": "2024-08-28T12:23:24-05:00" + } + } + } + }, + "401": { + "description": "Not Authorized to View Crypto Address Detail", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this endpoint requires authentication" } } } }, "404": { - "description": "Account not found" + "description": "Crypto Address Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "crypto address not found" + } + } + } } } }, "put": { + "summary": "Update Crypto Address", + "description": "Update an crypto address record with new information.", + "operationId": "updateCryptoAddress", "tags": [ - "account" + "Crypto Addresses" ], - "summary": "Updates an account record", - "description": "Update an account record (does not patch, all fields are required)", - "operationId": "updateAccount", "security": [ { - "bearer-auth": [] + "bearerAuth": [] } ], "parameters": [ { - "name": "accountID", + "name": "accountID", + "in": "path", + "description": "The ID of the account owning the crypto address to update.", + "required": true, + "schema": { + "type": "string", + "format": "ULID", + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" + }, + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" + }, + { + "name": "cryptoAddressID", "in": "path", - "description": "ID of account to update", + "description": "The ID of the crypto address to update.", "required": true, "schema": { "type": "string", - "format": "ULID" - } + "format": "ULID", + "example": "01J6FRB1EGJCEZXRMQGW1FM0BR" + }, + "example": "01J6FRB1EGJCEZXRMQGW1FM0BR" } ], "requestBody": { - "description": "Updated account record", + "description": "A complete crypto address record that should reflect the state of the crypto address after the operation.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Account" + "$ref": "#/components/schemas/CryptoAddressForm" + }, + "example": { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "crypto_address": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "network": "BTC" } } }, @@ -980,268 +6098,585 @@ }, "responses": { "200": { - "description": "Successful operation", + "description": "Crypto Adress Updated", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Account" + "$ref": "#/components/schemas/CryptoAddress" + }, + "example": { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "crypto_address": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "network": "BTC", + "travel_address": "ta5TXL58tSWo9eeNP1C4iSsybuX1KMeLiqeprHtF5WTaDe5fEN9vFTCtNxb2bv1HegpR8RcuV4EAhxtvKt8wfx4SnH414o6eWU", + "created": "2024-08-28T10:14:43-05:00", + "modified": "2024-08-28T12:23:24-05:00" } } } }, - "400": { - "description": "Invalid input" + "401": { + "description": "Not Authorized to Update Crypto Address", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this endpoint requires authentication" + } + } + } + }, + "404": { + "description": "Crypto Address Not Found (Cannot Update)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "crypto address not found" + } + } + } }, "422": { - "description": "Validation exception or missing field" + "description": "Crypto Address Update Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FieldErrors" + }, + "example": { + "success": false, + "error": "3 validation errors occurred", + "errors": [ + { + "field": "crypto_address", + "error": "missing crypto_address: this field is required" + }, + { + "field": "network", + "error": "could not parse network as a SLIP-0044 string" + }, + { + "field": "travel_address", + "error": "field travel address is a read only field" + } + ] + } + } + } } } }, "delete": { + "summary": "Delete Crypto Address", + "description": "Delete an crypto address with the specified ID belonging to the specified acccount.", + "operationId": "deleteCryptoAddress", "tags": [ - "account" + "Crypto Addresses" ], - "summary": "Deletes an account", - "description": "Deletes an account and associated crypto addresses", - "operationId": "deleteAccount", "security": [ { - "bearer-auth": [] + "bearerAuth": [] } ], "parameters": [ { "name": "accountID", "in": "path", - "description": "ID of account to delete", + "description": "The ID of the account that manages the crypto address to delete.", "required": true, "schema": { "type": "string", - "format": "ULID" - } + "format": "ULID", + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" + }, + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" + }, + { + "name": "cryptoAddressID", + "in": "path", + "description": "The ID of the crypto address to delete.", + "required": true, + "schema": { + "type": "string", + "format": "ULID", + "example": "01J6FRB1EGJCEZXRMQGW1FM0BR" + }, + "example": "01J6FRB1EGJCEZXRMQGW1FM0BR" } ], "responses": { "200": { - "description": "Successful operation" + "description": "Crypto Address Deleted", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Reply" + }, + "example": { + "success": true + } + } + } + }, + "401": { + "description": "Not Authorized to Delete Crypto Address", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this endpoint requires authentication" + } + } + } }, "404": { - "description": "Account not found" + "description": "Crypto Address Not Found (Cannot Delete)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "crypto address not found" + } + } + } } } } }, - "/v1/accounts/{accountID}/crypto-addresses": { + "/v1/counterparties": { "get": { + "summary": "List Counterparties", + "description": "Return a paginated list of counterparties stored on the Envoy node.", + "operationId": "listCounterparties", "tags": [ - "crypto_address" + "Counterparties" ], - "summary": "List crypto addresses for account", - "description": "Returns a paginated list of all crypto addresses associated with the account", - "operationId": "listCryptoAddresses", "security": [ { - "bearer-auth": [] + "bearerAuth": [] } ], "parameters": [ { - "name": "accountID", - "in": "path", - "description": "ID of account to return crypto addresses for", - "required": true, - "schema": { - "type": "string", - "format": "ULID" - } - }, - { - "name": "page_size", - "in": "query", - "schema": { - "type": "integer" - } + "$ref": "#/components/parameters/page_size" }, { - "name": "next_page_token", - "in": "query", - "schema": { - "type": "string" - } + "$ref": "#/components/parameters/next_page_token" }, { - "name": "prev_page_token", - "in": "query", - "schema": { - "type": "string" - } + "$ref": "#/components/parameters/prev_page_token" } ], "responses": { "200": { - "description": "Successful operation", + "description": "Successful Counterparty Page Response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CryptoAddressList" + "$ref": "#/components/schemas/CounterpartyList" + }, + "example": { + "page": { + "page_size": 50 + }, + "counterparties": [ + { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "source": "gds", + "protocol": "trisa", + "endpoint": "api.alice.vaspbot.net:443", + "name": "AliceCoin", + "website": "https://alice.vaspbot.net", + "country": "GB", + "created": "2024-08-28T10:14:43-05:00" + }, + { + "id": "01J6G3BE4QRY6355ZJ998SATXA", + "source": "gds", + "protocol": "trisa", + "endpoint": "api.bob.vaspbot.net:443", + "name": "BobVASP", + "website": "https://bob.vaspbot.net", + "country": "US", + "created": "2024-08-29T17:15:54-05:00" + } + ] } } } }, - "404": { - "description": "Account not found" + "400": { + "description": "Bad Counterparties Page Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "could not parse page query request" + } + } + } + }, + "401": { + "description": "Not Authorized to View Counterparties", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this endpoint requires authentication" + } + } + } } } }, "post": { + "summary": "Create Counterparty", + "description": "Create a new counterparty record.", + "operationId": "createCounterparty", "tags": [ - "crypto_address" + "Counterparties" ], - "summary": "Create crypto address", - "description": "Create a crypto address associated with the specified account", - "operationId": "createCryptoAddress", "security": [ { - "bearer-auth": [] - } - ], - "parameters": [ - { - "name": "accountID", - "in": "path", - "description": "ID of account to create crypto address for", - "required": true, - "schema": { - "type": "string", - "format": "ULID" - } + "bearerAuth": [] } ], "requestBody": { - "description": "Crypto address to create", + "required": true, + "description": "Counterparty information that includes all required writeable fields.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CryptoAddress" + "$ref": "#/components/schemas/CounterpartyForm" + }, + "example": { + "protocol": "trp", + "common_name": "trp.alice.vaspbot.net", + "endpoint": "https://trp.alice.vaspbot.net", + "name": "AliceCoin", + "website": "https://alice.vaspbot.net", + "country": "GB", + "business_category": "NON_VASP_ENTITY", + "vasp_categories": [ + "Other" + ], + "ivms101": "EmcKLwoeChpBbGljZSBUcmFkaW5nIENvbXBhbnksIExURBABCg0KCUFsaWNlQ29pbhADEjAIAiILTWFpbiBTdHJlZXQqAzEyM1IFNTU4ODBaClNtYWxsdmlsbGVqAktZggECVVMqAkRF" } } - }, - "required": true + } }, "responses": { "201": { - "description": "Crypto address created", + "description": "Counterparty Created", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CryptoAddress" + "$ref": "#/components/schemas/Counterparty" + }, + "example": { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "source": "user", + "protocol": "trp", + "common_name": "trp.alice.vaspbot.net", + "endpoint": "https://trp.alice.vaspbot.net", + "name": "AliceCoin", + "website": "https://alice.vaspbot.net", + "country": "GB", + "business_category": "NON_VASP_ENTITY", + "vasp_categories": [ + "Other" + ], + "ivms101": "EmcKLwoeChpBbGljZSBUcmFkaW5nIENvbXBhbnksIExURBABCg0KCUFsaWNlQ29pbhADEjAIAiILTWFpbiBTdHJlZXQqAzEyM1IFNTU4ODBaClNtYWxsdmlsbGVqAktZggECVVMqAkRF", + "created": "2024-08-28T10:14:43-05:00", + "modified": "2024-08-28T12:23:24-05:00" } } } }, "400": { - "description": "Invalid input" + "description": "Bad Create Counterparty Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "could not parse counterparty data" + } + } + } }, - "404": { - "description": "Account not found" + "401": { + "description": "Not Authorized to Manage Counterparties", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this endpoint requires authentication" + } + } + } }, "422": { - "description": "Validation exception or missing field" + "description": "Counterparty Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FieldErrors" + }, + "example": { + "success": false, + "error": "2 validation errors occurred", + "errors": [ + { + "field": "country", + "error": "field country needs to be an ISO-3361 alpha-2 code" + }, + { + "field": "registered_directory", + "error": "field registered_directory is a read only field" + } + ] + } + } + } } } } }, - "/v1/accounts/{accountID}/crypto-addresses/{cryptoAddressID}": { + "/v1/counterparties/search": { "get": { + "summary": "Search Counterparties", + "description": "Perform a fuzzy search on the counterparties' name field with results returned in order of closest match to least close match.", + "operationId": "searchCounterparties", "tags": [ - "crypto_address" + "Counterparties" ], - "summary": "Lookup a specific crypto address", - "description": "Returns detailed information about the specified crypto address", - "operationId": "cryptoAddressDetail", "security": [ { - "bearer-auth": [] + "bearerAuth": [] } ], "parameters": [ { - "name": "accountID", - "in": "path", - "description": "ID of account of crypto address to be returned", - "required": true, - "schema": { - "type": "string", - "format": "ULID" + "$ref": "#/components/parameters/query" + }, + { + "$ref": "#/components/parameters/limit" + } + ], + "responses": { + "200": { + "description": "Successful Search Response (even if no results are returned)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CounterpartyList" + }, + "example": { + "page": { + "page_size": 50 + }, + "counterparties": [ + { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "source": "gds", + "protocol": "trisa", + "endpoint": "api.alice.vaspbot.net:443", + "name": "AliceCoin", + "website": "https://alice.vaspbot.net", + "country": "GB", + "created": "2024-08-28T10:14:43-05:00" + }, + { + "id": "01J6G3BE4QRY6355ZJ998SATXA", + "source": "gds", + "protocol": "trisa", + "endpoint": "api.bob.vaspbot.net:443", + "name": "BobVASP", + "website": "https://bob.vaspbot.net", + "country": "US", + "created": "2024-08-29T17:15:54-05:00" + } + ] + } + } } }, + "400": { + "description": "Bad Search Query", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "could not parse counterparties search request" + } + } + } + } + } + } + }, + "/v1/counterparties/{counterpartyID}": { + "get": { + "summary": "Counterparty Detail", + "description": "Return a detailed record of a single counterparty object.", + "operationId": "counterpartyDetail", + "tags": [ + "Counterparties" + ], + "security": [ { - "name": "cryptoAddressID", + "bearerAuth": [] + } + ], + "parameters": [ + { + "name": "counterpartyID", "in": "path", - "description": "ID of crypto address to return", + "description": "The ID of the counterparty to fetch a detailed record of.", "required": true, "schema": { "type": "string", - "format": "ULID" - } + "format": "ULID", + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" + }, + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" } ], "responses": { "200": { - "description": "Successful operation", + "description": "Counterparty Retrieved", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CryptoAddress" + "$ref": "#/components/schemas/Counterparty" + }, + "example": { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "source": "gds", + "directory_id": "5154a0aa-502c-4179-a6f2-8b143d59edce", + "registered_directory": "trisatest.net", + "protocol": "trisa", + "common_name": "api.alice.vaspbot.net", + "endpoint": "api.alice.vaspbot.net:443", + "travel_address": "taYgWCfsnPN8hsqUAZWm4TW7WrHU5qZT3GiBPpfSApGSqoPMH1D6kiNRzST5Gz", + "name": "AliceCoin", + "website": "https://alice.vaspbot.net", + "country": "GB", + "business_category": "NON_VASP_ENTITY", + "vasp_categories": [ + "Other" + ], + "ivms101": "EmcKLwoeChpBbGljZSBUcmFkaW5nIENvbXBhbnksIExURBABCg0KCUFsaWNlQ29pbhADEjAIAiILTWFpbiBTdHJlZXQqAzEyM1IFNTU4ODBaClNtYWxsdmlsbGVqAktZggECVVMqAkRF", + "verified_on": "2024-08-28T10:14:43-05:00", + "created": "2024-08-28T10:14:43-05:00", + "modified": "2024-08-28T12:23:24-05:00" + } + } + } + }, + "401": { + "description": "Not Authorized to View Counterparty Detail", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this endpoint requires authentication" } } } }, "404": { - "description": "Account or crypto address not found" + "description": "Counterparty Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "counterparty not found" + } + } + } } } }, "put": { + "summary": "Update Counterparty", + "description": "Update a counterparty record with new information. Note that only counterparties with the 'user' source may be updated.", + "operationId": "updateCounterparty", "tags": [ - "crypto_address" + "Counterparties" ], - "summary": "Update a crypto address", - "description": "Update a crypto address record (does not patch, all fields are required)", - "operationId": "updateCryptoAddress", "security": [ { - "bearer-auth": [] + "bearerAuth": [] } ], "parameters": [ { - "name": "accountID", - "in": "path", - "description": "ID of account of crypto address to be updated", - "required": true, - "schema": { - "type": "string", - "format": "ULID" - } - }, - { - "name": "cryptoAddressID", + "name": "counterpartyID", "in": "path", - "description": "ID of crypto address to update", + "description": "The ID of the counterparty to update.", "required": true, "schema": { "type": "string", - "format": "ULID" - } + "format": "ULID", + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" + }, + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" } ], "requestBody": { - "description": "Updated crypto address record", + "description": "A complete counterparty record that should reflect the state of the counterparty after the operation.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CryptoAddress" + "$ref": "#/components/schemas/CounterpartyForm" + }, + "example": { + "protocol": "trp", + "common_name": "trp.alice.vaspbot.net", + "endpoint": "https://trp.alice.vaspbot.net", + "name": "AliceCoin", + "website": "https://alice.vaspbot.net", + "country": "GB", + "business_category": "NON_VASP_ENTITY", + "vasp_categories": [ + "Other" + ], + "ivms101": "EmcKLwoeChpBbGljZSBUcmFkaW5nIENvbXBhbnksIExURBABCg0KCUFsaWNlQ29pbhADEjAIAiILTWFpbiBTdHJlZXQqAzEyM1IFNTU4ODBaClNtYWxsdmlsbGVqAktZggECVVMqAkRF" } } }, @@ -1249,110 +6684,275 @@ }, "responses": { "200": { - "description": "Successful operation", + "description": "Counterparty Updated", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CryptoAddress" + "$ref": "#/components/schemas/Counterparty" + }, + "example": { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "source": "gds", + "directory_id": "5154a0aa-502c-4179-a6f2-8b143d59edce", + "registered_directory": "trisatest.net", + "protocol": "trisa", + "common_name": "api.alice.vaspbot.net", + "endpoint": "api.alice.vaspbot.net:443", + "travel_address": "taYgWCfsnPN8hsqUAZWm4TW7WrHU5qZT3GiBPpfSApGSqoPMH1D6kiNRzST5Gz", + "name": "AliceCoin", + "website": "https://alice.vaspbot.net", + "country": "GB", + "business_category": "NON_VASP_ENTITY", + "vasp_categories": [ + "Other" + ], + "ivms101": "EmcKLwoeChpBbGljZSBUcmFkaW5nIENvbXBhbnksIExURBABCg0KCUFsaWNlQ29pbhADEjAIAiILTWFpbiBTdHJlZXQqAzEyM1IFNTU4ODBaClNtYWxsdmlsbGVqAktZggECVVMqAkRF", + "verified_on": "2024-08-28T10:14:43-05:00", + "created": "2024-08-28T10:14:43-05:00", + "modified": "2024-08-28T12:23:24-05:00" + } + } + } + }, + "401": { + "description": "Not Authorized to Update Counterparty", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this endpoint requires authentication" } } } }, "404": { - "description": "Account or crypto address not found" + "description": "Counterparty Not Found (Cannot Update)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "counterparty not found" + } + } + } + }, + "409": { + "description": "Counterparty Conflict: Source Not Editable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this record cannot be edited" + } + } + } }, "422": { - "description": "Validation exception or missing field" + "description": "Counterparty Update Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FieldErrors" + }, + "example": { + "success": false, + "error": "2 validation errors occurred", + "errors": [ + { + "field": "common_name", + "error": "missing common_name: this field is required" + }, + { + "field": "protocol", + "error": "missing protocol: this field is required" + } + ] + } + } + } } } }, "delete": { + "summary": "Delete Counterparty", + "description": "Delete an counterparty with the specified ID.", + "operationId": "deleteCounterparty", "tags": [ - "crypto_address" + "Counterparties" ], - "summary": "Delete a crypto address", - "description": "Delete a crypto address record associated with account", - "operationId": "deleteCryptoAddress", "security": [ { - "bearer-auth": [] + "bearerAuth": [] } ], "parameters": [ { - "name": "accountID", - "in": "path", - "description": "ID of account of crypto address to be deleted", - "required": true, - "schema": { - "type": "string", - "format": "ULID" - } - }, - { - "name": "cryptoAddressID", + "name": "counterpartyID", "in": "path", - "description": "ID of crypto address to delete", + "description": "The ID of the counterparty to delete.", "required": true, "schema": { "type": "string", - "format": "ULID" - } + "format": "ULID", + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" + }, + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" } ], "responses": { "200": { - "description": "Successful operation" + "description": "Counterparty Deleted", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Reply" + }, + "example": { + "success": true + } + } + } + }, + "401": { + "description": "Not Authorized to Delete Counterparty", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this endpoint requires authentication" + } + } + } }, "404": { - "description": "Account or crypto address not found" + "description": "Counterparty Not Found (Cannot Delete)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "counterparty not found" + } + } + } } } } }, - "/v1/counterparties": { + "/v1/transactions": { "get": { + "summary": "List Transactions", + "description": "Return a paginated list of transactions stored on the Envoy node.", + "operationId": "listTransactions", "tags": [ - "counterparty" + "Transactions" ], - "summary": "List counterparties", - "description": "Paginated list of all stored counterparties", - "operationId": "listCounterparties", "security": [ { - "bearer-auth": [] + "bearerAuth": [] } ], "parameters": [ { - "name": "page_size", - "in": "query", - "schema": { - "type": "integer" - } + "$ref": "#/components/parameters/page_size" }, { - "name": "next_page_token", - "in": "query", - "schema": { - "type": "string" - } + "$ref": "#/components/parameters/next_page_token" }, { - "name": "prev_page_token", - "in": "query", - "schema": { - "type": "string" - } + "$ref": "#/components/parameters/prev_page_token" } ], "responses": { "200": { - "description": "Successful operation", + "description": "Successful Transaction Page Response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CounterpartyList" + "$ref": "#/components/schemas/TransactionList" + }, + "example": { + "page": { + "page_size": 50 + }, + "transactions": [ + { + "id": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5", + "source": "remote", + "status": "accepted", + "counterparty": "AliceCoin", + "counterparty_id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "originator": "James Bond", + "originator_address": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "beneficiary": "Twilda Swansong", + "beneficiary_address": "mtWVpHEcFcCGG9cuj1rUxhTGQZ1gEazxs6", + "virtual_asset": "BTC", + "amount": 1.23e-6, + "last_update": "2024-08-30T12:41:14-05:00", + "envelope_count": 8, + "created": "2024-08-30T11:14:55-05:00", + "modified": "2024-08-30T12:41:14-05:00" + }, + { + "id": "a1edfdf3-a0b2-423a-b293-dd597a3664c0", + "source": "local", + "status": "pending", + "counterparty": "BobVASP", + "counterparty_id": "01J6JC3YZ207WZ9Y9RJQAWB9E6", + "originator": "Marcell Aven", + "originator_address": "0x435A6EA4EAFF2ACC2717F51AF55D7EC1528CA5C0", + "beneficiary": "Francine Le'vint", + "beneficiary_address": "0x79099D52D6FC37F1BEE10BA20EE5F8D86FFAB95D", + "virtual_asset": "ETH", + "amount": 628, + "last_update": "2024-08-30T14:28:46-05:00", + "envelope_count": 2, + "created": "2024-08-30T14:28:38-05:00", + "modified": "2024-08-30T14:28:46-05:00" + } + ] + } + } + } + }, + "400": { + "description": "Bad Transactions Page Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "could not parse page query request" + } + } + } + }, + "401": { + "description": "Not Authorized to View Transactions", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this endpoint requires authentication" } } } @@ -1360,1478 +6960,5587 @@ } }, "post": { + "summary": "Create Transaction", + "description": "Create a new transaction record.", + "operationId": "createTransaction", "tags": [ - "counterparty" + "Transactions" ], - "summary": "Create counterparty", - "description": "Create a new counterparty", - "operationId": "createCounterparty", "security": [ { - "bearer-auth": [] + "bearerAuth": [] } ], + "externalDocs": { + "description": "Transaction States and Workflows", + "url": "https://trisa.dev/envoy/workflows/index.html#transaction-states-and-actions" + }, "requestBody": { - "description": "Create a new counterparty", + "required": true, + "description": "Transaction information that includes all required writeable fields.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Counterparty" + "$ref": "#/components/schemas/TransactionForm" + }, + "example": { + "source": "remote", + "status": "accepted", + "counterparty": "AliceCoin", + "counterparty_id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "originator": "James Bond", + "originator_address": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "beneficiary": "Twilda Swansong", + "beneficiary_address": "mtWVpHEcFcCGG9cuj1rUxhTGQZ1gEazxs6", + "virtual_asset": "BTC", + "amount": 1.23e-6 } } - }, - "required": true + } }, "responses": { - "200": { - "description": "Counterparty created", + "201": { + "description": "Transaction Created", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Counterparty" + "$ref": "#/components/schemas/Transaction" + }, + "example": { + "id": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5", + "source": "remote", + "status": "accepted", + "counterparty": "AliceCoin", + "counterparty_id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "originator": "James Bond", + "originator_address": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "beneficiary": "Twilda Swansong", + "beneficiary_address": "mtWVpHEcFcCGG9cuj1rUxhTGQZ1gEazxs6", + "virtual_asset": "BTC", + "amount": 1.23e-6, + "last_update": "2024-08-30T12:41:14-05:00", + "envelope_count": 8, + "created": "2024-08-30T11:14:55-05:00", + "modified": "2024-08-30T12:41:14-05:00" } } } }, "400": { - "description": "Invalid input" + "description": "Bad Create Transaction Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "could not parse transaction data" + } + } + } + }, + "401": { + "description": "Not Authorized to Manage Transactions", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this endpoint requires authentication" + } + } + } }, "422": { - "description": "Validation exception or missing field" + "description": "Transaction Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FieldErrors" + }, + "example": { + "success": false, + "error": "2 validation errors occurred", + "errors": [ + { + "field": "status", + "error": "status must be one of draft, pending, action required, completed, or archived" + }, + { + "field": "counterparty", + "error": "missing counterparty: this field is required" + } + ] + } + } + } } } } }, - "/v1/counterparties/{counterpartyID}": { + "/v1/transactions/export": { "get": { + "summary": "Export Transactions", + "description": "Export a complete CSV file of all transaction information on the Envoy node. The download is performed in a streaming fashion so that the entire transactions dataset can be exported. API Clients are recommended to read the transaction and write to disk in chunks for memory safety.", + "operationId": "exportTransactions", "tags": [ - "counterparty" + "Transactions" + ], + "security": [ + { + "bearerAuth": [] + } + ], + "responses": { + "200": { + "description": "Streaming CSV Write Started", + "content": { + "text/csv": { + "schema": { + "type": "string", + "description": "A comma delimited columns and newline delimited rows CSV file with double quote escaping.", + "example": "ID,Status,Counterparty,Originator,Originator Address,Beneficiary,Beneficiary Address,Virtual Asset,Amount,Last Update,Created,Number of Envelopes,HMAC Signature" + }, + "example": "ID,Status,Counterparty,Originator,Originator Address,Beneficiary,Beneficiary Address,Virtual Asset,Amount,Last Update,Created,Number of Envelopes,HMAC Signature\nb0d35509-fe80-4719-967a-4582a18dda02,accepted,Counterparty,Gertrude Stein,mpEDL443jUVqJorisdiF8VkkzUk8B9Bnwz,Brenda Tidewater,noKGh1jkG5APipzXWBfGRgb1jnbGjaxu4H,BTC,0.0021,2024-08-19T19:52:26Z,2024-08-19T14:33:36-05:00,12,\ncb510e64-807a-4871-b983-7192949df192,accepted,Counterparty,Gertrude Stein,mpEDL443jUVqJorisdiF8VkkzUk8B9Bnwz,Brenda Tidewater,noKGh1jkG5APipzXWBfGRgb1jnbGjaxu4H,BTC,0.0066,2024-08-19T19:55:16Z,2024-08-19T14:25:14-05:00,8,\nec40ffe5-fc7f-4d83-8185-0cae8f5e26ab,pending,Counterparty,Gertrude Stein,mpEDL443jUVqJorisdiF8VkkzUk8B9Bnwz,Brenda Tidewater,noKGh1jkG5APipzXWBfGRgb1jnbGjaxu4H,BTC,0.0454,2024-08-19T19:57:02Z,2024-08-19T13:55:50-05:00,10," + } + } + }, + "400": { + "description": "Bad Export Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this endpoint does not support query parameters" + } + } + } + } + } + } + }, + "/v1/transactions/{transactionID}": { + "get": { + "summary": "Transaction Detail", + "description": "Return a detailed record of a single transaction object.", + "operationId": "transactionDetail", + "tags": [ + "Transactions" ], - "summary": "Find counterparty by ID", - "description": "Returns a single counterparty if found", - "operationId": "counterpartyDetail", "security": [ { - "bearer-auth": [] + "bearerAuth": [] } ], "parameters": [ { - "name": "counterpartyID", + "name": "transactionID", "in": "path", - "description": "ID of counterparty to return", + "description": "The ID of the transaction to fetch a detailed record of.", "required": true, "schema": { "type": "string", - "format": "ULID" - } + "format": "UUID", + "example": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5" + }, + "example": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5" } ], "responses": { "200": { - "description": "Successful operation", + "description": "Transaction Retrieved", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Counterparty" + "$ref": "#/components/schemas/Transaction" + }, + "example": { + "id": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5", + "source": "remote", + "status": "accepted", + "counterparty": "AliceCoin", + "counterparty_id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "originator": "James Bond", + "originator_address": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "beneficiary": "Twilda Swansong", + "beneficiary_address": "mtWVpHEcFcCGG9cuj1rUxhTGQZ1gEazxs6", + "virtual_asset": "BTC", + "amount": 1.23e-6, + "last_update": "2024-08-30T12:41:14-05:00", + "envelope_count": 8, + "created": "2024-08-30T11:14:55-05:00", + "modified": "2024-08-30T12:41:14-05:00" + } + } + } + }, + "401": { + "description": "Not Authorized to View Transaction Detail", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this endpoint requires authentication" } } } }, "404": { - "description": "Counterparty not found" + "description": "Transaction Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "transaction not found" + } + } + } } } }, "put": { + "summary": "Update Transaction", + "description": "Update a transaction record with new information.", + "operationId": "updateTransaction", "tags": [ - "counterparty" + "Transactions" ], - "summary": "Updates a counterparty record", - "description": "Update a counterparty record (does not patch, all fields are required)", - "operationId": "updateCounterparty", "security": [ { - "bearer-auth": [] + "bearerAuth": [] } ], + "externalDocs": { + "description": "Transaction States and Compliance Officer Actions", + "url": "https://trisa.dev/envoy/workflows/index.html#transaction-states-and-actions" + }, "parameters": [ { - "name": "counterpartyID", + "name": "transactionID", "in": "path", - "description": "ID of counterparty to update", + "description": "The ID of the transaction to update.", "required": true, "schema": { "type": "string", - "format": "ULID" - } + "format": "UUID", + "example": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5" + }, + "example": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5" } ], "requestBody": { - "description": "Updated counterparty record", + "required": true, + "description": "A complete transaction record that should reflect the state of the transaction after the operation.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Counterparty" + "$ref": "#/components/schemas/TransactionForm" + }, + "example": { + "source": "remote", + "status": "accepted", + "counterparty": "AliceCoin", + "counterparty_id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "originator": "James Bond", + "originator_address": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "beneficiary": "Twilda Swansong", + "beneficiary_address": "mtWVpHEcFcCGG9cuj1rUxhTGQZ1gEazxs6", + "virtual_asset": "BTC", + "amount": 1.23e-6 } } - }, - "required": true + } }, "responses": { "200": { - "description": "Successful operation", + "description": "Transaction Updated", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Counterparty" + "$ref": "#/components/schemas/Transaction" + }, + "example": { + "id": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5", + "source": "remote", + "status": "accepted", + "counterparty": "AliceCoin", + "counterparty_id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "originator": "James Bond", + "originator_address": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "beneficiary": "Twilda Swansong", + "beneficiary_address": "mtWVpHEcFcCGG9cuj1rUxhTGQZ1gEazxs6", + "virtual_asset": "BTC", + "amount": 1.23e-6, + "last_update": "2024-08-30T12:41:14-05:00", + "envelope_count": 8, + "created": "2024-08-30T11:14:55-05:00", + "modified": "2024-08-30T12:41:14-05:00" } } } }, - "400": { - "description": "Invalid input" + "401": { + "description": "Not Authorized to Update Transaction", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this endpoint requires authentication" + } + } + } + }, + "404": { + "description": "Transaction Not Found (Cannot Update)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "transaction not found" + } + } + } }, "422": { - "description": "Validation exception or missing field" + "description": "Transaction Update Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FieldErrors" + }, + "example": { + "success": false, + "error": "2 validation errors occurred", + "errors": [ + { + "field": "status", + "error": "status must be one of draft, pending, action required, completed, or archived" + }, + { + "field": "counterparty", + "error": "missing counterparty: this field is required" + } + ] + } + } + } } } }, "delete": { + "summary": "Delete Transaction", + "description": "Delete a transaction with the specified ID.", + "operationId": "deleteTransaction", "tags": [ - "counterparty" + "Transactions" ], - "summary": "Deletes a counterparty", - "description": "Deletes a counterparty", - "operationId": "deleteCounterparty", "security": [ { - "bearer-auth": [] + "bearerAuth": [] } ], "parameters": [ { - "name": "counterpartyID", + "name": "transactionID", "in": "path", - "description": "ID of counterparty to delete", + "description": "The ID of the transaction to delete.", "required": true, "schema": { "type": "string", - "format": "ULID" - } + "format": "UUID", + "example": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5" + }, + "example": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5" } ], "responses": { "200": { - "description": "Successful operation" - }, - "404": { - "description": "Counterparty not found" - } - } - } - }, - "/v1/users": { - "get": { - "tags": [ - "user" - ], - "summary": "List users", - "description": "Paginated list of all users", - "operationId": "listUsers", - "security": [ - { - "bearer-auth": [] - } - ], - "parameters": [ - { - "name": "page_size", - "in": "query", - "schema": { - "type": "integer" + "description": "Transaction Deleted", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Reply" + }, + "example": { + "success": true + } + } } }, - { - "name": "next_page_token", - "in": "query", - "schema": { - "type": "string" + "401": { + "description": "Not Authorized to Delete Transaction", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this endpoint requires authentication" + } + } } }, - { - "name": "prev_page_token", - "in": "query", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successful operation", + "404": { + "description": "Transaction Not Found (Cannot Delete)", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserList" + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "transaction not found" } } } } } - }, + } + }, + "/v1/transactions/prepare": { "post": { - "tags":[ - "user" + "summary": "Prepare IVMS101 Payload", + "description": "This endpoint allows you to use a simplified data entry form that only requires transfer, originator and beneficiary details along with the travel address of the beneficiary in order to construct a complete IVMS101 Identity and Transaction payload. The IVMS101 payload is far more complex than the simple form, so it's often a first place to start when creating a transaction. This endpoint also populates the payload with the originator and beneficiary VASP legal person details using the counterparty information on the node.", + "operationId": "prepareTransaction", + "tags": [ + "Preparing Transactions" ], - "summary": "Create user", - "description": "Create a new user", - "operationId": "createUser", "security": [ { - "bearer-auth": [] + "bearerAuth": [] } ], "requestBody": { - "description": "Create a new user", + "required": true, + "description": "Simplified Prepare Form", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/User" + "$ref": "#/components/schemas/Prepare" + }, + "example": { + "travel_address": "taLg4sBFp3cWhB9wN7qsiUF8pxo7JXtVShYkv5ix1wG2kX5y4pRiJ3TRHmeD8H67TLLm5wHyDktVw1onfDeQfESumf91mjRTMbi", + "originator": { + "first_name": "James", + "last_name": "Bond", + "customer_id": "674907513", + "identification": { + "type_code": "DRLC", + "number": "BOND9211110JA9OB", + "country": "GB", + "dob": "1920-11-11", + "birth_place": "Wattenscheid, Germany" + }, + "addr_line_1": "1 High Street", + "city": "London", + "post_code": "SE1 2QH", + "country": "GB", + "crypto_address": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i" + }, + "beneficiary": { + "first_name": "Twilda", + "last_name": "Swansong", + "customer_id": "39910432", + "identification": { + "type_code": "SOCS", + "number": "880-02-22213", + "country": "US", + "dob": "1978-02-14", + "birth_place": "Toronto, Ontario, Canada" + }, + "addr_line_1": "123 Main Street", + "city": "Casper", + "state": "WY", + "post_code": "82604", + "country": "US", + "crypto_address": "mtCoa72PhLznu2dw639xXfBjC8SUCpyrTv" + }, + "transfer": { + "amount": 0.0007, + "network": "BTC" + } } } - }, - "required": true + } }, "responses": { "200": { - "description": "User created", + "description": "Succesfully Prepared IVMS101 Payload", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/User" + "$ref": "#/components/schemas/Prepared" + }, + "example": { + "travel_address": "taLg4sBFp3cWhB9wN7qsiUF8pxo7JXtVShYkv5ix1wG2kX5y4pRiJ3TRHmeD8H67TLLm5wHyDktVw1onfDeQfESumf91mjRTMbi", + "identity": { + "originator": { + "originatorPersons": [ + { + "naturalPerson": { + "name": { + "nameIdentifier": [ + { + "primaryIdentifier": "Bond", + "secondaryIdentifier": "James", + "nameIdentifierType": "LEGL" + } + ] + }, + "geographicAddress": [ + { + "addressType": "HOME", + "streetName": "High Street", + "buildingNumber": "1", + "townName": "London", + "postCode": "SE1 2QH", + "country": "GB" + } + ], + "nationalIdentification": { + "nationalIdentifierType": "DRLC", + "nationalIdentifier": "BOND9211110JA9OB", + "countryOfIssue": "GB" + }, + "customerIdentification": "674907513", + "dateAndPlaceOfBirth": { + "dateOfBirth": "1920-11-11", + "placeOfBirth": "Wattenscheid, Germany" + }, + "countryOfResidence": "GB" + } + } + ], + "accountNumber": [ + "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i" + ] + }, + "beneficiary": { + "beneficiaryPersons": [ + { + "naturalPerson": { + "name": { + "nameIdentifier": [ + { + "primaryIdentifier": "Swansong", + "secondaryIdentifier": "Twilda", + "nameIdentifierType": "LEGL" + } + ] + }, + "geographicAddress": [ + { + "addressType": "HOME", + "streetName": "Main Street", + "buildingNumber": "123", + "townName": "Casper", + "countrySubDivision": "WY", + "postCode": "82604", + "country": "US" + } + ], + "nationalIdentification": { + "nationalIdentifierType": "SOCS", + "nationalIdentifier": "880-02-22213", + "countryOfIssue": "US" + }, + "customerIdentification": "39910432", + "dateAndPlaceOfBirth": { + "dateOfBirth": "1978-02-14", + "placeOfBirth": "Toronto, Ontario, Canada" + }, + "countryOfResidence": "US" + } + } + ], + "accountNumber": [ + "mtCoa72PhLznu2dw639xXfBjC8SUCpyrTv" + ] + }, + "originatingVASP": { + "originatingVASP": { + "legalPerson": { + "name": { + "nameIdentifier": [ + { + "legalPersonName": "High Street Capital Management, LTD", + "legalPersonNameIdentifierType": "LEGL" + }, + { + "legalPersonName": "PubCoin", + "legalPersonNameIdentifierType": "TRAD" + } + ] + }, + "geographicAddress": [ + { + "addressType": "BIZZ", + "streetName": "Abbey St.", + "buildingNumber": "51", + "townName": "Nottingham", + "postCode": "NG7 2NZ", + "country": "GB" + } + ], + "nationalIdentification": { + "nationalIdentifier": "GKUH00AIM6DCRXGXVU75", + "nationalIdentifierType": "LEIX" + }, + "countryOfRegistration": "GB" + } + } + }, + "beneficiaryVASP": { + "beneficiaryVASP": { + "legalPerson": { + "name": { + "nameIdentifier": [ + { + "legalPersonName": "AliceCoin, LLC", + "legalPersonNameIdentifierType": "LEGL" + } + ] + }, + "geographicAddress": [ + { + "addressType": "BIZZ", + "addressLine": [ + "41 Wall Street", + "Suite 203", + "New York, NY 10042" + ], + "country": "US" + } + ], + "nationalIdentification": { + "nationalIdentifier": "84-1234567", + "nationalIdentifierType": "TXID", + "registrationAuthority": "RA777777" + }, + "countryOfRegistration": "US" + } + } + } + }, + "transaction": { + "originator": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "beneficiary": "mtCoa72PhLznu2dw639xXfBjC8SUCpyrTv", + "amount": 0.0007, + "network": "BTC" + } } } } }, "400": { - "description": "Invalid input" + "description": "Bad Prepare IVMS101 Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "could not parse prepare transaction data" + } + } + } }, "422": { - "description": "Validation exception or missing field" - } - } - } - }, - "/v1/users/{userID}": { - "get": { - "tags":[ - "user" - ], - "summary": "Find user by ID", - "description": "Returns a single user if found", - "operationId": "userDetail", - "security": [ - { - "bearer-auth": [] - } - ], - "parameters": [ - { - "name": "userID", - "in": "path", - "description": "ID of user to return", - "required": true, - "schema": { - "type": "string", - "format": "ULID" - } - } - ], - "responses": { - "200": { - "description": "Successful operation", + "description": "Invalid Prepare IVMS101 Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/User" + "$ref": "#/components/schemas/FieldErrors" + }, + "example": { + "success": false, + "error": "2 validation errors occurred", + "errors": [ + { + "field": "travel_address", + "error": "missing travel_address: this field is required" + }, + { + "field": "originator.crypto_address", + "error": "missing originator.crypto_address: this field is required" + } + ] } } } - }, - "404": { - "description": "User not found" } } - }, - "put": { + } + }, + "/v1/transactions/send-prepared": { + "post": { + "summary": "Send Prepared IVMS101 Payload", + "description": "This endpoint allows you to easily create a transaction and send the travel rule transfer/inquiry to the counterparty using one of the available travel rule protocols in a single step. If the transaction doesn't exist, it is automatically created by the server; if it does exist, it is updated and the payload is sent to the counterparty for compliance processing. This method is generally the best way to create transactions as it simplifies the initialize transaction workflow. When used in conjunction with the Prepare endpoint, this endpoint can reduce the amount of work your API client has to perform.", + "operationId": "sendPreparedTransaction", "tags": [ - "user" - ], - "summary": "Updates a user record", - "description": "Update a user record (does not patch, all fields are required)", - "operationId": "updateUser", - "security": [ - { - "bearer-auth": [] - } - ], - "parameters": [ - { - "name": "userID", - "in": "path", - "description": "ID of user to update", - "required": true, - "schema": { - "type": "string", - "format": "ULID" - } + "Preparing Transactions" + ], + "security": [ + { + "bearerAuth": [] } ], "requestBody": { - "description": "Updated user record", + "required": true, + "description": "Prepared Payload as Returned from Prepare Endpoint", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/User" + "$ref": "#/components/schemas/Prepared" + }, + "example": { + "travel_address": "taLg4sBFp3cWhB9wN7qsiUF8pxo7JXtVShYkv5ix1wG2kX5y4pRiJ3TRHmeD8H67TLLm5wHyDktVw1onfDeQfESumf91mjRTMbi", + "identity": { + "originator": { + "originatorPersons": [ + { + "naturalPerson": { + "name": { + "nameIdentifier": [ + { + "primaryIdentifier": "Bond", + "secondaryIdentifier": "James", + "nameIdentifierType": "LEGL" + } + ] + }, + "geographicAddress": [ + { + "addressType": "HOME", + "streetName": "High Street", + "buildingNumber": "7b", + "townName": "London", + "postCode": "SE1 2QH", + "country": "GB" + } + ], + "nationalIdentification": { + "nationalIdentifierType": "DRLC", + "nationalIdentifier": "BOND9211110JA9OB", + "countryOfIssue": "GB" + }, + "customerIdentification": "01J6DJ9F691CF8E9H0V3ET0M0E", + "dateAndPlaceOfBirth": { + "dateOfBirth": "1920-11-11", + "placeOfBirth": "Wattenscheid, Germany" + }, + "countryOfResidence": "GB" + } + } + ], + "accountNumber": [ + "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i" + ] + }, + "beneficiary": { + "beneficiaryPersons": [ + { + "naturalPerson": { + "name": { + "nameIdentifier": [ + { + "primaryIdentifier": "Miura", + "secondaryIdentifier": "Kentaro", + "nameIdentifierType": "LEGL" + } + ], + "localNameIdentifier": [ + { + "primaryIdentifier": "三浦", + "secondaryIdentifier": "建太郎", + "nameIdentifierType": "LEGL" + } + ] + }, + "geographicAddress": [ + { + "addressType": "HOME", + "streetName": "Shimohirakawa", + "buildingNumber": "1536-2", + "townName": "菊川市", + "countrySubDivision": "静岡県", + "postCode": "437-1514", + "country": "JP" + } + ], + "nationalIdentification": { + "nationalIdentifierType": "SOCS", + "nationalIdentifier": "0537-73-2271", + "countryOfIssue": "JP" + }, + "customerIdentification": "01J6QNPGSKN2HZGC2F33F3QQRF", + "dateAndPlaceOfBirth": { + "dateOfBirth": "1979-02-14", + "placeOfBirth": "Tokyo, Japan" + }, + "countryOfResidence": "JP" + } + } + ], + "accountNumber": [ + "mtLmjWt1DDxjGhMRmnxcgQqPNGPUzXuDHw" + ] + }, + "originatingVASP": { + "originatingVASP": { + "legalPerson": { + "name": { + "nameIdentifier": [ + { + "legalPersonName": "High Street Capital Management, LTD", + "legalPersonNameIdentifierType": "LEGL" + }, + { + "legalPersonName": "PubCoin", + "legalPersonNameIdentifierType": "TRAD" + } + ] + }, + "geographicAddress": [ + { + "addressType": "BIZZ", + "streetName": "Abbey St.", + "buildingNumber": "51", + "townName": "Nottingham", + "postCode": "NG7 2NZ", + "country": "GB" + } + ], + "nationalIdentification": { + "nationalIdentifier": "GKUH00AIM6DCRXGXVU75", + "nationalIdentifierType": "LEIX" + }, + "countryOfRegistration": "GB" + } + } + }, + "beneficiaryVASP": { + "beneficiaryVASP": { + "legalPerson": { + "name": { + "nameIdentifier": [ + { + "legalPersonName": "Nippon Crypto Exchange, KK", + "legalPersonNameIdentifierType": "LEGL" + } + ], + "localNameIdentifier": [ + { + "legalPersonName": "日本仮想通貨取引所株式会社", + "legalPersonNameIdentifierType": "LEGL" + } + ], + "phoneticNameIdentifier": [ + { + "legalPersonName": "Nihon kasō tsūka torihikisho kabushikigaisha", + "legalPersonNameIdentifierType": "LEGL" + } + ] + }, + "geographicAddress": [ + { + "addressType": "BIZZ", + "addressLine": [ + "滋賀県大津市水明1-34-2", + "520-0531" + ], + "country": "JP" + }, + { + "addressType": "BIZZ", + "addressLine": [ + "1-34-2 SUIMEI OTSU SHI SHIGA KEN", + "520-0531 JAPAN" + ], + "country": "JP" + } + ], + "nationalIdentification": { + "nationalIdentifier": "84-1234567", + "nationalIdentifierType": "TXID", + "registrationAuthority": "RA777777" + }, + "countryOfRegistration": "JP" + } + } + } + }, + "transaction": { + "txid": "44e25bc0ed840f9bf0e58d6227db15192d5b89e79ba4304da16b09703f68ceaf", + "originator": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "beneficiary": "mtCoa72PhLznu2dw639xXfBjC8SUCpyrTv", + "amount": 0.46602501, + "network": "BTC", + "timestamp": "2024-09-01T16:22:41-05:00", + "extra_json": "eyJ2YWx1ZV93aGVuX3RyYW5zYWN0ZWQiOiAiVVNEICQzMiwzODYuNjEifQ==" + } } } - }, - "required": true + } }, "responses": { "200": { - "description": "Successful operation", + "description": "Succesfully Sent IVMS101 Payload for Existing Transaction", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/User" + "$ref": "#/components/schemas/Envelope" + }, + "example": { + "id": "01J6S9G7GDGNKETY6YDJQC3Z47", + "envelope_id": "cb9a92a3-dfa6-4ecc-a4cc-c1f8fa94d3fe", + "direction": "in", + "remote": "trisa.example.jp", + "reply_to": "01J6S9RJ2APF7C6M10C8NTYVGX", + "is_error": false, + "identity": { + "originator": { + "originatorPersons": [ + { + "naturalPerson": { + "name": { + "nameIdentifier": [ + { + "primaryIdentifier": "Bond", + "secondaryIdentifier": "James", + "nameIdentifierType": "LEGL" + } + ] + }, + "geographicAddress": [ + { + "addressType": "HOME", + "streetName": "High Street", + "buildingNumber": "7b", + "townName": "London", + "postCode": "SE1 2QH", + "country": "GB" + } + ], + "nationalIdentification": { + "nationalIdentifierType": "DRLC", + "nationalIdentifier": "BOND9211110JA9OB", + "countryOfIssue": "GB" + }, + "customerIdentification": "01J6DJ9F691CF8E9H0V3ET0M0E", + "dateAndPlaceOfBirth": { + "dateOfBirth": "1920-11-11", + "placeOfBirth": "Wattenscheid, Germany" + }, + "countryOfResidence": "GB" + } + } + ], + "accountNumber": [ + "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i" + ] + }, + "beneficiary": { + "beneficiaryPersons": [ + { + "naturalPerson": { + "name": { + "nameIdentifier": [ + { + "primaryIdentifier": "Miura", + "secondaryIdentifier": "Kentaro", + "nameIdentifierType": "LEGL" + } + ], + "localNameIdentifier": [ + { + "primaryIdentifier": "三浦", + "secondaryIdentifier": "建太郎", + "nameIdentifierType": "LEGL" + } + ] + }, + "geographicAddress": [ + { + "addressType": "HOME", + "streetName": "Shimohirakawa", + "buildingNumber": "1536-2", + "townName": "菊川市", + "countrySubDivision": "静岡県", + "postCode": "437-1514", + "country": "JP" + } + ], + "nationalIdentification": { + "nationalIdentifierType": "SOCS", + "nationalIdentifier": "0537-73-2271", + "countryOfIssue": "JP" + }, + "customerIdentification": "01J6QNPGSKN2HZGC2F33F3QQRF", + "dateAndPlaceOfBirth": { + "dateOfBirth": "1979-02-14", + "placeOfBirth": "Tokyo, Japan" + }, + "countryOfResidence": "JP" + } + } + ], + "accountNumber": [ + "mtLmjWt1DDxjGhMRmnxcgQqPNGPUzXuDHw" + ] + }, + "originatingVASP": { + "originatingVASP": { + "legalPerson": { + "name": { + "nameIdentifier": [ + { + "legalPersonName": "High Street Capital Management, LTD", + "legalPersonNameIdentifierType": "LEGL" + }, + { + "legalPersonName": "PubCoin", + "legalPersonNameIdentifierType": "TRAD" + } + ] + }, + "geographicAddress": [ + { + "addressType": "BIZZ", + "streetName": "Abbey St.", + "buildingNumber": "51", + "townName": "Nottingham", + "postCode": "NG7 2NZ", + "country": "GB" + } + ], + "nationalIdentification": { + "nationalIdentifier": "GKUH00AIM6DCRXGXVU75", + "nationalIdentifierType": "LEIX" + }, + "countryOfRegistration": "GB" + } + } + }, + "beneficiaryVASP": { + "beneficiaryVASP": { + "legalPerson": { + "name": { + "nameIdentifier": [ + { + "legalPersonName": "Nippon Crypto Exchange, KK", + "legalPersonNameIdentifierType": "LEGL" + } + ], + "localNameIdentifier": [ + { + "legalPersonName": "日本仮想通貨取引所株式会社", + "legalPersonNameIdentifierType": "LEGL" + } + ], + "phoneticNameIdentifier": [ + { + "legalPersonName": "Nihon kasō tsūka torihikisho kabushikigaisha", + "legalPersonNameIdentifierType": "LEGL" + } + ] + }, + "geographicAddress": [ + { + "addressType": "BIZZ", + "addressLine": [ + "滋賀県大津市水明1-34-2", + "520-0531" + ], + "country": "JP" + }, + { + "addressType": "BIZZ", + "addressLine": [ + "1-34-2 SUIMEI OTSU SHI SHIGA KEN", + "520-0531 JAPAN" + ], + "country": "JP" + } + ], + "nationalIdentification": { + "nationalIdentifier": "84-1234567", + "nationalIdentifierType": "TXID", + "registrationAuthority": "RA777777" + }, + "countryOfRegistration": "JP" + } + } + } + }, + "transaction": { + "txid": "44e25bc0ed840f9bf0e58d6227db15192d5b89e79ba4304da16b09703f68ceaf", + "originator": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "beneficiary": "mtCoa72PhLznu2dw639xXfBjC8SUCpyrTv", + "amount": 0.46602501, + "network": "BTC", + "timestamp": "2024-09-01T16:22:41-05:00", + "extra_json": "eyJ2YWx1ZV93aGVuX3RyYW5zYWN0ZWQiOiAiVVNEICQzMiwzODYuNjEifQ==" + }, + "sent_at": "2024-09-01T16:22:41-05:00", + "received_at": "2024-09-06T07:14:29-05:00", + "timestamp": "2024-09-06T07:14:30-05:00", + "public_key_signature": "SHA256:n/iTnE9b0sP1DQkaDMricHqPKYj0n00IjiaJ7lUmcAs", + "transfer_state": "STARTED", + "secure_envelope": { + "id": "01J6S9G7GDGNKETY6YDJQC3Z47", + "envelope_id": "cb9a92a3-dfa6-4ecc-a4cc-c1f8fa94d3fe", + "direction": "out", + "remote": "api.alice.vaspbot.net", + "reply_to": "01J6S9RJ2APF7C6M10C8NTYVGX", + "payload": "Omjx7x69RRFOcheWgESMKph5befzbENJoFXjgno74FCrCeZx5EoR3w515lR76X0pOqghaXErNir14/GisfSKuyZnwD4re7hbFrQn3nIjqqirKvkFRKf4QIOQv/0DfK/ofc8/3+OLN5YP9Js/5vMp3DcFWqYzB8AvCDGC6AtcNh+7Y6arHlCCXzQfxeI1BZeMN5QGeMSL8Ad3od6Nqy92KVCeSksNv858x7XDiYKTh72Rn/z+11UVw5wc4cKdf536vZQ87v38SNV3k7ASfmT+a8+19HnE2aPy/bYtmEQd94Q2w0+JPF4lB9C8DooMS7ctnOUDSIiY++v4xX4Ty40iOFQOns77E9itfAYQwYyVHoLXJVA9SR5aBYDJse0mhRlJ5KHf0cY7CPQlvtcCRu+rwdYu7U2XFXYXCjYS2a6mB+ozUaZMepcPst1XPqQRW2ZMKP8Q9sCa/0r2XIO9yHksaPt3AbbjfHczEvl44f2NkdpfBAtTYYGUfO441EBieO3NhE6XTWbAHaj8Sxo4DUpvibaENbIuMNksme3WCM6ZJRHJ70us+9PJSA9VEiGRHR64YbZn95iBcH7HAVWPJdPAmfSuRQ0i4LbdFdq33LZG33uJWLP0sK6ncFM+0e1G1S6hRN3hXEEdFhHxuOOq90Vq29mQHbgzrZiHgIKqasutXYU/Tbxcqi1oUZdRAMXIySfAVFVT9672DsQpAoFalKGeSu3kbNTfYTYBpvDFVFxJI/cvn/D64AOzg8feo/9KtJgSPG9QijCyD1hbkii75/ssu1Z8X9mj0Y4kRxS41EimihmQzTE47dxYjGy+W3X9s0H8AMyDmlvTU++5x8qyxLht9s6R83L8sXH+J9/4mLebgIccaaKYqJQZ7pWJoqrujuO1InYBWCUGPdRpHPlKmuMHjhc13j8PhGOrc4ylanOfdxUumUI4nLNlluKpijAZ/lwpNnixNbAu/ZpZUXLGcpgOZgqgBljcLOWq+PKteLhH2SIxt9+bIO8HoWzfpkVRWumuTi1xKQmkrOHW140uYez831Mz0ZDwB4u6aiHouSAu+MAGp/VzA0DmfjTGqD8KccxYZg+Cxye2e2CXJe6xw+AgUTg5bSeAIgwEafZU56BlV5tjdYMrXlcchS4ORGUV1ysMGBc0KIxYuvmciV17aD7R6wUbvgntvSGfvPvcbFqTY06sECgcWVVs8QB5avB7v4nYCDYnTay6Zc6ETE6EO9t+94bKljvAto3RefiFQeCfDnkbFWKHY37ofsTn3Crc+iesMmAzGJvOPkzgcxEjhpoFV7XYPiG0ke31dNFOrb9cZpTZJfi80XZjE6Z/ugQYWrfKjXauPYRbJWAts7TAaz28PxpjTjbdCO3wMCzKlYKnk+yCYwZe2c1Hdz4VEmNFNe30Uf7AH3dW2Q5tjKzn/ghj/zVeVI2bQLwfSKaEQI78Sqg5gXETwgkMCuzjp2850AMndNaep5W1JQ4PcWkLEonMPcdZF9CMIX7WaYFHRkbOuJC5ncC3icnyD0qEC/XWsvEQTR6rzY4vTIIZOgDMbKoZDK4C5kOj5pewohNOuYySQwB6A5hcNtW6Z/uJ4V9vGX+EPzwjTaHbe8GDj++NlzG+FQi1GozS+6vqJU5FCTdhTMzelg5blkozihiUGkkABFsMcn8R2uMvjJ/WebjkeQC3pkRkc+qfyAH+Q2uhSASfVAsKkalBFh3Y9uwwuY1Tl4aHMvmAWvBpbIpP/PI90JhW", + "encryption_key": "vSdEaKmbQUA4hUfbpx2LAi7rfYK3YwVPMt7w0M0wHWI6sPTlLI863Bgagja7pP3TAq6dTuwXnT0jxbW/I6i2LYshvUbkHJIl/6nddGbJiJzJNboFvVZNFlNYCRDm2T/lOx0PPcuuficHQpVrqZUTT8g9jB3gwkSvCQMVt41g4aKnNGmxze1nVLi3LlmILNfownTxWRkPP4ASbBVZ204qi4c/1EA3AKI0vuSB1I4Sjk2D77/Ui67QTVc5xqdk+AGUON/hkFAa4RSC0DXmNqKBLobPkY3RhK1n1SqmCifjGBsqMdpXPnfAZlibxeB5UssZKK+1Lcj2viKY3FUPZFCNm5GgUhzxyXH5BCHgpgbpS4JQ9+8uyiUxyG5MpRZrdRowz252b1QiZ12u5lnxDO6RKQGcwRvs2mEst6ikkTHIIoZ13q4aZHsW7VWP3+ogZj/o3EnLxcYJO2PNkoHhLcQya6NSvxxgA8x6oRDObOLnzspavNw7tHf2LwORrd3PYJylNgllpoFK1qUIIdYulESkLuE6jqURIgP8WYUZ3nhMEAaHJbB4G66KoDGam0cmxTKiHGG11QU8SUNVdU8w/eb1NmR5ZSQIJdQA7RyREklZdjsW+mmcHgygxynHjzBe7kiXBNYBWz2CVQxGE+TySIi4ZHE2rxLpSCFAKl3KtLIVG4o=", + "encryption_algorithm": "AES256-GCM", + "valid_hmac": true, + "hmac": "HBzhe6ltfH0cfJ4rQCl8G6LX/eD6aJShh+9mYJ4ExHU=", + "hmac_secret": "KxPZDbLAu7c5ASYiuOLWQwnQi2r7L7925x0MBuNaNQs1vcGa79y3+IF6uprD9MwwYIqZ/5CBaAJusUuVXJ9KXSWVu4SD8yGv6M1HkEPzic7pvywcH6zqjBYupjhWGcit9IfB1oWGMPG7T7s7Ctl7eBLpVyfSI2veXLFYViFoXlUPNovcQ1MgnPNAVaIuAlmHsEC6JIeSsHb1uhpYxapBWvZPYT9g/QKWggyCZDQWohYrscRq+iPa1YpMuJJ77R6Bb3hJzDwE9onZwz8Vnl3V2uY7JNw1WSyGu/chpBO4yMrTvYcvThsoo+lWbnoSmImWX3jHbVK/6+hxlyEnQJ+9YnZHk7a7b21UXOB/lmm58InK5FEaB2wotDSlrwJB7wLT5Y2PtqyamqRYlOtc14owfrfbHcSWe7RoGOhKzRILqgV8zFZv0sg/+uZU5dYm5ef/mRDeLBpfs4qbOHSsNm1CVQSK64SrEyv0wdFL+OSS5l9Vq/CEEgYG7Q7qz+m/ahCurI2o6GoIDvkEfA+5TfoJ3ZUU/l1DGlUiJx5YxQClktVoWfL2W790D5u5uHrI+Qzy00lJ/o/ffx4cgCZiJF+E4xuxNi7ZPByiftciNpXk2a1nyTE9HuB90UULBLwnr8mVzFrwfgkMbof4XlgAxOIsTv6PUPkyOq7Ol4H6B4zY27s=", + "hmac_algorithm": "HMAC-SHA256", + "is_error": false, + "timestamp": "2024-09-02T07:12:34-05:00", + "sealed": true, + "public_key_signature": "SHA256:n/iTnE9b0sP1DQkaDMricHqPKYj0n00IjiaJ7lUmcAs", + "transfer_state": "STARTED", + "original": "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" + } + } + } + } + }, + "201": { + "description": "Succesfully Created Transaction and Sent IVMS101 Payload", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Envelope" + }, + "example": { + "id": "01J6S9G7GDGNKETY6YDJQC3Z47", + "envelope_id": "cb9a92a3-dfa6-4ecc-a4cc-c1f8fa94d3fe", + "direction": "in", + "remote": "trisa.example.jp", + "reply_to": "01J6S9RJ2APF7C6M10C8NTYVGX", + "is_error": false, + "identity": { + "originator": { + "originatorPersons": [ + { + "naturalPerson": { + "name": { + "nameIdentifier": [ + { + "primaryIdentifier": "Bond", + "secondaryIdentifier": "James", + "nameIdentifierType": "LEGL" + } + ] + }, + "geographicAddress": [ + { + "addressType": "HOME", + "streetName": "High Street", + "buildingNumber": "7b", + "townName": "London", + "postCode": "SE1 2QH", + "country": "GB" + } + ], + "nationalIdentification": { + "nationalIdentifierType": "DRLC", + "nationalIdentifier": "BOND9211110JA9OB", + "countryOfIssue": "GB" + }, + "customerIdentification": "01J6DJ9F691CF8E9H0V3ET0M0E", + "dateAndPlaceOfBirth": { + "dateOfBirth": "1920-11-11", + "placeOfBirth": "Wattenscheid, Germany" + }, + "countryOfResidence": "GB" + } + } + ], + "accountNumber": [ + "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i" + ] + }, + "beneficiary": { + "beneficiaryPersons": [ + { + "naturalPerson": { + "name": { + "nameIdentifier": [ + { + "primaryIdentifier": "Miura", + "secondaryIdentifier": "Kentaro", + "nameIdentifierType": "LEGL" + } + ], + "localNameIdentifier": [ + { + "primaryIdentifier": "三浦", + "secondaryIdentifier": "建太郎", + "nameIdentifierType": "LEGL" + } + ] + }, + "geographicAddress": [ + { + "addressType": "HOME", + "streetName": "Shimohirakawa", + "buildingNumber": "1536-2", + "townName": "菊川市", + "countrySubDivision": "静岡県", + "postCode": "437-1514", + "country": "JP" + } + ], + "nationalIdentification": { + "nationalIdentifierType": "SOCS", + "nationalIdentifier": "0537-73-2271", + "countryOfIssue": "JP" + }, + "customerIdentification": "01J6QNPGSKN2HZGC2F33F3QQRF", + "dateAndPlaceOfBirth": { + "dateOfBirth": "1979-02-14", + "placeOfBirth": "Tokyo, Japan" + }, + "countryOfResidence": "JP" + } + } + ], + "accountNumber": [ + "mtLmjWt1DDxjGhMRmnxcgQqPNGPUzXuDHw" + ] + }, + "originatingVASP": { + "originatingVASP": { + "legalPerson": { + "name": { + "nameIdentifier": [ + { + "legalPersonName": "High Street Capital Management, LTD", + "legalPersonNameIdentifierType": "LEGL" + }, + { + "legalPersonName": "PubCoin", + "legalPersonNameIdentifierType": "TRAD" + } + ] + }, + "geographicAddress": [ + { + "addressType": "BIZZ", + "streetName": "Abbey St.", + "buildingNumber": "51", + "townName": "Nottingham", + "postCode": "NG7 2NZ", + "country": "GB" + } + ], + "nationalIdentification": { + "nationalIdentifier": "GKUH00AIM6DCRXGXVU75", + "nationalIdentifierType": "LEIX" + }, + "countryOfRegistration": "GB" + } + } + }, + "beneficiaryVASP": { + "beneficiaryVASP": { + "legalPerson": { + "name": { + "nameIdentifier": [ + { + "legalPersonName": "Nippon Crypto Exchange, KK", + "legalPersonNameIdentifierType": "LEGL" + } + ], + "localNameIdentifier": [ + { + "legalPersonName": "日本仮想通貨取引所株式会社", + "legalPersonNameIdentifierType": "LEGL" + } + ], + "phoneticNameIdentifier": [ + { + "legalPersonName": "Nihon kasō tsūka torihikisho kabushikigaisha", + "legalPersonNameIdentifierType": "LEGL" + } + ] + }, + "geographicAddress": [ + { + "addressType": "BIZZ", + "addressLine": [ + "滋賀県大津市水明1-34-2", + "520-0531" + ], + "country": "JP" + }, + { + "addressType": "BIZZ", + "addressLine": [ + "1-34-2 SUIMEI OTSU SHI SHIGA KEN", + "520-0531 JAPAN" + ], + "country": "JP" + } + ], + "nationalIdentification": { + "nationalIdentifier": "84-1234567", + "nationalIdentifierType": "TXID", + "registrationAuthority": "RA777777" + }, + "countryOfRegistration": "JP" + } + } + } + }, + "transaction": { + "txid": "44e25bc0ed840f9bf0e58d6227db15192d5b89e79ba4304da16b09703f68ceaf", + "originator": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "beneficiary": "mtCoa72PhLznu2dw639xXfBjC8SUCpyrTv", + "amount": 0.46602501, + "network": "BTC", + "timestamp": "2024-09-01T16:22:41-05:00", + "extra_json": "eyJ2YWx1ZV93aGVuX3RyYW5zYWN0ZWQiOiAiVVNEICQzMiwzODYuNjEifQ==" + }, + "sent_at": "2024-09-01T16:22:41-05:00", + "received_at": "2024-09-06T07:14:29-05:00", + "timestamp": "2024-09-06T07:14:30-05:00", + "public_key_signature": "SHA256:n/iTnE9b0sP1DQkaDMricHqPKYj0n00IjiaJ7lUmcAs", + "transfer_state": "STARTED", + "secure_envelope": { + "id": "01J6S9G7GDGNKETY6YDJQC3Z47", + "envelope_id": "cb9a92a3-dfa6-4ecc-a4cc-c1f8fa94d3fe", + "direction": "out", + "remote": "api.alice.vaspbot.net", + "reply_to": "01J6S9RJ2APF7C6M10C8NTYVGX", + "payload": "Omjx7x69RRFOcheWgESMKph5befzbENJoFXjgno74FCrCeZx5EoR3w515lR76X0pOqghaXErNir14/GisfSKuyZnwD4re7hbFrQn3nIjqqirKvkFRKf4QIOQv/0DfK/ofc8/3+OLN5YP9Js/5vMp3DcFWqYzB8AvCDGC6AtcNh+7Y6arHlCCXzQfxeI1BZeMN5QGeMSL8Ad3od6Nqy92KVCeSksNv858x7XDiYKTh72Rn/z+11UVw5wc4cKdf536vZQ87v38SNV3k7ASfmT+a8+19HnE2aPy/bYtmEQd94Q2w0+JPF4lB9C8DooMS7ctnOUDSIiY++v4xX4Ty40iOFQOns77E9itfAYQwYyVHoLXJVA9SR5aBYDJse0mhRlJ5KHf0cY7CPQlvtcCRu+rwdYu7U2XFXYXCjYS2a6mB+ozUaZMepcPst1XPqQRW2ZMKP8Q9sCa/0r2XIO9yHksaPt3AbbjfHczEvl44f2NkdpfBAtTYYGUfO441EBieO3NhE6XTWbAHaj8Sxo4DUpvibaENbIuMNksme3WCM6ZJRHJ70us+9PJSA9VEiGRHR64YbZn95iBcH7HAVWPJdPAmfSuRQ0i4LbdFdq33LZG33uJWLP0sK6ncFM+0e1G1S6hRN3hXEEdFhHxuOOq90Vq29mQHbgzrZiHgIKqasutXYU/Tbxcqi1oUZdRAMXIySfAVFVT9672DsQpAoFalKGeSu3kbNTfYTYBpvDFVFxJI/cvn/D64AOzg8feo/9KtJgSPG9QijCyD1hbkii75/ssu1Z8X9mj0Y4kRxS41EimihmQzTE47dxYjGy+W3X9s0H8AMyDmlvTU++5x8qyxLht9s6R83L8sXH+J9/4mLebgIccaaKYqJQZ7pWJoqrujuO1InYBWCUGPdRpHPlKmuMHjhc13j8PhGOrc4ylanOfdxUumUI4nLNlluKpijAZ/lwpNnixNbAu/ZpZUXLGcpgOZgqgBljcLOWq+PKteLhH2SIxt9+bIO8HoWzfpkVRWumuTi1xKQmkrOHW140uYez831Mz0ZDwB4u6aiHouSAu+MAGp/VzA0DmfjTGqD8KccxYZg+Cxye2e2CXJe6xw+AgUTg5bSeAIgwEafZU56BlV5tjdYMrXlcchS4ORGUV1ysMGBc0KIxYuvmciV17aD7R6wUbvgntvSGfvPvcbFqTY06sECgcWVVs8QB5avB7v4nYCDYnTay6Zc6ETE6EO9t+94bKljvAto3RefiFQeCfDnkbFWKHY37ofsTn3Crc+iesMmAzGJvOPkzgcxEjhpoFV7XYPiG0ke31dNFOrb9cZpTZJfi80XZjE6Z/ugQYWrfKjXauPYRbJWAts7TAaz28PxpjTjbdCO3wMCzKlYKnk+yCYwZe2c1Hdz4VEmNFNe30Uf7AH3dW2Q5tjKzn/ghj/zVeVI2bQLwfSKaEQI78Sqg5gXETwgkMCuzjp2850AMndNaep5W1JQ4PcWkLEonMPcdZF9CMIX7WaYFHRkbOuJC5ncC3icnyD0qEC/XWsvEQTR6rzY4vTIIZOgDMbKoZDK4C5kOj5pewohNOuYySQwB6A5hcNtW6Z/uJ4V9vGX+EPzwjTaHbe8GDj++NlzG+FQi1GozS+6vqJU5FCTdhTMzelg5blkozihiUGkkABFsMcn8R2uMvjJ/WebjkeQC3pkRkc+qfyAH+Q2uhSASfVAsKkalBFh3Y9uwwuY1Tl4aHMvmAWvBpbIpP/PI90JhW", + "encryption_key": "vSdEaKmbQUA4hUfbpx2LAi7rfYK3YwVPMt7w0M0wHWI6sPTlLI863Bgagja7pP3TAq6dTuwXnT0jxbW/I6i2LYshvUbkHJIl/6nddGbJiJzJNboFvVZNFlNYCRDm2T/lOx0PPcuuficHQpVrqZUTT8g9jB3gwkSvCQMVt41g4aKnNGmxze1nVLi3LlmILNfownTxWRkPP4ASbBVZ204qi4c/1EA3AKI0vuSB1I4Sjk2D77/Ui67QTVc5xqdk+AGUON/hkFAa4RSC0DXmNqKBLobPkY3RhK1n1SqmCifjGBsqMdpXPnfAZlibxeB5UssZKK+1Lcj2viKY3FUPZFCNm5GgUhzxyXH5BCHgpgbpS4JQ9+8uyiUxyG5MpRZrdRowz252b1QiZ12u5lnxDO6RKQGcwRvs2mEst6ikkTHIIoZ13q4aZHsW7VWP3+ogZj/o3EnLxcYJO2PNkoHhLcQya6NSvxxgA8x6oRDObOLnzspavNw7tHf2LwORrd3PYJylNgllpoFK1qUIIdYulESkLuE6jqURIgP8WYUZ3nhMEAaHJbB4G66KoDGam0cmxTKiHGG11QU8SUNVdU8w/eb1NmR5ZSQIJdQA7RyREklZdjsW+mmcHgygxynHjzBe7kiXBNYBWz2CVQxGE+TySIi4ZHE2rxLpSCFAKl3KtLIVG4o=", + "encryption_algorithm": "AES256-GCM", + "valid_hmac": true, + "hmac": "HBzhe6ltfH0cfJ4rQCl8G6LX/eD6aJShh+9mYJ4ExHU=", + "hmac_secret": "KxPZDbLAu7c5ASYiuOLWQwnQi2r7L7925x0MBuNaNQs1vcGa79y3+IF6uprD9MwwYIqZ/5CBaAJusUuVXJ9KXSWVu4SD8yGv6M1HkEPzic7pvywcH6zqjBYupjhWGcit9IfB1oWGMPG7T7s7Ctl7eBLpVyfSI2veXLFYViFoXlUPNovcQ1MgnPNAVaIuAlmHsEC6JIeSsHb1uhpYxapBWvZPYT9g/QKWggyCZDQWohYrscRq+iPa1YpMuJJ77R6Bb3hJzDwE9onZwz8Vnl3V2uY7JNw1WSyGu/chpBO4yMrTvYcvThsoo+lWbnoSmImWX3jHbVK/6+hxlyEnQJ+9YnZHk7a7b21UXOB/lmm58InK5FEaB2wotDSlrwJB7wLT5Y2PtqyamqRYlOtc14owfrfbHcSWe7RoGOhKzRILqgV8zFZv0sg/+uZU5dYm5ef/mRDeLBpfs4qbOHSsNm1CVQSK64SrEyv0wdFL+OSS5l9Vq/CEEgYG7Q7qz+m/ahCurI2o6GoIDvkEfA+5TfoJ3ZUU/l1DGlUiJx5YxQClktVoWfL2W790D5u5uHrI+Qzy00lJ/o/ffx4cgCZiJF+E4xuxNi7ZPByiftciNpXk2a1nyTE9HuB90UULBLwnr8mVzFrwfgkMbof4XlgAxOIsTv6PUPkyOq7Ol4H6B4zY27s=", + "hmac_algorithm": "HMAC-SHA256", + "is_error": false, + "timestamp": "2024-09-02T07:12:34-05:00", + "sealed": true, + "public_key_signature": "SHA256:n/iTnE9b0sP1DQkaDMricHqPKYj0n00IjiaJ7lUmcAs", + "transfer_state": "STARTED", + "original": "CiQwNTFlZTQyMC0wMzM3LTQ4YWUtYjBkNS1kMjIxMmUzYjViZjESzQlsHjY9lq6eVOJg8/OtKrK0VA3ygKlA2P0KSVc0aaABx6Oe4MvyAfpal00476dZi6ucjsOc/BI5GXxsPbEdwVDXRymHuc86hTgVn7oB0W8G+kXu0mtb7PH1erAqJSot1CxgqXWSnhNUo0w50NAJ/d+5itt/Pw0vZ7mTlEi0fL8Aa1/f8EOBUrMwWAqSBme2l5dJFomMN8fdpo8gm0+rU6g1cOGTM+ZBbrcXHfQuPGq4FueQEensEXXYh6U11z/mtixXZiJMAxLF3CVe517BlRV8dhLU4xtoNcXa2auVYhzRb/hefEEbUFqS7kDwnZjn7D4AqQ9Li9Xh6sSBUBIaSg6AhAs4qRF0Hlbvaz1oXeOnCb8GXe1DrCFPbzEgJ/fpu5/2i8HRtADmqbjo5+tkYhw2kY8vBYh3aRRtkgfztX4gLFwKRKqIV2+X2MY6h0r0KF/2UhsVp8SN0ZJsnjt6sMRtMPefwKHgsyMxGBH9aa0EeSYCDT5m0/0hn50gnSM9Wj5SiF0SmN/p1N8NMdDiibn7IyeQXPGLaoRzdVd+aEakVvIRyTzJS7UUkeBKKMjeaYMsYY4IQPb4uO3hMiB4U7PyqEo/40r9o8jWcauu1xtnDdhg3nAMDMwLnnH1+7eid59BByG4cyySe5Fhlmp3zLAWqBj2prGCXAZK0rh5ay6wb+SjoG9w9+VtlkNOcrjw9TUuV481pdBTXeVOAyV0Y0iXf1InyygkqPt3JyCAIgRihENhYqh8X++PCojXtho7nu3H2Lp+s8TEFUVUjB+9DfsNckws0d2jm8a/auboeun0PP/GBNKzGTjrMdA7P9AROdyG6cwMph3KGBJx9/y0NsqKLS74n7Bw4Ljmr9CAZhXFAwOC7ksZkcMAFcScqubYxWuPPOyqkAIF/gbMmMkKrRIr859Bx2JwUIZ9+BleeDDEasTBrz3o2LAagyPby52kidea+VPlZzS1J/7uwmtRE5oyvak/rYCjFWoo+d81de5y56XMUv5joHuNlWO7hBsRPT7o8XnoqSuwzFe5Xle/ftLGr5JNeg+BHVWFkELbh7i49chi3hx/darruTYcaerjeW03ahgCEYLbafz99ru+MQNeNgUGDmlkJXcyDE1+aB+VBTXiEs3SN2DIVmVC3MLUWLv4o4jZySxXu9D+BDDMjBnrdVpcpGDZSMw2NjIT8nVkME6ADAV5IB1gRM6so5XJgIl4EQI4GZR1/A2THoaJvhdptuvAHjnqY+mbVJa2ZqLfKTlic9FyMOjq+UlNeEjdDNfkO9egy5Hg0uutWVpQBRZsymX9WeKPOsVNnIoKXjNEj4xc4XnGB/x1DW9B2Gq4skZJ6JIjjDx2XiDuXadljoKTyHAn0IDKbo96sP89ujGNAMpXF61beaQb2jwXhJxva2sfxgANoT+iCb5xxM8/uppC95LIPTtWBv2+/be5C+G+PadjY8mFjEnHM2eEtLEgnmN/2nzd8i1wigRedC9CjxjM8/HuhT5MS+UTTFRJNAKJc/gh0EVfTNgp+Wm1a52SgpQqTSHA9lMD7+nyaLUp8evE8q6V5sYN7LqtbgG3b77uGJWNpWtAeCktqt7LJaO3AVmESUNoIzIzo/c2yHqM5calIjwHisjaNXqKRt2z0BqABHANAo7Ayo3xyGeOqZOb7urckMB0jf8RvxQJXtSRkhQbEdjYFLgYcZFopdDAyTOJVgYTgZKWMRkpXljYqcuhEmcG26dHfVW59Y5ZzprW/UZALHmU8kVAFT3KIMecFI1caXVEufgqO9YEeiHqpBX1K2iQrtGics0hUOAV+EGPRleLJD6ChVX8D6f6olr7+bq6g0VK9hibZCdzDmZ36JXZMzbiNy/a0VJ/3oRq2mpPNpXx4Bgt8RoikxtQRWCXnO1+9p00DMMvja9TV1E02ijC+D4IkyPoVZe97J8ZW9OaFKXLiaqP+PvnJREDEPLGDzHDO/T8K7Zd+1tpPFNqGmDkJrav1dYH+UV8HGc9O+MVAQeF6E1HmZS6nafZBsW3Bs7PMxJNC63vdOrx+AndwiZWCH91Cjru1opmqA70/8Q2qAqkAX23iX4d3JlTx9xqXt+jE8q6SFT1wl4tq1xsi/GoRq87EWFWqinWRP82RdJbIbvtLJOyG9WceTG07wuEuYLTtk3dCMr9AL3fqIKnEnojO896crOh2QtCkK1u9KM0DhK7TkBTU+ANhTeCl3sXwM2ZCLaT93zgfJQqA7i6iSkNAtIpEBf8rgG/5e98ocJY9gTC0+7/oDClNxnrVjAWsvg13YrtZVhg5abGqRfoYKcAuGJbaD5lcIsHaiI0pHF7hVkHIgpBRVMyNTYtR0NNKiDiMXIASpCARn3lD+CWUVrOc3tlVxer1MUzautyr7Vr4TKABHW0IhgLaJjYFvUqHCsxJxf31VOQfS+NiZOLbX+oTKkPIGknxsUvoohRnEcau/azIl5Iz3wEjD7OFnsm38N524IRW0326y4GN1JPb0PlrtcdN6gJZOeckuBBbfmB5uL0wD0YSfaQ38VWobAvT6ew0R2gsOQ927BEnb1adKeyNktzQbkGFpEjcdxhegFcl/pIqVkWONUEbYEVC1ycHeHk+WImTSodywJKxPk81/GIKEda5HJwoD2vqtPErtKqh6qHXDtHX1RIm1B2qmcQdYMa+UwW0HqndseIQ/XM4W/9xtlj+lUlnBaoukj8i2TSxNJzpWokWD5X5BZUzUj4ZHEhOgFianasrcTgHqO722E+REz3UlBR6YtAt8HUkAvq+DFKGkmv9FjIQ+4fwOTJZd7Rji6ztzY3b6oIAkNihwySgn7H+xDLDr/GbasMtghyibN4IHT3Pbh+Imp8iGPlXQosYRrI5Le00OR3f6xBC6JL80FYiRj8oiG+rCVevBwpOUmKvVOhRoncYuToK3QN1PdQq6NZGN1KQ7N2unOQBX5kexsjgReSa5U/wXOihVDD59g6BHgoZeYTP2dsComzwm/KMnke2MhOxnZ6MKrN/VTyZ3Ofso82bdGfVbslm5+oUTfExU1VH/oB0UHAVrzN6f8Ixd6td7oUY1QltQQgaWKpNTwzOgtITUFDLVNIQTI1NlIeMjAyNC0wOC0yNVQwOTo0MjowOS4zNTcwMTQ0NjdaWAFiMlNIQTI1NjorQk5WYnBKQUxXQnpsUUlEbytROEdjMmNSL3RRNXcvNEZLckdJK3BDOUJraAI=" + } } } } }, "400": { - "description": "Invalid input" + "description": "Bad Prepared IVMS101 Payload", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "could not parse prepared transaction data" + } + } + } }, "422": { - "description": "Validation exception or missing field" - } - } - }, - "delete": { - "tags": [ - "user" - ], - "summary": "Deletes a user", - "description": "Deletes a user", - "operationId": "deleteUser", - "security": [ - { - "bearer-auth": [] - } - ], - "parameters": [ - { - "name": "userID", - "in": "path", - "description": "ID of user to delete", - "required": true, - "schema": { - "type": "string", - "format": "ULID" + "description": "Invalid Prepared IVMS101 Payload", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FieldErrors" + }, + "example": { + "success": false, + "error": "2 validation errors occurred", + "errors": [ + { + "field": "travel_address", + "error": "missing travel_address: this field is required" + }, + { + "field": "originator.crypto_address", + "error": "missing originator.crypto_address: this field is required" + } + ] + } + } } } - ], - "responses": { - "200": { - "description": "Successful operation" - }, - "404": { - "description": "User not found" - } } } }, - "/v1/users/{userID}/password": { + "/v1/transactions/{transactionID}/send": { "post": { + "summary": "Send Envelope", + "description": "Send a secure envelope to the counterparty for the specified transaction ID. This is a generic method that can be used to send any payload so that the API client can manage the workflow details themselves.", + "operationId": "sendEnvelopeForTransaction", "tags": [ - "user" + "Transaction Workflows" ], - "summary": "Change user password", - "description": "Change the password for a user", - "operationId": "changeUserPassword", "security": [ { - "bearer-auth": [] + "bearerAuth": [] } ], "parameters": [ { - "name": "userID", + "name": "transactionID", "in": "path", - "description": "ID of user to change password for", + "description": "The ID of the transaction to send an envelope to the counterparty for.", "required": true, "schema": { "type": "string", - "format": "ULID" - } + "format": "UUID", + "example": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5" + }, + "example": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5" } ], "requestBody": { - "description": "New password", + "required": true, + "description": "The envelope and payload data to send to the counterparty as a TRISA or TRP transfer/inquiry.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserPassword" + "$ref": "#/components/schemas/Envelope" + }, + "example": { + "envelope_id": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5", + "is_error": false, + "identity": { + "originator": { + "originatorPersons": [ + { + "naturalPerson": { + "name": { + "nameIdentifier": [ + { + "primaryIdentifier": "Bond", + "secondaryIdentifier": "James", + "nameIdentifierType": "LEGL" + } + ] + }, + "nationalIdentification": { + "nationalIdentifierType": "DRLC", + "nationalIdentifier": "BOND9211110JA9OB", + "countryOfIssue": "GB" + }, + "customerIdentification": "01J6DJ9F691CF8E9H0V3ET0M0E", + "dateAndPlaceOfBirth": { + "dateOfBirth": "1920-11-11", + "placeOfBirth": "Wattenscheid, Germany" + }, + "countryOfResidence": "GB" + } + } + ], + "accountNumber": [ + "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i" + ] + }, + "beneficiary": { + "beneficiaryPersons": [ + { + "naturalPerson": { + "name": { + "nameIdentifier": [ + { + "primaryIdentifier": "Miura", + "secondaryIdentifier": "Kentaro", + "nameIdentifierType": "LEGL" + } + ], + "localNameIdentifier": [ + { + "primaryIdentifier": "三浦", + "secondaryIdentifier": "建太郎", + "nameIdentifierType": "LEGL" + } + ] + } + } + } + ], + "accountNumber": [ + "mtLmjWt1DDxjGhMRmnxcgQqPNGPUzXuDHw" + ] + }, + "originatingVASP": { + "originatingVASP": { + "legalPerson": { + "name": { + "nameIdentifier": [ + { + "legalPersonName": "High Street Capital Management, LTD", + "legalPersonNameIdentifierType": "LEGL" + } + ] + }, + "nationalIdentification": { + "nationalIdentifier": "GKUH00AIM6DCRXGXVU75", + "nationalIdentifierType": "LEIX" + }, + "countryOfRegistration": "GB" + } + } + }, + "beneficiaryVASP": { + "beneficiaryVASP": { + "legalPerson": { + "name": { + "nameIdentifier": [ + { + "legalPersonName": "Nippon Crypto Exchange, KK", + "legalPersonNameIdentifierType": "LEGL" + } + ], + "localNameIdentifier": [ + { + "legalPersonName": "日本仮想通貨取引所株式会社", + "legalPersonNameIdentifierType": "LEGL" + } + ] + }, + "nationalIdentification": { + "nationalIdentifier": "84-1234567", + "nationalIdentifierType": "TXID", + "registrationAuthority": "RA777777" + }, + "countryOfRegistration": "JP" + } + } + } + }, + "transaction": { + "originator": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "beneficiary": "mtLmjWt1DDxjGhMRmnxcgQqPNGPUzXuDHw", + "amount": 0.002121, + "network": "BTC" + }, + "sent_at": "2024-09-02T14:55:56-05:00", + "transfer_state": "STARTED" } } - }, - "required": true + } }, "responses": { "200": { - "description": "User password changed.", + "description": "Successfully Sent Envelope", "content": { "application/json": { "schema": { - "type": "string", - "description": "The new password for the user." + "$ref": "#/components/schemas/Envelope" + }, + "example": { + "id": "01J6S9G7GDGNKETY6YDJQC3Z47", + "envelope_id": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5", + "direction": "in", + "remote": "trisa.example.jp", + "reply_to": "01J6S9RJ2APF7C6M10C8NTYVGX", + "is_error": false, + "identity": { + "originator": { + "originatorPersons": [ + { + "naturalPerson": { + "name": { + "nameIdentifier": [ + { + "primaryIdentifier": "Bond", + "secondaryIdentifier": "James", + "nameIdentifierType": "LEGL" + } + ] + }, + "nationalIdentification": { + "nationalIdentifierType": "DRLC", + "nationalIdentifier": "BOND9211110JA9OB", + "countryOfIssue": "GB" + }, + "customerIdentification": "01J6DJ9F691CF8E9H0V3ET0M0E", + "dateAndPlaceOfBirth": { + "dateOfBirth": "1920-11-11", + "placeOfBirth": "Wattenscheid, Germany" + }, + "countryOfResidence": "GB" + } + } + ], + "accountNumber": [ + "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i" + ] + }, + "beneficiary": { + "beneficiaryPersons": [ + { + "naturalPerson": { + "name": { + "nameIdentifier": [ + { + "primaryIdentifier": "Miura", + "secondaryIdentifier": "Kentaro", + "nameIdentifierType": "LEGL" + } + ], + "localNameIdentifier": [ + { + "primaryIdentifier": "三浦", + "secondaryIdentifier": "建太郎", + "nameIdentifierType": "LEGL" + } + ] + } + } + } + ], + "accountNumber": [ + "mtLmjWt1DDxjGhMRmnxcgQqPNGPUzXuDHw" + ] + }, + "originatingVASP": { + "originatingVASP": { + "legalPerson": { + "name": { + "nameIdentifier": [ + { + "legalPersonName": "High Street Capital Management, LTD", + "legalPersonNameIdentifierType": "LEGL" + } + ] + }, + "nationalIdentification": { + "nationalIdentifier": "GKUH00AIM6DCRXGXVU75", + "nationalIdentifierType": "LEIX" + }, + "countryOfRegistration": "GB" + } + } + }, + "beneficiaryVASP": { + "beneficiaryVASP": { + "legalPerson": { + "name": { + "nameIdentifier": [ + { + "legalPersonName": "Nippon Crypto Exchange, KK", + "legalPersonNameIdentifierType": "LEGL" + } + ], + "localNameIdentifier": [ + { + "legalPersonName": "日本仮想通貨取引所株式会社", + "legalPersonNameIdentifierType": "LEGL" + } + ] + }, + "nationalIdentification": { + "nationalIdentifier": "84-1234567", + "nationalIdentifierType": "TXID", + "registrationAuthority": "RA777777" + }, + "countryOfRegistration": "JP" + } + } + } + }, + "pending": { + "envelope_id": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5", + "received_by": "Office of Compliance: Nippon DEX", + "received_at": "2024-09-02T14:55:55-05:00", + "message": "Thank you for your travel rule inquiry, we are processing your request.", + "reply_not_after": "2024-09-10T12:00:00+00:00", + "transaction": { + "originator": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "beneficiary": "mtLmjWt1DDxjGhMRmnxcgQqPNGPUzXuDHw", + "amount": 0.002121, + "network": "BTC" + } + }, + "sent_at": "2024-09-02T14:55:56-05:00", + "transfer_state": "PENDING", + "secure_envelope": { + "id": "01J6S9G7GDGNKETY6YDJQC3Z47", + "envelope_id": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5", + "direction": "in", + "remote": "trisa.example.jp", + "reply_to": "01J6S9RJ2APF7C6M10C8NTYVGX", + "payload": "Omjx7x69RRFOcheWgESMKph5befzbENJoFXjgno74FCrCeZx5EoR3w515lR76X0pOqghaXErNir14/GisfSKuyZnwD4re7hbFrQn3nIjqqirKvkFRKf4QIOQv/0DfK/ofc8/3+OLN5YP9Js/5vMp3DcFWqYzB8AvCDGC6AtcNh+7Y6arHlCCXzQfxeI1BZeMN5QGeMSL8Ad3od6Nqy92KVCeSksNv858x7XDiYKTh72Rn/z+11UVw5wc4cKdf536vZQ87v38SNV3k7ASfmT+a8+19HnE2aPy/bYtmEQd94Q2w0+JPF4lB9C8DooMS7ctnOUDSIiY++v4xX4Ty40iOFQOns77E9itfAYQwYyVHoLXJVA9SR5aBYDJse0mhRlJ5KHf0cY7CPQlvtcCRu+rwdYu7U2XFXYXCjYS2a6mB+ozUaZMepcPst1XPqQRW2ZMKP8Q9sCa/0r2XIO9yHksaPt3AbbjfHczEvl44f2NkdpfBAtTYYGUfO441EBieO3NhE6XTWbAHaj8Sxo4DUpvibaENbIuMNksme3WCM6ZJRHJ70us+9PJSA9VEiGRHR64YbZn95iBcH7HAVWPJdPAmfSuRQ0i4LbdFdq33LZG33uJWLP0sK6ncFM+0e1G1S6hRN3hXEEdFhHxuOOq90Vq29mQHbgzrZiHgIKqasutXYU/Tbxcqi1oUZdRAMXIySfAVFVT9672DsQpAoFalKGeSu3kbNTfYTYBpvDFVFxJI/cvn/D64AOzg8feo/9KtJgSPG9QijCyD1hbkii75/ssu1Z8X9mj0Y4kRxS41EimihmQzTE47dxYjGy+W3X9s0H8AMyDmlvTU++5x8qyxLht9s6R83L8sXH+J9/4mLebgIccaaKYqJQZ7pWJoqrujuO1InYBWCUGPdRpHPlKmuMHjhc13j8PhGOrc4ylanOfdxUumUI4nLNlluKpijAZ/lwpNnixNbAu/ZpZUXLGcpgOZgqgBljcLOWq+PKteLhH2SIxt9+bIO8HoWzfpkVRWumuTi1xKQmkrOHW140uYez831Mz0ZDwB4u6aiHouSAu+MAGp/VzA0DmfjTGqD8KccxYZg+Cxye2e2CXJe6xw+AgUTg5bSeAIgwEafZU56BlV5tjdYMrXlcchS4ORGUV1ysMGBc0KIxYuvmciV17aD7R6wUbvgntvSGfvPvcbFqTY06sECgcWVVs8QB5avB7v4nYCDYnTay6Zc6ETE6EO9t+94bKljvAto3RefiFQeCfDnkbFWKHY37ofsTn3Crc+iesMmAzGJvOPkzgcxEjhpoFV7XYPiG0ke31dNFOrb9cZpTZJfi80XZjE6Z/ugQYWrfKjXauPYRbJWAts7TAaz28PxpjTjbdCO3wMCzKlYKnk+yCYwZe2c1Hdz4VEmNFNe30Uf7AH3dW2Q5tjKzn/ghj/zVeVI2bQLwfSKaEQI78Sqg5gXETwgkMCuzjp2850AMndNaep5W1JQ4PcWkLEonMPcdZF9CMIX7WaYFHRkbOuJC5ncC3icnyD0qEC/XWsvEQTR6rzY4vTIIZOgDMbKoZDK4C5kOj5pewohNOuYySQwB6A5hcNtW6Z/uJ4V9vGX+EPzwjTaHbe8GDj++NlzG+FQi1GozS+6vqJU5FCTdhTMzelg5blkozihiUGkkABFsMcn8R2uMvjJ/WebjkeQC3pkRkc+qfyAH+Q2uhSASfVAsKkalBFh3Y9uwwuY1Tl4aHMvmAWvBpbIpP/PI90JhW", + "encryption_key": "vSdEaKmbQUA4hUfbpx2LAi7rfYK3YwVPMt7w0M0wHWI6sPTlLI863Bgagja7pP3TAq6dTuwXnT0jxbW/I6i2LYshvUbkHJIl/6nddGbJiJzJNboFvVZNFlNYCRDm2T/lOx0PPcuuficHQpVrqZUTT8g9jB3gwkSvCQMVt41g4aKnNGmxze1nVLi3LlmILNfownTxWRkPP4ASbBVZ204qi4c/1EA3AKI0vuSB1I4Sjk2D77/Ui67QTVc5xqdk+AGUON/hkFAa4RSC0DXmNqKBLobPkY3RhK1n1SqmCifjGBsqMdpXPnfAZlibxeB5UssZKK+1Lcj2viKY3FUPZFCNm5GgUhzxyXH5BCHgpgbpS4JQ9+8uyiUxyG5MpRZrdRowz252b1QiZ12u5lnxDO6RKQGcwRvs2mEst6ikkTHIIoZ13q4aZHsW7VWP3+ogZj/o3EnLxcYJO2PNkoHhLcQya6NSvxxgA8x6oRDObOLnzspavNw7tHf2LwORrd3PYJylNgllpoFK1qUIIdYulESkLuE6jqURIgP8WYUZ3nhMEAaHJbB4G66KoDGam0cmxTKiHGG11QU8SUNVdU8w/eb1NmR5ZSQIJdQA7RyREklZdjsW+mmcHgygxynHjzBe7kiXBNYBWz2CVQxGE+TySIi4ZHE2rxLpSCFAKl3KtLIVG4o=", + "encryption_algorithm": "AES256-GCM", + "valid_hmac": true, + "hmac": "HBzhe6ltfH0cfJ4rQCl8G6LX/eD6aJShh+9mYJ4ExHU=", + "hmac_secret": "KxPZDbLAu7c5ASYiuOLWQwnQi2r7L7925x0MBuNaNQs1vcGa79y3+IF6uprD9MwwYIqZ/5CBaAJusUuVXJ9KXSWVu4SD8yGv6M1HkEPzic7pvywcH6zqjBYupjhWGcit9IfB1oWGMPG7T7s7Ctl7eBLpVyfSI2veXLFYViFoXlUPNovcQ1MgnPNAVaIuAlmHsEC6JIeSsHb1uhpYxapBWvZPYT9g/QKWggyCZDQWohYrscRq+iPa1YpMuJJ77R6Bb3hJzDwE9onZwz8Vnl3V2uY7JNw1WSyGu/chpBO4yMrTvYcvThsoo+lWbnoSmImWX3jHbVK/6+hxlyEnQJ+9YnZHk7a7b21UXOB/lmm58InK5FEaB2wotDSlrwJB7wLT5Y2PtqyamqRYlOtc14owfrfbHcSWe7RoGOhKzRILqgV8zFZv0sg/+uZU5dYm5ef/mRDeLBpfs4qbOHSsNm1CVQSK64SrEyv0wdFL+OSS5l9Vq/CEEgYG7Q7qz+m/ahCurI2o6GoIDvkEfA+5TfoJ3ZUU/l1DGlUiJx5YxQClktVoWfL2W790D5u5uHrI+Qzy00lJ/o/ffx4cgCZiJF+E4xuxNi7ZPByiftciNpXk2a1nyTE9HuB90UULBLwnr8mVzFrwfgkMbof4XlgAxOIsTv6PUPkyOq7Ol4H6B4zY27s=", + "hmac_algorithm": "HMAC-SHA256", + "is_error": false, + "timestamp": "2024-09-02T07:12:34-05:00", + "sealed": true, + "public_key_signature": "SHA256:n/iTnE9b0sP1DQkaDMricHqPKYj0n00IjiaJ7lUmcAs", + "transfer_state": "PENDING", + "original": "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" + } } } } }, "400": { - "description": "Invalid input" + "description": "Could Not Parse Envelope Data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "could not parse envelope data" + } + } + } }, - "404": { - "description": "User not found" - } - } - } - }, - "/v1/utilities/travel-address/encode": { - "post": { - "tags": [ - "utility" - ], - "summary": "Encode travel address", - "description": "Encodes a travel address into a TRP-formatted string", - "operationId": "encodeTravelAddress", - "requestBody": { - "description": "Travel address to encode", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TravelAddress" + "401": { + "description": "Not Authorized to Send Travel Rule Messages", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this endpoint requires authentication" + } } } }, - "required": true - }, - "responses": { - "200": { - "description": "Successful operation", + "404": { + "description": "Transaction Not Found (Envelope Not Sent)", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TravelAddress" + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "transaction not found" } } } }, - "400": { - "description": "Invalid input" + "422": { + "description": "Invalid Envelope (Not Sent)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FieldErrors" + }, + "example": { + "success": false, + "error": "2 validation errors occurred", + "errors": [ + { + "field": "identity", + "error": "missing field identity: this field is required" + }, + { + "field": "transfer_state", + "error": "could not parse transfer state" + } + ] + } + } + } } } } }, - "/v1/utilities/travel-address/decode": { - "post": { + "/v1/transactions/{transactionID}/payload": { + "get": { + "summary": "Latest Payload", + "description": "Returns the latest travel rule information payload including the identity payload and transaction payload. This method is an easy way to get a decrypted representation of the current state of the compliance information transfer.", + "operationId": "latestPayload", "tags": [ - "utility" + "Transaction Workflows" + ], + "security": [ + { + "bearerAuth": [] + } + ], + "parameters": [ + { + "name": "transactionID", + "in": "path", + "description": "The ID of the transaction to get the latest payload for.", + "required": true, + "schema": { + "type": "string", + "format": "UUID", + "example": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5" + }, + "example": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5" + } ], - "summary": "Decode travel address", - "description": "Decodes a TRP-formatted travel address into its component parts", - "operationId": "decodeTravelAddress", - "requestBody": { - "description": "TRP-formatted travel address to decode", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TravelAddress" - } - } - }, - "required": true - }, "responses": { "200": { - "description": "Successful operation", + "description": "Latest Payload Retrieved", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TravelAddress" + "$ref": "#/components/schemas/Envelope" + }, + "example": { + "id": "01J6S9G7GDGNKETY6YDJQC3Z47", + "envelope_id": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5", + "direction": "in", + "remote": "trisa.example.jp", + "reply_to": "01J6S9RJ2APF7C6M10C8NTYVGX", + "is_error": false, + "identity": { + "originator": { + "originatorPersons": [ + { + "naturalPerson": { + "name": { + "nameIdentifier": [ + { + "primaryIdentifier": "Bond", + "secondaryIdentifier": "James", + "nameIdentifierType": "LEGL" + } + ] + }, + "nationalIdentification": { + "nationalIdentifierType": "DRLC", + "nationalIdentifier": "BOND9211110JA9OB", + "countryOfIssue": "GB" + }, + "customerIdentification": "01J6DJ9F691CF8E9H0V3ET0M0E", + "dateAndPlaceOfBirth": { + "dateOfBirth": "1920-11-11", + "placeOfBirth": "Wattenscheid, Germany" + }, + "countryOfResidence": "GB" + } + } + ], + "accountNumber": [ + "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i" + ] + }, + "beneficiary": { + "beneficiaryPersons": [ + { + "naturalPerson": { + "name": { + "nameIdentifier": [ + { + "primaryIdentifier": "Miura", + "secondaryIdentifier": "Kentaro", + "nameIdentifierType": "LEGL" + } + ], + "localNameIdentifier": [ + { + "primaryIdentifier": "三浦", + "secondaryIdentifier": "建太郎", + "nameIdentifierType": "LEGL" + } + ] + } + } + } + ], + "accountNumber": [ + "mtLmjWt1DDxjGhMRmnxcgQqPNGPUzXuDHw" + ] + }, + "originatingVASP": { + "originatingVASP": { + "legalPerson": { + "name": { + "nameIdentifier": [ + { + "legalPersonName": "High Street Capital Management, LTD", + "legalPersonNameIdentifierType": "LEGL" + } + ] + }, + "nationalIdentification": { + "nationalIdentifier": "GKUH00AIM6DCRXGXVU75", + "nationalIdentifierType": "LEIX" + }, + "countryOfRegistration": "GB" + } + } + }, + "beneficiaryVASP": { + "beneficiaryVASP": { + "legalPerson": { + "name": { + "nameIdentifier": [ + { + "legalPersonName": "Nippon Crypto Exchange, KK", + "legalPersonNameIdentifierType": "LEGL" + } + ], + "localNameIdentifier": [ + { + "legalPersonName": "日本仮想通貨取引所株式会社", + "legalPersonNameIdentifierType": "LEGL" + } + ] + }, + "nationalIdentification": { + "nationalIdentifier": "84-1234567", + "nationalIdentifierType": "TXID", + "registrationAuthority": "RA777777" + }, + "countryOfRegistration": "JP" + } + } + } + }, + "pending": { + "envelope_id": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5", + "received_by": "Office of Compliance: Nippon DEX", + "received_at": "2024-09-02T14:55:55-05:00", + "message": "Thank you for your travel rule inquiry, we are processing your request.", + "reply_not_after": "2024-09-10T12:00:00+00:00", + "transaction": { + "originator": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "beneficiary": "mtLmjWt1DDxjGhMRmnxcgQqPNGPUzXuDHw", + "amount": 0.002121, + "network": "BTC" + } + }, + "sent_at": "2024-09-02T14:55:56-05:00", + "transfer_state": "PENDING", + "secure_envelope": { + "id": "01J6S9G7GDGNKETY6YDJQC3Z47", + "envelope_id": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5", + "direction": "in", + "remote": "trisa.example.jp", + "reply_to": "01J6S9RJ2APF7C6M10C8NTYVGX", + "payload": "Omjx7x69RRFOcheWgESMKph5befzbENJoFXjgno74FCrCeZx5EoR3w515lR76X0pOqghaXErNir14/GisfSKuyZnwD4re7hbFrQn3nIjqqirKvkFRKf4QIOQv/0DfK/ofc8/3+OLN5YP9Js/5vMp3DcFWqYzB8AvCDGC6AtcNh+7Y6arHlCCXzQfxeI1BZeMN5QGeMSL8Ad3od6Nqy92KVCeSksNv858x7XDiYKTh72Rn/z+11UVw5wc4cKdf536vZQ87v38SNV3k7ASfmT+a8+19HnE2aPy/bYtmEQd94Q2w0+JPF4lB9C8DooMS7ctnOUDSIiY++v4xX4Ty40iOFQOns77E9itfAYQwYyVHoLXJVA9SR5aBYDJse0mhRlJ5KHf0cY7CPQlvtcCRu+rwdYu7U2XFXYXCjYS2a6mB+ozUaZMepcPst1XPqQRW2ZMKP8Q9sCa/0r2XIO9yHksaPt3AbbjfHczEvl44f2NkdpfBAtTYYGUfO441EBieO3NhE6XTWbAHaj8Sxo4DUpvibaENbIuMNksme3WCM6ZJRHJ70us+9PJSA9VEiGRHR64YbZn95iBcH7HAVWPJdPAmfSuRQ0i4LbdFdq33LZG33uJWLP0sK6ncFM+0e1G1S6hRN3hXEEdFhHxuOOq90Vq29mQHbgzrZiHgIKqasutXYU/Tbxcqi1oUZdRAMXIySfAVFVT9672DsQpAoFalKGeSu3kbNTfYTYBpvDFVFxJI/cvn/D64AOzg8feo/9KtJgSPG9QijCyD1hbkii75/ssu1Z8X9mj0Y4kRxS41EimihmQzTE47dxYjGy+W3X9s0H8AMyDmlvTU++5x8qyxLht9s6R83L8sXH+J9/4mLebgIccaaKYqJQZ7pWJoqrujuO1InYBWCUGPdRpHPlKmuMHjhc13j8PhGOrc4ylanOfdxUumUI4nLNlluKpijAZ/lwpNnixNbAu/ZpZUXLGcpgOZgqgBljcLOWq+PKteLhH2SIxt9+bIO8HoWzfpkVRWumuTi1xKQmkrOHW140uYez831Mz0ZDwB4u6aiHouSAu+MAGp/VzA0DmfjTGqD8KccxYZg+Cxye2e2CXJe6xw+AgUTg5bSeAIgwEafZU56BlV5tjdYMrXlcchS4ORGUV1ysMGBc0KIxYuvmciV17aD7R6wUbvgntvSGfvPvcbFqTY06sECgcWVVs8QB5avB7v4nYCDYnTay6Zc6ETE6EO9t+94bKljvAto3RefiFQeCfDnkbFWKHY37ofsTn3Crc+iesMmAzGJvOPkzgcxEjhpoFV7XYPiG0ke31dNFOrb9cZpTZJfi80XZjE6Z/ugQYWrfKjXauPYRbJWAts7TAaz28PxpjTjbdCO3wMCzKlYKnk+yCYwZe2c1Hdz4VEmNFNe30Uf7AH3dW2Q5tjKzn/ghj/zVeVI2bQLwfSKaEQI78Sqg5gXETwgkMCuzjp2850AMndNaep5W1JQ4PcWkLEonMPcdZF9CMIX7WaYFHRkbOuJC5ncC3icnyD0qEC/XWsvEQTR6rzY4vTIIZOgDMbKoZDK4C5kOj5pewohNOuYySQwB6A5hcNtW6Z/uJ4V9vGX+EPzwjTaHbe8GDj++NlzG+FQi1GozS+6vqJU5FCTdhTMzelg5blkozihiUGkkABFsMcn8R2uMvjJ/WebjkeQC3pkRkc+qfyAH+Q2uhSASfVAsKkalBFh3Y9uwwuY1Tl4aHMvmAWvBpbIpP/PI90JhW", + "encryption_key": "vSdEaKmbQUA4hUfbpx2LAi7rfYK3YwVPMt7w0M0wHWI6sPTlLI863Bgagja7pP3TAq6dTuwXnT0jxbW/I6i2LYshvUbkHJIl/6nddGbJiJzJNboFvVZNFlNYCRDm2T/lOx0PPcuuficHQpVrqZUTT8g9jB3gwkSvCQMVt41g4aKnNGmxze1nVLi3LlmILNfownTxWRkPP4ASbBVZ204qi4c/1EA3AKI0vuSB1I4Sjk2D77/Ui67QTVc5xqdk+AGUON/hkFAa4RSC0DXmNqKBLobPkY3RhK1n1SqmCifjGBsqMdpXPnfAZlibxeB5UssZKK+1Lcj2viKY3FUPZFCNm5GgUhzxyXH5BCHgpgbpS4JQ9+8uyiUxyG5MpRZrdRowz252b1QiZ12u5lnxDO6RKQGcwRvs2mEst6ikkTHIIoZ13q4aZHsW7VWP3+ogZj/o3EnLxcYJO2PNkoHhLcQya6NSvxxgA8x6oRDObOLnzspavNw7tHf2LwORrd3PYJylNgllpoFK1qUIIdYulESkLuE6jqURIgP8WYUZ3nhMEAaHJbB4G66KoDGam0cmxTKiHGG11QU8SUNVdU8w/eb1NmR5ZSQIJdQA7RyREklZdjsW+mmcHgygxynHjzBe7kiXBNYBWz2CVQxGE+TySIi4ZHE2rxLpSCFAKl3KtLIVG4o=", + "encryption_algorithm": "AES256-GCM", + "valid_hmac": true, + "hmac": "HBzhe6ltfH0cfJ4rQCl8G6LX/eD6aJShh+9mYJ4ExHU=", + "hmac_secret": "KxPZDbLAu7c5ASYiuOLWQwnQi2r7L7925x0MBuNaNQs1vcGa79y3+IF6uprD9MwwYIqZ/5CBaAJusUuVXJ9KXSWVu4SD8yGv6M1HkEPzic7pvywcH6zqjBYupjhWGcit9IfB1oWGMPG7T7s7Ctl7eBLpVyfSI2veXLFYViFoXlUPNovcQ1MgnPNAVaIuAlmHsEC6JIeSsHb1uhpYxapBWvZPYT9g/QKWggyCZDQWohYrscRq+iPa1YpMuJJ77R6Bb3hJzDwE9onZwz8Vnl3V2uY7JNw1WSyGu/chpBO4yMrTvYcvThsoo+lWbnoSmImWX3jHbVK/6+hxlyEnQJ+9YnZHk7a7b21UXOB/lmm58InK5FEaB2wotDSlrwJB7wLT5Y2PtqyamqRYlOtc14owfrfbHcSWe7RoGOhKzRILqgV8zFZv0sg/+uZU5dYm5ef/mRDeLBpfs4qbOHSsNm1CVQSK64SrEyv0wdFL+OSS5l9Vq/CEEgYG7Q7qz+m/ahCurI2o6GoIDvkEfA+5TfoJ3ZUU/l1DGlUiJx5YxQClktVoWfL2W790D5u5uHrI+Qzy00lJ/o/ffx4cgCZiJF+E4xuxNi7ZPByiftciNpXk2a1nyTE9HuB90UULBLwnr8mVzFrwfgkMbof4XlgAxOIsTv6PUPkyOq7Ol4H6B4zY27s=", + "hmac_algorithm": "HMAC-SHA256", + "is_error": false, + "timestamp": "2024-09-02T07:12:34-05:00", + "sealed": true, + "public_key_signature": "SHA256:n/iTnE9b0sP1DQkaDMricHqPKYj0n00IjiaJ7lUmcAs", + "transfer_state": "PENDING", + "original": "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" + } } } } }, "400": { - "description": "Invalid input" - } - } - } - } - }, - "components": { - "schemas": { - "StatusReply": { - "type": "object", - "description": "The response object for the status endpoint.", - "properties": { - "status": { - "type": "string", - "example": "ok", - "enum": [ - "ok", - "not ready", - "unhealthy", - "maintenance" - ], - "description": "The status of the node." - }, - "uptime": { - "type": "string", - "format": "duration", - "example": "25h33m29.4860s", - "description": "The duration since the node was last started." - }, - "version": { - "type": "string", - "format": "semver", - "example": "1.0.0", - "description": "The version of the node." - } - } - }, - "APIAuthentication": { - "type": "object", - "description": "The request object for the authentication endpoint.", - "properties": { - "client_id": { - "type": "string", - "description": "The client ID for authentication." - }, - "client_secret": { - "type": "string", - "description": "The client secret for authentication." - } - } - }, - "LoginReply": { - "type": "object", - "description": "The response object for the authentication endpoint.", - "properties": { - "access_token": { - "type": "string", - "description": "The access token for the authenticated session." - }, - "refresh_token": { - "type": "string", - "description": "The refresh token for obtaining a new access token." - } - } - }, - "ReauthenticateRequest": { - "type": "object", - "description": "The request object for the reauthentication endpoint.", - "properties": { - "refresh_token": { - "type": "string", - "description": "The refresh token for reauthentication." - } - } - }, - "PageQuery": { - "type": "object", - "description": "The request object for paginated endpoints.", - "properties": { - "page_size": { - "type": "integer", - "example": 50, - "description": "The number of items to return per page." - }, - "next_page_token": { - "type": "string", - "format": "base64", - "description": "The token for retrieving the next page of results." - }, - "prev_page_token": { - "type": "string", - "format": "base64", - "description": "The token for retrieving the previous page of results." - } - } - }, - "Account": { - "type": "object", - "description": "The account object.", - "properties": { - "id": { - "type": "string", - "format": "ULID", - "description": "The unique identifier of the account." - }, - "customer_id": { - "type": "string", - "description": "The customer ID associated with the account." - }, - "first_name": { - "type": "string", - "description": "The first name of the account." - }, - "last_name": { - "type": "string", - "description": "The last name of the account." - }, - "travel_address": { - "type": "string", - "description": "The travel address for this account." - }, - "ivms101": { - "type": "string", - "description": "The IVMS101 certificate of the counterparty." - }, - "crypto_addresses": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CryptoAddress" + "description": "Could Not Decrypt Payload", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this payload cannot be decrypted" + } + } } }, - "created": { - "type": "string", - "format": "date-time", - "description": "The date and time when the transaction was created." - }, - "modified": { - "type": "string", - "format": "date-time", - "description": "The date and time when the transaction was last modified." - } - } - }, - "AccountList": { - "type": "object", - "description": "The response object for the accounts endpoint.", - "properties": { - "page": { - "$ref": "#/components/schemas/PageQuery" - }, - "accounts": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Account" + "401": { + "description": "Not Authorized to View Travel Rule Payload", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this endpoint requires authentication" + } + } + } + }, + "404": { + "description": "Transaction Not Found (No Payload Returned)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "transaction not found" + } + } } } } - }, - "CryptoAddress": { - "type": "object", - "description": "The crypto address object.", - "properties": { - "id": { - "type": "string", - "format": "ULID", - "description": "The unique identifier of the crypto address." - }, - "crypto_address": { - "type": "string", - "description": "The crypto address itself." - }, - "network": { - "type": "string", - "description": "The network associated with the crypto address in SIP0044 encoding." - }, - "asset_type": { - "type": "string", - "description": "The asset type with the crypto address." - }, - "tag": { - "type": "string", - "description": "The memo or destination tag associated with the address." + } + }, + "/v1/transactions/{transactionID}/accept": { + "get": { + "summary": "Accept Preview", + "description": "Returns the a preview of the identity and transaction payload that the counterparty sent for compliance review and acceptance. The compliance officer may accept the travel rule information as-is or may make changes to the information and accept the compliance exchange in one step.", + "operationId": "acceptPreview", + "tags": [ + "Transaction Workflows" + ], + "security": [ + { + "bearerAuth": [] + } + ], + "parameters": [ + { + "name": "transactionID", + "in": "path", + "description": "The ID of the transaction to get the accept preview for.", + "required": true, + "schema": { + "type": "string", + "format": "UUID", + "example": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5" + }, + "example": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5" + } + ], + "responses": { + "200": { + "description": "Accept Preview Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Envelope" + }, + "example": { + "id": "01J6S9G7GDGNKETY6YDJQC3Z47", + "envelope_id": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5", + "direction": "in", + "remote": "trisa.example.jp", + "reply_to": "01J6S9RJ2APF7C6M10C8NTYVGX", + "is_error": false, + "identity": { + "originator": { + "originatorPersons": [ + { + "naturalPerson": { + "name": { + "nameIdentifier": [ + { + "primaryIdentifier": "Bond", + "secondaryIdentifier": "James", + "nameIdentifierType": "LEGL" + } + ] + }, + "nationalIdentification": { + "nationalIdentifierType": "DRLC", + "nationalIdentifier": "BOND9211110JA9OB", + "countryOfIssue": "GB" + }, + "customerIdentification": "01J6DJ9F691CF8E9H0V3ET0M0E", + "dateAndPlaceOfBirth": { + "dateOfBirth": "1920-11-11", + "placeOfBirth": "Wattenscheid, Germany" + }, + "countryOfResidence": "GB" + } + } + ], + "accountNumber": [ + "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i" + ] + }, + "beneficiary": { + "beneficiaryPersons": [ + { + "naturalPerson": { + "name": { + "nameIdentifier": [ + { + "primaryIdentifier": "Miura", + "secondaryIdentifier": "Kentaro", + "nameIdentifierType": "LEGL" + } + ], + "localNameIdentifier": [ + { + "primaryIdentifier": "三浦", + "secondaryIdentifier": "建太郎", + "nameIdentifierType": "LEGL" + } + ] + } + } + } + ], + "accountNumber": [ + "mtLmjWt1DDxjGhMRmnxcgQqPNGPUzXuDHw" + ] + }, + "originatingVASP": { + "originatingVASP": { + "legalPerson": { + "name": { + "nameIdentifier": [ + { + "legalPersonName": "High Street Capital Management, LTD", + "legalPersonNameIdentifierType": "LEGL" + } + ] + }, + "nationalIdentification": { + "nationalIdentifier": "GKUH00AIM6DCRXGXVU75", + "nationalIdentifierType": "LEIX" + }, + "countryOfRegistration": "GB" + } + } + }, + "beneficiaryVASP": { + "beneficiaryVASP": { + "legalPerson": { + "name": { + "nameIdentifier": [ + { + "legalPersonName": "Nippon Crypto Exchange, KK", + "legalPersonNameIdentifierType": "LEGL" + } + ], + "localNameIdentifier": [ + { + "legalPersonName": "日本仮想通貨取引所株式会社", + "legalPersonNameIdentifierType": "LEGL" + } + ] + }, + "nationalIdentification": { + "nationalIdentifier": "84-1234567", + "nationalIdentifierType": "TXID", + "registrationAuthority": "RA777777" + }, + "countryOfRegistration": "JP" + } + } + } + }, + "transaction": { + "originator": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "beneficiary": "mtLmjWt1DDxjGhMRmnxcgQqPNGPUzXuDHw", + "amount": 0.002121, + "network": "BTC" + }, + "sent_at": "2024-09-02T14:55:56-05:00", + "transfer_state": "REVIEW", + "secure_envelope": { + "id": "01J6S9G7GDGNKETY6YDJQC3Z47", + "envelope_id": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5", + "direction": "in", + "remote": "trisa.example.jp", + "reply_to": "01J6S9RJ2APF7C6M10C8NTYVGX", + "payload": "Omjx7x69RRFOcheWgESMKph5befzbENJoFXjgno74FCrCeZx5EoR3w515lR76X0pOqghaXErNir14/GisfSKuyZnwD4re7hbFrQn3nIjqqirKvkFRKf4QIOQv/0DfK/ofc8/3+OLN5YP9Js/5vMp3DcFWqYzB8AvCDGC6AtcNh+7Y6arHlCCXzQfxeI1BZeMN5QGeMSL8Ad3od6Nqy92KVCeSksNv858x7XDiYKTh72Rn/z+11UVw5wc4cKdf536vZQ87v38SNV3k7ASfmT+a8+19HnE2aPy/bYtmEQd94Q2w0+JPF4lB9C8DooMS7ctnOUDSIiY++v4xX4Ty40iOFQOns77E9itfAYQwYyVHoLXJVA9SR5aBYDJse0mhRlJ5KHf0cY7CPQlvtcCRu+rwdYu7U2XFXYXCjYS2a6mB+ozUaZMepcPst1XPqQRW2ZMKP8Q9sCa/0r2XIO9yHksaPt3AbbjfHczEvl44f2NkdpfBAtTYYGUfO441EBieO3NhE6XTWbAHaj8Sxo4DUpvibaENbIuMNksme3WCM6ZJRHJ70us+9PJSA9VEiGRHR64YbZn95iBcH7HAVWPJdPAmfSuRQ0i4LbdFdq33LZG33uJWLP0sK6ncFM+0e1G1S6hRN3hXEEdFhHxuOOq90Vq29mQHbgzrZiHgIKqasutXYU/Tbxcqi1oUZdRAMXIySfAVFVT9672DsQpAoFalKGeSu3kbNTfYTYBpvDFVFxJI/cvn/D64AOzg8feo/9KtJgSPG9QijCyD1hbkii75/ssu1Z8X9mj0Y4kRxS41EimihmQzTE47dxYjGy+W3X9s0H8AMyDmlvTU++5x8qyxLht9s6R83L8sXH+J9/4mLebgIccaaKYqJQZ7pWJoqrujuO1InYBWCUGPdRpHPlKmuMHjhc13j8PhGOrc4ylanOfdxUumUI4nLNlluKpijAZ/lwpNnixNbAu/ZpZUXLGcpgOZgqgBljcLOWq+PKteLhH2SIxt9+bIO8HoWzfpkVRWumuTi1xKQmkrOHW140uYez831Mz0ZDwB4u6aiHouSAu+MAGp/VzA0DmfjTGqD8KccxYZg+Cxye2e2CXJe6xw+AgUTg5bSeAIgwEafZU56BlV5tjdYMrXlcchS4ORGUV1ysMGBc0KIxYuvmciV17aD7R6wUbvgntvSGfvPvcbFqTY06sECgcWVVs8QB5avB7v4nYCDYnTay6Zc6ETE6EO9t+94bKljvAto3RefiFQeCfDnkbFWKHY37ofsTn3Crc+iesMmAzGJvOPkzgcxEjhpoFV7XYPiG0ke31dNFOrb9cZpTZJfi80XZjE6Z/ugQYWrfKjXauPYRbJWAts7TAaz28PxpjTjbdCO3wMCzKlYKnk+yCYwZe2c1Hdz4VEmNFNe30Uf7AH3dW2Q5tjKzn/ghj/zVeVI2bQLwfSKaEQI78Sqg5gXETwgkMCuzjp2850AMndNaep5W1JQ4PcWkLEonMPcdZF9CMIX7WaYFHRkbOuJC5ncC3icnyD0qEC/XWsvEQTR6rzY4vTIIZOgDMbKoZDK4C5kOj5pewohNOuYySQwB6A5hcNtW6Z/uJ4V9vGX+EPzwjTaHbe8GDj++NlzG+FQi1GozS+6vqJU5FCTdhTMzelg5blkozihiUGkkABFsMcn8R2uMvjJ/WebjkeQC3pkRkc+qfyAH+Q2uhSASfVAsKkalBFh3Y9uwwuY1Tl4aHMvmAWvBpbIpP/PI90JhW", + "encryption_key": "vSdEaKmbQUA4hUfbpx2LAi7rfYK3YwVPMt7w0M0wHWI6sPTlLI863Bgagja7pP3TAq6dTuwXnT0jxbW/I6i2LYshvUbkHJIl/6nddGbJiJzJNboFvVZNFlNYCRDm2T/lOx0PPcuuficHQpVrqZUTT8g9jB3gwkSvCQMVt41g4aKnNGmxze1nVLi3LlmILNfownTxWRkPP4ASbBVZ204qi4c/1EA3AKI0vuSB1I4Sjk2D77/Ui67QTVc5xqdk+AGUON/hkFAa4RSC0DXmNqKBLobPkY3RhK1n1SqmCifjGBsqMdpXPnfAZlibxeB5UssZKK+1Lcj2viKY3FUPZFCNm5GgUhzxyXH5BCHgpgbpS4JQ9+8uyiUxyG5MpRZrdRowz252b1QiZ12u5lnxDO6RKQGcwRvs2mEst6ikkTHIIoZ13q4aZHsW7VWP3+ogZj/o3EnLxcYJO2PNkoHhLcQya6NSvxxgA8x6oRDObOLnzspavNw7tHf2LwORrd3PYJylNgllpoFK1qUIIdYulESkLuE6jqURIgP8WYUZ3nhMEAaHJbB4G66KoDGam0cmxTKiHGG11QU8SUNVdU8w/eb1NmR5ZSQIJdQA7RyREklZdjsW+mmcHgygxynHjzBe7kiXBNYBWz2CVQxGE+TySIi4ZHE2rxLpSCFAKl3KtLIVG4o=", + "encryption_algorithm": "AES256-GCM", + "valid_hmac": true, + "hmac": "HBzhe6ltfH0cfJ4rQCl8G6LX/eD6aJShh+9mYJ4ExHU=", + "hmac_secret": "KxPZDbLAu7c5ASYiuOLWQwnQi2r7L7925x0MBuNaNQs1vcGa79y3+IF6uprD9MwwYIqZ/5CBaAJusUuVXJ9KXSWVu4SD8yGv6M1HkEPzic7pvywcH6zqjBYupjhWGcit9IfB1oWGMPG7T7s7Ctl7eBLpVyfSI2veXLFYViFoXlUPNovcQ1MgnPNAVaIuAlmHsEC6JIeSsHb1uhpYxapBWvZPYT9g/QKWggyCZDQWohYrscRq+iPa1YpMuJJ77R6Bb3hJzDwE9onZwz8Vnl3V2uY7JNw1WSyGu/chpBO4yMrTvYcvThsoo+lWbnoSmImWX3jHbVK/6+hxlyEnQJ+9YnZHk7a7b21UXOB/lmm58InK5FEaB2wotDSlrwJB7wLT5Y2PtqyamqRYlOtc14owfrfbHcSWe7RoGOhKzRILqgV8zFZv0sg/+uZU5dYm5ef/mRDeLBpfs4qbOHSsNm1CVQSK64SrEyv0wdFL+OSS5l9Vq/CEEgYG7Q7qz+m/ahCurI2o6GoIDvkEfA+5TfoJ3ZUU/l1DGlUiJx5YxQClktVoWfL2W790D5u5uHrI+Qzy00lJ/o/ffx4cgCZiJF+E4xuxNi7ZPByiftciNpXk2a1nyTE9HuB90UULBLwnr8mVzFrwfgkMbof4XlgAxOIsTv6PUPkyOq7Ol4H6B4zY27s=", + "hmac_algorithm": "HMAC-SHA256", + "is_error": false, + "timestamp": "2024-09-02T07:12:34-05:00", + "sealed": true, + "public_key_signature": "SHA256:n/iTnE9b0sP1DQkaDMricHqPKYj0n00IjiaJ7lUmcAs", + "transfer_state": "REVIEW", + "original": "CiQwNTFlZTQyMC0wMzM3LTQ4YWUtYjBkNS1kMjIxMmUzYjViZjESzQlsHjY9lq6eVOJg8/OtKrK0VA3ygKlA2P0KSVc0aaABx6Oe4MvyAfpal00476dZi6ucjsOc/BI5GXxsPbEdwVDXRymHuc86hTgVn7oB0W8G+kXu0mtb7PH1erAqJSot1CxgqXWSnhNUo0w50NAJ/d+5itt/Pw0vZ7mTlEi0fL8Aa1/f8EOBUrMwWAqSBme2l5dJFomMN8fdpo8gm0+rU6g1cOGTM+ZBbrcXHfQuPGq4FueQEensEXXYh6U11z/mtixXZiJMAxLF3CVe517BlRV8dhLU4xtoNcXa2auVYhzRb/hefEEbUFqS7kDwnZjn7D4AqQ9Li9Xh6sSBUBIaSg6AhAs4qRF0Hlbvaz1oXeOnCb8GXe1DrCFPbzEgJ/fpu5/2i8HRtADmqbjo5+tkYhw2kY8vBYh3aRRtkgfztX4gLFwKRKqIV2+X2MY6h0r0KF/2UhsVp8SN0ZJsnjt6sMRtMPefwKHgsyMxGBH9aa0EeSYCDT5m0/0hn50gnSM9Wj5SiF0SmN/p1N8NMdDiibn7IyeQXPGLaoRzdVd+aEakVvIRyTzJS7UUkeBKKMjeaYMsYY4IQPb4uO3hMiB4U7PyqEo/40r9o8jWcauu1xtnDdhg3nAMDMwLnnH1+7eid59BByG4cyySe5Fhlmp3zLAWqBj2prGCXAZK0rh5ay6wb+SjoG9w9+VtlkNOcrjw9TUuV481pdBTXeVOAyV0Y0iXf1InyygkqPt3JyCAIgRihENhYqh8X++PCojXtho7nu3H2Lp+s8TEFUVUjB+9DfsNckws0d2jm8a/auboeun0PP/GBNKzGTjrMdA7P9AROdyG6cwMph3KGBJx9/y0NsqKLS74n7Bw4Ljmr9CAZhXFAwOC7ksZkcMAFcScqubYxWuPPOyqkAIF/gbMmMkKrRIr859Bx2JwUIZ9+BleeDDEasTBrz3o2LAagyPby52kidea+VPlZzS1J/7uwmtRE5oyvak/rYCjFWoo+d81de5y56XMUv5joHuNlWO7hBsRPT7o8XnoqSuwzFe5Xle/ftLGr5JNeg+BHVWFkELbh7i49chi3hx/darruTYcaerjeW03ahgCEYLbafz99ru+MQNeNgUGDmlkJXcyDE1+aB+VBTXiEs3SN2DIVmVC3MLUWLv4o4jZySxXu9D+BDDMjBnrdVpcpGDZSMw2NjIT8nVkME6ADAV5IB1gRM6so5XJgIl4EQI4GZR1/A2THoaJvhdptuvAHjnqY+mbVJa2ZqLfKTlic9FyMOjq+UlNeEjdDNfkO9egy5Hg0uutWVpQBRZsymX9WeKPOsVNnIoKXjNEj4xc4XnGB/x1DW9B2Gq4skZJ6JIjjDx2XiDuXadljoKTyHAn0IDKbo96sP89ujGNAMpXF61beaQb2jwXhJxva2sfxgANoT+iCb5xxM8/uppC95LIPTtWBv2+/be5C+G+PadjY8mFjEnHM2eEtLEgnmN/2nzd8i1wigRedC9CjxjM8/HuhT5MS+UTTFRJNAKJc/gh0EVfTNgp+Wm1a52SgpQqTSHA9lMD7+nyaLUp8evE8q6V5sYN7LqtbgG3b77uGJWNpWtAeCktqt7LJaO3AVmESUNoIzIzo/c2yHqM5calIjwHisjaNXqKRt2z0BqABHANAo7Ayo3xyGeOqZOb7urckMB0jf8RvxQJXtSRkhQbEdjYFLgYcZFopdDAyTOJVgYTgZKWMRkpXljYqcuhEmcG26dHfVW59Y5ZzprW/UZALHmU8kVAFT3KIMecFI1caXVEufgqO9YEeiHqpBX1K2iQrtGics0hUOAV+EGPRleLJD6ChVX8D6f6olr7+bq6g0VK9hibZCdzDmZ36JXZMzbiNy/a0VJ/3oRq2mpPNpXx4Bgt8RoikxtQRWCXnO1+9p00DMMvja9TV1E02ijC+D4IkyPoVZe97J8ZW9OaFKXLiaqP+PvnJREDEPLGDzHDO/T8K7Zd+1tpPFNqGmDkJrav1dYH+UV8HGc9O+MVAQeF6E1HmZS6nafZBsW3Bs7PMxJNC63vdOrx+AndwiZWCH91Cjru1opmqA70/8Q2qAqkAX23iX4d3JlTx9xqXt+jE8q6SFT1wl4tq1xsi/GoRq87EWFWqinWRP82RdJbIbvtLJOyG9WceTG07wuEuYLTtk3dCMr9AL3fqIKnEnojO896crOh2QtCkK1u9KM0DhK7TkBTU+ANhTeCl3sXwM2ZCLaT93zgfJQqA7i6iSkNAtIpEBf8rgG/5e98ocJY9gTC0+7/oDClNxnrVjAWsvg13YrtZVhg5abGqRfoYKcAuGJbaD5lcIsHaiI0pHF7hVkHIgpBRVMyNTYtR0NNKiDiMXIASpCARn3lD+CWUVrOc3tlVxer1MUzautyr7Vr4TKABHW0IhgLaJjYFvUqHCsxJxf31VOQfS+NiZOLbX+oTKkPIGknxsUvoohRnEcau/azIl5Iz3wEjD7OFnsm38N524IRW0326y4GN1JPb0PlrtcdN6gJZOeckuBBbfmB5uL0wD0YSfaQ38VWobAvT6ew0R2gsOQ927BEnb1adKeyNktzQbkGFpEjcdxhegFcl/pIqVkWONUEbYEVC1ycHeHk+WImTSodywJKxPk81/GIKEda5HJwoD2vqtPErtKqh6qHXDtHX1RIm1B2qmcQdYMa+UwW0HqndseIQ/XM4W/9xtlj+lUlnBaoukj8i2TSxNJzpWokWD5X5BZUzUj4ZHEhOgFianasrcTgHqO722E+REz3UlBR6YtAt8HUkAvq+DFKGkmv9FjIQ+4fwOTJZd7Rji6ztzY3b6oIAkNihwySgn7H+xDLDr/GbasMtghyibN4IHT3Pbh+Imp8iGPlXQosYRrI5Le00OR3f6xBC6JL80FYiRj8oiG+rCVevBwpOUmKvVOhRoncYuToK3QN1PdQq6NZGN1KQ7N2unOQBX5kexsjgReSa5U/wXOihVDD59g6BHgoZeYTP2dsComzwm/KMnke2MhOxnZ6MKrN/VTyZ3Ofso82bdGfVbslm5+oUTfExU1VH/oB0UHAVrzN6f8Ixd6td7oUY1QltQQgaWKpNTwzOgtITUFDLVNIQTI1NlIeMjAyNC0wOC0yNVQwOTo0MjowOS4zNTcwMTQ0NjdaWAFiMlNIQTI1NjorQk5WYnBKQUxXQnpsUUlEbytROEdjMmNSL3RRNXcvNEZLckdJK3BDOUJraAI=" + } + } + } + } }, - "travel_address": { - "type": "string", - "description": "The travel address of the crypto address." + "400": { + "description": "Could Not Decrypt Accept Preview", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this payload cannot be decrypted" + } + } + } }, - "created": { - "type": "string", - "format": "date-time", - "description": "The date and time when the crypto address was created." + "401": { + "description": "Not Authorized to View Accept Preview", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this endpoint requires authentication" + } + } + } }, - "modified": { - "type": "string", - "format": "date-time", - "description": "The date and time when the crypto address was last modified." + "404": { + "description": "Transaction Not Found (No Accept Preview)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "transaction not found" + } + } + } } } }, - "CryptoAddressList": { - "type": "object", - "description": "The response object for the crypto addresses endpoint.", - "properties": { - "page": { - "$ref": "#/components/schemas/PageQuery" - }, - "crypto_addresses": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CryptoAddress" + "post": { + "summary": "Accept Transaction", + "description": "This action sends an ACCEPTED secure envelope to the counterparty as the final stage to alert the originator that they may continue with the on-chain transaction. The compliance officer may accept the last payload from the counterparty or may make changes to their local account information and return the changes as accepted to the counterparty.", + "operationId": "acceptTransaction", + "tags": [ + "Transaction Workflows" + ], + "security": [ + { + "bearerAuth": [] + } + ], + "parameters": [ + { + "name": "transactionID", + "in": "path", + "description": "The ID of the transaction to accept.", + "required": true, + "schema": { + "type": "string", + "format": "UUID", + "example": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5" + }, + "example": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5" + } + ], + "requestBody": { + "required": true, + "description": "The envelope to send and set the transfer state to ACCEPTED.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Envelope" + }, + "example": { + "envelope_id": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5", + "identity": { + "originator": { + "originatorPersons": [ + { + "naturalPerson": { + "name": { + "nameIdentifier": [ + { + "primaryIdentifier": "Bond", + "secondaryIdentifier": "James", + "nameIdentifierType": "LEGL" + } + ] + }, + "nationalIdentification": { + "nationalIdentifierType": "DRLC", + "nationalIdentifier": "BOND9211110JA9OB", + "countryOfIssue": "GB" + }, + "customerIdentification": "01J6DJ9F691CF8E9H0V3ET0M0E", + "dateAndPlaceOfBirth": { + "dateOfBirth": "1920-11-11", + "placeOfBirth": "Wattenscheid, Germany" + }, + "countryOfResidence": "GB" + } + } + ], + "accountNumber": [ + "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i" + ] + }, + "beneficiary": { + "beneficiaryPersons": [ + { + "naturalPerson": { + "name": { + "nameIdentifier": [ + { + "primaryIdentifier": "Miura", + "secondaryIdentifier": "Kentaro", + "nameIdentifierType": "LEGL" + } + ], + "localNameIdentifier": [ + { + "primaryIdentifier": "三浦", + "secondaryIdentifier": "建太郎", + "nameIdentifierType": "LEGL" + } + ] + } + } + } + ], + "accountNumber": [ + "mtLmjWt1DDxjGhMRmnxcgQqPNGPUzXuDHw" + ] + }, + "originatingVASP": { + "originatingVASP": { + "legalPerson": { + "name": { + "nameIdentifier": [ + { + "legalPersonName": "High Street Capital Management, LTD", + "legalPersonNameIdentifierType": "LEGL" + } + ] + }, + "nationalIdentification": { + "nationalIdentifier": "GKUH00AIM6DCRXGXVU75", + "nationalIdentifierType": "LEIX" + }, + "countryOfRegistration": "GB" + } + } + }, + "beneficiaryVASP": { + "beneficiaryVASP": { + "legalPerson": { + "name": { + "nameIdentifier": [ + { + "legalPersonName": "Nippon Crypto Exchange, KK", + "legalPersonNameIdentifierType": "LEGL" + } + ], + "localNameIdentifier": [ + { + "legalPersonName": "日本仮想通貨取引所株式会社", + "legalPersonNameIdentifierType": "LEGL" + } + ] + }, + "nationalIdentification": { + "nationalIdentifier": "84-1234567", + "nationalIdentifierType": "TXID", + "registrationAuthority": "RA777777" + }, + "countryOfRegistration": "JP" + } + } + } + }, + "transaction": { + "originator": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "beneficiary": "mtLmjWt1DDxjGhMRmnxcgQqPNGPUzXuDHw", + "amount": 0.002121, + "network": "BTC" + }, + "sent_at": "2024-09-02T14:55:56-05:00", + "received_at": "2024-09-04T23:14:46-05:00" + } } } - } - }, - "Transaction": { - "type": "object", - "description": "The transaction object.", - "properties": { - "id": { - "type": "string", - "format": "UUID", - "description": "The unique identifier of the transaction." - }, - "source": { - "type": "string", - "description": "The source of the transaction. It may be 'local' meaning the transaction was created by the user, or 'remote' meaning it is an incoming message." - }, - "status": { - "type": "string", - "description": "The status of the transaction." - }, - "counterparty": { - "type": "string", - "description": "The counterparty of the transaction." - }, - "counterparty_id": { - "type": "string", - "format": "ULID", - "description": "The unique identifier of the counterparty." - }, - "originator": { - "type": "string", - "description": "The full name of the originator of the transaction." - }, - "originator_address": { - "type": "string", - "description": "The originator's crypto address." - }, - "beneficiary": { - "type": "string", - "description": "The full name of the beneficiary of the transaction." - }, - "beneficiary_address": { - "type": "string", - "description": "The beneficiary's crypto address." - }, - "virtual_asset": { - "type": "string", - "description": "The virtual asset involved in the transaction. This may be a representation of the network or asset type." - }, - "amount": { - "type": "number", - "format": "double", - "description": "The amount of the transaction." + }, + "responses": { + "200": { + "description": "Counterparty Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Envelope" + }, + "example": { + "id": "01J6S9G7GDGNKETY6YDJQC3Z47", + "envelope_id": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5", + "direction": "in", + "remote": "trisa.example.jp", + "reply_to": "01J6S9RJ2APF7C6M10C8NTYVGX", + "is_error": false, + "identity": { + "originator": { + "originatorPersons": [ + { + "naturalPerson": { + "name": { + "nameIdentifier": [ + { + "primaryIdentifier": "Bond", + "secondaryIdentifier": "James", + "nameIdentifierType": "LEGL" + } + ] + }, + "nationalIdentification": { + "nationalIdentifierType": "DRLC", + "nationalIdentifier": "BOND9211110JA9OB", + "countryOfIssue": "GB" + }, + "customerIdentification": "01J6DJ9F691CF8E9H0V3ET0M0E", + "dateAndPlaceOfBirth": { + "dateOfBirth": "1920-11-11", + "placeOfBirth": "Wattenscheid, Germany" + }, + "countryOfResidence": "GB" + } + } + ], + "accountNumber": [ + "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i" + ] + }, + "beneficiary": { + "beneficiaryPersons": [ + { + "naturalPerson": { + "name": { + "nameIdentifier": [ + { + "primaryIdentifier": "Miura", + "secondaryIdentifier": "Kentaro", + "nameIdentifierType": "LEGL" + } + ], + "localNameIdentifier": [ + { + "primaryIdentifier": "三浦", + "secondaryIdentifier": "建太郎", + "nameIdentifierType": "LEGL" + } + ] + } + } + } + ], + "accountNumber": [ + "mtLmjWt1DDxjGhMRmnxcgQqPNGPUzXuDHw" + ] + }, + "originatingVASP": { + "originatingVASP": { + "legalPerson": { + "name": { + "nameIdentifier": [ + { + "legalPersonName": "High Street Capital Management, LTD", + "legalPersonNameIdentifierType": "LEGL" + } + ] + }, + "nationalIdentification": { + "nationalIdentifier": "GKUH00AIM6DCRXGXVU75", + "nationalIdentifierType": "LEIX" + }, + "countryOfRegistration": "GB" + } + } + }, + "beneficiaryVASP": { + "beneficiaryVASP": { + "legalPerson": { + "name": { + "nameIdentifier": [ + { + "legalPersonName": "Nippon Crypto Exchange, KK", + "legalPersonNameIdentifierType": "LEGL" + } + ], + "localNameIdentifier": [ + { + "legalPersonName": "日本仮想通貨取引所株式会社", + "legalPersonNameIdentifierType": "LEGL" + } + ] + }, + "nationalIdentification": { + "nationalIdentifier": "84-1234567", + "nationalIdentifierType": "TXID", + "registrationAuthority": "RA777777" + }, + "countryOfRegistration": "JP" + } + } + } + }, + "transaction": { + "originator": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "beneficiary": "mtLmjWt1DDxjGhMRmnxcgQqPNGPUzXuDHw", + "amount": 0.002121, + "network": "BTC" + }, + "sent_at": "2024-09-02T14:55:56-05:00", + "transfer_state": "ACCEPTED", + "secure_envelope": { + "id": "01J6S9G7GDGNKETY6YDJQC3Z47", + "envelope_id": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5", + "direction": "in", + "remote": "trisa.example.jp", + "reply_to": "01J6S9RJ2APF7C6M10C8NTYVGX", + "payload": "Omjx7x69RRFOcheWgESMKph5befzbENJoFXjgno74FCrCeZx5EoR3w515lR76X0pOqghaXErNir14/GisfSKuyZnwD4re7hbFrQn3nIjqqirKvkFRKf4QIOQv/0DfK/ofc8/3+OLN5YP9Js/5vMp3DcFWqYzB8AvCDGC6AtcNh+7Y6arHlCCXzQfxeI1BZeMN5QGeMSL8Ad3od6Nqy92KVCeSksNv858x7XDiYKTh72Rn/z+11UVw5wc4cKdf536vZQ87v38SNV3k7ASfmT+a8+19HnE2aPy/bYtmEQd94Q2w0+JPF4lB9C8DooMS7ctnOUDSIiY++v4xX4Ty40iOFQOns77E9itfAYQwYyVHoLXJVA9SR5aBYDJse0mhRlJ5KHf0cY7CPQlvtcCRu+rwdYu7U2XFXYXCjYS2a6mB+ozUaZMepcPst1XPqQRW2ZMKP8Q9sCa/0r2XIO9yHksaPt3AbbjfHczEvl44f2NkdpfBAtTYYGUfO441EBieO3NhE6XTWbAHaj8Sxo4DUpvibaENbIuMNksme3WCM6ZJRHJ70us+9PJSA9VEiGRHR64YbZn95iBcH7HAVWPJdPAmfSuRQ0i4LbdFdq33LZG33uJWLP0sK6ncFM+0e1G1S6hRN3hXEEdFhHxuOOq90Vq29mQHbgzrZiHgIKqasutXYU/Tbxcqi1oUZdRAMXIySfAVFVT9672DsQpAoFalKGeSu3kbNTfYTYBpvDFVFxJI/cvn/D64AOzg8feo/9KtJgSPG9QijCyD1hbkii75/ssu1Z8X9mj0Y4kRxS41EimihmQzTE47dxYjGy+W3X9s0H8AMyDmlvTU++5x8qyxLht9s6R83L8sXH+J9/4mLebgIccaaKYqJQZ7pWJoqrujuO1InYBWCUGPdRpHPlKmuMHjhc13j8PhGOrc4ylanOfdxUumUI4nLNlluKpijAZ/lwpNnixNbAu/ZpZUXLGcpgOZgqgBljcLOWq+PKteLhH2SIxt9+bIO8HoWzfpkVRWumuTi1xKQmkrOHW140uYez831Mz0ZDwB4u6aiHouSAu+MAGp/VzA0DmfjTGqD8KccxYZg+Cxye2e2CXJe6xw+AgUTg5bSeAIgwEafZU56BlV5tjdYMrXlcchS4ORGUV1ysMGBc0KIxYuvmciV17aD7R6wUbvgntvSGfvPvcbFqTY06sECgcWVVs8QB5avB7v4nYCDYnTay6Zc6ETE6EO9t+94bKljvAto3RefiFQeCfDnkbFWKHY37ofsTn3Crc+iesMmAzGJvOPkzgcxEjhpoFV7XYPiG0ke31dNFOrb9cZpTZJfi80XZjE6Z/ugQYWrfKjXauPYRbJWAts7TAaz28PxpjTjbdCO3wMCzKlYKnk+yCYwZe2c1Hdz4VEmNFNe30Uf7AH3dW2Q5tjKzn/ghj/zVeVI2bQLwfSKaEQI78Sqg5gXETwgkMCuzjp2850AMndNaep5W1JQ4PcWkLEonMPcdZF9CMIX7WaYFHRkbOuJC5ncC3icnyD0qEC/XWsvEQTR6rzY4vTIIZOgDMbKoZDK4C5kOj5pewohNOuYySQwB6A5hcNtW6Z/uJ4V9vGX+EPzwjTaHbe8GDj++NlzG+FQi1GozS+6vqJU5FCTdhTMzelg5blkozihiUGkkABFsMcn8R2uMvjJ/WebjkeQC3pkRkc+qfyAH+Q2uhSASfVAsKkalBFh3Y9uwwuY1Tl4aHMvmAWvBpbIpP/PI90JhW", + "encryption_key": "vSdEaKmbQUA4hUfbpx2LAi7rfYK3YwVPMt7w0M0wHWI6sPTlLI863Bgagja7pP3TAq6dTuwXnT0jxbW/I6i2LYshvUbkHJIl/6nddGbJiJzJNboFvVZNFlNYCRDm2T/lOx0PPcuuficHQpVrqZUTT8g9jB3gwkSvCQMVt41g4aKnNGmxze1nVLi3LlmILNfownTxWRkPP4ASbBVZ204qi4c/1EA3AKI0vuSB1I4Sjk2D77/Ui67QTVc5xqdk+AGUON/hkFAa4RSC0DXmNqKBLobPkY3RhK1n1SqmCifjGBsqMdpXPnfAZlibxeB5UssZKK+1Lcj2viKY3FUPZFCNm5GgUhzxyXH5BCHgpgbpS4JQ9+8uyiUxyG5MpRZrdRowz252b1QiZ12u5lnxDO6RKQGcwRvs2mEst6ikkTHIIoZ13q4aZHsW7VWP3+ogZj/o3EnLxcYJO2PNkoHhLcQya6NSvxxgA8x6oRDObOLnzspavNw7tHf2LwORrd3PYJylNgllpoFK1qUIIdYulESkLuE6jqURIgP8WYUZ3nhMEAaHJbB4G66KoDGam0cmxTKiHGG11QU8SUNVdU8w/eb1NmR5ZSQIJdQA7RyREklZdjsW+mmcHgygxynHjzBe7kiXBNYBWz2CVQxGE+TySIi4ZHE2rxLpSCFAKl3KtLIVG4o=", + "encryption_algorithm": "AES256-GCM", + "valid_hmac": true, + "hmac": "HBzhe6ltfH0cfJ4rQCl8G6LX/eD6aJShh+9mYJ4ExHU=", + "hmac_secret": "KxPZDbLAu7c5ASYiuOLWQwnQi2r7L7925x0MBuNaNQs1vcGa79y3+IF6uprD9MwwYIqZ/5CBaAJusUuVXJ9KXSWVu4SD8yGv6M1HkEPzic7pvywcH6zqjBYupjhWGcit9IfB1oWGMPG7T7s7Ctl7eBLpVyfSI2veXLFYViFoXlUPNovcQ1MgnPNAVaIuAlmHsEC6JIeSsHb1uhpYxapBWvZPYT9g/QKWggyCZDQWohYrscRq+iPa1YpMuJJ77R6Bb3hJzDwE9onZwz8Vnl3V2uY7JNw1WSyGu/chpBO4yMrTvYcvThsoo+lWbnoSmImWX3jHbVK/6+hxlyEnQJ+9YnZHk7a7b21UXOB/lmm58InK5FEaB2wotDSlrwJB7wLT5Y2PtqyamqRYlOtc14owfrfbHcSWe7RoGOhKzRILqgV8zFZv0sg/+uZU5dYm5ef/mRDeLBpfs4qbOHSsNm1CVQSK64SrEyv0wdFL+OSS5l9Vq/CEEgYG7Q7qz+m/ahCurI2o6GoIDvkEfA+5TfoJ3ZUU/l1DGlUiJx5YxQClktVoWfL2W790D5u5uHrI+Qzy00lJ/o/ffx4cgCZiJF+E4xuxNi7ZPByiftciNpXk2a1nyTE9HuB90UULBLwnr8mVzFrwfgkMbof4XlgAxOIsTv6PUPkyOq7Ol4H6B4zY27s=", + "hmac_algorithm": "HMAC-SHA256", + "is_error": false, + "timestamp": "2024-09-02T07:12:34-05:00", + "sealed": true, + "public_key_signature": "SHA256:n/iTnE9b0sP1DQkaDMricHqPKYj0n00IjiaJ7lUmcAs", + "transfer_state": "ACCEPTED", + "original": "CiQwNTFlZTQyMC0wMzM3LTQ4YWUtYjBkNS1kMjIxMmUzYjViZjESzQlsHjY9lq6eVOJg8/OtKrK0VA3ygKlA2P0KSVc0aaABx6Oe4MvyAfpal00476dZi6ucjsOc/BI5GXxsPbEdwVDXRymHuc86hTgVn7oB0W8G+kXu0mtb7PH1erAqJSot1CxgqXWSnhNUo0w50NAJ/d+5itt/Pw0vZ7mTlEi0fL8Aa1/f8EOBUrMwWAqSBme2l5dJFomMN8fdpo8gm0+rU6g1cOGTM+ZBbrcXHfQuPGq4FueQEensEXXYh6U11z/mtixXZiJMAxLF3CVe517BlRV8dhLU4xtoNcXa2auVYhzRb/hefEEbUFqS7kDwnZjn7D4AqQ9Li9Xh6sSBUBIaSg6AhAs4qRF0Hlbvaz1oXeOnCb8GXe1DrCFPbzEgJ/fpu5/2i8HRtADmqbjo5+tkYhw2kY8vBYh3aRRtkgfztX4gLFwKRKqIV2+X2MY6h0r0KF/2UhsVp8SN0ZJsnjt6sMRtMPefwKHgsyMxGBH9aa0EeSYCDT5m0/0hn50gnSM9Wj5SiF0SmN/p1N8NMdDiibn7IyeQXPGLaoRzdVd+aEakVvIRyTzJS7UUkeBKKMjeaYMsYY4IQPb4uO3hMiB4U7PyqEo/40r9o8jWcauu1xtnDdhg3nAMDMwLnnH1+7eid59BByG4cyySe5Fhlmp3zLAWqBj2prGCXAZK0rh5ay6wb+SjoG9w9+VtlkNOcrjw9TUuV481pdBTXeVOAyV0Y0iXf1InyygkqPt3JyCAIgRihENhYqh8X++PCojXtho7nu3H2Lp+s8TEFUVUjB+9DfsNckws0d2jm8a/auboeun0PP/GBNKzGTjrMdA7P9AROdyG6cwMph3KGBJx9/y0NsqKLS74n7Bw4Ljmr9CAZhXFAwOC7ksZkcMAFcScqubYxWuPPOyqkAIF/gbMmMkKrRIr859Bx2JwUIZ9+BleeDDEasTBrz3o2LAagyPby52kidea+VPlZzS1J/7uwmtRE5oyvak/rYCjFWoo+d81de5y56XMUv5joHuNlWO7hBsRPT7o8XnoqSuwzFe5Xle/ftLGr5JNeg+BHVWFkELbh7i49chi3hx/darruTYcaerjeW03ahgCEYLbafz99ru+MQNeNgUGDmlkJXcyDE1+aB+VBTXiEs3SN2DIVmVC3MLUWLv4o4jZySxXu9D+BDDMjBnrdVpcpGDZSMw2NjIT8nVkME6ADAV5IB1gRM6so5XJgIl4EQI4GZR1/A2THoaJvhdptuvAHjnqY+mbVJa2ZqLfKTlic9FyMOjq+UlNeEjdDNfkO9egy5Hg0uutWVpQBRZsymX9WeKPOsVNnIoKXjNEj4xc4XnGB/x1DW9B2Gq4skZJ6JIjjDx2XiDuXadljoKTyHAn0IDKbo96sP89ujGNAMpXF61beaQb2jwXhJxva2sfxgANoT+iCb5xxM8/uppC95LIPTtWBv2+/be5C+G+PadjY8mFjEnHM2eEtLEgnmN/2nzd8i1wigRedC9CjxjM8/HuhT5MS+UTTFRJNAKJc/gh0EVfTNgp+Wm1a52SgpQqTSHA9lMD7+nyaLUp8evE8q6V5sYN7LqtbgG3b77uGJWNpWtAeCktqt7LJaO3AVmESUNoIzIzo/c2yHqM5calIjwHisjaNXqKRt2z0BqABHANAo7Ayo3xyGeOqZOb7urckMB0jf8RvxQJXtSRkhQbEdjYFLgYcZFopdDAyTOJVgYTgZKWMRkpXljYqcuhEmcG26dHfVW59Y5ZzprW/UZALHmU8kVAFT3KIMecFI1caXVEufgqO9YEeiHqpBX1K2iQrtGics0hUOAV+EGPRleLJD6ChVX8D6f6olr7+bq6g0VK9hibZCdzDmZ36JXZMzbiNy/a0VJ/3oRq2mpPNpXx4Bgt8RoikxtQRWCXnO1+9p00DMMvja9TV1E02ijC+D4IkyPoVZe97J8ZW9OaFKXLiaqP+PvnJREDEPLGDzHDO/T8K7Zd+1tpPFNqGmDkJrav1dYH+UV8HGc9O+MVAQeF6E1HmZS6nafZBsW3Bs7PMxJNC63vdOrx+AndwiZWCH91Cjru1opmqA70/8Q2qAqkAX23iX4d3JlTx9xqXt+jE8q6SFT1wl4tq1xsi/GoRq87EWFWqinWRP82RdJbIbvtLJOyG9WceTG07wuEuYLTtk3dCMr9AL3fqIKnEnojO896crOh2QtCkK1u9KM0DhK7TkBTU+ANhTeCl3sXwM2ZCLaT93zgfJQqA7i6iSkNAtIpEBf8rgG/5e98ocJY9gTC0+7/oDClNxnrVjAWsvg13YrtZVhg5abGqRfoYKcAuGJbaD5lcIsHaiI0pHF7hVkHIgpBRVMyNTYtR0NNKiDiMXIASpCARn3lD+CWUVrOc3tlVxer1MUzautyr7Vr4TKABHW0IhgLaJjYFvUqHCsxJxf31VOQfS+NiZOLbX+oTKkPIGknxsUvoohRnEcau/azIl5Iz3wEjD7OFnsm38N524IRW0326y4GN1JPb0PlrtcdN6gJZOeckuBBbfmB5uL0wD0YSfaQ38VWobAvT6ew0R2gsOQ927BEnb1adKeyNktzQbkGFpEjcdxhegFcl/pIqVkWONUEbYEVC1ycHeHk+WImTSodywJKxPk81/GIKEda5HJwoD2vqtPErtKqh6qHXDtHX1RIm1B2qmcQdYMa+UwW0HqndseIQ/XM4W/9xtlj+lUlnBaoukj8i2TSxNJzpWokWD5X5BZUzUj4ZHEhOgFianasrcTgHqO722E+REz3UlBR6YtAt8HUkAvq+DFKGkmv9FjIQ+4fwOTJZd7Rji6ztzY3b6oIAkNihwySgn7H+xDLDr/GbasMtghyibN4IHT3Pbh+Imp8iGPlXQosYRrI5Le00OR3f6xBC6JL80FYiRj8oiG+rCVevBwpOUmKvVOhRoncYuToK3QN1PdQq6NZGN1KQ7N2unOQBX5kexsjgReSa5U/wXOihVDD59g6BHgoZeYTP2dsComzwm/KMnke2MhOxnZ6MKrN/VTyZ3Ofso82bdGfVbslm5+oUTfExU1VH/oB0UHAVrzN6f8Ixd6td7oUY1QltQQgaWKpNTwzOgtITUFDLVNIQTI1NlIeMjAyNC0wOC0yNVQwOTo0MjowOS4zNTcwMTQ0NjdaWAFiMlNIQTI1NjorQk5WYnBKQUxXQnpsUUlEbytROEdjMmNSL3RRNXcvNEZLckdJK3BDOUJraAI=" + } + } + } + } }, - "last_update": { - "type": "string", - "format": "date-time", - "description": "The date and time when the transaction was last updated." + "400": { + "description": "Could Not Parse Accept Envelope", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "could not parse accept data" + } + } + } }, - "envelope_count": { - "type": "integer", - "description": "The number of secure envelopes associated with the transaction." + "401": { + "description": "Not Authorized to Send Accept", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this endpoint requires authentication" + } + } + } }, - "created": { - "type": "string", - "format": "date-time", - "description": "The date and time when the transaction was created." + "404": { + "description": "Transaction Not Found (Could Not Accept)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "transaction not found" + } + } + } }, - "modified": { - "type": "string", - "format": "date-time", - "description": "The date and time when the transaction was last modified." + "422": { + "description": "Invalid Accept Envelope (Not Sent)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FieldErrors" + }, + "example": { + "success": false, + "error": "2 validation errors occurred", + "errors": [ + { + "field": "identity", + "error": "missing field identity: this field is required" + }, + { + "field": "transaction", + "error": "missing field transaction: this field is required" + } + ] + } + } + } } } - }, - "User": { - "type": "object", - "description": "The user object.", - "properties": { - "id": { - "type": "string", - "format": "ULID", - "description": "The unique identifier of the user." - }, - "name": { - "type": "string", - "description": "The name of the user." - }, - "email": { - "type": "string", - "description": "The email address of the user." - }, - "password": { - "type": "string", - "description": "The password of the user." + } + }, + "/v1/transactions/{transactionID}/reject": { + "post": { + "summary": "Reject Transaction", + "description": "Send a rejection or repair message to the counterparty. A rejection message (retry=false) implies that the counterparty should halt the transaction for compliance failure reasons and not continue. A repair message (retry=true) requests that the counterparty make changes to the identity or transaction payload for compliance purposes and send a new, repaired envelope.", + "operationId": "rejectTransaction", + "tags": [ + "Transaction Workflows" + ], + "security": [ + { + "bearerAuth": [] + } + ], + "parameters": [ + { + "name": "transactionID", + "in": "path", + "description": "The ID of the transaction to send an reject or repair message to the counterparty for.", + "required": true, + "schema": { + "type": "string", + "format": "UUID", + "example": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5" + }, + "example": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5" + } + ], + "requestBody": { + "required": true, + "description": "The rejection/repair code, message, and retry status.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Rejection" + }, + "example": { + "code": "INCOMPLETE_IDENTITY", + "message": "Our jurisdiction requires national identification for both the originator and beneficiary for AML compliance purposes.", + "retry": true + } + } + } + }, + "responses": { + "200": { + "description": "Rejection Sent Sucessfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Envelope" + }, + "example": { + "id": "01J6T8XHM2CAARGRXRDMRS4PDQ", + "envelope_id": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5", + "direction": "in", + "remote": "trisa.example.jp", + "reply_to": "01J6T8W9S1F1XH9C7T9N179726", + "is_error": true, + "error": { + "code": "INCOMPLETE_IDENTITY", + "message": "Our jurisdiction requires national identification for both the originator and beneficiary for AML compliance purposes.", + "retry": true + }, + "timestamp": "2024-09-02T16:06:22-05:00", + "transfer_state": "REPAIR", + "secure_envelope": { + "id": "01J6T8XHM2CAARGRXRDMRS4PDQ", + "envelope_id": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5", + "direction": "in", + "remote": "trisa.example.jp", + "reply_to": "01J6T8W9S1F1XH9C7T9N179726", + "is_error": true, + "error": { + "code": "INCOMPLETE_IDENTITY", + "message": "Our jurisdiction requires national identification for both the originator and beneficiary for AML compliance purposes.", + "retry": true + }, + "timestamp": "2024-09-02T16:06:22-05:00", + "transfer_state": "REPAIR", + "original": "zRtjUdrh1gY37kRCEMb5xsetF+kyKf+5MKmw0MpJtQskFPBqxFND8wQk6tFmzuKLpGRUl1LbLKGOaOlezMxBL1gAqHO3u77qOp8Pt0mcn+Zvg/kWFS2uUvI5jjc" + } + } + } + } }, - "role": { - "type": "string", - "description": "The role of the user." + "400": { + "description": "Could Not Parse Rejection", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "could not parse rejection data" + } + } + } }, - "last_login": { - "type": "string", - "format": "date-time", - "description": "The date and time when the user last logged in." + "401": { + "description": "Not Authorized to Send Reject", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this endpoint requires authentication" + } + } + } }, - "created": { - "type": "string", - "format": "date-time", - "description": "The date and time when the user was created." + "404": { + "description": "Transaction Not Found (Could Not Reject)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "transaction not found" + } + } + } }, - "modified": { - "type": "string", - "format": "date-time", - "description": "The date and time when the user was last modified." + "422": { + "description": "Invalid Rejection (Not Sent)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FieldErrors" + }, + "example": { + "success": false, + "error": "2 validation errors occurred", + "errors": [ + { + "field": "code", + "error": "not a valid TRISA error code as defined by the TRISA protocol buffers" + }, + { + "field": "message", + "error": "missing field message: this field is required" + } + ] + } + } + } } } - }, - "UserList": { - "type": "object", - "description": "The response object for the users endpoint.", - "properties": { - "page": { - "$ref": "#/components/schemas/PageQuery" + } + }, + "/v1/transactions/{transactionID}/repair": { + "get": { + "summary": "Repair Preview", + "description": "Returns a preview of both the error that was received requesting a repair as well as the latest payload to be updated with the repair instructions.", + "operationId": "repairPreview", + "tags": [ + "Transaction Workflows" + ], + "security": [ + { + "bearerAuth": [] + } + ], + "parameters": [ + { + "name": "transactionID", + "in": "path", + "description": "The ID of the transaction to get the repair preview for.", + "required": true, + "schema": { + "type": "string", + "format": "UUID", + "example": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5" + }, + "example": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5" + } + ], + "responses": { + "200": { + "description": "Repair Preview Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Repair" + }, + "example": { + "error": { + "code": "INCOMPLETE_IDENTITY", + "message": "Our jurisdiction requires national identification for both the originator and beneficiary for AML compliance purposes.", + "retry": true + }, + "envelope": { + "id": "01J6S9G7GDGNKETY6YDJQC3Z47", + "envelope_id": "cb9a92a3-dfa6-4ecc-a4cc-c1f8fa94d3fe", + "direction": "in", + "remote": "trisa.example.jp", + "reply_to": "01J6S9RJ2APF7C6M10C8NTYVGX", + "is_error": false, + "identity": { + "originator": { + "originatorPersons": [ + { + "naturalPerson": { + "name": { + "nameIdentifier": [ + { + "primaryIdentifier": "Bond", + "secondaryIdentifier": "James", + "nameIdentifierType": "LEGL" + } + ] + }, + "dateAndPlaceOfBirth": { + "dateOfBirth": "1920-11-11", + "placeOfBirth": "Wattenscheid, Germany" + }, + "countryOfResidence": "GB" + } + } + ], + "accountNumber": [ + "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i" + ] + }, + "beneficiary": { + "beneficiaryPersons": [ + { + "naturalPerson": { + "name": { + "nameIdentifier": [ + { + "primaryIdentifier": "Miura", + "secondaryIdentifier": "Kentaro", + "nameIdentifierType": "LEGL" + } + ], + "localNameIdentifier": [ + { + "primaryIdentifier": "三浦", + "secondaryIdentifier": "建太郎", + "nameIdentifierType": "LEGL" + } + ] + }, + "dateAndPlaceOfBirth": { + "dateOfBirth": "1979-02-14", + "placeOfBirth": "Tokyo, Japan" + }, + "countryOfResidence": "JP" + } + } + ], + "accountNumber": [ + "mtLmjWt1DDxjGhMRmnxcgQqPNGPUzXuDHw" + ] + }, + "originatingVASP": { + "originatingVASP": { + "legalPerson": { + "name": { + "nameIdentifier": [ + { + "legalPersonName": "High Street Capital Management, LTD", + "legalPersonNameIdentifierType": "LEGL" + }, + { + "legalPersonName": "PubCoin", + "legalPersonNameIdentifierType": "TRAD" + } + ] + }, + "geographicAddress": [ + { + "addressType": "BIZZ", + "streetName": "Abbey St.", + "buildingNumber": "51", + "townName": "Nottingham", + "postCode": "NG7 2NZ", + "country": "GB" + } + ], + "nationalIdentification": { + "nationalIdentifier": "GKUH00AIM6DCRXGXVU75", + "nationalIdentifierType": "LEIX" + }, + "countryOfRegistration": "GB" + } + } + }, + "beneficiaryVASP": { + "beneficiaryVASP": { + "legalPerson": { + "name": { + "nameIdentifier": [ + { + "legalPersonName": "Nippon Crypto Exchange, KK", + "legalPersonNameIdentifierType": "LEGL" + } + ], + "localNameIdentifier": [ + { + "legalPersonName": "日本仮想通貨取引所株式会社", + "legalPersonNameIdentifierType": "LEGL" + } + ], + "phoneticNameIdentifier": [ + { + "legalPersonName": "Nihon kasō tsūka torihikisho kabushikigaisha", + "legalPersonNameIdentifierType": "LEGL" + } + ] + }, + "geographicAddress": [ + { + "addressType": "BIZZ", + "addressLine": [ + "滋賀県大津市水明1-34-2", + "520-0531" + ], + "country": "JP" + }, + { + "addressType": "BIZZ", + "addressLine": [ + "1-34-2 SUIMEI OTSU SHI SHIGA KEN", + "520-0531 JAPAN" + ], + "country": "JP" + } + ], + "nationalIdentification": { + "nationalIdentifier": "84-1234567", + "nationalIdentifierType": "TXID", + "registrationAuthority": "RA777777" + }, + "countryOfRegistration": "JP" + } + } + } + }, + "transaction": { + "txid": "44e25bc0ed840f9bf0e58d6227db15192d5b89e79ba4304da16b09703f68ceaf", + "originator": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "beneficiary": "mtCoa72PhLznu2dw639xXfBjC8SUCpyrTv", + "amount": 0.46602501, + "network": "BTC", + "timestamp": "2024-09-01T16:22:41-05:00", + "extra_json": "eyJ2YWx1ZV93aGVuX3RyYW5zYWN0ZWQiOiAiVVNEICQzMiwzODYuNjEifQ==" + }, + "sent_at": "2024-09-01T16:22:41-05:00", + "received_at": "2024-09-06T07:14:29-05:00", + "timestamp": "2024-09-06T07:14:30-05:00", + "public_key_signature": "SHA256:n/iTnE9b0sP1DQkaDMricHqPKYj0n00IjiaJ7lUmcAs", + "transfer_state": "STARTED", + "secure_envelope": { + "id": "01J6S9G7GDGNKETY6YDJQC3Z47", + "envelope_id": "cb9a92a3-dfa6-4ecc-a4cc-c1f8fa94d3fe", + "direction": "out", + "remote": "api.alice.vaspbot.net", + "reply_to": "01J6S9RJ2APF7C6M10C8NTYVGX", + "payload": "Omjx7x69RRFOcheWgESMKph5befzbENJoFXjgno74FCrCeZx5EoR3w515lR76X0pOqghaXErNir14/GisfSKuyZnwD4re7hbFrQn3nIjqqirKvkFRKf4QIOQv/0DfK/ofc8/3+OLN5YP9Js/5vMp3DcFWqYzB8AvCDGC6AtcNh+7Y6arHlCCXzQfxeI1BZeMN5QGeMSL8Ad3od6Nqy92KVCeSksNv858x7XDiYKTh72Rn/z+11UVw5wc4cKdf536vZQ87v38SNV3k7ASfmT+a8+19HnE2aPy/bYtmEQd94Q2w0+JPF4lB9C8DooMS7ctnOUDSIiY++v4xX4Ty40iOFQOns77E9itfAYQwYyVHoLXJVA9SR5aBYDJse0mhRlJ5KHf0cY7CPQlvtcCRu+rwdYu7U2XFXYXCjYS2a6mB+ozUaZMepcPst1XPqQRW2ZMKP8Q9sCa/0r2XIO9yHksaPt3AbbjfHczEvl44f2NkdpfBAtTYYGUfO441EBieO3NhE6XTWbAHaj8Sxo4DUpvibaENbIuMNksme3WCM6ZJRHJ70us+9PJSA9VEiGRHR64YbZn95iBcH7HAVWPJdPAmfSuRQ0i4LbdFdq33LZG33uJWLP0sK6ncFM+0e1G1S6hRN3hXEEdFhHxuOOq90Vq29mQHbgzrZiHgIKqasutXYU/Tbxcqi1oUZdRAMXIySfAVFVT9672DsQpAoFalKGeSu3kbNTfYTYBpvDFVFxJI/cvn/D64AOzg8feo/9KtJgSPG9QijCyD1hbkii75/ssu1Z8X9mj0Y4kRxS41EimihmQzTE47dxYjGy+W3X9s0H8AMyDmlvTU++5x8qyxLht9s6R83L8sXH+J9/4mLebgIccaaKYqJQZ7pWJoqrujuO1InYBWCUGPdRpHPlKmuMHjhc13j8PhGOrc4ylanOfdxUumUI4nLNlluKpijAZ/lwpNnixNbAu/ZpZUXLGcpgOZgqgBljcLOWq+PKteLhH2SIxt9+bIO8HoWzfpkVRWumuTi1xKQmkrOHW140uYez831Mz0ZDwB4u6aiHouSAu+MAGp/VzA0DmfjTGqD8KccxYZg+Cxye2e2CXJe6xw+AgUTg5bSeAIgwEafZU56BlV5tjdYMrXlcchS4ORGUV1ysMGBc0KIxYuvmciV17aD7R6wUbvgntvSGfvPvcbFqTY06sECgcWVVs8QB5avB7v4nYCDYnTay6Zc6ETE6EO9t+94bKljvAto3RefiFQeCfDnkbFWKHY37ofsTn3Crc+iesMmAzGJvOPkzgcxEjhpoFV7XYPiG0ke31dNFOrb9cZpTZJfi80XZjE6Z/ugQYWrfKjXauPYRbJWAts7TAaz28PxpjTjbdCO3wMCzKlYKnk+yCYwZe2c1Hdz4VEmNFNe30Uf7AH3dW2Q5tjKzn/ghj/zVeVI2bQLwfSKaEQI78Sqg5gXETwgkMCuzjp2850AMndNaep5W1JQ4PcWkLEonMPcdZF9CMIX7WaYFHRkbOuJC5ncC3icnyD0qEC/XWsvEQTR6rzY4vTIIZOgDMbKoZDK4C5kOj5pewohNOuYySQwB6A5hcNtW6Z/uJ4V9vGX+EPzwjTaHbe8GDj++NlzG+FQi1GozS+6vqJU5FCTdhTMzelg5blkozihiUGkkABFsMcn8R2uMvjJ/WebjkeQC3pkRkc+qfyAH+Q2uhSASfVAsKkalBFh3Y9uwwuY1Tl4aHMvmAWvBpbIpP/PI90JhW", + "encryption_key": "vSdEaKmbQUA4hUfbpx2LAi7rfYK3YwVPMt7w0M0wHWI6sPTlLI863Bgagja7pP3TAq6dTuwXnT0jxbW/I6i2LYshvUbkHJIl/6nddGbJiJzJNboFvVZNFlNYCRDm2T/lOx0PPcuuficHQpVrqZUTT8g9jB3gwkSvCQMVt41g4aKnNGmxze1nVLi3LlmILNfownTxWRkPP4ASbBVZ204qi4c/1EA3AKI0vuSB1I4Sjk2D77/Ui67QTVc5xqdk+AGUON/hkFAa4RSC0DXmNqKBLobPkY3RhK1n1SqmCifjGBsqMdpXPnfAZlibxeB5UssZKK+1Lcj2viKY3FUPZFCNm5GgUhzxyXH5BCHgpgbpS4JQ9+8uyiUxyG5MpRZrdRowz252b1QiZ12u5lnxDO6RKQGcwRvs2mEst6ikkTHIIoZ13q4aZHsW7VWP3+ogZj/o3EnLxcYJO2PNkoHhLcQya6NSvxxgA8x6oRDObOLnzspavNw7tHf2LwORrd3PYJylNgllpoFK1qUIIdYulESkLuE6jqURIgP8WYUZ3nhMEAaHJbB4G66KoDGam0cmxTKiHGG11QU8SUNVdU8w/eb1NmR5ZSQIJdQA7RyREklZdjsW+mmcHgygxynHjzBe7kiXBNYBWz2CVQxGE+TySIi4ZHE2rxLpSCFAKl3KtLIVG4o=", + "encryption_algorithm": "AES256-GCM", + "valid_hmac": true, + "hmac": "HBzhe6ltfH0cfJ4rQCl8G6LX/eD6aJShh+9mYJ4ExHU=", + "hmac_secret": "KxPZDbLAu7c5ASYiuOLWQwnQi2r7L7925x0MBuNaNQs1vcGa79y3+IF6uprD9MwwYIqZ/5CBaAJusUuVXJ9KXSWVu4SD8yGv6M1HkEPzic7pvywcH6zqjBYupjhWGcit9IfB1oWGMPG7T7s7Ctl7eBLpVyfSI2veXLFYViFoXlUPNovcQ1MgnPNAVaIuAlmHsEC6JIeSsHb1uhpYxapBWvZPYT9g/QKWggyCZDQWohYrscRq+iPa1YpMuJJ77R6Bb3hJzDwE9onZwz8Vnl3V2uY7JNw1WSyGu/chpBO4yMrTvYcvThsoo+lWbnoSmImWX3jHbVK/6+hxlyEnQJ+9YnZHk7a7b21UXOB/lmm58InK5FEaB2wotDSlrwJB7wLT5Y2PtqyamqRYlOtc14owfrfbHcSWe7RoGOhKzRILqgV8zFZv0sg/+uZU5dYm5ef/mRDeLBpfs4qbOHSsNm1CVQSK64SrEyv0wdFL+OSS5l9Vq/CEEgYG7Q7qz+m/ahCurI2o6GoIDvkEfA+5TfoJ3ZUU/l1DGlUiJx5YxQClktVoWfL2W790D5u5uHrI+Qzy00lJ/o/ffx4cgCZiJF+E4xuxNi7ZPByiftciNpXk2a1nyTE9HuB90UULBLwnr8mVzFrwfgkMbof4XlgAxOIsTv6PUPkyOq7Ol4H6B4zY27s=", + "hmac_algorithm": "HMAC-SHA256", + "is_error": false, + "timestamp": "2024-09-02T07:12:34-05:00", + "sealed": true, + "public_key_signature": "SHA256:n/iTnE9b0sP1DQkaDMricHqPKYj0n00IjiaJ7lUmcAs", + "transfer_state": "STARTED", + "original": "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" + } + } + } + } + } }, - "users": { - "type": "array", - "items": { - "$ref": "#/components/schemas/User" + "400": { + "description": "Could Not Decrypt Repair Preview", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this payload cannot be decrypted" + } + } } - } - } - }, - "UserPassword": { - "type": "object", - "description": "The request object for changing a user's password.", - "properties": { - "password": { - "type": "string", - "description": "The new password for the user." }, - "send_email": { - "type": "boolean", - "description": "Indicates whether an email should be sent to the user." + "401": { + "description": "Not Authorized to View Repair Preview", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this endpoint requires authentication" + } + } + } + }, + "404": { + "description": "Transaction Not Found (No Repair Preview)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "transaction not found" + } + } + } } } }, - "Envelope": { - "type": "object", - "description": "The envelope object.", - "properties": { - "envelope_id": { - "type": "string", - "description": "The unique identifier of the envelope." - }, - "error": { - "$ref": "#/components/schemas/Rejection" - }, - "identity": { - "$ref": "#/components/schemas/IdentityPayload" + "post": { + "summary": "Repair Transaction", + "description": "Send a secure envelope containing the repaired identity payload as requested by the counterparty's compliance officer. This moves the transaction state to PENDING locally and to REVIEW for the counterparty.", + "operationId": "repairTransaction", + "tags": [ + "Transaction Workflows" + ], + "security": [ + { + "bearerAuth": [] + } + ], + "parameters": [ + { + "name": "transactionID", + "in": "path", + "description": "The ID of the transaction to repair.", + "required": true, + "schema": { + "type": "string", + "format": "UUID", + "example": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5" + }, + "example": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5" + } + ], + "requestBody": { + "required": true, + "description": "The envelope to send and set the transfer state to REVIEW.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Envelope" + }, + "example": { + "envelope_id": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5", + "identity": { + "originator": { + "originatorPersons": [ + { + "naturalPerson": { + "name": { + "nameIdentifier": [ + { + "primaryIdentifier": "Bond", + "secondaryIdentifier": "James", + "nameIdentifierType": "LEGL" + } + ] + }, + "nationalIdentification": { + "nationalIdentifierType": "DRLC", + "nationalIdentifier": "BOND9211110JA9OB", + "countryOfIssue": "GB" + }, + "customerIdentification": "01J6DJ9F691CF8E9H0V3ET0M0E", + "dateAndPlaceOfBirth": { + "dateOfBirth": "1920-11-11", + "placeOfBirth": "Wattenscheid, Germany" + }, + "countryOfResidence": "GB" + } + } + ], + "accountNumber": [ + "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i" + ] + }, + "beneficiary": { + "beneficiaryPersons": [ + { + "naturalPerson": { + "name": { + "nameIdentifier": [ + { + "primaryIdentifier": "Miura", + "secondaryIdentifier": "Kentaro", + "nameIdentifierType": "LEGL" + } + ], + "localNameIdentifier": [ + { + "primaryIdentifier": "三浦", + "secondaryIdentifier": "建太郎", + "nameIdentifierType": "LEGL" + } + ] + } + } + } + ], + "accountNumber": [ + "mtLmjWt1DDxjGhMRmnxcgQqPNGPUzXuDHw" + ] + }, + "originatingVASP": { + "originatingVASP": { + "legalPerson": { + "name": { + "nameIdentifier": [ + { + "legalPersonName": "High Street Capital Management, LTD", + "legalPersonNameIdentifierType": "LEGL" + } + ] + }, + "nationalIdentification": { + "nationalIdentifier": "GKUH00AIM6DCRXGXVU75", + "nationalIdentifierType": "LEIX" + }, + "countryOfRegistration": "GB" + } + } + }, + "beneficiaryVASP": { + "beneficiaryVASP": { + "legalPerson": { + "name": { + "nameIdentifier": [ + { + "legalPersonName": "Nippon Crypto Exchange, KK", + "legalPersonNameIdentifierType": "LEGL" + } + ], + "localNameIdentifier": [ + { + "legalPersonName": "日本仮想通貨取引所株式会社", + "legalPersonNameIdentifierType": "LEGL" + } + ] + }, + "nationalIdentification": { + "nationalIdentifier": "84-1234567", + "nationalIdentifierType": "TXID", + "registrationAuthority": "RA777777" + }, + "countryOfRegistration": "JP" + } + } + } + }, + "transaction": { + "originator": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "beneficiary": "mtLmjWt1DDxjGhMRmnxcgQqPNGPUzXuDHw", + "amount": 0.002121, + "network": "BTC" + }, + "sent_at": "2024-09-02T14:55:56-05:00", + "received_at": "2024-09-04T23:14:46-05:00" + } + } + } + }, + "responses": { + "200": { + "description": "Counterparty Review Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Envelope" + }, + "example": { + "id": "01J6S9G7GDGNKETY6YDJQC3Z47", + "envelope_id": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5", + "direction": "in", + "remote": "trisa.example.jp", + "reply_to": "01J6S9RJ2APF7C6M10C8NTYVGX", + "is_error": false, + "identity": { + "originator": { + "originatorPersons": [ + { + "naturalPerson": { + "name": { + "nameIdentifier": [ + { + "primaryIdentifier": "Bond", + "secondaryIdentifier": "James", + "nameIdentifierType": "LEGL" + } + ] + }, + "nationalIdentification": { + "nationalIdentifierType": "DRLC", + "nationalIdentifier": "BOND9211110JA9OB", + "countryOfIssue": "GB" + }, + "customerIdentification": "01J6DJ9F691CF8E9H0V3ET0M0E", + "dateAndPlaceOfBirth": { + "dateOfBirth": "1920-11-11", + "placeOfBirth": "Wattenscheid, Germany" + }, + "countryOfResidence": "GB" + } + } + ], + "accountNumber": [ + "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i" + ] + }, + "beneficiary": { + "beneficiaryPersons": [ + { + "naturalPerson": { + "name": { + "nameIdentifier": [ + { + "primaryIdentifier": "Miura", + "secondaryIdentifier": "Kentaro", + "nameIdentifierType": "LEGL" + } + ], + "localNameIdentifier": [ + { + "primaryIdentifier": "三浦", + "secondaryIdentifier": "建太郎", + "nameIdentifierType": "LEGL" + } + ] + } + } + } + ], + "accountNumber": [ + "mtLmjWt1DDxjGhMRmnxcgQqPNGPUzXuDHw" + ] + }, + "originatingVASP": { + "originatingVASP": { + "legalPerson": { + "name": { + "nameIdentifier": [ + { + "legalPersonName": "High Street Capital Management, LTD", + "legalPersonNameIdentifierType": "LEGL" + } + ] + }, + "nationalIdentification": { + "nationalIdentifier": "GKUH00AIM6DCRXGXVU75", + "nationalIdentifierType": "LEIX" + }, + "countryOfRegistration": "GB" + } + } + }, + "beneficiaryVASP": { + "beneficiaryVASP": { + "legalPerson": { + "name": { + "nameIdentifier": [ + { + "legalPersonName": "Nippon Crypto Exchange, KK", + "legalPersonNameIdentifierType": "LEGL" + } + ], + "localNameIdentifier": [ + { + "legalPersonName": "日本仮想通貨取引所株式会社", + "legalPersonNameIdentifierType": "LEGL" + } + ] + }, + "nationalIdentification": { + "nationalIdentifier": "84-1234567", + "nationalIdentifierType": "TXID", + "registrationAuthority": "RA777777" + }, + "countryOfRegistration": "JP" + } + } + } + }, + "pending": { + "envelope_id": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5", + "received_by": "Office of Compliance: Nippon DEX", + "received_at": "2024-09-02T14:55:55-05:00", + "message": "Thank you for your travel rule inquiry, we are processing your request.", + "reply_not_after": "2024-09-10T12:00:00+00:00", + "transaction": { + "originator": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "beneficiary": "mtLmjWt1DDxjGhMRmnxcgQqPNGPUzXuDHw", + "amount": 0.002121, + "network": "BTC" + } + }, + "sent_at": "2024-09-02T14:55:56-05:00", + "transfer_state": "PENDING", + "secure_envelope": { + "id": "01J6S9G7GDGNKETY6YDJQC3Z47", + "envelope_id": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5", + "direction": "in", + "remote": "trisa.example.jp", + "reply_to": "01J6S9RJ2APF7C6M10C8NTYVGX", + "payload": "Omjx7x69RRFOcheWgESMKph5befzbENJoFXjgno74FCrCeZx5EoR3w515lR76X0pOqghaXErNir14/GisfSKuyZnwD4re7hbFrQn3nIjqqirKvkFRKf4QIOQv/0DfK/ofc8/3+OLN5YP9Js/5vMp3DcFWqYzB8AvCDGC6AtcNh+7Y6arHlCCXzQfxeI1BZeMN5QGeMSL8Ad3od6Nqy92KVCeSksNv858x7XDiYKTh72Rn/z+11UVw5wc4cKdf536vZQ87v38SNV3k7ASfmT+a8+19HnE2aPy/bYtmEQd94Q2w0+JPF4lB9C8DooMS7ctnOUDSIiY++v4xX4Ty40iOFQOns77E9itfAYQwYyVHoLXJVA9SR5aBYDJse0mhRlJ5KHf0cY7CPQlvtcCRu+rwdYu7U2XFXYXCjYS2a6mB+ozUaZMepcPst1XPqQRW2ZMKP8Q9sCa/0r2XIO9yHksaPt3AbbjfHczEvl44f2NkdpfBAtTYYGUfO441EBieO3NhE6XTWbAHaj8Sxo4DUpvibaENbIuMNksme3WCM6ZJRHJ70us+9PJSA9VEiGRHR64YbZn95iBcH7HAVWPJdPAmfSuRQ0i4LbdFdq33LZG33uJWLP0sK6ncFM+0e1G1S6hRN3hXEEdFhHxuOOq90Vq29mQHbgzrZiHgIKqasutXYU/Tbxcqi1oUZdRAMXIySfAVFVT9672DsQpAoFalKGeSu3kbNTfYTYBpvDFVFxJI/cvn/D64AOzg8feo/9KtJgSPG9QijCyD1hbkii75/ssu1Z8X9mj0Y4kRxS41EimihmQzTE47dxYjGy+W3X9s0H8AMyDmlvTU++5x8qyxLht9s6R83L8sXH+J9/4mLebgIccaaKYqJQZ7pWJoqrujuO1InYBWCUGPdRpHPlKmuMHjhc13j8PhGOrc4ylanOfdxUumUI4nLNlluKpijAZ/lwpNnixNbAu/ZpZUXLGcpgOZgqgBljcLOWq+PKteLhH2SIxt9+bIO8HoWzfpkVRWumuTi1xKQmkrOHW140uYez831Mz0ZDwB4u6aiHouSAu+MAGp/VzA0DmfjTGqD8KccxYZg+Cxye2e2CXJe6xw+AgUTg5bSeAIgwEafZU56BlV5tjdYMrXlcchS4ORGUV1ysMGBc0KIxYuvmciV17aD7R6wUbvgntvSGfvPvcbFqTY06sECgcWVVs8QB5avB7v4nYCDYnTay6Zc6ETE6EO9t+94bKljvAto3RefiFQeCfDnkbFWKHY37ofsTn3Crc+iesMmAzGJvOPkzgcxEjhpoFV7XYPiG0ke31dNFOrb9cZpTZJfi80XZjE6Z/ugQYWrfKjXauPYRbJWAts7TAaz28PxpjTjbdCO3wMCzKlYKnk+yCYwZe2c1Hdz4VEmNFNe30Uf7AH3dW2Q5tjKzn/ghj/zVeVI2bQLwfSKaEQI78Sqg5gXETwgkMCuzjp2850AMndNaep5W1JQ4PcWkLEonMPcdZF9CMIX7WaYFHRkbOuJC5ncC3icnyD0qEC/XWsvEQTR6rzY4vTIIZOgDMbKoZDK4C5kOj5pewohNOuYySQwB6A5hcNtW6Z/uJ4V9vGX+EPzwjTaHbe8GDj++NlzG+FQi1GozS+6vqJU5FCTdhTMzelg5blkozihiUGkkABFsMcn8R2uMvjJ/WebjkeQC3pkRkc+qfyAH+Q2uhSASfVAsKkalBFh3Y9uwwuY1Tl4aHMvmAWvBpbIpP/PI90JhW", + "encryption_key": "vSdEaKmbQUA4hUfbpx2LAi7rfYK3YwVPMt7w0M0wHWI6sPTlLI863Bgagja7pP3TAq6dTuwXnT0jxbW/I6i2LYshvUbkHJIl/6nddGbJiJzJNboFvVZNFlNYCRDm2T/lOx0PPcuuficHQpVrqZUTT8g9jB3gwkSvCQMVt41g4aKnNGmxze1nVLi3LlmILNfownTxWRkPP4ASbBVZ204qi4c/1EA3AKI0vuSB1I4Sjk2D77/Ui67QTVc5xqdk+AGUON/hkFAa4RSC0DXmNqKBLobPkY3RhK1n1SqmCifjGBsqMdpXPnfAZlibxeB5UssZKK+1Lcj2viKY3FUPZFCNm5GgUhzxyXH5BCHgpgbpS4JQ9+8uyiUxyG5MpRZrdRowz252b1QiZ12u5lnxDO6RKQGcwRvs2mEst6ikkTHIIoZ13q4aZHsW7VWP3+ogZj/o3EnLxcYJO2PNkoHhLcQya6NSvxxgA8x6oRDObOLnzspavNw7tHf2LwORrd3PYJylNgllpoFK1qUIIdYulESkLuE6jqURIgP8WYUZ3nhMEAaHJbB4G66KoDGam0cmxTKiHGG11QU8SUNVdU8w/eb1NmR5ZSQIJdQA7RyREklZdjsW+mmcHgygxynHjzBe7kiXBNYBWz2CVQxGE+TySIi4ZHE2rxLpSCFAKl3KtLIVG4o=", + "encryption_algorithm": "AES256-GCM", + "valid_hmac": true, + "hmac": "HBzhe6ltfH0cfJ4rQCl8G6LX/eD6aJShh+9mYJ4ExHU=", + "hmac_secret": "KxPZDbLAu7c5ASYiuOLWQwnQi2r7L7925x0MBuNaNQs1vcGa79y3+IF6uprD9MwwYIqZ/5CBaAJusUuVXJ9KXSWVu4SD8yGv6M1HkEPzic7pvywcH6zqjBYupjhWGcit9IfB1oWGMPG7T7s7Ctl7eBLpVyfSI2veXLFYViFoXlUPNovcQ1MgnPNAVaIuAlmHsEC6JIeSsHb1uhpYxapBWvZPYT9g/QKWggyCZDQWohYrscRq+iPa1YpMuJJ77R6Bb3hJzDwE9onZwz8Vnl3V2uY7JNw1WSyGu/chpBO4yMrTvYcvThsoo+lWbnoSmImWX3jHbVK/6+hxlyEnQJ+9YnZHk7a7b21UXOB/lmm58InK5FEaB2wotDSlrwJB7wLT5Y2PtqyamqRYlOtc14owfrfbHcSWe7RoGOhKzRILqgV8zFZv0sg/+uZU5dYm5ef/mRDeLBpfs4qbOHSsNm1CVQSK64SrEyv0wdFL+OSS5l9Vq/CEEgYG7Q7qz+m/ahCurI2o6GoIDvkEfA+5TfoJ3ZUU/l1DGlUiJx5YxQClktVoWfL2W790D5u5uHrI+Qzy00lJ/o/ffx4cgCZiJF+E4xuxNi7ZPByiftciNpXk2a1nyTE9HuB90UULBLwnr8mVzFrwfgkMbof4XlgAxOIsTv6PUPkyOq7Ol4H6B4zY27s=", + "hmac_algorithm": "HMAC-SHA256", + "is_error": false, + "timestamp": "2024-09-02T07:12:34-05:00", + "sealed": true, + "public_key_signature": "SHA256:n/iTnE9b0sP1DQkaDMricHqPKYj0n00IjiaJ7lUmcAs", + "transfer_state": "PENDING", + "original": "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" + } + } + } + } }, - "transaction": { - "$ref": "#/components/schemas/Transaction" + "400": { + "description": "Could Not Parse Repair Envelope", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "could not parse repair data" + } + } + } }, - "pending": { - "$ref": "#/components/schemas/Pending" + "401": { + "description": "Not Authorized to Send Repair", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this endpoint requires authentication" + } + } + } }, - "sent_at": { - "type": "string", - "format": "date-time", - "description": "The date and time when the envelope was sent." + "404": { + "description": "Transaction Not Found (Could Not Repair)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "transaction not found" + } + } + } }, - "received_at": { - "type": "string", - "format": "date-time", - "description": "The date and time when the envelope was received." + "422": { + "description": "Invalid Repair Envelope (Not Sent)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FieldErrors" + }, + "example": { + "success": false, + "error": "2 validation errors occurred", + "errors": [ + { + "field": "identity", + "error": "missing field identity: this field is required" + }, + { + "field": "transaction", + "error": "missing field transaction: this field is required" + } + ] + } + } + } } } - }, - "Pending": { - "type": "object", - "description": "The pending envelope object.", - "properties": { - "envelope_id": { - "type": "string", - "description": "The unique identifier of the pending envelope." - }, - "received_by": { - "type": "string", - "description": "The recipient of the pending envelope." - }, - "received_at": { - "type": "string", - "format": "date-time", - "description": "The date and time when the pending envelope was received." + } + }, + "/v1/transactions/{transactionID}/secure-envelopes": { + "get": { + "summary": "List Secure Envelopes", + "description": "List all of the secure envelopes for the specified transaction in a paginated fashion.", + "operationId": "listSecureEnvelopes", + "tags": [ + "Secure Envelopes" + ], + "security": [ + { + "bearerAuth": [] + } + ], + "parameters": [ + { + "name": "transactionID", + "in": "path", + "description": "The ID of the transaction to list secure envelopes for.", + "required": true, + "schema": { + "type": "string", + "format": "UUID", + "example": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5" + }, + "example": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5" }, - "message": { - "type": "string", - "description": "The message associated with the pending envelope." + { + "$ref": "#/components/parameters/decrypt" }, - "reply_not_after": { - "type": "string", - "format": "date-time", - "description": "The date and time when a reply will be returned by." + { + "$ref": "#/components/parameters/archives" }, - "reply_not_before": { - "type": "string", - "format": "date-time", - "description": "The date and time that the response will not be sent before." + { + "$ref": "#/components/parameters/page_size" }, - "extra_json": { - "type": "string", - "description": "Additional JSON data associated with the pending envelope." + { + "$ref": "#/components/parameters/next_page_token" }, - "transaction": { - "$ref": "#/components/schemas/Transaction" + { + "$ref": "#/components/parameters/prev_page_token" } - } - }, - "SecureEnvelope": { - "type": "object", - "description": "The secure envelope object.", - "properties": { - "id": { - "type": "string", - "format": "ULID", - "description": "The unique identifier of the secure envelope." + ], + "responses": { + "200": { + "description": "Successful Envelope Page Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EnvelopeList" + }, + "example": { + "page": { + "page_size": 50 + }, + "is_decrypted": false, + "secure_envelopes": [ + { + "id": "01J6S9G7GDGNKETY6YDJQC3Z47", + "envelope_id": "cb9a92a3-dfa6-4ecc-a4cc-c1f8fa94d3fe", + "direction": "in", + "remote": "trisa.example.jp", + "reply_to": "01J6S9RJ2APF7C6M10C8NTYVGX", + "encryption_algorithm": "AES256-GCM", + "valid_hmac": true, + "hmac_algorithm": "HMAC-SHA256", + "is_error": false, + "timestamp": "2024-09-01T16:22:05-05:00", + "sealed": true, + "public_key_signature": "SHA256:n/iTnE9b0sP1DQkaDMricHqPKYj0n00IjiaJ7lUmcAs", + "transfer_state": "PENDING" + }, + { + "id": "01J6S9RJ2APF7C6M10C8NTYVGX", + "envelope_id": "cb9a92a3-dfa6-4ecc-a4cc-c1f8fa94d3fe", + "direction": "out", + "remote": "trisa.example.jp", + "encryption_algorithm": "AES256-GCM", + "valid_hmac": true, + "hmac_algorithm": "HMAC-SHA256", + "is_error": false, + "timestamp": "2024-09-01T16:22:04-05:00", + "sealed": true, + "public_key_signature": "SHA256:PlW1lnoStGti2umBuaiuPVVkCb16fdKtc1HRtZuOuWM", + "transfer_state": "STARTED" + } + ] + } + } + } }, - "direction": { - "type": "string", - "description": "The direction of the secure envelope (incoming or outgoing)." + "206": { + "description": "Partial Content: Could not Decrypt all Envelopes", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EnvelopeList" + }, + "example": { + "page": { + "page_size": 50 + }, + "is_decrypted": true, + "decrypted_envelopes": [ + { + "id": "01J6S9G7GDGNKETY6YDJQC3Z47", + "envelope_id": "cb9a92a3-dfa6-4ecc-a4cc-c1f8fa94d3fe", + "direction": "in", + "remote": "trisa.example.jp", + "reply_to": "01J6S9RJ2APF7C6M10C8NTYVGX", + "is_error": false, + "sent_at": "2024-09-01T16:21:41-05:00", + "timestamp": "2024-09-01T16:22:05-05:00", + "public_key_signature": "SHA256:n/iTnE9b0sP1DQkaDMricHqPKYj0n00IjiaJ7lUmcAs", + "transfer_state": "PENDING" + }, + { + "id": "01J6S9RJ2APF7C6M10C8NTYVGX", + "envelope_id": "cb9a92a3-dfa6-4ecc-a4cc-c1f8fa94d3fe", + "direction": "out", + "remote": "trisa.example.jp", + "is_error": false, + "sent_at": "2024-09-01T16:21:41-05:00", + "timestamp": "2024-09-01T16:22:04-05:00", + "public_key_signature": "SHA256:PlW1lnoStGti2umBuaiuPVVkCb16fdKtc1HRtZuOuWM", + "transfer_state": "PENDING" + } + ] + } + } + } }, - "envelope_id": { - "type": "string", - "format": "UUID", - "description": "The unique identifier of the envelope associated with the secure envelope." + "400": { + "description": "Bad Envelope List Query", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "could not parse envelope list query request" + } + } + } }, - "payload": { - "type": "string", - "format": "byte", - "description": "The encrypted payload of the secure envelope." + "401": { + "description": "Not Authorized to View Secure Envelopes", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this endpoint requires authentication" + } + } + } }, - "encryption_key": { - "type": "string", - "format": "byte", - "description": "The encryption key used to encrypt the secure envelope." + "404": { + "description": "Transaction Not Found (No Secure Envelopes)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "transaction not found" + } + } + } + } + } + } + }, + "/v1/transactions/{transactionID}/secure-envelopes/{envelopeID}": { + "get": { + "summary": "Secure Envelope Detail", + "description": "Return a detailed record for a single secure envelope specified by the ID reqeusted.", + "operationId": "secureEnvelopeDetail", + "tags": [ + "Secure Envelopes" + ], + "security": [ + { + "bearerAuth": [] + } + ], + "parameters": [ + { + "name": "transactionID", + "in": "path", + "description": "The ID of the transaction the specified secure envelope belongs to.", + "required": true, + "schema": { + "type": "string", + "format": "UUID", + "example": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5" + }, + "example": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5" }, - "encryption_algorithm": { - "type": "string", - "description": "The encryption algorithm used to encrypt the secure envelope." + { + "name": "envelopeID", + "in": "path", + "description": "The ID of the secure envelope to fetch a detailed record of.", + "required": true, + "schema": { + "type": "string", + "format": "ULID", + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" + }, + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" }, - "valid_hmac": { - "type": "boolean", - "description": "Indicates whether the HMAC of the secure envelope is valid." + { + "$ref": "#/components/parameters/decrypt" }, - "hmac": { - "type": "string", - "format": "byte", - "description": "The HMAC of the secure envelope." + { + "$ref": "#/components/parameters/archives" + } + ], + "responses": { + "200": { + "description": "Secure Envelope Retrieved", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Envelope" + }, + "example": { + "id": "01J6S9G7GDGNKETY6YDJQC3Z47", + "envelope_id": "cb9a92a3-dfa6-4ecc-a4cc-c1f8fa94d3fe", + "direction": "out", + "remote": "api.alice.vaspbot.net", + "reply_to": "01J6S9RJ2APF7C6M10C8NTYVGX", + "payload": "Omjx7x69RRFOcheWgESMKph5befzbENJoFXjgno74FCrCeZx5EoR3w515lR76X0pOqghaXErNir14/GisfSKuyZnwD4re7hbFrQn3nIjqqirKvkFRKf4QIOQv/0DfK/ofc8/3+OLN5YP9Js/5vMp3DcFWqYzB8AvCDGC6AtcNh+7Y6arHlCCXzQfxeI1BZeMN5QGeMSL8Ad3od6Nqy92KVCeSksNv858x7XDiYKTh72Rn/z+11UVw5wc4cKdf536vZQ87v38SNV3k7ASfmT+a8+19HnE2aPy/bYtmEQd94Q2w0+JPF4lB9C8DooMS7ctnOUDSIiY++v4xX4Ty40iOFQOns77E9itfAYQwYyVHoLXJVA9SR5aBYDJse0mhRlJ5KHf0cY7CPQlvtcCRu+rwdYu7U2XFXYXCjYS2a6mB+ozUaZMepcPst1XPqQRW2ZMKP8Q9sCa/0r2XIO9yHksaPt3AbbjfHczEvl44f2NkdpfBAtTYYGUfO441EBieO3NhE6XTWbAHaj8Sxo4DUpvibaENbIuMNksme3WCM6ZJRHJ70us+9PJSA9VEiGRHR64YbZn95iBcH7HAVWPJdPAmfSuRQ0i4LbdFdq33LZG33uJWLP0sK6ncFM+0e1G1S6hRN3hXEEdFhHxuOOq90Vq29mQHbgzrZiHgIKqasutXYU/Tbxcqi1oUZdRAMXIySfAVFVT9672DsQpAoFalKGeSu3kbNTfYTYBpvDFVFxJI/cvn/D64AOzg8feo/9KtJgSPG9QijCyD1hbkii75/ssu1Z8X9mj0Y4kRxS41EimihmQzTE47dxYjGy+W3X9s0H8AMyDmlvTU++5x8qyxLht9s6R83L8sXH+J9/4mLebgIccaaKYqJQZ7pWJoqrujuO1InYBWCUGPdRpHPlKmuMHjhc13j8PhGOrc4ylanOfdxUumUI4nLNlluKpijAZ/lwpNnixNbAu/ZpZUXLGcpgOZgqgBljcLOWq+PKteLhH2SIxt9+bIO8HoWzfpkVRWumuTi1xKQmkrOHW140uYez831Mz0ZDwB4u6aiHouSAu+MAGp/VzA0DmfjTGqD8KccxYZg+Cxye2e2CXJe6xw+AgUTg5bSeAIgwEafZU56BlV5tjdYMrXlcchS4ORGUV1ysMGBc0KIxYuvmciV17aD7R6wUbvgntvSGfvPvcbFqTY06sECgcWVVs8QB5avB7v4nYCDYnTay6Zc6ETE6EO9t+94bKljvAto3RefiFQeCfDnkbFWKHY37ofsTn3Crc+iesMmAzGJvOPkzgcxEjhpoFV7XYPiG0ke31dNFOrb9cZpTZJfi80XZjE6Z/ugQYWrfKjXauPYRbJWAts7TAaz28PxpjTjbdCO3wMCzKlYKnk+yCYwZe2c1Hdz4VEmNFNe30Uf7AH3dW2Q5tjKzn/ghj/zVeVI2bQLwfSKaEQI78Sqg5gXETwgkMCuzjp2850AMndNaep5W1JQ4PcWkLEonMPcdZF9CMIX7WaYFHRkbOuJC5ncC3icnyD0qEC/XWsvEQTR6rzY4vTIIZOgDMbKoZDK4C5kOj5pewohNOuYySQwB6A5hcNtW6Z/uJ4V9vGX+EPzwjTaHbe8GDj++NlzG+FQi1GozS+6vqJU5FCTdhTMzelg5blkozihiUGkkABFsMcn8R2uMvjJ/WebjkeQC3pkRkc+qfyAH+Q2uhSASfVAsKkalBFh3Y9uwwuY1Tl4aHMvmAWvBpbIpP/PI90JhW", + "encryption_key": "vSdEaKmbQUA4hUfbpx2LAi7rfYK3YwVPMt7w0M0wHWI6sPTlLI863Bgagja7pP3TAq6dTuwXnT0jxbW/I6i2LYshvUbkHJIl/6nddGbJiJzJNboFvVZNFlNYCRDm2T/lOx0PPcuuficHQpVrqZUTT8g9jB3gwkSvCQMVt41g4aKnNGmxze1nVLi3LlmILNfownTxWRkPP4ASbBVZ204qi4c/1EA3AKI0vuSB1I4Sjk2D77/Ui67QTVc5xqdk+AGUON/hkFAa4RSC0DXmNqKBLobPkY3RhK1n1SqmCifjGBsqMdpXPnfAZlibxeB5UssZKK+1Lcj2viKY3FUPZFCNm5GgUhzxyXH5BCHgpgbpS4JQ9+8uyiUxyG5MpRZrdRowz252b1QiZ12u5lnxDO6RKQGcwRvs2mEst6ikkTHIIoZ13q4aZHsW7VWP3+ogZj/o3EnLxcYJO2PNkoHhLcQya6NSvxxgA8x6oRDObOLnzspavNw7tHf2LwORrd3PYJylNgllpoFK1qUIIdYulESkLuE6jqURIgP8WYUZ3nhMEAaHJbB4G66KoDGam0cmxTKiHGG11QU8SUNVdU8w/eb1NmR5ZSQIJdQA7RyREklZdjsW+mmcHgygxynHjzBe7kiXBNYBWz2CVQxGE+TySIi4ZHE2rxLpSCFAKl3KtLIVG4o=", + "encryption_algorithm": "AES256-GCM", + "valid_hmac": true, + "hmac": "HBzhe6ltfH0cfJ4rQCl8G6LX/eD6aJShh+9mYJ4ExHU=", + "hmac_secret": "KxPZDbLAu7c5ASYiuOLWQwnQi2r7L7925x0MBuNaNQs1vcGa79y3+IF6uprD9MwwYIqZ/5CBaAJusUuVXJ9KXSWVu4SD8yGv6M1HkEPzic7pvywcH6zqjBYupjhWGcit9IfB1oWGMPG7T7s7Ctl7eBLpVyfSI2veXLFYViFoXlUPNovcQ1MgnPNAVaIuAlmHsEC6JIeSsHb1uhpYxapBWvZPYT9g/QKWggyCZDQWohYrscRq+iPa1YpMuJJ77R6Bb3hJzDwE9onZwz8Vnl3V2uY7JNw1WSyGu/chpBO4yMrTvYcvThsoo+lWbnoSmImWX3jHbVK/6+hxlyEnQJ+9YnZHk7a7b21UXOB/lmm58InK5FEaB2wotDSlrwJB7wLT5Y2PtqyamqRYlOtc14owfrfbHcSWe7RoGOhKzRILqgV8zFZv0sg/+uZU5dYm5ef/mRDeLBpfs4qbOHSsNm1CVQSK64SrEyv0wdFL+OSS5l9Vq/CEEgYG7Q7qz+m/ahCurI2o6GoIDvkEfA+5TfoJ3ZUU/l1DGlUiJx5YxQClktVoWfL2W790D5u5uHrI+Qzy00lJ/o/ffx4cgCZiJF+E4xuxNi7ZPByiftciNpXk2a1nyTE9HuB90UULBLwnr8mVzFrwfgkMbof4XlgAxOIsTv6PUPkyOq7Ol4H6B4zY27s=", + "hmac_algorithm": "HMAC-SHA256", + "is_error": false, + "timestamp": "2024-09-02T07:12:34-05:00", + "sealed": true, + "public_key_signature": "SHA256:n/iTnE9b0sP1DQkaDMricHqPKYj0n00IjiaJ7lUmcAs", + "transfer_state": "STARTED", + "original": "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" + } + } + } }, - "hmac_secret": { - "type": "string", - "format": "byte", - "description": "The HMAC secret used to generate the HMAC of the secure envelope." + "206": { + "description": "Partial Content: Could not Decrypt", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SecureEnvelope" + }, + "example": { + "id": "01J6S9G7GDGNKETY6YDJQC3Z47", + "envelope_id": "cb9a92a3-dfa6-4ecc-a4cc-c1f8fa94d3fe", + "direction": "in", + "remote": "trisa.example.jp", + "reply_to": "01J6S9RJ2APF7C6M10C8NTYVGX", + "is_error": false, + "timestamp": "2024-09-06T07:14:30-05:00", + "public_key_signature": "SHA256:n/iTnE9b0sP1DQkaDMricHqPKYj0n00IjiaJ7lUmcAs", + "transfer_state": "STARTED", + "secure_envelope": { + "id": "01J6S9G7GDGNKETY6YDJQC3Z47", + "envelope_id": "cb9a92a3-dfa6-4ecc-a4cc-c1f8fa94d3fe", + "direction": "out", + "remote": "api.alice.vaspbot.net", + "reply_to": "01J6S9RJ2APF7C6M10C8NTYVGX", + "payload": "Omjx7x69RRFOcheWgESMKph5befzbENJoFXjgno74FCrCeZx5EoR3w515lR76X0pOqghaXErNir14/GisfSKuyZnwD4re7hbFrQn3nIjqqirKvkFRKf4QIOQv/0DfK/ofc8/3+OLN5YP9Js/5vMp3DcFWqYzB8AvCDGC6AtcNh+7Y6arHlCCXzQfxeI1BZeMN5QGeMSL8Ad3od6Nqy92KVCeSksNv858x7XDiYKTh72Rn/z+11UVw5wc4cKdf536vZQ87v38SNV3k7ASfmT+a8+19HnE2aPy/bYtmEQd94Q2w0+JPF4lB9C8DooMS7ctnOUDSIiY++v4xX4Ty40iOFQOns77E9itfAYQwYyVHoLXJVA9SR5aBYDJse0mhRlJ5KHf0cY7CPQlvtcCRu+rwdYu7U2XFXYXCjYS2a6mB+ozUaZMepcPst1XPqQRW2ZMKP8Q9sCa/0r2XIO9yHksaPt3AbbjfHczEvl44f2NkdpfBAtTYYGUfO441EBieO3NhE6XTWbAHaj8Sxo4DUpvibaENbIuMNksme3WCM6ZJRHJ70us+9PJSA9VEiGRHR64YbZn95iBcH7HAVWPJdPAmfSuRQ0i4LbdFdq33LZG33uJWLP0sK6ncFM+0e1G1S6hRN3hXEEdFhHxuOOq90Vq29mQHbgzrZiHgIKqasutXYU/Tbxcqi1oUZdRAMXIySfAVFVT9672DsQpAoFalKGeSu3kbNTfYTYBpvDFVFxJI/cvn/D64AOzg8feo/9KtJgSPG9QijCyD1hbkii75/ssu1Z8X9mj0Y4kRxS41EimihmQzTE47dxYjGy+W3X9s0H8AMyDmlvTU++5x8qyxLht9s6R83L8sXH+J9/4mLebgIccaaKYqJQZ7pWJoqrujuO1InYBWCUGPdRpHPlKmuMHjhc13j8PhGOrc4ylanOfdxUumUI4nLNlluKpijAZ/lwpNnixNbAu/ZpZUXLGcpgOZgqgBljcLOWq+PKteLhH2SIxt9+bIO8HoWzfpkVRWumuTi1xKQmkrOHW140uYez831Mz0ZDwB4u6aiHouSAu+MAGp/VzA0DmfjTGqD8KccxYZg+Cxye2e2CXJe6xw+AgUTg5bSeAIgwEafZU56BlV5tjdYMrXlcchS4ORGUV1ysMGBc0KIxYuvmciV17aD7R6wUbvgntvSGfvPvcbFqTY06sECgcWVVs8QB5avB7v4nYCDYnTay6Zc6ETE6EO9t+94bKljvAto3RefiFQeCfDnkbFWKHY37ofsTn3Crc+iesMmAzGJvOPkzgcxEjhpoFV7XYPiG0ke31dNFOrb9cZpTZJfi80XZjE6Z/ugQYWrfKjXauPYRbJWAts7TAaz28PxpjTjbdCO3wMCzKlYKnk+yCYwZe2c1Hdz4VEmNFNe30Uf7AH3dW2Q5tjKzn/ghj/zVeVI2bQLwfSKaEQI78Sqg5gXETwgkMCuzjp2850AMndNaep5W1JQ4PcWkLEonMPcdZF9CMIX7WaYFHRkbOuJC5ncC3icnyD0qEC/XWsvEQTR6rzY4vTIIZOgDMbKoZDK4C5kOj5pewohNOuYySQwB6A5hcNtW6Z/uJ4V9vGX+EPzwjTaHbe8GDj++NlzG+FQi1GozS+6vqJU5FCTdhTMzelg5blkozihiUGkkABFsMcn8R2uMvjJ/WebjkeQC3pkRkc+qfyAH+Q2uhSASfVAsKkalBFh3Y9uwwuY1Tl4aHMvmAWvBpbIpP/PI90JhW", + "encryption_key": "vSdEaKmbQUA4hUfbpx2LAi7rfYK3YwVPMt7w0M0wHWI6sPTlLI863Bgagja7pP3TAq6dTuwXnT0jxbW/I6i2LYshvUbkHJIl/6nddGbJiJzJNboFvVZNFlNYCRDm2T/lOx0PPcuuficHQpVrqZUTT8g9jB3gwkSvCQMVt41g4aKnNGmxze1nVLi3LlmILNfownTxWRkPP4ASbBVZ204qi4c/1EA3AKI0vuSB1I4Sjk2D77/Ui67QTVc5xqdk+AGUON/hkFAa4RSC0DXmNqKBLobPkY3RhK1n1SqmCifjGBsqMdpXPnfAZlibxeB5UssZKK+1Lcj2viKY3FUPZFCNm5GgUhzxyXH5BCHgpgbpS4JQ9+8uyiUxyG5MpRZrdRowz252b1QiZ12u5lnxDO6RKQGcwRvs2mEst6ikkTHIIoZ13q4aZHsW7VWP3+ogZj/o3EnLxcYJO2PNkoHhLcQya6NSvxxgA8x6oRDObOLnzspavNw7tHf2LwORrd3PYJylNgllpoFK1qUIIdYulESkLuE6jqURIgP8WYUZ3nhMEAaHJbB4G66KoDGam0cmxTKiHGG11QU8SUNVdU8w/eb1NmR5ZSQIJdQA7RyREklZdjsW+mmcHgygxynHjzBe7kiXBNYBWz2CVQxGE+TySIi4ZHE2rxLpSCFAKl3KtLIVG4o=", + "encryption_algorithm": "AES256-GCM", + "valid_hmac": true, + "hmac": "HBzhe6ltfH0cfJ4rQCl8G6LX/eD6aJShh+9mYJ4ExHU=", + "hmac_secret": "KxPZDbLAu7c5ASYiuOLWQwnQi2r7L7925x0MBuNaNQs1vcGa79y3+IF6uprD9MwwYIqZ/5CBaAJusUuVXJ9KXSWVu4SD8yGv6M1HkEPzic7pvywcH6zqjBYupjhWGcit9IfB1oWGMPG7T7s7Ctl7eBLpVyfSI2veXLFYViFoXlUPNovcQ1MgnPNAVaIuAlmHsEC6JIeSsHb1uhpYxapBWvZPYT9g/QKWggyCZDQWohYrscRq+iPa1YpMuJJ77R6Bb3hJzDwE9onZwz8Vnl3V2uY7JNw1WSyGu/chpBO4yMrTvYcvThsoo+lWbnoSmImWX3jHbVK/6+hxlyEnQJ+9YnZHk7a7b21UXOB/lmm58InK5FEaB2wotDSlrwJB7wLT5Y2PtqyamqRYlOtc14owfrfbHcSWe7RoGOhKzRILqgV8zFZv0sg/+uZU5dYm5ef/mRDeLBpfs4qbOHSsNm1CVQSK64SrEyv0wdFL+OSS5l9Vq/CEEgYG7Q7qz+m/ahCurI2o6GoIDvkEfA+5TfoJ3ZUU/l1DGlUiJx5YxQClktVoWfL2W790D5u5uHrI+Qzy00lJ/o/ffx4cgCZiJF+E4xuxNi7ZPByiftciNpXk2a1nyTE9HuB90UULBLwnr8mVzFrwfgkMbof4XlgAxOIsTv6PUPkyOq7Ol4H6B4zY27s=", + "hmac_algorithm": "HMAC-SHA256", + "is_error": false, + "timestamp": "2024-09-02T07:12:34-05:00", + "sealed": true, + "public_key_signature": "SHA256:n/iTnE9b0sP1DQkaDMricHqPKYj0n00IjiaJ7lUmcAs", + "transfer_state": "STARTED", + "original": "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" + } + } + } + } }, - "hmac_algorithm": { - "type": "string", - "description": "The HMAC algorithm used to generate the HMAC of the secure envelope." + "400": { + "description": "Bad Envelope Query", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "could not parse envelope query request" + } + } + } }, - "is_error": { - "type": "boolean", - "description": "Indicates whether the secure envelope contains an error." + "401": { + "description": "Not Authorized to View Secure Envelope", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this endpoint requires authentication" + } + } + } }, - "error": { - "type": "object", - "description": "The error object associated with the secure envelope, if any." + "404": { + "description": "Envelope Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "secure envelope not found" + } + } + } + } + } + } + }, + "/v1/users": { + "get": { + "summary": "List Users", + "description": "Return a paginated list of users stored on the Envoy node.", + "operationId": "listUsers", + "tags": [ + "Users" + ], + "security": [ + { + "bearerAuth": [] + } + ], + "parameters": [ + { + "$ref": "#/components/parameters/page_size" }, - "timestamp": { - "type": "string", - "format": "date-time", - "description": "The timestamp of the secure envelope." + { + "$ref": "#/components/parameters/next_page_token" }, - "sealed": { - "type": "boolean", - "description": "Indicates whether the secure envelope is sealed." + { + "$ref": "#/components/parameters/prev_page_token" + } + ], + "responses": { + "200": { + "description": "Successful User Page Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserList" + }, + "example": { + "page": { + "page_size": 50 + }, + "users": [ + { + "id": "01J6TFMSS0P5FWH8MVZDH23D5A", + "name": "Delores Clark", + "email": "dclark@example.com", + "role": "Observer", + "last_login": null, + "created": "2024-09-02T18:03:55-05:00", + "modified": "2024-09-02T18:03:55-05:00" + }, + { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "name": "John Nolan", + "email": "jnolan@example.com", + "role": "Compliance", + "last_login": "2024-09-02T17:53:58-05:00", + "created": "2024-08-28T10:14:43-05:00", + "modified": "2024-08-28T12:23:24-05:00" + } + ] + } + } + } }, - "public_key_signature": { - "type": "string", - "description": "The public key signature of the secure envelope." + "400": { + "description": "Bad User Page Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "could not parse page query request" + } + } + } }, - "original": { - "type": "string", - "format": "byte", - "description": "The original payload of the secure envelope." + "401": { + "description": "Not Authorized to View Users", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this endpoint requires authentication" + } + } + } } } }, - "EnvelopesList": { - "type": "object", - "description": "The response object for the secure envelopes endpoint.", - "properties": { - "page": { - "$ref": "#/components/schemas/PageQuery" + "post": { + "summary": "Create User", + "description": "Create a new envoy user record. When creating a user a new alphanumeric password is created and returned as part of the request. The password isn't shown in any other request. You can reset the password using the change password endpoint.", + "operationId": "createUser", + "tags": [ + "Users" + ], + "security": [ + { + "bearerAuth": [] + } + ], + "requestBody": { + "required": true, + "description": "User information that includes all required writeable fields.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserForm" + }, + "example": { + "name": "John Nolan", + "email": "jnolan@example.com", + "role": "Compliance" + } + } + } + }, + "responses": { + "201": { + "description": "User Created", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/User" + }, + "example": { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "name": "John Nolan", + "email": "jnolan@example.com", + "password": "Rf2H6NEzVktb", + "role": "Compliance", + "last_login": "2024-09-02T17:53:58-05:00", + "created": "2024-08-28T10:14:43-05:00", + "modified": "2024-08-28T12:23:24-05:00" + } + } + } }, - "is_decrypted": { - "type": "boolean", - "description": "Indicates whether the secure envelopes in the list are decrypted." + "400": { + "description": "Bad Create User Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "could not parse user data" + } + } + } }, - "secure_envelopes": { - "type": "array", - "items": { - "$ref": "#/components/schemas/SecureEnvelope" - }, - "description": "The list of secure envelopes." + "401": { + "description": "Not Authorized to Manage Users", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this endpoint requires authentication" + } + } + } }, - "decrypted_envelopes": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Envelope" - }, - "description": "The list of decrypted envelopes." + "422": { + "description": "User Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FieldErrors" + }, + "example": { + "success": false, + "error": "2 validation errors occurred", + "errors": [ + { + "field": "last_login", + "error": "field last_login is a read only field" + }, + { + "field": "email", + "error": "missing email: this field is required" + } + ] + } + } + } } } - }, - "Rejection": { - "type": "object", - "description": "The rejection object.", - "properties": { - "code": { - "type": "string", - "enum": [ - "REJECTED", - "UNKNOWN_WALLET_ADDRESS", - "UNKNOWN_IDENTITY", - "UNKNOWN_ORIGINATOR", - "UNKNOWN_BENEFICIARY", - "UNSUPPORTED_CURRENCY", - "EXCEEDED_TRADING_VOLUME", - "COMPLIANCE_CHECK_FAIL", - "NO_COMPLIANCE", - "HIGH_RISK", - "OUT_OF_NETWORK", - "UNPARSEABLE_IDENTITY", - "UNPARSEABLE_TRANSACTION", - "MISSING_FIELDS", - "INCOMPLETE_IDENTITY" - ], - "description": "TRISA error codes. For a complete list of error codes, visit https://trisa.dev/api/errors/index.html" + } + }, + "/v1/users/{userID}": { + "get": { + "summary": "User Detail", + "description": "Return a detailed record of a user object.", + "operationId": "userDetail", + "tags": [ + "Users" + ], + "security": [ + { + "bearerAuth": [] + } + ], + "parameters": [ + { + "name": "userID", + "in": "path", + "description": "The ID of the user to fetch a detailed record of.", + "required": true, + "schema": { + "type": "string", + "format": "ULID", + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" + }, + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" + } + ], + "responses": { + "200": { + "description": "User Retrieved", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/User" + }, + "example": { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "name": "John Nolan", + "email": "jnolan@example.com", + "role": "Compliance", + "last_login": "2024-09-02T17:53:58-05:00", + "created": "2024-08-28T10:14:43-05:00", + "modified": "2024-08-28T12:23:24-05:00" + } + } + } }, - "message": { - "type": "string", - "description": "The error message of the rejection." + "401": { + "description": "Not Authorized to View User Detail", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this endpoint requires authentication" + } + } + } }, - "request_retry": { - "type": "boolean", - "description": "Indicates whether the request should be retried." + "404": { + "description": "User Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "user not found" + } + } + } } } }, - "TransactionsList": { - "type": "object", - "description": "The response object for the transactions endpoint.", - "properties": { - "page": { - "$ref": "#/components/schemas/PageQuery" - }, - "transactions": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Transaction" + "put": { + "summary": "Update User", + "description": "Update an user record with new information.", + "operationId": "updateUser", + "tags": [ + "Users" + ], + "security": [ + { + "bearerAuth": [] + } + ], + "parameters": [ + { + "name": "userID", + "in": "path", + "description": "The ID of the user to update.", + "required": true, + "schema": { + "type": "string", + "format": "ULID", + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" + }, + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" + } + ], + "requestBody": { + "description": "A complete user record that should reflect the state of the user after the operation.", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserForm" + }, + "example": { + "name": "John Nolan", + "email": "jnolan@example.com", + "role": "Compliance" + } } } - } - }, - "Prepare": { - "type": "object", - "description": "The request object for the prepare transaction endpoint.", - "properties": { - "travel_address": { - "type": "string", - "description": "The travel address of the transaction." + }, + "responses": { + "200": { + "description": "User Updated", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/User" + }, + "example": { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "name": "John Nolan", + "email": "jnolan@example.com", + "role": "Compliance", + "last_login": "2024-09-02T17:53:58-05:00", + "created": "2024-08-28T10:14:43-05:00", + "modified": "2024-08-28T12:23:24-05:00" + } + } + } }, - "originator": { - "$ref": "#/components/schemas/Person" + "401": { + "description": "Not Authorized to Update User", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this endpoint requires authentication" + } + } + } }, - "beneficiary": { - "$ref": "#/components/schemas/Person" + "404": { + "description": "User Not Found (Cannot Update)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "user not found" + } + } + } }, - "transfer": { - "$ref": "#/components/schemas/Transfer" + "422": { + "description": "User Update Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FieldErrors" + }, + "example": { + "success": false, + "error": "2 validation errors occurred", + "errors": [ + { + "field": "password", + "error": "field password is a read only field" + }, + { + "field": "email", + "error": "missing email: this field is required" + } + ] + } + } + } } } }, - "Prepared": { - "type": "object", - "description": "The response object for the prepare transaction endpoint.", - "properties": { - "travel_address": { - "type": "string", - "description": "The travel address of the prepared transaction." - }, - "identity": { - "$ref": "#/components/schemas/IdentityPayload" - }, - "transaction": { - "$ref": "#/components/schemas/Transaction" + "delete": { + "summary": "Delete User", + "description": "Delete a user with the specified ID.", + "operationId": "deleteUser", + "tags": [ + "Users" + ], + "security": [ + { + "bearerAuth": [] } - } - }, - "Person": { - "type": "object", - "description": "The person object.", - "properties": { - "first_name": { - "type": "string", - "description": "The first name of the person." - }, - "last_name": { - "type": "string", - "description": "The last name of the person." - }, - "customer_id": { - "type": "string", - "description": "The customer ID of the person." - }, - "addr_line_1": { - "type": "string", - "description": "The first line of the person's address." - }, - "addr_line_2": { - "type": "string", - "description": "The second line of the person's address." - }, - "city": { - "type": "string", - "description": "The city of the person's address." - }, - "state": { - "type": "string", - "description": "The state of the person's address." - }, - "post_code": { - "type": "string", - "description": "The postal code of the person's address." + ], + "parameters": [ + { + "name": "userID", + "in": "path", + "description": "The ID of the user to delete.", + "required": true, + "schema": { + "type": "string", + "format": "ULID", + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" + }, + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" + } + ], + "responses": { + "200": { + "description": "User Deleted", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Reply" + }, + "example": { + "success": true + } + } + } }, - "country": { - "type": "string", - "description": "The country of the person's address." + "401": { + "description": "Not Authorized to Delete User", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this endpoint requires authentication" + } + } + } }, - "crypto_address": { - "type": "string", - "description": "The crypto address of the person." + "404": { + "description": "User Not Found (Cannot Delete)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "user not found" + } + } + } } } - }, - "Transfer": { - "type": "object", - "description": "The transfer object.", - "properties": { - "amount": { - "type": "number", - "format": "double", - "description": "The amount of the transfer." + } + }, + "/v1/users/{userID}/password": { + "post": { + "summary": "Change Password", + "description": "Change the users password to the password specified in the request.", + "operationId": "changePassword", + "tags": [ + "Users" + ], + "security": [ + { + "bearerAuth": [] + } + ], + "parameters": [ + { + "name": "userID", + "in": "path", + "description": "The ID of the user to change the password for.", + "required": true, + "schema": { + "type": "string", + "format": "ULID", + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" + }, + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" + } + ], + "requestBody": { + "required": true, + "description": "Password change form.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserPassword" + }, + "example": { + "password": "supersecretsquirrel", + "send_email": false + } + } + } + }, + "responses": { + "200": { + "description": "Password Changed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Reply" + }, + "example": { + "success": true + } + } + } }, - "network": { - "type": "string", - "description": "The network of the transfer." + "400": { + "description": "Bad Change Password Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "could not parse password change request" + } + } + } }, - "asset_type": { - "type": "string", - "description": "The type of the virtual asset involved in the transfer." + "401": { + "description": "Not Authorized to Change User Password", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this endpoint requires authentication" + } + } + } }, - "transaction_id": { - "type": "string", - "description": "The unique identifier of the transfer transaction." + "404": { + "description": "User Not Found (Could not Change Password)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "user not found" + } + } + } }, - "tag": { - "type": "string", - "description": "The tag associated with the transfer." + "422": { + "description": "Change Password Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FieldErrors" + }, + "example": { + "success": false, + "error": "1 validation errors occurred", + "errors": [ + { + "field": "password", + "error": "missing password: this field is required" + } + ] + } + } + } } } - }, - "IdentityPayload": { - "type": "object", - "description": "The identity payload object.", - "properties": { - "originator": { - "$ref": "#/components/schemas/Originator" - }, - "beneficiary": { - "$ref": "#/components/schemas/Beneficiary" + } + }, + "/v1/apikeys": { + "get": { + "summary": "List API Keys", + "description": "Return a paginated list of api keys stored on the Envoy node.", + "operationId": "listAPIKeys", + "tags": [ + "API Keys" + ], + "security": [ + { + "bearerAuth": [] + } + ], + "parameters": [ + { + "$ref": "#/components/parameters/page_size" }, - "originating_vasp": { - "$ref": "#/components/schemas/OriginatingVasp" + { + "$ref": "#/components/parameters/next_page_token" }, - "beneficiary_vasp": { - "$ref": "#/components/schemas/BeneficiaryVasp" + { + "$ref": "#/components/parameters/prev_page_token" + } + ], + "responses": { + "200": { + "description": "Successful API Key Page Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/APIKeyList" + }, + "example": { + "page": { + "page_size": 50 + }, + "api_keys": [ + { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "description": "Angela's Local Development Keys", + "client_id": "kbxiRmtYvLbkYKrlefJoSB", + "permissions": [ + "users:view", + "apikeys:view", + "counterparties:manage", + "counterparties:view", + "accounts:manage", + "accounts:view", + "travelrule:manage", + "travelrule:view", + "config:view", + "pki:view" + ], + "last_seen": "2024-09-02T19:11:04-05:00", + "created": "2024-08-28T10:14:43-05:00", + "modified": "2024-08-28T12:23:24-05:00" + }, + { + "id": "01J6TM56VAFMZ6YCKXHTG5P407", + "description": "Cluster Read Keys", + "client_id": "fhXdLh5CmMh6ooqm1RP7AA", + "permissions": [ + "users:view", + "apikeys:view", + "counterparties:view", + "accounts:view", + "travelrule:view", + "config:view", + "pki:view" + ], + "last_seen": "2024-09-02T19:23:28-05:00", + "created": "2024-08-28T10:14:43-05:00", + "modified": "2024-08-28T12:23:24-05:00" + } + ] + } + } + } }, - "transfer_path": { - "$ref": "#/components/schemas/TransferPath" + "400": { + "description": "Bad API Key Page Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "could not parse page query request" + } + } + } }, - "payload_metadata": { - "$ref": "#/components/schemas/PayloadMetadata" + "401": { + "description": "Not Authorized to View API Keys", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this endpoint requires authentication" + } + } + } } } }, - "Originator": { - "type": "object", - "description": "The originator object.", - "properties": { - "originator_persons": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Person" - }, - "description": "The list of originator persons." - }, - "account_numbers": { - "type": "array", - "items": { - "type": "string" - }, - "description": "The list of account numbers associated with the originator." + "post": { + "summary": "Create API Key", + "description": "Create a new envoy api key. When creating an API key a client ID and secret are generated and are returned in the response. This is the only time the secret is visable to the user; if the secret is lost the key must be revoked and regenerated.", + "operationId": "createAPIKey", + "tags": [ + "API Keys" + ], + "security": [ + { + "bearerAuth": [] } - } - }, - "Beneficiary": { - "type": "object", - "description": "The beneficiary object.", - "properties": { - "beneficiary_persons": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Person" - }, - "description": "The list of beneficiary persons." + ], + "requestBody": { + "required": true, + "description": "API Key information that includes all required writeable fields.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/APIKeyForm" + }, + "example": { + "description": "Taylor's Local Development Keys", + "permissions": [ + "users:view", + "apikeys:view", + "counterparties:manage", + "counterparties:view", + "accounts:manage", + "accounts:view", + "travelrule:manage", + "travelrule:view", + "config:view", + "pki:view" + ] + } + } + } + }, + "responses": { + "201": { + "description": "API Key Created", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/APIKeyCreated" + }, + "example": { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "description": "Automated Reporting", + "client_id": "kbxiRmtYvLbkYKrlefJoSB", + "client_secret": "R4OTqjvlGj02x4PvoPe6bxTopFjQ15QrISG8X3HqD5isWIng", + "permissions": [ + "users:view", + "apikeys:view", + "counterparties:manage", + "counterparties:view", + "accounts:manage", + "accounts:view", + "travelrule:manage", + "travelrule:view", + "config:view", + "pki:view" + ], + "created": "2024-08-28T10:14:43-05:00", + "modified": "2024-08-28T10:14:43-05:00" + } + } + } }, - "account_numbers": { - "type": "array", - "items": { - "type": "string" - }, - "description": "The list of account numbers associated with the beneficiary." + "400": { + "description": "Bad Create API Key Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "could not parse api key data" + } + } + } + }, + "401": { + "description": "Not Authorized to Manage API Keys", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this endpoint requires authentication" + } + } + } + }, + "422": { + "description": "API Key Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FieldErrors" + }, + "example": { + "success": false, + "error": "2 validation errors occurred", + "errors": [ + { + "field": "last_login", + "error": "field last_login is a read only field" + }, + { + "field": "description", + "error": "missing description: this field is required" + } + ] + } + } + } } } - }, - "OriginatingVasp": { - "type": "object", - "description": "The originating VASP object.", - "properties": { - "originating_vasp": { - "$ref": "#/components/schemas/Person" + } + }, + "/v1/apikeys/{keyID}": { + "get": { + "summary": "API Key Detail", + "description": "Return a detailed record of an api key object.", + "operationId": "apiKeyDetail", + "tags": [ + "API Keys" + ], + "security": [ + { + "bearerAuth": [] } - } - }, - "BeneficiaryVasp": { - "type": "object", - "description": "The beneficiary VASP object.", - "properties": { - "beneficiary_vasp": { - "$ref": "#/components/schemas/Person" + ], + "parameters": [ + { + "name": "keyID", + "in": "path", + "description": "The ID of the api key to fetch a detailed record of.", + "required": true, + "schema": { + "type": "string", + "format": "ULID", + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" + }, + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" } - } - }, - "IntermediaryVasp": { - "type": "object", - "description": "The intermediary VASP object.", - "properties": { - "intermediary_vasp": { - "$ref": "#/components/schemas/Person" + ], + "responses": { + "200": { + "description": "API Key Retrieved", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/APIKey" + }, + "example": { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "description": "Overnight Compliance Checks", + "client_id": "kbxiRmtYvLbkYKrlefJoSB", + "permissions": [ + "users:view", + "apikeys:view", + "counterparties:manage", + "counterparties:view", + "accounts:manage", + "accounts:view", + "travelrule:manage", + "travelrule:view", + "config:view", + "pki:view" + ], + "last_seen": "2024-09-02T19:11:04-05:00", + "created": "2024-08-28T10:14:43-05:00", + "modified": "2024-08-28T12:23:24-05:00" + } + } + } }, - "sequence": { - "type": "integer", - "description": "The sequence number of the intermediary VASP in the transfer path." + "401": { + "description": "Not Authorized to View API Key Detail", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this endpoint requires authentication" + } + } + } + }, + "404": { + "description": "API Key Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "api key not found" + } + } + } } } }, - "TransferPath": { - "type": "object", - "description": "The transfer path object.", - "properties": { - "transfer_path": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IntermediaryVasp" - }, - "description": "The list of intermediary VASPs in the transfer path." + "put": { + "summary": "Update API Key", + "description": "Update an api key record with new information.", + "operationId": "updateAPIKey", + "tags": [ + "API Keys" + ], + "security": [ + { + "bearerAuth": [] } - } - }, - "PayloadMetadata": { - "type": "object", - "description": "The metadata object for the identity payload.", - "properties": { - "transliteration_method": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TransliterationMethodCode" + ], + "parameters": [ + { + "name": "keyID", + "in": "path", + "description": "The ID of the api key to update.", + "required": true, + "schema": { + "type": "string", + "format": "ULID", + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" }, - "description": "The list of transliteration methods used in the identity payload." + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" } - } - }, - "TransliterationMethodCode": { - "type": "string", - "enum": [ - "TRANSLITERATION_METHOD_CODE_OTHR", - "TRANSLITERATION_METHOD_CODE_ARAB", - "TRANSLITERATION_METHOD_CODE_ARAN", - "TRANSLITERATION_METHOD_CODE_ARMN", - "TRANSLITERATION_METHOD_CODE_CYRL", - "TRANSLITERATION_METHOD_CODE_DEVA", - "TRANSLITERATION_METHOD_CODE_GEOR", - "TRANSLITERATION_METHOD_CODE_GREK", - "TRANSLITERATION_METHOD_CODE_HANI", - "TRANSLITERATION_METHOD_CODE_HEBR", - "TRANSLITERATION_METHOD_CODE_KANA", - "TRANSLITERATION_METHOD_CODE_KORE", - "TRANSLITERATION_METHOD_CODE_THAI" - ], - "description": "Identifies the national script from which transliteration to Latin script is applied." - }, - "Counterparty": { - "type": "object", - "description": "The counterparty object.", - "properties": { - "id": { - "type": "string", - "format": "ULID", - "description": "The unique identifier of the counterparty." - }, - "source": { - "type": "string", - "description": "The source of the counterparty." - }, - "directory_id": { - "type": "string", - "description": "The unique identifier of the directory that contains the counterparty." - }, - "registered_directory": { - "type": "string", - "description": "The name of the registered directory that contains the counterparty." - }, - "protocol": { - "type": "string", - "description": "The protocol used to communicate with the counterparty." - }, - "common_name": { - "type": "string", - "description": "The common name of the counterparty." - }, - "endpoint": { - "type": "string", - "description": "The endpoint URL of the counterparty." - }, - "travel_address": { - "type": "string", - "description": "The travel address of the counterparty." - }, - "name": { - "type": "string", - "description": "The name of the counterparty." - }, - "website": { - "type": "string", - "description": "The website URL of the counterparty." - }, - "country": { - "type": "string", - "description": "The country of the counterparty." - }, - "business_category": { - "type": "string", - "description": "The business category of the counterparty." + ], + "requestBody": { + "description": "The only field that can be edited on the API key is its description.", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/APIKeyForm" + }, + "example": { + "description": "Production Cluster Keys" + } + } + } + }, + "responses": { + "200": { + "description": "API Key Updated", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/APIKey" + }, + "example": { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "description": "Production Cluster Keys", + "client_id": "kbxiRmtYvLbkYKrlefJoSB", + "permissions": [ + "users:view", + "apikeys:view", + "counterparties:manage", + "counterparties:view", + "accounts:manage", + "accounts:view", + "travelrule:manage", + "travelrule:view", + "config:view", + "pki:view" + ], + "last_seen": "2024-09-02T19:11:04-05:00", + "created": "2024-08-28T10:14:43-05:00", + "modified": "2024-08-28T12:23:24-05:00" + } + } + } }, - "vasp_categories": { - "type": "array", - "items": { - "type": "string" - }, - "description": "The list of VASP categories that the counterparty belongs to." + "401": { + "description": "Not Authorized to Update API Key", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this endpoint requires authentication" + } + } + } }, - "verified_on": { - "type": "string", - "format": "date-time", - "description": "The date and time when the counterparty was verified." + "404": { + "description": "API Key Not Found (Cannot Update)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "api key not found" + } + } + } }, - "ivms101": { - "type": "string", - "description": "The IVMS101 certificate of the counterparty." + "422": { + "description": "API Key Update Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FieldErrors" + }, + "example": { + "success": false, + "error": "2 validation errors occurred", + "errors": [ + { + "field": "client_id", + "error": "field client_id is a read only field" + }, + { + "field": "description", + "error": "missing description: this field is required" + } + ] + } + } + } + } + } + }, + "delete": { + "summary": "Delete API Key", + "description": "Delete an api key with the specified ID.", + "operationId": "deleteAPIKey", + "tags": [ + "API Keys" + ], + "security": [ + { + "bearerAuth": [] + } + ], + "parameters": [ + { + "name": "keyID", + "in": "path", + "description": "The ID of the api key to delete.", + "required": true, + "schema": { + "type": "string", + "format": "ULID", + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" + }, + "example": "01J6DJ9F691CF8E9H0V3ET0M0E" + } + ], + "responses": { + "200": { + "description": "API Key Deleted", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Reply" + }, + "example": { + "success": true + } + } + } }, - "created": { - "type": "string", - "format": "date-time", - "description": "The date and time when the counterparty was created." + "401": { + "description": "Not Authorized to Delete API Key", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this endpoint requires authentication" + } + } + } }, - "modified": { - "type": "string", - "format": "date-time", - "description": "The date and time when the counterparty was last modified." + "404": { + "description": "API Key Not Found (Cannot Delete)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "api key not found" + } + } + } } } - }, - "CounterpartyList": { - "type": "object", - "description": "The response object for the counterparties endpoint.", - "properties": { - "page": { - "$ref": "#/components/schemas/PageQuery" + } + }, + "/v1/status": { + "get": { + "summary": "Status", + "description": "Status check endpoint that can be used as a heartbeat or debugging tool.", + "operationId": "status", + "tags": [ + "Utilities" + ], + "responses": { + "200": { + "description": "Online Status Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StatusReply" + }, + "example": { + "status": "ok", + "uptime": "537h4m32.628679622s", + "version": "1.0.0" + } + } + } }, - "counterparties": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Counterparty" + "400": { + "description": "Bad Request (Should Never Occur)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "something weird happened" + } + } + } + }, + "503": { + "description": "Unavailable Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StatusReply" + }, + "example": { + "status": "maintenance", + "uptime": "10m32.5622s", + "version": "1.0.0" + } + } } } } - }, - "TravelAddress": { - "type": "object", - "description": "The travel address object.", - "properties": { - "encoded": { - "type": "string", - "description": "The encoded travel address." + } + }, + "/v1/utilities/travel-address/encode": { + "post": { + "summary": "Encode Travel Address", + "description": "Encode a url without the 'https://' scheme, ensuring the '?t=i' query parameter is attached to the end.", + "operationId": "encodeTravelAddress", + "tags": [ + "Utilities" + ], + "requestBody": { + "required": true, + "description": "The decoded travel address to encode.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TravelAddress" + }, + "example": { + "decoded": "beneficiary.com?t=i" + } + } + } + }, + "responses": { + "200": { + "description": "Travel Address Encoded", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TravelAddress" + }, + "example": { + "encoded": "ta32sgxYnHqYMeJSfyng1wA3s7zCw5Q48v", + "decoded": "beneficiary.com?t=i" + } + } + } }, - "decoded": { - "type": "string", - "description": "The decoded travel address." + "400": { + "description": "Bad Encode Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "could not parse travel address request" + } + } + } + }, + "401": { + "description": "Not Authorized to Encode Travel Address", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this endpoint requires authentication" + } + } + } + }, + "422": { + "description": "Encode Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FieldErrors" + }, + "example": { + "success": false, + "error": "1 validation errors occurred", + "errors": [ + { + "field": "decoded", + "error": "missing decoded: this field is required" + } + ] + } + } + } } } } }, - "securitySchemes": { - "bearer-auth": { - "type": "http", - "scheme": "bearer", - "bearerFormat": "JWT" + "/v1/utilities/travel-address/decode": { + "post": { + "summary": "Decode Travel Address", + "description": "Decode a travel address to reveal its contents.", + "operationId": "decodeTravelAddress", + "tags": [ + "Utilities" + ], + "requestBody": { + "required": true, + "description": "The encoded travel address to decode.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TravelAddress" + }, + "example": { + "encoded": "ta32sgxYnHqYMeJSfyng1wA3s7zCw5Q48v" + } + } + } + }, + "responses": { + "200": { + "description": "Travel Address Decoded", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TravelAddress" + }, + "example": { + "encoded": "ta32sgxYnHqYMeJSfyng1wA3s7zCw5Q48v", + "decoded": "beneficiary.com?t=i" + } + } + } + }, + "400": { + "description": "Bad Decode Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "could not parse travel address request" + } + } + } + }, + "401": { + "description": "Not Authorized to Decode Travel Address", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this endpoint requires authentication" + } + } + } + }, + "422": { + "description": "Decode Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FieldErrors" + }, + "example": { + "success": false, + "error": "1 validation errors occurred", + "errors": [ + { + "field": "encoded", + "error": "missing encoded: this field is required" + } + ] + } + } + } + } + } } } }, - "servers": [ - { - "url": "http://localhost:8000", - "variables": {}, - "description": "Local Development Server" + "webhooks": { + "transferCallback": { + "post": { + "summary": "Transfer Callback", + "description": "When an incoming travel rule transfer/inquiry is received, if a webhook is configured on the Envoy node, the node will make a POST request with the incoming information and expects a reply that can be sent to the initiating counterparty.", + "operationId": "transferCallback", + "tags": [ + "Webhooks" + ], + "requestBody": { + "required": true, + "description": "Callback request contains decrypted secure envelope data and other metadata related to the transfer.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "transaction_id": { + "type": "string", + "format": "uuid", + "description": "The related transaction ID, also the TRISA envelope ID.", + "example": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5" + }, + "timestamp": { + "type": "string", + "format": "date-time", + "description": "The timestamp that the envelope was sent.", + "example": "2024-09-02T20:48:57-05:00" + }, + "counterparty": { + "$ref": "#/components/schemas/Counterparty" + }, + "hmac_signature": { + "type": "string", + "format": "base64", + "description": "The base64 encoded HMAC signature of the secure envelope (if encrypted).", + "example": "HBzhe6ltfH0cfJ4rQCl8G6LX/eD6aJShh+9mYJ4ExHU=" + }, + "public_key_signature": { + "type": "string", + "description": "The public key signature of the keys used to encrypt the payload (if encrypted).", + "example": "SHA256:n/iTnE9b0sP1DQkaDMricHqPKYj0n00IjiaJ7lUmcAs" + }, + "transfer_state": { + "$ref": "#/components/schemas/TransferState" + }, + "error": { + "$ref": "#/components/schemas/TRISAError" + }, + "payload": { + "type": "object", + "description": "The decrypted payload of the secure envelope.", + "properties": { + "identity": { + "$ref": "#/components/schemas/IdentityPayload" + }, + "pending": { + "$ref": "#/components/schemas/PendingPayload" + }, + "transaction": { + "$ref": "#/components/schemas/TransactionPayload" + }, + "sent_at": { + "type": "string", + "format": "date-time", + "description": "The time that the compliance payload was created for non-repudiation purposes.", + "example": "2024-09-02T20:55:37-05:00" + }, + "received_at": { + "type": "string", + "format": "date-time", + "description": "The time that the compliance payload was accepted for non-repudiation purposes.", + "example": "2024-09-02T20:55:37-05:00" + } + }, + "example": {} + } + } + }, + "example": { + "transaction_id": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5", + "timestamp": "2024-09-02T20:48:57-05:00", + "counterparty": { + "id": "01J6DJ9F691CF8E9H0V3ET0M0E", + "source": "gds", + "directory_id": "5154a0aa-502c-4179-a6f2-8b143d59edce", + "registered_directory": "trisatest.net", + "protocol": "trisa", + "common_name": "api.alice.vaspbot.net", + "endpoint": "api.alice.vaspbot.net:443", + "travel_address": "taYgWCfsnPN8hsqUAZWm4TW7WrHU5qZT3GiBPpfSApGSqoPMH1D6kiNRzST5Gz", + "name": "AliceCoin", + "website": "https://alice.vaspbot.net", + "country": "GB", + "business_category": "NON_VASP_ENTITY", + "vasp_categories": [ + "Other" + ], + "ivms101": "EmcKLwoeChpBbGljZSBUcmFkaW5nIENvbXBhbnksIExURBABCg0KCUFsaWNlQ29pbhADEjAIAiILTWFpbiBTdHJlZXQqAzEyM1IFNTU4ODBaClNtYWxsdmlsbGVqAktZggECVVMqAkRF", + "verified_on": "2024-08-28T10:14:43-05:00", + "created": "2024-08-28T10:14:43-05:00", + "modified": "2024-08-28T12:23:24-05:00" + }, + "hmac_signature": "HBzhe6ltfH0cfJ4rQCl8G6LX/eD6aJShh+9mYJ4ExHU=", + "public_key_signature": "SHA256:n/iTnE9b0sP1DQkaDMricHqPKYj0n00IjiaJ7lUmcAs", + "transfer_state": "REVIEW", + "payload": { + "identity": { + "originator": { + "originatorPersons": [ + { + "naturalPerson": { + "name": { + "nameIdentifier": [ + { + "primaryIdentifier": "Bond", + "secondaryIdentifier": "James", + "nameIdentifierType": "LEGL" + } + ] + }, + "nationalIdentification": { + "nationalIdentifierType": "DRLC", + "nationalIdentifier": "BOND9211110JA9OB", + "countryOfIssue": "GB" + }, + "customerIdentification": "01J6DJ9F691CF8E9H0V3ET0M0E", + "dateAndPlaceOfBirth": { + "dateOfBirth": "1920-11-11", + "placeOfBirth": "Wattenscheid, Germany" + }, + "countryOfResidence": "GB" + } + } + ], + "accountNumber": [ + "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i" + ] + }, + "beneficiary": { + "beneficiaryPersons": [ + { + "naturalPerson": { + "name": { + "nameIdentifier": [ + { + "primaryIdentifier": "Miura", + "secondaryIdentifier": "Kentaro", + "nameIdentifierType": "LEGL" + } + ], + "localNameIdentifier": [ + { + "primaryIdentifier": "三浦", + "secondaryIdentifier": "建太郎", + "nameIdentifierType": "LEGL" + } + ] + }, + "nationalIdentification": { + "nationalIdentifierType": "SOCS", + "nationalIdentifier": "0537-73-2271", + "countryOfIssue": "JP" + }, + "customerIdentification": "01J6QNPGSKN2HZGC2F33F3QQRF", + "dateAndPlaceOfBirth": { + "dateOfBirth": "1979-02-14", + "placeOfBirth": "Tokyo, Japan" + }, + "countryOfResidence": "JP" + } + } + ], + "accountNumber": [ + "mtLmjWt1DDxjGhMRmnxcgQqPNGPUzXuDHw" + ] + }, + "originatingVASP": { + "originatingVASP": { + "legalPerson": { + "name": { + "nameIdentifier": [ + { + "legalPersonName": "High Street Capital Management, LTD", + "legalPersonNameIdentifierType": "LEGL" + }, + { + "legalPersonName": "PubCoin", + "legalPersonNameIdentifierType": "TRAD" + } + ] + }, + "nationalIdentification": { + "nationalIdentifier": "GKUH00AIM6DCRXGXVU75", + "nationalIdentifierType": "LEIX" + }, + "countryOfRegistration": "GB" + } + } + }, + "beneficiaryVASP": { + "beneficiaryVASP": { + "legalPerson": { + "name": { + "nameIdentifier": [ + { + "legalPersonName": "Nippon Crypto Exchange, KK", + "legalPersonNameIdentifierType": "LEGL" + } + ], + "localNameIdentifier": [ + { + "legalPersonName": "日本仮想通貨取引所株式会社", + "legalPersonNameIdentifierType": "LEGL" + } + ], + "phoneticNameIdentifier": [ + { + "legalPersonName": "Nihon kasō tsūka torihikisho kabushikigaisha", + "legalPersonNameIdentifierType": "LEGL" + } + ] + }, + "geographicAddress": [], + "nationalIdentification": { + "nationalIdentifier": "84-1234567", + "nationalIdentifierType": "TXID", + "registrationAuthority": "RA777777" + }, + "countryOfRegistration": "JP" + } + } + } + }, + "transaction": { + "originator": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "beneficiary": "mtCoa72PhLznu2dw639xXfBjC8SUCpyrTv", + "amount": 0.46602501, + "network": "BTC" + }, + "sent_at": "2024-09-02T20:55:37-05:00" + } + } + } + } + }, + "responses": { + "200": { + "description": "Successfully Handled Incoming Callback", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "transaction_id": { + "type": "string", + "format": "uuid", + "description": "Must return the same transaction ID to the server.", + "example": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5" + }, + "error": { + "$ref": "#/components/schemas/TRISAError" + }, + "payload": { + "type": "object", + "description": "The payload of the secure envelope to send back to the counterparty.", + "properties": { + "identity": { + "$ref": "#/components/schemas/IdentityPayload" + }, + "pending": { + "$ref": "#/components/schemas/PendingPayload" + }, + "transaction": { + "$ref": "#/components/schemas/TransactionPayload" + }, + "sent_at": { + "type": "string", + "format": "date-time", + "description": "Echo the sent_at time from the previous envelope..", + "example": "2024-09-02T20:55:37-05:00" + }, + "received_at": { + "type": "string", + "format": "date-time", + "description": "If accepted ensure this field is set to the current timestamp.", + "example": "2024-09-02T20:55:37-05:00" + } + }, + "example": {} + }, + "transfer_action": { + "$ref": "#/components/schemas/TransferState" + } + } + }, + "example": { + "transaction_id": "f653bae7-79c9-45c2-87ae-eb5d1090dbf5", + "payload": { + "identity": { + "originator": { + "originatorPersons": [ + { + "naturalPerson": { + "name": { + "nameIdentifier": [ + { + "primaryIdentifier": "Bond", + "secondaryIdentifier": "James", + "nameIdentifierType": "LEGL" + } + ] + }, + "nationalIdentification": { + "nationalIdentifierType": "DRLC", + "nationalIdentifier": "BOND9211110JA9OB", + "countryOfIssue": "GB" + }, + "customerIdentification": "01J6DJ9F691CF8E9H0V3ET0M0E", + "dateAndPlaceOfBirth": { + "dateOfBirth": "1920-11-11", + "placeOfBirth": "Wattenscheid, Germany" + }, + "countryOfResidence": "GB" + } + } + ], + "accountNumber": [ + "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i" + ] + }, + "beneficiary": { + "beneficiaryPersons": [ + { + "naturalPerson": { + "name": { + "nameIdentifier": [ + { + "primaryIdentifier": "Miura", + "secondaryIdentifier": "Kentaro", + "nameIdentifierType": "LEGL" + } + ], + "localNameIdentifier": [ + { + "primaryIdentifier": "三浦", + "secondaryIdentifier": "建太郎", + "nameIdentifierType": "LEGL" + } + ] + }, + "nationalIdentification": { + "nationalIdentifierType": "SOCS", + "nationalIdentifier": "0537-73-2271", + "countryOfIssue": "JP" + }, + "customerIdentification": "01J6QNPGSKN2HZGC2F33F3QQRF", + "dateAndPlaceOfBirth": { + "dateOfBirth": "1979-02-14", + "placeOfBirth": "Tokyo, Japan" + }, + "countryOfResidence": "JP" + } + } + ], + "accountNumber": [ + "mtLmjWt1DDxjGhMRmnxcgQqPNGPUzXuDHw" + ] + }, + "originatingVASP": { + "originatingVASP": { + "legalPerson": { + "name": { + "nameIdentifier": [ + { + "legalPersonName": "High Street Capital Management, LTD", + "legalPersonNameIdentifierType": "LEGL" + }, + { + "legalPersonName": "PubCoin", + "legalPersonNameIdentifierType": "TRAD" + } + ] + }, + "nationalIdentification": { + "nationalIdentifier": "GKUH00AIM6DCRXGXVU75", + "nationalIdentifierType": "LEIX" + }, + "countryOfRegistration": "GB" + } + } + }, + "beneficiaryVASP": { + "beneficiaryVASP": { + "legalPerson": { + "name": { + "nameIdentifier": [ + { + "legalPersonName": "Nippon Crypto Exchange, KK", + "legalPersonNameIdentifierType": "LEGL" + } + ], + "localNameIdentifier": [ + { + "legalPersonName": "日本仮想通貨取引所株式会社", + "legalPersonNameIdentifierType": "LEGL" + } + ], + "phoneticNameIdentifier": [ + { + "legalPersonName": "Nihon kasō tsūka torihikisho kabushikigaisha", + "legalPersonNameIdentifierType": "LEGL" + } + ] + }, + "geographicAddress": [], + "nationalIdentification": { + "nationalIdentifier": "84-1234567", + "nationalIdentifierType": "TXID", + "registrationAuthority": "RA777777" + }, + "countryOfRegistration": "JP" + } + } + } + }, + "transaction": { + "originator": "mvr5YZBdAuV8sgexCHL4CRkbCvTV7odT1i", + "beneficiary": "mtCoa72PhLznu2dw639xXfBjC8SUCpyrTv", + "amount": 0.46602501, + "network": "BTC" + }, + "sent_at": "2024-09-02T20:55:37-05:00", + "received_at": "2024-09-02T20:58:02-05:00" + }, + "transfer_action": "ACCEPTED" + } + } + } + }, + "400": { + "description": "Any Non-200 Will Return a 503 (Unavailable) Error to the Counterparty", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorReply" + }, + "example": { + "success": false, + "error": "this error may be logged but will not influence the response to the user." + } + } + } + } + } + } } - ] + } } \ No newline at end of file