{
  "openapi": "3.1.0",
  "info": {
    "title": "Faraday API",
    "description": "\nThe **Faraday API** provides secure, compliant infrastructure for stablecoin transactions, identity verification, and transaction monitoring across multiple blockchains.\n\n### Key Features\n- **Swap Routing** — Discover optimal swap paths for stablecoin transfers, including cross-chain routes.\n- **IVMS101 Person Records** — Create, query, and manage structured person data for FATF Travel Rule compliance.\n- **Transaction Submission and Monitoring** — Submit and track stablecoin transactions.\n- **Reporting** — View historical transaction reports including associated IVMS101 records.\n\n### Authentication\nMost requests require an API key (Bearer token).\n\nGenerate and manage API keys by signing in to https://app.range.org/\n\nAPI Keys can be found under the APIs section. A free monthly credit allowance is available, with more credits available to paid plans.\n\nInclude this header with every authenticated Faraday request:\n\n```\nAuthorization: Bearer <your_token>\n```\n\n### Base URL\n- Production: `https://api.faraday.range.org`\n\n### Example Request\n```bash\ncurl -X GET 'https://api.faraday.range.org/v1/persons'   --header 'Authorization: Bearer <your_token>'\n```\n        ",
    "contact": {
      "name": "Faraday",
      "url": "https://range.org/faraday",
      "email": "faraday@range.org"
    },
    "license": {
      "name": ""
    },
    "version": "1.0.0"
  },
  "servers": [
    {
      "url": "https://api.faraday.range.org",
      "description": "Production"
    }
  ],
  "paths": {
    "/v1/networks": {
      "get": {
        "tags": [
          "Networks"
        ],
        "summary": "List networks",
        "description": "\nReturns an array of all blockchain networks supported by the Faraday API.\n\nEach object in the response describes one supported network and includes:\n- `slug`: canonical short identifier for the chain\n- `label`: human-readable display name\n- `kind`: network family (`evm`, `solana`, or `cosmos`)\n- `aliases`: alternative strings accepted in API requests\n\n> **Note:** You may use either the `slug` or one of its `aliases` as the value for\n> `from_chain` or `to_chain` when submitting quote or transaction requests.\n\nThis endpoint does not require authentication.\n",
        "operationId": "list_networks",
        "responses": {
          "200": {
            "description": "List of supported neworks",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/NetworkInfo"
                  }
                }
              }
            }
          }
        },
        "security": [
          {}
        ]
      }
    },
    "/v1/persons": {
      "get": {
        "tags": [
          "Persons"
        ],
        "summary": "List persons",
        "description": "Retrieves a list of all registered IVMS101-compliant natural and legal person entities, including all associated identity fields and metadata.",
        "operationId": "get_persons",
        "responses": {
          "200": {
            "description": "\n**OK**\n\nPersons records were successfully retrieved.\n",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Person"
                  }
                }
              }
            }
          },
          "401": {
            "description": "\n**Unauthorized**\n\nThis error indicates that the API key is missing or invalid.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Missing key": {
                    "summary": "API Key Missing",
                    "description": "An API key is missing in the request and should be provided in the `Authorization: Bearer` header.",
                    "value": {
                      "details": {
                        "message": "No API key found, please set this in an Authorization: Bearer header"
                      },
                      "error": "authentication failed"
                    }
                  },
                  "Unauthorized": {
                    "summary": "Unauthorized",
                    "description": "The API key may be invalid, an empty key was provided, or the key is not authorized.",
                    "value": {
                      "details": {
                        "message": "The API key provided is not authorised or invalid"
                      },
                      "error": "authentication failed"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "\n**Forbidden**\n\nThis error indicates that the API key is valid but the requested feature or resource is disabled for this workspace.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Disabled API Key": {
                    "summary": "Feature disabled",
                    "description": "The API key is valid but the associated feature or endpoint has been disabled for this workspace.",
                    "value": {
                      "details": {
                        "message": "Feature disabled for this API key"
                      },
                      "error": "authentication failed"
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "\n**Too Many Requests**\n\nThis error indicates that the API key has exceeded its allowed number of requests within the current quota.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Rate Limited API Key": {
                    "summary": "Rate limit exceeded",
                    "description": "The API key has exceeded its quota.",
                    "value": {
                      "details": {
                        "message": "API Key Rate limit exceeded"
                      },
                      "error": "authentication failed"
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "\n**Internal Server Error**\n\nAn unexpected internal error occurred while processing the request. This typically indicates a transient backend or database issue.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Internal Server Error": {
                    "summary": "Internal error",
                    "description": "An unhandled exception or service outage prevented the request from completing successfully.",
                    "value": {
                      "error": "internal server error"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Persons"
        ],
        "summary": "Create a person",
        "description": "\nCreates a new IVMS101-compliant person entity.\n\nThe payload must be either a `natural` or `legal` person structure, and must include:\n- Person core information\n- Name identifiers\n- National identifiers\n- Account numbers\n- Addresses\n\nOn success this endpoint returns the full assembled `PersonRecord`.\n\n### Specification\nSee the [IVMS101 standard](https://www.intervasp.org/) for full field definitions and compliance details.\n\n### Validation\n- If the input fails schema or custom validation, returns 422.\n\n### Errors\n- Any database or internal failure results in a 500 error.\n",
        "operationId": "create_person",
        "requestBody": {
          "description": "IVMS101-compliant payload to create a natural or legal person",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePersonPayload"
              },
              "examples": {
                "Moriarty": {
                  "value": {
                    "account_numbers": [
                      {
                        "account_number": "0x10ADD26fb2D17dA265e0567B8F56cb4687979fbE"
                      }
                    ],
                    "addresses": [
                      {
                        "address_type": "HOME",
                        "country": "CH",
                        "street_name": "Reichenbach Falls",
                        "town_name": "Meiringen"
                      }
                    ],
                    "kind": "natural",
                    "name_identifiers": [
                      {
                        "primary_identifier": "James Moriarty",
                        "type": "LEGL"
                      }
                    ],
                    "national_identifiers": [
                      {
                        "country": "CH",
                        "identifier_type": "RAID",
                        "national_identifier": "987654321"
                      }
                    ],
                    "person": {
                      "country_of_residence": "CH",
                      "customer_identification": "MORIARTY-001",
                      "date_of_birth": "1985-02-10",
                      "place_of_birth": "Bern"
                    }
                  }
                },
                "Sherlock": {
                  "value": {
                    "account_numbers": [
                      {
                        "account_number": "GvFbpZcqXNoZbAH8ETAA4DYBzaEHY4v2Vt7r71ZqJCTc"
                      }
                    ],
                    "addresses": [
                      {
                        "address_type": "HOME",
                        "building_number": "221B",
                        "country": "GB",
                        "street_name": "Baker Street",
                        "town_name": "London"
                      }
                    ],
                    "kind": "natural",
                    "name_identifiers": [
                      {
                        "primary_identifier": "Sherlock Holmes",
                        "type": "LEGL"
                      }
                    ],
                    "national_identifiers": [
                      {
                        "country": "GB",
                        "identifier_type": "RAID",
                        "national_identifier": "123456789"
                      }
                    ],
                    "person": {
                      "country_of_residence": "GB",
                      "customer_identification": "CUST-123",
                      "date_of_birth": "1990-05-14",
                      "place_of_birth": "London"
                    }
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "\n**Created**\n\nPerson was created successfully.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Person"
                }
              }
            }
          },
          "401": {
            "description": "\n**Unauthorized**\n\nThis error indicates that the API key is missing or invalid.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Missing key": {
                    "summary": "API Key Missing",
                    "description": "An API key is missing in the request and should be provided in the `Authorization: Bearer` header.",
                    "value": {
                      "details": {
                        "message": "No API key found, please set this in an Authorization: Bearer header"
                      },
                      "error": "authentication failed"
                    }
                  },
                  "Unauthorized": {
                    "summary": "Unauthorized",
                    "description": "The API key may be invalid, an empty key was provided, or the key is not authorized.",
                    "value": {
                      "details": {
                        "message": "The API key provided is not authorised or invalid"
                      },
                      "error": "authentication failed"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "\n**Forbidden**\n\nThis error indicates that the API key is valid but the requested feature or resource is disabled for this workspace.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Disabled API Key": {
                    "summary": "Feature disabled",
                    "description": "The API key is valid but the associated feature or endpoint has been disabled for this workspace.",
                    "value": {
                      "details": {
                        "message": "Feature disabled for this API key"
                      },
                      "error": "authentication failed"
                    }
                  }
                }
              }
            }
          },
          "422": {
            "description": "Validation error",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "429": {
            "description": "\n**Too Many Requests**\n\nThis error indicates that the API key has exceeded its allowed number of requests within the current quota.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Rate Limited API Key": {
                    "summary": "Rate limit exceeded",
                    "description": "The API key has exceeded its quota.",
                    "value": {
                      "details": {
                        "message": "API Key Rate limit exceeded"
                      },
                      "error": "authentication failed"
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "\n**Internal Server Error**\n\nAn unexpected internal error occurred while processing the request. This typically indicates a transient backend or database issue.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Internal Server Error": {
                    "summary": "Internal error",
                    "description": "An unhandled exception or service outage prevented the request from completing successfully.",
                    "value": {
                      "error": "internal server error"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/persons/by_account/{account_number}": {
      "get": {
        "tags": [
          "Persons"
        ],
        "summary": "Get a person by blockchain address",
        "description": "Retrieves the IVMS101-compliant person entity linked to the given blockchain address. This may include Ethereum, Solana, Cosmos, or other supported address formats.",
        "operationId": "getPersonByAccountNumber",
        "parameters": [
          {
            "name": "account_number",
            "in": "path",
            "description": "Blockchain account number used to identify a person (EVM, Solana, Cosmos, etc.)",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e"
          }
        ],
        "responses": {
          "200": {
            "description": "\n**OK**\n\nThe person record was successfully retrieved.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Person"
                }
              }
            }
          },
          "401": {
            "description": "\n**Unauthorized**\n\nThis error indicates that the API key is missing or invalid.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Missing key": {
                    "summary": "API Key Missing",
                    "description": "An API key is missing in the request and should be provided in the `Authorization: Bearer` header.",
                    "value": {
                      "details": {
                        "message": "No API key found, please set this in an Authorization: Bearer header"
                      },
                      "error": "authentication failed"
                    }
                  },
                  "Unauthorized": {
                    "summary": "Unauthorized",
                    "description": "The API key may be invalid, an empty key was provided, or the key is not authorized.",
                    "value": {
                      "details": {
                        "message": "The API key provided is not authorised or invalid"
                      },
                      "error": "authentication failed"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "\n**Forbidden**\n\nThis error indicates that the API key is valid but the requested feature or resource is disabled for this workspace.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Disabled API Key": {
                    "summary": "Feature disabled",
                    "description": "The API key is valid but the associated feature or endpoint has been disabled for this workspace.",
                    "value": {
                      "details": {
                        "message": "Feature disabled for this API key"
                      },
                      "error": "authentication failed"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "\n**Not Found**\n\nThis error indicates that the account was not found and no records person records could be associated with it.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Account not found": {
                    "value": {
                      "details": {
                        "message": "account not found"
                      },
                      "error": "not found"
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "\n**Too Many Requests**\n\nThis error indicates that the API key has exceeded its allowed number of requests within the current quota.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Rate Limited API Key": {
                    "summary": "Rate limit exceeded",
                    "description": "The API key has exceeded its quota.",
                    "value": {
                      "details": {
                        "message": "API Key Rate limit exceeded"
                      },
                      "error": "authentication failed"
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "\n**Internal Server Error**\n\nAn unexpected internal error occurred while processing the request. This typically indicates a transient backend or database issue.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Internal Server Error": {
                    "summary": "Internal error",
                    "description": "An unhandled exception or service outage prevented the request from completing successfully.",
                    "value": {
                      "error": "internal server error"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/persons/{id}": {
      "get": {
        "tags": [
          "Persons"
        ],
        "summary": "Get a person",
        "description": "Fetches a full IVMS101 person entity by its unique identifier. Returns 404 if the person is not found.",
        "operationId": "get_person_by_id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Unique person identifier (UUID)",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "d2fd3b17-1fcd-4c4f-bc0e-3b6f858a5e5d"
          }
        ],
        "responses": {
          "200": {
            "description": "\n**OK**\n\nPerson was retrived successfully.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Person"
                }
              }
            }
          },
          "401": {
            "description": "\n**Unauthorized**\n\nThis error indicates that the API key is missing or invalid.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Missing key": {
                    "summary": "API Key Missing",
                    "description": "An API key is missing in the request and should be provided in the `Authorization: Bearer` header.",
                    "value": {
                      "details": {
                        "message": "No API key found, please set this in an Authorization: Bearer header"
                      },
                      "error": "authentication failed"
                    }
                  },
                  "Unauthorized": {
                    "summary": "Unauthorized",
                    "description": "The API key may be invalid, an empty key was provided, or the key is not authorized.",
                    "value": {
                      "details": {
                        "message": "The API key provided is not authorised or invalid"
                      },
                      "error": "authentication failed"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "\n**Forbidden**\n\nThis error indicates that the API key is valid but the requested feature or resource is disabled for this workspace.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Disabled API Key": {
                    "summary": "Feature disabled",
                    "description": "The API key is valid but the associated feature or endpoint has been disabled for this workspace.",
                    "value": {
                      "details": {
                        "message": "Feature disabled for this API key"
                      },
                      "error": "authentication failed"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "\n**Not Found**\n\nThis error indicates that a person record was not found for the UUID.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Person not found": {
                    "value": {
                      "details": {
                        "message": "person not found"
                      },
                      "error": "not found"
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "\n**Too Many Requests**\n\nThis error indicates that the API key has exceeded its allowed number of requests within the current quota.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Rate Limited API Key": {
                    "summary": "Rate limit exceeded",
                    "description": "The API key has exceeded its quota.",
                    "value": {
                      "details": {
                        "message": "API Key Rate limit exceeded"
                      },
                      "error": "authentication failed"
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "\n**Internal Server Error**\n\nAn unexpected internal error occurred while processing the request. This typically indicates a transient backend or database issue.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Internal Server Error": {
                    "summary": "Internal error",
                    "description": "An unhandled exception or service outage prevented the request from completing successfully.",
                    "value": {
                      "error": "internal server error"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Persons"
        ],
        "summary": "Update a person",
        "description": "Fully replaces an IVMS101-compliant person entity by ID. The provided payload must be complete and include all fields for either a natural or legal person.",
        "operationId": "updatePersonRecord",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Unique identifier of the person to update (UUID)",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "d2fd3b17-1fcd-4c4f-bc0e-3b6f858a5e5d"
          }
        ],
        "requestBody": {
          "description": "The complete replacement payload for the IVMS101 person. Must include all required fields.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePersonPayload"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "\n**OK**\n\nThe person record was successfully updated.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Person"
                }
              }
            }
          },
          "401": {
            "description": "\n**Unauthorized**\n\nThis error indicates that the API key is missing or invalid.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Missing key": {
                    "summary": "API Key Missing",
                    "description": "An API key is missing in the request and should be provided in the `Authorization: Bearer` header.",
                    "value": {
                      "details": {
                        "message": "No API key found, please set this in an Authorization: Bearer header"
                      },
                      "error": "authentication failed"
                    }
                  },
                  "Unauthorized": {
                    "summary": "Unauthorized",
                    "description": "The API key may be invalid, an empty key was provided, or the key is not authorized.",
                    "value": {
                      "details": {
                        "message": "The API key provided is not authorised or invalid"
                      },
                      "error": "authentication failed"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "\n**Forbidden**\n\nThis error indicates that the API key is valid but the requested feature or resource is disabled for this workspace.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Disabled API Key": {
                    "summary": "Feature disabled",
                    "description": "The API key is valid but the associated feature or endpoint has been disabled for this workspace.",
                    "value": {
                      "details": {
                        "message": "Feature disabled for this API key"
                      },
                      "error": "authentication failed"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "\n**Not Found**\n\nThis error indicates that a person record was not found for the UUID.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Person not found": {
                    "value": {
                      "details": {
                        "message": "person not found"
                      },
                      "error": "not found"
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "\n**Too Many Requests**\n\nThis error indicates that the API key has exceeded its allowed number of requests within the current quota.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Rate Limited API Key": {
                    "summary": "Rate limit exceeded",
                    "description": "The API key has exceeded its quota.",
                    "value": {
                      "details": {
                        "message": "API Key Rate limit exceeded"
                      },
                      "error": "authentication failed"
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "\n**Internal Server Error**\n\nAn unexpected internal error occurred while processing the request. This typically indicates a transient backend or database issue.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Internal Server Error": {
                    "summary": "Internal error",
                    "description": "An unhandled exception or service outage prevented the request from completing successfully.",
                    "value": {
                      "error": "internal server error"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Persons"
        ],
        "summary": "Delete a person",
        "description": "Deletes the IVMS101-compliant person entity corresponding to the given UUID. Returns 204 if the deletion is successful, or 404 if the person does not exist.",
        "operationId": "deletePersonById",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Unique identifier of the person to delete (UUID)",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "d2fd3b17-1fcd-4c4f-bc0e-3b6f858a5e5d"
          }
        ],
        "responses": {
          "204": {
            "description": "Person deleted successfully"
          },
          "401": {
            "description": "\n**Unauthorized**\n\nThis error indicates that the API key is missing or invalid.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Missing key": {
                    "summary": "API Key Missing",
                    "description": "An API key is missing in the request and should be provided in the `Authorization: Bearer` header.",
                    "value": {
                      "details": {
                        "message": "No API key found, please set this in an Authorization: Bearer header"
                      },
                      "error": "authentication failed"
                    }
                  },
                  "Unauthorized": {
                    "summary": "Unauthorized",
                    "description": "The API key may be invalid, an empty key was provided, or the key is not authorized.",
                    "value": {
                      "details": {
                        "message": "The API key provided is not authorised or invalid"
                      },
                      "error": "authentication failed"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "\n**Forbidden**\n\nThis error indicates that the API key is valid but the requested feature or resource is disabled for this workspace.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Disabled API Key": {
                    "summary": "Feature disabled",
                    "description": "The API key is valid but the associated feature or endpoint has been disabled for this workspace.",
                    "value": {
                      "details": {
                        "message": "Feature disabled for this API key"
                      },
                      "error": "authentication failed"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "\n**Not Found**\n\nThis error indicates that a person record was not found for the UUID.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Person not found": {
                    "value": {
                      "details": {
                        "message": "person not found"
                      },
                      "error": "not found"
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "\n**Too Many Requests**\n\nThis error indicates that the API key has exceeded its allowed number of requests within the current quota.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Rate Limited API Key": {
                    "summary": "Rate limit exceeded",
                    "description": "The API key has exceeded its quota.",
                    "value": {
                      "details": {
                        "message": "API Key Rate limit exceeded"
                      },
                      "error": "authentication failed"
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "\n**Internal Server Error**\n\nAn unexpected internal error occurred while processing the request. This typically indicates a transient backend or database issue.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Internal Server Error": {
                    "summary": "Internal error",
                    "description": "An unhandled exception or service outage prevented the request from completing successfully.",
                    "value": {
                      "error": "internal server error"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/providers": {
      "get": {
        "tags": [
          "Providers"
        ],
        "summary": "List providers",
        "description": "\nReturns a list of quote providers supported by Faraday.\n",
        "operationId": "list_providers",
        "responses": {
          "200": {
            "description": "All supported providers",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProviderInfo"
                  }
                }
              }
            }
          }
        },
        "security": [
          {}
        ]
      }
    },
    "/v1/tokens": {
      "get": {
        "tags": [
          "Tokens"
        ],
        "summary": "List tokens",
        "description": "\nReturns a list of tokens supported by Faraday.\n",
        "operationId": "list_tokens",
        "responses": {
          "200": {
            "description": "All tokens",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TokenMeta"
                  }
                }
              }
            }
          }
        },
        "security": [
          {}
        ]
      }
    },
    "/v1/tokens/{network}": {
      "get": {
        "tags": [
          "Tokens"
        ],
        "summary": "List tokens for a network",
        "description": "\nReturns a list of tokens supported by Faraday filtered by Network.\n",
        "operationId": "list_tokens_by_network",
        "parameters": [
          {
            "name": "network",
            "in": "path",
            "description": "Target network (e.g. `solana`, `ethereum`)",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Network"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Tokens on the network",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TokenMeta"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Unknown network"
          }
        },
        "security": [
          {}
        ]
      }
    },
    "/v1/transactions": {
      "get": {
        "tags": [
          "Transactions"
        ],
        "summary": "List transactions",
        "description": "\nReturns a list of processed transactions with associated sender and recipient IVMS101 records, if available.\n\n### Response\nEach transaction includes:\n- **Transaction hash**\n- **Amount** (in base units)\n- **Travel Rule compliance flag**\n- **Timestamps**\n- Full **sender** and **recipient** records, if present\n\n### Notes\n- Transactions are returned in **descending order of creation** (most recent first).\n- If IVMS101 records are not found, `sender` or `recipient` fields may be `null`.\n",
        "operationId": "get_transactions",
        "responses": {
          "200": {
            "description": "\n**OK**\n\nTransactions successfully retrieved.\n",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TransactionReport"
                  }
                },
                "examples": {
                  "Transaction reports": {
                    "value": [
                      {
                        "amount": 1000000,
                        "created_at": "2025-11-06T19:45:32Z",
                        "network": "eth",
                        "recipient": {
                          "account_numbers": [
                            {
                              "account_number": "0x10ADD26fb2D17dA265e0567B8F56cb4687979fbE"
                            }
                          ],
                          "addresses": [
                            {
                              "address_type": "HOME",
                              "country": "CH",
                              "street_name": "Reichenbach Falls",
                              "town_name": "Meiringen"
                            }
                          ],
                          "kind": "natural",
                          "name_identifiers": [
                            {
                              "primary_identifier": "James Moriarty",
                              "type": "LEGL"
                            }
                          ],
                          "national_identifiers": [
                            {
                              "country": "CH",
                              "identifier_type": "RAID",
                              "national_identifier": "987654321"
                            }
                          ],
                          "person": {
                            "country_of_residence": "CH",
                            "customer_identification": "MORIARTY-001",
                            "date_of_birth": "1985-02-10",
                            "place_of_birth": "Bern"
                          }
                        },
                        "sender": {
                          "account_numbers": [
                            {
                              "account_number": "GvFbpZcqXNoZbAH8ETAA4DYBzaEHY4v2Vt7r71ZqJCTc"
                            }
                          ],
                          "addresses": [
                            {
                              "address_type": "HOME",
                              "building_number": "221B",
                              "country": "GB",
                              "street_name": "Baker Street",
                              "town_name": "London"
                            }
                          ],
                          "kind": "natural",
                          "name_identifiers": [
                            {
                              "primary_identifier": "Sherlock Holmes",
                              "type": "LEGL"
                            }
                          ],
                          "national_identifiers": [
                            {
                              "country": "GB",
                              "identifier_type": "RAID",
                              "national_identifier": "123456789"
                            }
                          ],
                          "person": {
                            "country_of_residence": "GB",
                            "customer_identification": "CUST-123",
                            "date_of_birth": "1990-05-14",
                            "place_of_birth": "London"
                          }
                        },
                        "travel_rule_compliant": true,
                        "tx_hash": "0x9a9b6f5a123c4def5678901234567890abcdef1234567890abcdef1234567890"
                      }
                    ]
                  }
                }
              }
            }
          },
          "401": {
            "description": "\n**Unauthorized**\n\nThis error indicates that the API key is missing or invalid.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Missing key": {
                    "summary": "API Key Missing",
                    "description": "An API key is missing in the request and should be provided in the `Authorization: Bearer` header.",
                    "value": {
                      "details": {
                        "message": "No API key found, please set this in an Authorization: Bearer header"
                      },
                      "error": "authentication failed"
                    }
                  },
                  "Unauthorized": {
                    "summary": "Unauthorized",
                    "description": "The API key may be invalid, an empty key was provided, or the key is not authorized.",
                    "value": {
                      "details": {
                        "message": "The API key provided is not authorised or invalid"
                      },
                      "error": "authentication failed"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "\n**Forbidden**\n\nThis error indicates that the API key is valid but the requested feature or resource is disabled for this workspace.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Disabled API Key": {
                    "summary": "Feature disabled",
                    "description": "The API key is valid but the associated feature or endpoint has been disabled for this workspace.",
                    "value": {
                      "details": {
                        "message": "Feature disabled for this API key"
                      },
                      "error": "authentication failed"
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "\n**Too Many Requests**\n\nThis error indicates that the API key has exceeded its allowed number of requests within the current quota.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Rate Limited API Key": {
                    "summary": "Rate limit exceeded",
                    "description": "The API key has exceeded its quota.",
                    "value": {
                      "details": {
                        "message": "API Key Rate limit exceeded"
                      },
                      "error": "authentication failed"
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "\n**Internal Server Error**\n\nAn unexpected internal error occurred while processing the request. This typically indicates a transient backend or database issue.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Internal Server Error": {
                    "summary": "Internal error",
                    "description": "An unhandled exception or service outage prevented the request from completing successfully.",
                    "value": {
                      "error": "internal server error"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Transactions"
        ],
        "summary": "Create a transaction",
        "description": "\n  Submits a signed transaction for broadcast.\n\n  Faraday routes the transaction based on the `from_network` key from the quote. \n\n  - The transaction must already be signed by the sender before submission.\n  - The endpoint will broadcast the transaction to the selected blockchain\n  network and return the result.\n  - This endpoint does not modify or re-sign the provided transaction — it\n  broadcasts exactly what is submitted.\n",
        "operationId": "post_transaction",
        "requestBody": {
          "description": "Submit a signed transaction",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubmitTransactionRequest"
              },
              "examples": {
                "Ethereum": {
                  "value": {
                    "network": "eth",
                    "quote_id": "a1e2c3d4-5678-4abc-9def-0123456789ab",
                    "signed_payload": "0xf86c808504a817c80082520894b60e8dd61c5d32be8058bb8eb970870f072331550880de0b6b3a76400008025a0d9f2b37a7fdd65b07a5ceef...",
                    "travel_rule_compliant": false
                  }
                },
                "Solana": {
                  "value": {
                    "network": "solana",
                    "quote_id": "b9a1b2a0-8d2b-4e4d-9e64-0e0a8f7a9d3c",
                    "signed_payload": "AQABAgMEBQYHCAkKCwwNDg8QERITFBUWFxgYGRobGhw=",
                    "travel_rule_compliant": true
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "description": "\n**Accepted**\n\nThe transaction was accepted for processing.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubmitTransactionResponse"
                }
              }
            }
          },
          "401": {
            "description": "\n**Unauthorized**\n\nThis error indicates that the API key is missing or invalid.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Missing key": {
                    "summary": "API Key Missing",
                    "description": "An API key is missing in the request and should be provided in the `Authorization: Bearer` header.",
                    "value": {
                      "details": {
                        "message": "No API key found, please set this in an Authorization: Bearer header"
                      },
                      "error": "authentication failed"
                    }
                  },
                  "Unauthorized": {
                    "summary": "Unauthorized",
                    "description": "The API key may be invalid, an empty key was provided, or the key is not authorized.",
                    "value": {
                      "details": {
                        "message": "The API key provided is not authorised or invalid"
                      },
                      "error": "authentication failed"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "\n**Forbidden**\n\nThis error indicates that the API key is valid but the requested feature or resource is disabled for this workspace.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Disabled API Key": {
                    "summary": "Feature disabled",
                    "description": "The API key is valid but the associated feature or endpoint has been disabled for this workspace.",
                    "value": {
                      "details": {
                        "message": "Feature disabled for this API key"
                      },
                      "error": "authentication failed"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "\n**Not Found**\n\nA quote for the quote id provided was not found.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Quote not found": {
                    "value": {
                      "details": {
                        "message": "quote not found"
                      },
                      "error": "not found"
                    }
                  }
                }
              }
            }
          },
          "422": {
            "description": "\n**Unprocessable Entity**\n\nThis error indicates the request was malformed.\n\nIf the request fails validation a response is given with an indication of how to resolve the error. \n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Missing fields on SubmitTransactionRequest": {
                    "value": {
                      "details": {
                        "signed_payload": [
                          {
                            "code": "length",
                            "message": null,
                            "params": {
                              "max": 8192,
                              "min": 10,
                              "value": ""
                            }
                          }
                        ]
                      },
                      "error": "validation failed"
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "\n**Too Many Requests**\n\nThis error indicates that the API key has exceeded its allowed number of requests within the current quota.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Rate Limited API Key": {
                    "summary": "Rate limit exceeded",
                    "description": "The API key has exceeded its quota.",
                    "value": {
                      "details": {
                        "message": "API Key Rate limit exceeded"
                      },
                      "error": "authentication failed"
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "\n**Internal Server Error**\n\nAn unexpected internal error occurred while processing the request. This typically indicates a transient backend or database issue.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Internal Server Error": {
                    "summary": "Internal error",
                    "description": "An unhandled exception or service outage prevented the request from completing successfully.",
                    "value": {
                      "error": "internal server error"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/transactions/quote": {
      "get": {
        "tags": [
          "Transactions"
        ],
        "summary": "Get a quote",
        "description": "\nRetrieves a best price quote from multiple quote providers:\n\nThe service selects the best available route based on price and execution\nparameters.\n\nAlong with the quote, the response includes:\n\n- An unsigned transaction ready for signing.\n- A risk report generated by Range's Machine Learning models, designed to\nhelp mitigate fraud and compliance risks.\n\nIf travel_rule_compliant is true, Faraday will verify that both the sender\nand recipient have valid IVMS101 person records stored. If these records are\nmissing or invalid, the request will fail with a validation error (422).\n",
        "operationId": "get_quote",
        "parameters": [
          {
            "name": "from_chain",
            "in": "query",
            "description": "Source chain (e.g., \"solana\", \"ethereum\")",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Network"
            },
            "example": "solana"
          },
          {
            "name": "from_address",
            "in": "query",
            "description": "Sender address on the source chain",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "GvFbpZcqXNoZbAH8ETAA4DYBzaEHY4v2Vt7r71ZqJCTc"
          },
          {
            "name": "from_asset",
            "in": "query",
            "description": "Asset/mint/contract on the source chain",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
          },
          {
            "name": "to_chain",
            "in": "query",
            "description": "Destination chain (e.g., \"ethereum\")",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/Network"
            },
            "example": "ethereum"
          },
          {
            "name": "to_asset",
            "in": "query",
            "description": "Asset/mint/contract on the destination chain",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
          },
          {
            "name": "amount",
            "in": "query",
            "description": "Amount in base units (integer string, no decimals)",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "100000000"
          },
          {
            "name": "slippage_bps",
            "in": "query",
            "description": "Slippage in basis points (0..=10000)",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32",
              "minimum": 0
            },
            "example": 50
          },
          {
            "name": "to_address",
            "in": "query",
            "description": "Recipient address on the destination chain",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "0x10ADD26fb2D17dA265e0567B8F56cb4687979fbE"
          },
          {
            "name": "travel_rule_compliant",
            "in": "query",
            "description": "Whether the transaction complies with Travel Rule requirements.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "allowed_providers",
            "in": "query",
            "description": "If set, the router will restrict quote routing to these providers only.\nIf omitted, all available providers will be used.\n\n**GET request usage:**\n`?allowed_providers=relay&allowed_providers=skipgo`\n(use repeated query parameters)",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/Provider"
              }
            }
          },
          {
            "name": "risk_report",
            "in": "query",
            "description": "Whether this request should compute a risk report.\nIf omitted, defaults to `false`.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "\n**OK**\n\nQuote successfully retrieved.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuoteWithRisk"
                },
                "examples": {
                  "Direct Transfer Solana Devnet USDC to Solana Devnet USDC": {
                    "value": {
                      "quote": {
                        "created_at": "2025-10-29T10:01:23Z",
                        "destination": {
                          "account": "5QTxbuHroxQM7rv1vSzMMvUQ2a3vJodtQH9vawKTATGd",
                          "amount": "5000000",
                          "amount_formatted": null,
                          "decimals": null,
                          "logo_url": null,
                          "name": null,
                          "network": "solana-devnet",
                          "symbol": "USDC",
                          "token": "4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU",
                          "usd_amount": null,
                          "usd_price": null
                        },
                        "expires_at": null,
                        "fee": {},
                        "id": "0575d7f5-7e02-4208-a993-7261e605c470",
                        "min_amount_out": "5000000",
                        "provider": "direct",
                        "source": {
                          "account": "IOwXp6hCF/z4mI2gcyShGCThUvUeWCz",
                          "amount": "5000000",
                          "amount_formatted": null,
                          "decimals": null,
                          "logo_url": null,
                          "name": null,
                          "network": "solana-devnet",
                          "symbol": "USDC",
                          "token": "4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU",
                          "usd_amount": null,
                          "usd_price": null
                        },
                        "transactions": [
                          {
                            "chain_id": "EtWTRABZaYq6iMfeYKouRu166VU2xqa1",
                            "kind": "solana",
                            "meta": {
                              "blockhash_expiry_seconds": 120,
                              "decimals": 6,
                              "from_ata": "B4G1X1UoWXNy6HXk2MXRhbSY3Sd2z8Mf32Ak9zC7XG62",
                              "mint": "4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU",
                              "recent_blockhash": "AHhbjisxx4vtWhiQ22gQUFoJtzdT3ad22XzXhuHrBLca",
                              "requires_create_ata": true,
                              "to_ata": "5QTxbuHroxQM7rv1vSzMMvUQ2a3vJodtQH9vawKTATGd"
                            },
                            "tx_base64": "AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAUIIOwXp6hCF/z4mI2gcyShGCThUvUeWCz+ZW2xfiXSYc9BcZarum/U3+JSrWwNCxzVBJ35PgfnhqGFrgcRv2U2epVqlROnrjt2WjMsC9+l+jYSO/jqh6sTObfeI8b6DLRvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG3fbh12Whk9nL4UbO63msHLSF7V9bN5E6jPWFfv8AqTtELLORIVfxOpM9ATQoLQMrX/7NAaLb8bd5BgjfAC6nY959WgOStnuBoC8tRC/LcM5DR1JIURG+4DuXI98XF5iMlyWPTiSJ8bs9ECkUjg2DC1oTmdr/EIQEjnvY2+n4WYoAYW/SC9NKD87MwG5xFBtjx3eWhiQkhmWpP8npFuJbAgcGAAEGBQMEAQEEBAIFAQAKDEBLTAAAAAAABg=="
                          }
                        ]
                      },
                      "risk": {
                        "errors": [],
                        "overall_risk_level": "high",
                        "processing_time_ms": 4439.167,
                        "request_summary": {
                          "amount": 100000000,
                          "recipient_address": "0x10ADD26fb2D17dA265e0567B8F56cb4687979fbE",
                          "recipient_network": "ethereum",
                          "recipient_token": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
                          "sender_address": "GvFbpZcqXNoZbAH8ETAA4DYBzaEHY4v2Vt7r71ZqJCTc",
                          "sender_network": "solana",
                          "sender_token": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
                        },
                        "risk_factors": [
                          {
                            "description": "Unable to assess new wallet risk due to service error: Network 'ethereum' is not configured.",
                            "factor": "assessment_error_new_wallet",
                            "risk_level": "medium"
                          },
                          {
                            "description": "Unable to assess dormant wallet risk: Network 'ethereum' is not configured.",
                            "factor": "assessment_error_dormant_wallet",
                            "risk_level": "medium"
                          },
                          {
                            "description": "No address poisoning pattern detected between sender and recipient",
                            "factor": "no_address_poisoning",
                            "risk_level": "low"
                          },
                          {
                            "description": "First ever interaction between these addresses",
                            "factor": "first_interaction",
                            "risk_level": "high"
                          },
                          {
                            "description": "Sender address is directly connected (1 hop) to malicious addresses (riskScore: 10). Address is directly malicious.",
                            "factor": "connected_to_malicious_address",
                            "risk_level": "high"
                          },
                          {
                            "description": "Recipient address has no known connections to malicious addresses according to Range API",
                            "factor": "clean_address_recipient",
                            "risk_level": "low"
                          }
                        ]
                      }
                    }
                  },
                  "Skip Go Sepolia USDC to Solana Devnet USDC": {
                    "value": {
                      "quote": {
                        "created_at": "2025-10-28T17:36:29Z",
                        "destination": {
                          "account": "0x10ADD26fb2D17dA265e0567B8F56cb4687979fbE",
                          "amount": "4998546",
                          "amount_formatted": "4.998546",
                          "decimals": 6,
                          "logo_url": null,
                          "name": "USD Coin",
                          "network": "sepolia",
                          "symbol": "USDC",
                          "token": "0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238",
                          "usd_amount": null,
                          "usd_price": null
                        },
                        "expires_at": null,
                        "fee": {},
                        "id": "5917c6e9-4a69-4ca4-90b8-22d9abaf3c8b",
                        "min_amount_out": "4983550",
                        "provider": "skipgo",
                        "source": {
                          "account": "3DWrAUpE8DWTyEfexXHcyJzYDieyJCw7pwsSiJRcjzKx",
                          "amount": "5000000",
                          "amount_formatted": "5.0",
                          "decimals": 6,
                          "logo_url": null,
                          "name": "USD Coin",
                          "network": "solana-devnet",
                          "symbol": "USDC",
                          "token": "4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU",
                          "usd_amount": null,
                          "usd_price": null
                        },
                        "transactions": [
                          {
                            "chain_id": "EtWTRABZaYq6iMfeYKouRu166VU2xqa1",
                            "kind": "solana",
                            "tx_base64": "<base64-encoded Solana transaction>"
                          }
                        ]
                      },
                      "risk": {
                        "errors": [],
                        "overall_risk_level": "high",
                        "processing_time_ms": 4439.167,
                        "request_summary": {
                          "amount": 100000000,
                          "recipient_address": "0x10ADD26fb2D17dA265e0567B8F56cb4687979fbE",
                          "recipient_network": "ethereum",
                          "recipient_token": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
                          "sender_address": "GvFbpZcqXNoZbAH8ETAA4DYBzaEHY4v2Vt7r71ZqJCTc",
                          "sender_network": "solana",
                          "sender_token": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
                        },
                        "risk_factors": [
                          {
                            "description": "Unable to assess new wallet risk due to service error: Network 'ethereum' is not configured.",
                            "factor": "assessment_error_new_wallet",
                            "risk_level": "medium"
                          },
                          {
                            "description": "Unable to assess dormant wallet risk: Network 'ethereum' is not configured.",
                            "factor": "assessment_error_dormant_wallet",
                            "risk_level": "medium"
                          },
                          {
                            "description": "No address poisoning pattern detected between sender and recipient",
                            "factor": "no_address_poisoning",
                            "risk_level": "low"
                          },
                          {
                            "description": "First ever interaction between these addresses",
                            "factor": "first_interaction",
                            "risk_level": "high"
                          },
                          {
                            "description": "Sender address is directly connected (1 hop) to malicious addresses (riskScore: 10). Address is directly malicious.",
                            "factor": "connected_to_malicious_address",
                            "risk_level": "high"
                          },
                          {
                            "description": "Recipient address has no known connections to malicious addresses according to Range API",
                            "factor": "clean_address_recipient",
                            "risk_level": "low"
                          }
                        ]
                      }
                    }
                  },
                  "Squid Ethereum USDT to Arbitrum USDC": {
                    "value": {
                      "quote": {
                        "created_at": "2025-11-03T16:47:53Z",
                        "destination": {
                          "account": "0xRecipientAddress",
                          "amount": "99922000",
                          "amount_formatted": null,
                          "decimals": null,
                          "logo_url": null,
                          "name": null,
                          "network": "arb1",
                          "symbol": "USDC",
                          "token": "0xaf88d065e77c8cc2239327c5edb3a432268e5831",
                          "usd_amount": null,
                          "usd_price": null
                        },
                        "expires_at": null,
                        "fee": {},
                        "id": "257e7a2c-fd5d-47a4-b5b0-8b2c84699b67",
                        "min_amount_out": "99922000",
                        "provider": "squid",
                        "source": {
                          "account": "0xSenderAddress",
                          "amount": "100000000",
                          "amount_formatted": null,
                          "decimals": null,
                          "logo_url": null,
                          "name": null,
                          "network": "eth",
                          "symbol": "USDT",
                          "token": "0xdac17f958d2ee523a2206206994597c13d831ec7",
                          "usd_amount": null,
                          "usd_price": null
                        },
                        "transactions": [
                          {
                            "chain_id": "1",
                            "data": "0x846a1bc6000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec70000000000000000000000000000000000000000000000000000000005f5e1000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000052...",
                            "kind": "eip155",
                            "meta": {
                              "gas_limit": "442600",
                              "gas_price": "2397257997",
                              "max_fee_per_gas": "6290875994",
                              "max_priority_fee_per_gas": "1500000000",
                              "request_id": "3657ad96fd259afc56bc273b569d81fa",
                              "type": "ON_CHAIN_EXECUTION"
                            },
                            "to": "0xce16F69375520ab01377ce7B88f5BA8C48F8D666",
                            "value": "75245197906272"
                          }
                        ]
                      },
                      "risk": {
                        "errors": [],
                        "overall_risk_level": "high",
                        "processing_time_ms": 4439.167,
                        "request_summary": {
                          "amount": 100000000,
                          "recipient_address": "0x10ADD26fb2D17dA265e0567B8F56cb4687979fbE",
                          "recipient_network": "ethereum",
                          "recipient_token": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
                          "sender_address": "GvFbpZcqXNoZbAH8ETAA4DYBzaEHY4v2Vt7r71ZqJCTc",
                          "sender_network": "solana",
                          "sender_token": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
                        },
                        "risk_factors": [
                          {
                            "description": "Unable to assess new wallet risk due to service error: Network 'ethereum' is not configured.",
                            "factor": "assessment_error_new_wallet",
                            "risk_level": "medium"
                          },
                          {
                            "description": "Unable to assess dormant wallet risk: Network 'ethereum' is not configured.",
                            "factor": "assessment_error_dormant_wallet",
                            "risk_level": "medium"
                          },
                          {
                            "description": "No address poisoning pattern detected between sender and recipient",
                            "factor": "no_address_poisoning",
                            "risk_level": "low"
                          },
                          {
                            "description": "First ever interaction between these addresses",
                            "factor": "first_interaction",
                            "risk_level": "high"
                          },
                          {
                            "description": "Sender address is directly connected (1 hop) to malicious addresses (riskScore: 10). Address is directly malicious.",
                            "factor": "connected_to_malicious_address",
                            "risk_level": "high"
                          },
                          {
                            "description": "Recipient address has no known connections to malicious addresses according to Range API",
                            "factor": "clean_address_recipient",
                            "risk_level": "low"
                          }
                        ]
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "\n**Unauthorized**\n\nThis error indicates that the API key is missing or invalid.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Missing key": {
                    "summary": "API Key Missing",
                    "description": "An API key is missing in the request and should be provided in the `Authorization: Bearer` header.",
                    "value": {
                      "details": {
                        "message": "No API key found, please set this in an Authorization: Bearer header"
                      },
                      "error": "authentication failed"
                    }
                  },
                  "Unauthorized": {
                    "summary": "Unauthorized",
                    "description": "The API key may be invalid, an empty key was provided, or the key is not authorized.",
                    "value": {
                      "details": {
                        "message": "The API key provided is not authorised or invalid"
                      },
                      "error": "authentication failed"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "\n**Forbidden**\n\nThis error indicates that the API key is valid but the requested feature or resource is disabled for this workspace.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Disabled API Key": {
                    "summary": "Feature disabled",
                    "description": "The API key is valid but the associated feature or endpoint has been disabled for this workspace.",
                    "value": {
                      "details": {
                        "message": "Feature disabled for this API key"
                      },
                      "error": "authentication failed"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "\n**Not Found**\n\nThis error indicates that no quotes were available from any provider for the given route or parameters.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "No quotes available": {
                    "value": {
                      "details": {
                        "message": "no quotes available from any provider"
                      },
                      "error": "not found"
                    }
                  }
                }
              }
            }
          },
          "422": {
            "description": "\n**Unprocessable Entity**\n\nThis error indicates the request was malformed.\n\nIf the request fails validation a response is given with an indication of how to resolve the error. \n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Missing fields on QuoteRequest": {
                    "value": {
                      "details": {
                        "amount": [
                          {
                            "code": "greater_than_zero",
                            "message": "amount must be greater than 0",
                            "params": {
                              "value": "0"
                            }
                          }
                        ],
                        "from_address": [
                          {
                            "code": "length",
                            "message": null,
                            "params": {
                              "min": 1,
                              "value": ""
                            }
                          }
                        ],
                        "from_asset": [
                          {
                            "code": "length",
                            "message": null,
                            "params": {
                              "min": 1,
                              "value": ""
                            }
                          }
                        ],
                        "to_address": [
                          {
                            "code": "length",
                            "message": null,
                            "params": {
                              "min": 1,
                              "value": ""
                            }
                          }
                        ],
                        "to_asset": [
                          {
                            "code": "length",
                            "message": null,
                            "params": {
                              "min": 1,
                              "value": ""
                            }
                          }
                        ]
                      },
                      "error": "validation failed"
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "\n**Too Many Requests**\n\nThis error indicates that the API key has exceeded its allowed number of requests within the current quota.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Rate Limited API Key": {
                    "summary": "Rate limit exceeded",
                    "description": "The API key has exceeded its quota.",
                    "value": {
                      "details": {
                        "message": "API Key Rate limit exceeded"
                      },
                      "error": "authentication failed"
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "\n**Internal Server Error**\n\nAn unexpected internal error occurred while processing the request. This typically indicates a transient backend or database issue.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Internal Server Error": {
                    "summary": "Internal error",
                    "description": "An unhandled exception or service outage prevented the request from completing successfully.",
                    "value": {
                      "error": "internal server error"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/transactions/quotes": {
      "get": {
        "tags": [
          "Transactions"
        ],
        "summary": "Get quotes",
        "description": "\n Retrieves all available quotes from from quote providers\n\n- Uses the same address/amount inputs for all providers.\n- Risk assessment is computed once (same inputs) and attached to the response.\n- If `travel_rule_compliant` is true, verifies IVMS101 records for sender & recipient before quoting.\n",
        "operationId": "get_quotes",
        "parameters": [
          {
            "name": "from_chain",
            "in": "query",
            "description": "Source chain (e.g., \"solana\", \"ethereum\")",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Network"
            },
            "example": "solana"
          },
          {
            "name": "from_address",
            "in": "query",
            "description": "Sender address on the source chain",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "GvFbpZcqXNoZbAH8ETAA4DYBzaEHY4v2Vt7r71ZqJCTc"
          },
          {
            "name": "from_asset",
            "in": "query",
            "description": "Asset/mint/contract on the source chain",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
          },
          {
            "name": "to_chain",
            "in": "query",
            "description": "Destination chain (e.g., \"ethereum\")",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/Network"
            },
            "example": "ethereum"
          },
          {
            "name": "to_asset",
            "in": "query",
            "description": "Asset/mint/contract on the destination chain",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
          },
          {
            "name": "amount",
            "in": "query",
            "description": "Amount in base units (integer string, no decimals)",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "100000000"
          },
          {
            "name": "slippage_bps",
            "in": "query",
            "description": "Slippage in basis points (0..=10000)",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32",
              "minimum": 0
            },
            "example": 50
          },
          {
            "name": "to_address",
            "in": "query",
            "description": "Recipient address on the destination chain",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "0x10ADD26fb2D17dA265e0567B8F56cb4687979fbE"
          },
          {
            "name": "travel_rule_compliant",
            "in": "query",
            "description": "Whether the transaction complies with Travel Rule requirements.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "allowed_providers",
            "in": "query",
            "description": "If set, the router will restrict quote routing to these providers only.\nIf omitted, all available providers will be used.\n\n**GET request usage:**\n`?allowed_providers=relay&allowed_providers=skipgo`\n(use repeated query parameters)",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/Provider"
              }
            }
          },
          {
            "name": "risk_report",
            "in": "query",
            "description": "Whether this request should compute a risk report.\nIf omitted, defaults to `false`.",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "\n**OK**\n\nQuotes successfully retrieved.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuotesWithRisk"
                },
                "examples": {
                  "Solana Devnet USDC to Sepolia USDC": {
                    "value": {
                      "quotes": [
                        {
                          "created_at": "2025-10-28T17:36:29Z",
                          "destination": {
                            "account": "0x10ADD26fb2D17dA265e0567B8F56cb4687979fbE",
                            "amount": "4998546",
                            "amount_formatted": null,
                            "decimals": null,
                            "logo_url": null,
                            "name": null,
                            "network": "sepolia",
                            "symbol": "USDC",
                            "token": "0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238",
                            "usd_amount": null,
                            "usd_price": null
                          },
                          "expires_at": null,
                          "fee": {},
                          "id": "5917c6e9-4a69-4ca4-90b8-22d9abaf3c8b",
                          "min_amount_out": "4983550",
                          "provider": "skipgo",
                          "source": {
                            "account": "3DWrAUpE8DWTyEfexXHcyJzYDieyJCw7pwsSiJRcjzKx",
                            "amount": "5000000",
                            "amount_formatted": null,
                            "decimals": null,
                            "logo_url": null,
                            "name": null,
                            "network": "solana-devnet",
                            "symbol": "USDC",
                            "token": "4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU",
                            "usd_amount": null,
                            "usd_price": null
                          },
                          "transactions": [
                            {
                              "chain_id": "EtWTRABZaYq6iMfeYKouRu166VU2xqa1",
                              "kind": "solana",
                              "tx_base64": "<base64-encoded Solana transaction>"
                            }
                          ]
                        }
                      ],
                      "risk": {
                        "errors": [],
                        "overall_risk_level": "high",
                        "processing_time_ms": 4439.167,
                        "request_summary": {
                          "amount": 100000000,
                          "recipient_address": "0x10ADD26fb2D17dA265e0567B8F56cb4687979fbE",
                          "recipient_network": "ethereum",
                          "recipient_token": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
                          "sender_address": "GvFbpZcqXNoZbAH8ETAA4DYBzaEHY4v2Vt7r71ZqJCTc",
                          "sender_network": "solana",
                          "sender_token": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
                        },
                        "risk_factors": [
                          {
                            "description": "Unable to assess new wallet risk due to service error: Network 'ethereum' is not configured.",
                            "factor": "assessment_error_new_wallet",
                            "risk_level": "medium"
                          },
                          {
                            "description": "Unable to assess dormant wallet risk: Network 'ethereum' is not configured.",
                            "factor": "assessment_error_dormant_wallet",
                            "risk_level": "medium"
                          },
                          {
                            "description": "No address poisoning pattern detected between sender and recipient",
                            "factor": "no_address_poisoning",
                            "risk_level": "low"
                          },
                          {
                            "description": "First ever interaction between these addresses",
                            "factor": "first_interaction",
                            "risk_level": "high"
                          },
                          {
                            "description": "Sender address is directly connected (1 hop) to malicious addresses (riskScore: 10). Address is directly malicious.",
                            "factor": "connected_to_malicious_address",
                            "risk_level": "high"
                          },
                          {
                            "description": "Recipient address has no known connections to malicious addresses according to Range API",
                            "factor": "clean_address_recipient",
                            "risk_level": "low"
                          }
                        ]
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "\n**Unauthorized**\n\nThis error indicates that the API key is missing or invalid.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Missing key": {
                    "summary": "API Key Missing",
                    "description": "An API key is missing in the request and should be provided in the `Authorization: Bearer` header.",
                    "value": {
                      "details": {
                        "message": "No API key found, please set this in an Authorization: Bearer header"
                      },
                      "error": "authentication failed"
                    }
                  },
                  "Unauthorized": {
                    "summary": "Unauthorized",
                    "description": "The API key may be invalid, an empty key was provided, or the key is not authorized.",
                    "value": {
                      "details": {
                        "message": "The API key provided is not authorised or invalid"
                      },
                      "error": "authentication failed"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "\n**Forbidden**\n\nThis error indicates that the API key is valid but the requested feature or resource is disabled for this workspace.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Disabled API Key": {
                    "summary": "Feature disabled",
                    "description": "The API key is valid but the associated feature or endpoint has been disabled for this workspace.",
                    "value": {
                      "details": {
                        "message": "Feature disabled for this API key"
                      },
                      "error": "authentication failed"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "\n**Not Found**\n\nThis error indicates that no quotes were available from any provider for the given route or parameters.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "No quotes available": {
                    "value": {
                      "details": {
                        "message": "no quotes available from any provider"
                      },
                      "error": "not found"
                    }
                  }
                }
              }
            }
          },
          "422": {
            "description": "\n**Unprocessable Entity**\n\nThis error indicates the request was malformed.\n\nIf the request fails validation a response is given with an indication of how to resolve the error. \n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Missing fields on QuoteRequest": {
                    "value": {
                      "details": {
                        "amount": [
                          {
                            "code": "greater_than_zero",
                            "message": "amount must be greater than 0",
                            "params": {
                              "value": "0"
                            }
                          }
                        ],
                        "from_address": [
                          {
                            "code": "length",
                            "message": null,
                            "params": {
                              "min": 1,
                              "value": ""
                            }
                          }
                        ],
                        "from_asset": [
                          {
                            "code": "length",
                            "message": null,
                            "params": {
                              "min": 1,
                              "value": ""
                            }
                          }
                        ],
                        "to_address": [
                          {
                            "code": "length",
                            "message": null,
                            "params": {
                              "min": 1,
                              "value": ""
                            }
                          }
                        ],
                        "to_asset": [
                          {
                            "code": "length",
                            "message": null,
                            "params": {
                              "min": 1,
                              "value": ""
                            }
                          }
                        ]
                      },
                      "error": "validation failed"
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "\n**Too Many Requests**\n\nThis error indicates that the API key has exceeded its allowed number of requests within the current quota.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Rate Limited API Key": {
                    "summary": "Rate limit exceeded",
                    "description": "The API key has exceeded its quota.",
                    "value": {
                      "details": {
                        "message": "API Key Rate limit exceeded"
                      },
                      "error": "authentication failed"
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "\n**Internal Server Error**\n\nAn unexpected internal error occurred while processing the request. This typically indicates a transient backend or database issue.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Internal Server Error": {
                    "summary": "Internal error",
                    "description": "An unhandled exception or service outage prevented the request from completing successfully.",
                    "value": {
                      "error": "internal server error"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/transactions/track/{tx_hash}": {
      "get": {
        "tags": [
          "Transactions"
        ],
        "summary": "Track transaction status",
        "description": "\nReturns the status of a transaction by hash.  \n\nThe `status` key of the response provides a status of the transaction which is one of\n\n- submitted\n- pending\n- completed\n- failed\n- abandoned\n- unknown\n\nThe `raw` key provides the full response from the provider, which may provide additional information including links to block explorers and intermediary transactions. As each provider response is different it is up to clients to parse raw provider responses to use them. \n\n### Query Parameters\nClients that did not submit their transaction via the Faraday API can still use this endpoint by providing:\n\n- **tx_hash** *(required, path)* — The transaction hash on the source chain.\n- **quote_id** *(optional, query string)* — If the transaction originated from a Faraday quote, include the quote UUID to link to the original quote record.\n",
        "operationId": "track_transaction",
        "parameters": [
          {
            "name": "tx_hash",
            "in": "path",
            "description": "Transaction hash to track",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "quote_id",
            "in": "query",
            "description": "Optional quote ID if the transaction was not submitted via the Faraday API",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "\n**OK**\n\nTransaction status successfully retrieved.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TxStatusResponse"
                },
                "examples": {
                  "SkipGo Sepolia USDC to Solana USDC": {
                    "value": {
                      "provider": "skipgo",
                      "raw": {
                        "error": null,
                        "next_blocking_transfer": null,
                        "state": "STATE_COMPLETED_SUCCESS",
                        "status": "STATE_COMPLETED",
                        "transfer_asset_release": {
                          "amount": "4536971",
                          "chain_id": "solana-devnet",
                          "denom": "4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU",
                          "released": true
                        },
                        "transfer_sequence": [
                          {
                            "cctp_transfer": {
                              "from_chain_id": "11155111",
                              "state": "CCTP_TRANSFER_RECEIVED",
                              "to_chain_id": "solana-devnet",
                              "txs": {
                                "receive_tx": {
                                  "chain_id": "solana-devnet",
                                  "explorer_link": "https://solscan.io/tx/2iWuf6wS4wAbuV6R1ZoCh2x1g9U2g3d2EwJ2jUBR6BRteak7fpsEtxCwDSkpDKgFriicBKjeUGJtnBMba256J5Ao?cluster=devnet",
                                  "on_chain_at": "2025-10-27T18:28:49.766120570Z",
                                  "tx_hash": "2iWuf6wS4wAbuV6R1ZoCh2x1g9U2g3d2EwJ2jUBR6BRteak7fpsEtxCwDSkpDKgFriicBKjeUGJtnBMba256J5Ao"
                                },
                                "send_tx": {
                                  "chain_id": "11155111",
                                  "explorer_link": "https://sepolia.etherscan.io/tx/0x66682E126367F63E9714F78CE4417E8B0096D5DE77F17DF6A179315E7D325BB3",
                                  "on_chain_at": "2025-10-27T18:23:48Z",
                                  "tx_hash": "0x66682E126367F63E9714F78CE4417E8B0096D5DE77F17DF6A179315E7D325BB3"
                                }
                              }
                            }
                          }
                        ],
                        "transfers": [
                          {
                            "next_blocking_transfer": null,
                            "state": "STATE_COMPLETED_SUCCESS",
                            "transfer_asset_release": {
                              "amount": "4536971",
                              "chain_id": "solana-devnet",
                              "denom": "4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU",
                              "released": true
                            },
                            "transfer_sequence": [
                              {
                                "cctp_transfer": {
                                  "from_chain_id": "11155111",
                                  "state": "CCTP_TRANSFER_RECEIVED",
                                  "to_chain_id": "solana-devnet",
                                  "txs": {
                                    "receive_tx": {
                                      "chain_id": "solana-devnet",
                                      "explorer_link": "https://solscan.io/tx/2iWuf6wS4wAbuV6R1ZoCh2x1g9U2g3d2EwJ2jUBR6BRteak7fpsEtxCwDSkpDKgFriicBKjeUGJtnBMba256J5Ao?cluster=devnet",
                                      "on_chain_at": "2025-10-27T18:28:49.766120570Z",
                                      "tx_hash": "2iWuf6wS4wAbuV6R1ZoCh2x1g9U2g3d2EwJ2jUBR6BRteak7fpsEtxCwDSkpDKgFriicBKjeUGJtnBMba256J5Ao"
                                    },
                                    "send_tx": {
                                      "chain_id": "11155111",
                                      "explorer_link": "https://sepolia.etherscan.io/tx/0x66682E126367F63E9714F78CE4417E8B0096D5DE77F17DF6A179315E7D325BB3",
                                      "on_chain_at": "2025-10-27T18:23:48Z",
                                      "tx_hash": "0x66682E126367F63E9714F78CE4417E8B0096D5DE77F17DF6A179315E7D325BB3"
                                    }
                                  }
                                }
                              }
                            ]
                          }
                        ]
                      },
                      "status": "completed"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "\n**Unauthorized**\n\nThis error indicates that the API key is missing or invalid.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Missing key": {
                    "summary": "API Key Missing",
                    "description": "An API key is missing in the request and should be provided in the `Authorization: Bearer` header.",
                    "value": {
                      "details": {
                        "message": "No API key found, please set this in an Authorization: Bearer header"
                      },
                      "error": "authentication failed"
                    }
                  },
                  "Unauthorized": {
                    "summary": "Unauthorized",
                    "description": "The API key may be invalid, an empty key was provided, or the key is not authorized.",
                    "value": {
                      "details": {
                        "message": "The API key provided is not authorised or invalid"
                      },
                      "error": "authentication failed"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "\n**Forbidden**\n\nThis error indicates that the API key is valid but the requested feature or resource is disabled for this workspace.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Disabled API Key": {
                    "summary": "Feature disabled",
                    "description": "The API key is valid but the associated feature or endpoint has been disabled for this workspace.",
                    "value": {
                      "details": {
                        "message": "Feature disabled for this API key"
                      },
                      "error": "authentication failed"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "\n**Not Found**\n\nReturned when no matching quote or transaction could be located.\n\nThis can occur if:\n- The transaction has not yet been indexed by the blockchain.\n- The provided `tx_hash` does not correspond to any quote.\n- No `quote_id` was provided for a transaction submitted directly to a blockchain.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "No quote found for tx_hash and no quote_id provided": {
                    "value": {
                      "details": {
                        "message": "No quote found for tx_hash deadbeef1234... and no quote_id provided"
                      },
                      "error": "not found"
                    }
                  },
                  "No quotes available from any provider": {
                    "value": {
                      "details": {
                        "message": "quote not found"
                      },
                      "error": "not found"
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "\n**Too Many Requests**\n\nThis error indicates that the API key has exceeded its allowed number of requests within the current quota.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Rate Limited API Key": {
                    "summary": "Rate limit exceeded",
                    "description": "The API key has exceeded its quota.",
                    "value": {
                      "details": {
                        "message": "API Key Rate limit exceeded"
                      },
                      "error": "authentication failed"
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "\n**Internal Server Error**\n\nAn unexpected internal error occurred while processing the request. This typically indicates a transient backend or database issue.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Internal Server Error": {
                    "summary": "Internal error",
                    "description": "An unhandled exception or service outage prevented the request from completing successfully.",
                    "value": {
                      "error": "internal server error"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/transactions/{tx_hash}": {
      "get": {
        "tags": [
          "Transactions"
        ],
        "summary": "Get a transaction",
        "description": "\nRetrieves a single processed transaction by its unique transaction hash.\n\nNote transactions must be submitted via the Faraday API to be available on this endpoint. \n\n### Response\nIncludes:\n- Transaction hash\n- Network (e.g., Solana, Ethereum)\n- Amount (in base units)\n- Travel Rule compliance status\n- Timestamp of creation or observation\n- Full IVMS101 sender and recipient records, if available\n\n### Notes\n- If IVMS101 records are missing, `sender` or `recipient` will be `null`.\n- Use this endpoint to audit a transaction or verify compliance.\n",
        "operationId": "get_transaction_by_hash",
        "parameters": [
          {
            "name": "tx_hash",
            "in": "path",
            "description": "Unique transaction hash to retrieve",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "\n**OK**\n\nTransaction successfully retrieved.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionReport"
                },
                "examples": {
                  "Transaction report": {
                    "value": {
                      "amount": 1000000,
                      "created_at": "2025-11-06T19:45:32Z",
                      "network": "eth",
                      "recipient": {
                        "account_numbers": [
                          {
                            "account_number": "0x10ADD26fb2D17dA265e0567B8F56cb4687979fbE"
                          }
                        ],
                        "addresses": [
                          {
                            "address_type": "HOME",
                            "country": "CH",
                            "street_name": "Reichenbach Falls",
                            "town_name": "Meiringen"
                          }
                        ],
                        "kind": "natural",
                        "name_identifiers": [
                          {
                            "primary_identifier": "James Moriarty",
                            "type": "LEGL"
                          }
                        ],
                        "national_identifiers": [
                          {
                            "country": "CH",
                            "identifier_type": "RAID",
                            "national_identifier": "987654321"
                          }
                        ],
                        "person": {
                          "country_of_residence": "CH",
                          "customer_identification": "MORIARTY-001",
                          "date_of_birth": "1985-02-10",
                          "place_of_birth": "Bern"
                        }
                      },
                      "sender": {
                        "account_numbers": [
                          {
                            "account_number": "GvFbpZcqXNoZbAH8ETAA4DYBzaEHY4v2Vt7r71ZqJCTc"
                          }
                        ],
                        "addresses": [
                          {
                            "address_type": "HOME",
                            "building_number": "221B",
                            "country": "GB",
                            "street_name": "Baker Street",
                            "town_name": "London"
                          }
                        ],
                        "kind": "natural",
                        "name_identifiers": [
                          {
                            "primary_identifier": "Sherlock Holmes",
                            "type": "LEGL"
                          }
                        ],
                        "national_identifiers": [
                          {
                            "country": "GB",
                            "identifier_type": "RAID",
                            "national_identifier": "123456789"
                          }
                        ],
                        "person": {
                          "country_of_residence": "GB",
                          "customer_identification": "CUST-123",
                          "date_of_birth": "1990-05-14",
                          "place_of_birth": "London"
                        }
                      },
                      "travel_rule_compliant": true,
                      "tx_hash": "0x9a9b6f5a123c4def5678901234567890abcdef1234567890abcdef1234567890"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "\n**Unauthorized**\n\nThis error indicates that the API key is missing or invalid.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Missing key": {
                    "summary": "API Key Missing",
                    "description": "An API key is missing in the request and should be provided in the `Authorization: Bearer` header.",
                    "value": {
                      "details": {
                        "message": "No API key found, please set this in an Authorization: Bearer header"
                      },
                      "error": "authentication failed"
                    }
                  },
                  "Unauthorized": {
                    "summary": "Unauthorized",
                    "description": "The API key may be invalid, an empty key was provided, or the key is not authorized.",
                    "value": {
                      "details": {
                        "message": "The API key provided is not authorised or invalid"
                      },
                      "error": "authentication failed"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "\n**Forbidden**\n\nThis error indicates that the API key is valid but the requested feature or resource is disabled for this workspace.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Disabled API Key": {
                    "summary": "Feature disabled",
                    "description": "The API key is valid but the associated feature or endpoint has been disabled for this workspace.",
                    "value": {
                      "details": {
                        "message": "Feature disabled for this API key"
                      },
                      "error": "authentication failed"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "\n**Not Found**\n\nReturned when no transaction was found for the provided transaction hash.\nThis may occur if the transaction was submitted directly to a blockchain\nrather than through the Faraday API.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Transaction not found": {
                    "value": {
                      "details": {
                        "message": "transaction not found"
                      },
                      "error": "not found"
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "\n**Too Many Requests**\n\nThis error indicates that the API key has exceeded its allowed number of requests within the current quota.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Rate Limited API Key": {
                    "summary": "Rate limit exceeded",
                    "description": "The API key has exceeded its quota.",
                    "value": {
                      "details": {
                        "message": "API Key Rate limit exceeded"
                      },
                      "error": "authentication failed"
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "\n**Internal Server Error**\n\nAn unexpected internal error occurred while processing the request. This typically indicates a transient backend or database issue.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "Internal Server Error": {
                    "summary": "Internal error",
                    "description": "An unhandled exception or service outage prevented the request from completing successfully.",
                    "value": {
                      "error": "internal server error"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "AccountNumber": {
        "type": "object",
        "description": "Identifier of an account that is used to process the transaction. Case-sensitive. See IVMS101 Section 5.2.1.3.3.",
        "properties": {
          "account_number": {
            "type": "string",
            "description": "Represents a bank or virtual asset account number.",
            "example": "HOLMESACC12345",
            "maxLength": 50,
            "minLength": 1
          }
        }
      },
      "Address": {
        "type": "object",
        "description": "Describes a full postal address used for geographic or legal identification. See IVMS101 Section 5.2.6.",
        "properties": {
          "address_lines": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string",
              "maxLength": 140,
              "minLength": 1
            },
            "description": "Free format address lines. See IVMS101 Section 5.2.6.3.15 and constraint C8.",
            "example": "[\"Company HQ\", \"Main Street\"]"
          },
          "address_type": {
            "$ref": "#/components/schemas/AddressType",
            "description": "Identifies the nature of the address (geographic/home/business). See IVMS101 Section 5.2.6.3.1."
          },
          "building_name": {
            "type": [
              "string",
              "null"
            ],
            "description": "Name of the building or house. See IVMS101 Section 5.2.6.3.6.",
            "example": "Holmes Residence",
            "maxLength": 35,
            "minLength": 1
          },
          "building_number": {
            "type": [
              "string",
              "null"
            ],
            "description": "Number that identifies the position of a building on a street. See IVMS101 Section 5.2.6.3.5.",
            "example": "221B",
            "maxLength": 16,
            "minLength": 1
          },
          "country": {
            "type": "string",
            "description": "ISO 3166-1 alpha-2 country code. See IVMS101 constraint C3 and Section 5.2.6.3.16.",
            "example": "GB"
          },
          "country_sub_division": {
            "type": [
              "string",
              "null"
            ],
            "description": "Identifies a subdivision of a country (state/region/province). See IVMS101 Section 5.2.6.3.14.",
            "example": "England",
            "maxLength": 35,
            "minLength": 1
          },
          "department": {
            "type": [
              "string",
              "null"
            ],
            "description": "Identification of a division of a large organisation or building. See IVMS101 Section 5.2.6.3.2.",
            "example": "Compliance Department",
            "maxLength": 35,
            "minLength": 1
          },
          "district_name": {
            "type": [
              "string",
              "null"
            ],
            "description": "Subdivision within a country subdivision. See IVMS101 Section 5.2.6.3.13.",
            "example": "Greater London",
            "maxLength": 35,
            "minLength": 1
          },
          "floor": {
            "type": [
              "string",
              "null"
            ],
            "description": "Floor or storey within a building. See IVMS101 Section 5.2.6.3.7.",
            "example": "2nd Floor",
            "maxLength": 70,
            "minLength": 1
          },
          "post_box": {
            "type": [
              "string",
              "null"
            ],
            "description": "Numbered box in a post office. See IVMS101 Section 5.2.6.3.8.",
            "example": "PO123",
            "maxLength": 16,
            "minLength": 1
          },
          "postcode": {
            "type": [
              "string",
              "null"
            ],
            "description": "Postal code. See IVMS101 Section 5.2.6.3.10.",
            "example": "NW1 6XE",
            "maxLength": 16,
            "minLength": 1
          },
          "room": {
            "type": [
              "string",
              "null"
            ],
            "description": "Building room number. See IVMS101 Section 5.2.6.3.9.",
            "example": "Room 221",
            "maxLength": 35,
            "minLength": 1
          },
          "street_name": {
            "type": [
              "string",
              "null"
            ],
            "description": "Name of a street or thoroughfare. See IVMS101 Section 5.2.6.3.4.",
            "example": "Main Street",
            "maxLength": 70,
            "minLength": 1
          },
          "sub_department": {
            "type": [
              "string",
              "null"
            ],
            "description": "Identification of a sub-division. See IVMS101 Section 5.2.6.3.3.",
            "example": "Risk Team",
            "maxLength": 35,
            "minLength": 1
          },
          "town_location_name": {
            "type": [
              "string",
              "null"
            ],
            "description": "Specific location name within the town. See IVMS101 Section 5.2.6.3.12.",
            "example": "Westminster",
            "maxLength": 35,
            "minLength": 1
          },
          "town_name": {
            "type": "string",
            "description": "Name of built-up area. See IVMS101 Section 5.2.6.3.11.",
            "example": "London",
            "maxLength": 35,
            "minLength": 1
          }
        }
      },
      "AddressType": {
        "type": "string",
        "description": "Indicates the type of address used for identification purposes. See IVMS101 Section 5.2.6.",
        "enum": [
          "GEOG",
          "HOME",
          "BIZZ"
        ],
        "example": "GEOG"
      },
      "AssetInfo": {
        "type": "object",
        "description": "Rich asset information including metadata",
        "properties": {
          "account": {
            "type": [
              "string",
              "null"
            ],
            "description": "Sender address (for source) or recipient address (for destination)",
            "example": "5tzFkiKscXHK5ZXCGbXZxdw7gTjjD1mBwuoFbhUvuAi9"
          },
          "amount": {
            "type": [
              "string",
              "null"
            ],
            "description": "Raw amount in base units (integer string)",
            "example": "100000000"
          },
          "amount_formatted": {
            "type": [
              "string",
              "null"
            ],
            "description": "Formatted amount with decimals applied (e.g., \"100.0\")",
            "example": "100.0"
          },
          "decimals": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32",
            "description": "Token decimals",
            "example": 6,
            "minimum": 0
          },
          "logo_url": {
            "type": [
              "string",
              "null"
            ],
            "description": "Token logo URL",
            "example": "https://coin-images.coingecko.com/coins/images/6319/large/usdc.png"
          },
          "name": {
            "type": [
              "string",
              "null"
            ],
            "description": "Human-readable token name (e.g., \"USD Coin\")",
            "example": "USD Coin"
          },
          "network": {
            "type": [
              "string",
              "null"
            ],
            "description": "Network/chain identifier (e.g., \"solana\", \"eth\", \"arb1\")",
            "example": "solana"
          },
          "symbol": {
            "type": [
              "string",
              "null"
            ],
            "description": "Token symbol (e.g., \"USDC\", \"ETH\")",
            "example": "USDC"
          },
          "token": {
            "type": [
              "string",
              "null"
            ],
            "description": "Token contract/mint address",
            "example": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
          },
          "usd_amount": {
            "type": [
              "string",
              "null"
            ],
            "description": "Total USD value (set to \"0\" if not available)",
            "example": "0"
          },
          "usd_price": {
            "type": [
              "string",
              "null"
            ],
            "description": "USD price per token (set to \"0\" if not available)",
            "example": "0"
          }
        }
      },
      "ChainKind": {
        "type": "string",
        "enum": [
          "eip155",
          "solana",
          "cosmos"
        ]
      },
      "CreatePersonPayload": {
        "oneOf": [
          {
            "type": "object",
            "description": "Create a natural person",
            "required": [
              "kind"
            ],
            "properties": {
              "account_numbers": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/AccountNumber"
                },
                "description": "List of bank or wallet account numbers"
              },
              "addresses": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/Address"
                },
                "description": "Physical or mailing addresses"
              },
              "kind": {
                "type": "string",
                "enum": [
                  "natural"
                ]
              },
              "name_identifiers": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/NameIdentifier"
                },
                "description": "Official or alias names associated with this person"
              },
              "national_identifiers": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/NationalIdentifier"
                },
                "description": "National identifiers (e.g., passport, national ID)"
              },
              "person": {
                "$ref": "#/components/schemas/NaturalPerson",
                "description": "Core details about the natural person"
              }
            }
          },
          {
            "type": "object",
            "description": "Create a legal entity (e.g., company)",
            "required": [
              "kind"
            ],
            "properties": {
              "account_numbers": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/AccountNumber"
                },
                "description": "Bank or account numbers associated with the entity"
              },
              "addresses": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/Address"
                },
                "description": "Registered or operating addresses"
              },
              "kind": {
                "type": "string",
                "enum": [
                  "legal"
                ]
              },
              "name_identifiers": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/NameIdentifier"
                },
                "description": "Official or alternate names of the entity"
              },
              "national_identifiers": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/NationalIdentifier"
                },
                "description": "Legal/national identifiers (e.g., tax ID)"
              },
              "person": {
                "$ref": "#/components/schemas/LegalPerson",
                "description": "Core details about the legal entity"
              }
            }
          }
        ]
      },
      "Erc20Approval": {
        "type": "object",
        "required": [
          "token_contract",
          "spender",
          "amount"
        ],
        "properties": {
          "amount": {
            "type": "string",
            "description": "Approval amount (integer string)",
            "example": "100000000"
          },
          "spender": {
            "type": "string",
            "description": "Spender contract address",
            "example": "0x585F053d554B8d4c3983A7BBaDbe13B15BA66F37"
          },
          "token_contract": {
            "type": "string",
            "description": "Token contract address",
            "example": "0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238"
          }
        }
      },
      "ErrorResponse": {
        "type": "object",
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "type": "string"
          }
        }
      },
      "FeeDetail": {
        "type": "object",
        "description": "Detailed fee information for a single fee component",
        "properties": {
          "address": {
            "type": [
              "string",
              "null"
            ],
            "description": "Token contract address",
            "example": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
          },
          "amount": {
            "type": [
              "string",
              "null"
            ],
            "description": "Raw amount in base units (integer string)",
            "example": "50000"
          },
          "amount_formatted": {
            "type": [
              "string",
              "null"
            ],
            "description": "Formatted amount with decimals applied (e.g., \"0.05\")",
            "example": "0.05"
          },
          "decimals": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32",
            "description": "Token decimals",
            "example": 6,
            "minimum": 0
          },
          "logo_url": {
            "type": [
              "string",
              "null"
            ],
            "description": "Token logo URL",
            "example": "https://coin-images.coingecko.com/coins/images/6319/large/usdc.png"
          },
          "name": {
            "type": [
              "string",
              "null"
            ],
            "description": "Human-readable token name (e.g., \"USD Coin\")",
            "example": "USD Coin"
          },
          "network": {
            "type": [
              "string",
              "null"
            ],
            "description": "Network/chain identifier (e.g., \"solana\", \"eth\", \"arb1\")",
            "example": "solana"
          },
          "symbol": {
            "type": [
              "string",
              "null"
            ],
            "description": "Token symbol (e.g., \"USDC\", \"ETH\")",
            "example": "USDC"
          },
          "usd_amount": {
            "type": [
              "string",
              "null"
            ],
            "description": "Total USD value (set to \"0\" if not available)",
            "example": "0"
          },
          "usd_price": {
            "type": [
              "string",
              "null"
            ],
            "description": "USD price per token (set to \"0\" if not available)",
            "example": "0"
          }
        }
      },
      "FeeEstimate": {
        "type": "object",
        "description": "Fee structure containing platform and gas fees",
        "properties": {
          "platform_fee": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/FeeDetail",
                "description": "Platform/router fee charged by the bridging service"
              }
            ]
          }
        }
      },
      "LegalPerson": {
        "type": "object",
        "description": "Represents a legal entity such as a company or organisation. See IVMS101 Section 5.2.9.",
        "properties": {
          "country_of_registration": {
            "type": [
              "string",
              "null"
            ],
            "description": "ISO 3166-1 alpha-2 country code of registration. See IVMS101 constraint C3 and Section 5.2.9.3.5.\nISO 3166-1 alpha-2 country code",
            "example": "GB"
          },
          "customer_identification": {
            "type": [
              "string",
              "null"
            ],
            "description": "A distinct identifier that uniquely identifies the legal person. See IVMS101 Section 5.2.9.3.3.",
            "example": "HOLMES_CORP",
            "maxLength": 50
          }
        }
      },
      "NameIdentifier": {
        "type": "object",
        "description": "Contains primary and secondary names used to identify a person. See IVMS101 Section 5.2.3.",
        "properties": {
          "is_legal": {
            "type": "boolean",
            "description": "Indicates if this is the legal name. See IVMS101 constraints C6/C5.",
            "example": true
          },
          "kind": {
            "$ref": "#/components/schemas/NameTypeCode",
            "description": "The nature of the name specified (legal, alias, birth, etc.). See IVMS101 Section 5.2.4.3.3."
          },
          "primary_identifier": {
            "type": "string",
            "description": "Primary identifier (surname or full name). See IVMS101 Section 5.2.4.3.1.",
            "example": "Sherlock Holmes",
            "maxLength": 100,
            "minLength": 1
          },
          "secondary_identifier": {
            "type": [
              "string",
              "null"
            ],
            "description": "Secondary identifier (forenames, initials). See IVMS101 Section 5.2.4.3.2.",
            "example": "S. Holmes",
            "maxLength": 100
          }
        }
      },
      "NameTypeCode": {
        "type": "string",
        "description": "Specifies the type of name identifier as per IVMS101 Section 7.1.2.",
        "enum": [
          "LEGL",
          "ALIA",
          "BIRT",
          "MAID",
          "MISC"
        ],
        "example": "LEGL"
      },
      "NationalIdentifier": {
        "type": "object",
        "description": "A distinct identifier used by governments to uniquely identify a natural or legal person. Refer to IVMS101 Sections 5.2.8 and 5.2.9.",
        "properties": {
          "country_of_issue": {
            "type": [
              "string",
              "null"
            ],
            "description": "ISO 3166-1 alpha-2 country code of the issuing authority. See IVMS101 constraint C3.",
            "example": "GB"
          },
          "identifier_type": {
            "type": "string",
            "description": "Specifies the type of the national identifier. See IVMS101 Section 5.2.8.3.2.",
            "example": "LEIX",
            "maxLength": 35,
            "minLength": 1
          },
          "national_identifier": {
            "type": "string",
            "description": "An identifier issued by an appropriate issuing authority. See IVMS101 Section 5.2.8.3.1.",
            "example": "GB123456789",
            "maxLength": 35,
            "minLength": 1
          },
          "registration_authority": {
            "type": [
              "string",
              "null"
            ],
            "description": "Registration authority code; 8-character. See IVMS101 Sections C9/C10.",
            "example": "RA000001",
            "maxLength": 8,
            "minLength": 8
          }
        }
      },
      "NaturalPerson": {
        "type": "object",
        "description": "Represents a uniquely distinguishable individual; one single person with KYC-related attributes. See IVMS101 Section 5.2.2.3.",
        "properties": {
          "country_of_residence": {
            "type": [
              "string",
              "null"
            ],
            "description": "ISO 3166-1 alpha-2 country code of residence. See IVMS101 constraint C3 and Section 5.2.2.3.6.\nISO 3166-1 alpha-2 country code",
            "example": "GB"
          },
          "customer_identification": {
            "type": [
              "string",
              "null"
            ],
            "description": "A distinct identifier that uniquely identifies the person to the institution in context. See IVMS101 Section 5.2.2.3.4.",
            "example": "HOLMES001",
            "maxLength": 50
          },
          "date_of_birth": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Date of birth; must be a historic date per constraint C2. See IVMS101 Section 5.2.7.",
            "example": "1854-01-06"
          },
          "place_of_birth": {
            "type": [
              "string",
              "null"
            ],
            "description": "Place of birth (town/city/subdivision/country). See IVMS101 Section 5.2.7.3.2.",
            "example": "Baker Street, London",
            "maxLength": 100,
            "minLength": 1
          }
        }
      },
      "Network": {
        "type": "string",
        "enum": [
          "eth",
          "sepolia",
          "solana",
          "oeth",
          "solana-devnet",
          "osmosis-1",
          "arb1",
          "pol",
          "base",
          "avax",
          "bnb",
          "neutron-1",
          "celestia",
          "opsep",
          "fuji",
          "amoy",
          "basesep"
        ]
      },
      "NetworkInfo": {
        "type": "object",
        "required": [
          "slug",
          "label",
          "kind",
          "aliases",
          "is_testnet"
        ],
        "properties": {
          "aliases": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Alternative strings accepted for this network.\n\n> **Note:** Any alias listed here will also parse correctly in\n> API requests wherever a network slug is expected.",
            "example": [
              "ethereum"
            ]
          },
          "chain_id": {
            "type": [
              "string",
              "null"
            ],
            "description": "Chain ID as a string (e.g. \"1\", \"10\", \"5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\", \"osmosis-1\").",
            "example": "1"
          },
          "is_testnet": {
            "type": "boolean",
            "description": "Indicates whether this network is a testnet.",
            "example": false
          },
          "kind": {
            "$ref": "#/components/schemas/ChainKind",
            "description": "Network family: `eip155`, `solana`, or `cosmos`."
          },
          "label": {
            "type": "string",
            "description": "Human-readable name for the network.",
            "example": "Ethereum"
          },
          "slug": {
            "type": "string",
            "description": "Canonical slug for this blockchain network.\n\n> **Note:** Use this value (or one of the `aliases`) as the `from_chain`\n> or `to_chain` parameter when submitting quote or transaction requests.",
            "example": "eth"
          }
        }
      },
      "Person": {
        "type": "object",
        "required": [
          "id",
          "created_at",
          "person",
          "name_identifiers",
          "national_identifiers",
          "account_numbers",
          "addresses"
        ],
        "properties": {
          "account_numbers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AccountNumber"
            },
            "description": "Account numbers (bank or wallet identifiers).",
            "example": [
              {
                "account_number": "GB29NWBK60161331926819"
              }
            ]
          },
          "addresses": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Address"
            },
            "description": "Registered or physical addresses.",
            "example": [
              {
                "address_type": "GEOG",
                "country": "GB",
                "town_name": "London"
              }
            ]
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp when the person was created (UTC).",
            "example": "2025-07-29T14:45:00"
          },
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "Unique identifier of the person record.",
            "example": "d2fd3b17-1fcd-4c4f-bc0e-3b6f858a5e5d"
          },
          "name_identifiers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NameIdentifier"
            },
            "description": "List of name identifiers (e.g., legal name, aliases).",
            "example": [
              {
                "is_legal": true,
                "kind": "LEGL",
                "primary_identifier": "Acme Corp"
              }
            ]
          },
          "national_identifiers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NationalIdentifier"
            },
            "description": "National identifiers (e.g., passport, tax ID).",
            "example": [
              {
                "country_of_issue": "GB",
                "identifier_type": "tax_id",
                "national_identifier": "123456789"
              }
            ]
          },
          "person": {
            "$ref": "#/components/schemas/PersonCore",
            "description": "The core person object (either natural or legal)."
          }
        }
      },
      "PersonCore": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "person",
              "kind"
            ],
            "properties": {
              "kind": {
                "type": "string",
                "enum": [
                  "natural"
                ]
              },
              "person": {
                "type": "object",
                "description": "Represents a uniquely distinguishable individual; one single person with KYC-related attributes. See IVMS101 Section 5.2.2.3.",
                "properties": {
                  "country_of_residence": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "ISO 3166-1 alpha-2 country code of residence. See IVMS101 constraint C3 and Section 5.2.2.3.6.\nISO 3166-1 alpha-2 country code",
                    "example": "GB"
                  },
                  "customer_identification": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "A distinct identifier that uniquely identifies the person to the institution in context. See IVMS101 Section 5.2.2.3.4.",
                    "example": "HOLMES001",
                    "maxLength": 50
                  },
                  "date_of_birth": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "date",
                    "description": "Date of birth; must be a historic date per constraint C2. See IVMS101 Section 5.2.7.",
                    "example": "1854-01-06"
                  },
                  "place_of_birth": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Place of birth (town/city/subdivision/country). See IVMS101 Section 5.2.7.3.2.",
                    "example": "Baker Street, London",
                    "maxLength": 100,
                    "minLength": 1
                  }
                }
              }
            }
          },
          {
            "type": "object",
            "required": [
              "person",
              "kind"
            ],
            "properties": {
              "kind": {
                "type": "string",
                "enum": [
                  "legal"
                ]
              },
              "person": {
                "type": "object",
                "description": "Represents a legal entity such as a company or organisation. See IVMS101 Section 5.2.9.",
                "properties": {
                  "country_of_registration": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "ISO 3166-1 alpha-2 country code of registration. See IVMS101 constraint C3 and Section 5.2.9.3.5.\nISO 3166-1 alpha-2 country code",
                    "example": "GB"
                  },
                  "customer_identification": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "A distinct identifier that uniquely identifies the legal person. See IVMS101 Section 5.2.9.3.3.",
                    "example": "HOLMES_CORP",
                    "maxLength": 50
                  }
                }
              }
            }
          }
        ],
        "description": "Core person data for either a natural or legal person."
      },
      "Provider": {
        "type": "string",
        "enum": [
          "skipgo",
          "debridge",
          "lifi",
          "squid",
          "switchain",
          "direct",
          "relay",
          "jupiter"
        ]
      },
      "ProviderInfo": {
        "type": "object",
        "description": "---- API-facing struct ----",
        "required": [
          "slug",
          "label",
          "kind",
          "aliases"
        ],
        "properties": {
          "aliases": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Aliases accepted for lookup.",
            "example": [
              "skip",
              "skip-go"
            ]
          },
          "kind": {
            "$ref": "#/components/schemas/ProviderKind",
            "description": "Provider category (aggregator, bridge, etc.)."
          },
          "label": {
            "type": "string",
            "description": "Human-readable name.",
            "example": "Skip Go"
          },
          "slug": {
            "type": "string",
            "description": "Canonical slug for this provider.",
            "example": "skipgo"
          },
          "website": {
            "type": [
              "string",
              "null"
            ],
            "description": "Website or documentation URL (optional).",
            "example": "https://skip.build"
          }
        }
      },
      "ProviderKind": {
        "type": "string",
        "enum": [
          "aggregator",
          "direct",
          "bridge"
        ]
      },
      "QuoteWithRisk": {
        "type": "object",
        "required": [
          "quote",
          "risk"
        ],
        "properties": {
          "quote": {
            "$ref": "#/components/schemas/RouteQuote",
            "description": "The selected best route/quote"
          },
          "risk": {
            "description": "Risk assessment from the ML API (None if the call failed)\n\nNOTE: `PaymentRiskResponse` is from an external crate. We keep the field typed\nas `PaymentRiskResponse` in Rust, but for OpenAPI we document it as JSON and\nprovide a realistic example payload."
          }
        }
      },
      "QuotesWithRisk": {
        "type": "object",
        "required": [
          "quotes",
          "risk"
        ],
        "properties": {
          "quotes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RouteQuote"
            },
            "description": "All viable quotes from supported quote providers (each `RouteQuote` includes its `provider`)"
          },
          "risk": {
            "description": "Risk assessment from the ML API (None if the call failed)\n\nNOTE: `PaymentRiskResponse` is from an external crate. We keep the field typed\nas `PaymentRiskResponse` in Rust, but for OpenAPI we document it as JSON and\nprovide a realistic example payload."
          }
        }
      },
      "RouteQuote": {
        "type": "object",
        "required": [
          "id",
          "provider",
          "created_at",
          "expires_at",
          "min_amount_out"
        ],
        "properties": {
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "RFC3339 timestamp when the quote was created (UTC)",
            "example": "2025-11-03T13:00:00Z"
          },
          "destination": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/AssetInfo",
                "description": "Rich destination asset information with metadata"
              }
            ]
          },
          "expires_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "Optional RFC3339 timestamp indicating when the quote becomes invalid (UTC).\n\nSome providers include explicit expiry times; otherwise this field may be `null`.\nConsumers should treat quotes without this field as ephemeral and validate freshness before execution.",
            "example": "2025-11-03T13:01:00Z"
          },
          "fee": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/FeeEstimate",
                "description": "Fees, if provided by the quote provider"
              }
            ]
          },
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "Quote UUID",
            "example": "b9a1b2a0-8d2b-4e4d-9e64-0e0a8f7a9d3c"
          },
          "min_amount_out": {
            "type": "string",
            "description": "Minimum guaranteed output in base units (integer string)",
            "example": "99500000"
          },
          "provider": {
            "$ref": "#/components/schemas/Provider",
            "description": "Quote provider identifier (e.g., \"deBridge DLN\", \"LI.FI\")"
          },
          "source": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/AssetInfo",
                "description": "Rich source asset information with metadata"
              }
            ]
          },
          "transactions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RouteTransaction"
            },
            "description": "One or more chain-specific transactions required to execute this route"
          }
        }
      },
      "RouteRequest": {
        "type": "object",
        "required": [
          "amount_in",
          "source_asset_denom",
          "source_asset_chain_id",
          "dest_asset_denom",
          "dest_asset_chain_id"
        ],
        "properties": {
          "amount_in": {
            "type": "string",
            "example": "1000000"
          },
          "dest_asset_chain_id": {
            "type": "string",
            "example": "osmosis-1"
          },
          "dest_asset_denom": {
            "type": "string",
            "example": "ibc/498A0751C798A0D9A389AA3691123DADA57DAA4FE165D5C75894505B876BA6E4"
          },
          "source_asset_chain_id": {
            "type": "string",
            "example": "solana"
          },
          "source_asset_denom": {
            "type": "string",
            "example": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
          }
        }
      },
      "RouteResponse": {
        "type": "object",
        "properties": {
          "amount_in": {
            "type": [
              "string",
              "null"
            ]
          },
          "amount_out": {
            "type": [
              "string",
              "null"
            ]
          },
          "chain_ids": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string"
            }
          },
          "dest_asset_chain_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "dest_asset_denom": {
            "type": [
              "string",
              "null"
            ]
          },
          "does_swap": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "estimated_amount_out": {
            "type": [
              "string",
              "null"
            ]
          },
          "estimated_route_duration_seconds": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "required_chain_addresses": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string"
            }
          },
          "source_asset_chain_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "source_asset_denom": {
            "type": [
              "string",
              "null"
            ]
          },
          "swap_price_impact_percent": {
            "type": [
              "string",
              "null"
            ]
          },
          "txs_required": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "usd_amount_in": {
            "type": [
              "string",
              "null"
            ]
          },
          "usd_amount_out": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "RouteTransaction": {
        "oneOf": [
          {
            "type": "object",
            "description": "An EVM transaction",
            "required": [
              "chain_id",
              "to",
              "data",
              "value",
              "kind"
            ],
            "properties": {
              "chain_id": {
                "type": "string",
                "description": "Target chain ID (e.g. 11155111)"
              },
              "data": {
                "type": "string",
                "description": "Calldata or ABI-encoded payload"
              },
              "erc20_approvals": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/Erc20Approval"
                },
                "description": "Optional list of ERC20 approvals required before execution"
              },
              "kind": {
                "type": "string",
                "enum": [
                  "eip155"
                ]
              },
              "meta": {
                "description": "Optional chain-specific metadata (gas, nonce, etc.)"
              },
              "to": {
                "type": "string",
                "description": "To address"
              },
              "value": {
                "type": "string",
                "description": "Value in wei"
              }
            }
          },
          {
            "type": "object",
            "description": "A Cosmos transaction (usually one or more messages)",
            "required": [
              "chain_id",
              "msgs",
              "kind"
            ],
            "properties": {
              "chain_id": {
                "type": "string"
              },
              "kind": {
                "type": "string",
                "enum": [
                  "cosmos"
                ]
              },
              "msgs": {
                "type": "array",
                "items": {}
              }
            }
          },
          {
            "type": "object",
            "description": "A Solana transaction (base64 encoded)",
            "required": [
              "chain_id",
              "tx_base64",
              "kind"
            ],
            "properties": {
              "chain_id": {
                "type": "string"
              },
              "kind": {
                "type": "string",
                "enum": [
                  "solana"
                ]
              },
              "meta": {
                "description": "Optional metadata (recent_blockhash, expiry, etc.)"
              },
              "tx_base64": {
                "type": "string"
              }
            }
          }
        ]
      },
      "SubmitTransactionRequest": {
        "type": "object",
        "required": [
          "quote_id",
          "network"
        ],
        "properties": {
          "network": {
            "$ref": "#/components/schemas/Network",
            "description": "The blockchain network to submit the transaction to (e.g., `solana`)."
          },
          "quote_id": {
            "type": "string",
            "format": "uuid",
            "description": "The quote you are executing (must exist in your workspace).",
            "example": "b9a1b2a0-8d2b-4e4d-9e64-0e0a8f7a9d3c"
          },
          "signed_payload": {
            "type": "string",
            "description": "The signed transaction.",
            "example": "AQABAgMEBQYH...",
            "maxLength": 8192,
            "minLength": 10
          },
          "travel_rule_compliant": {
            "type": "boolean",
            "description": "Whether the transaction complies with Travel Rule requirements.",
            "example": true
          }
        }
      },
      "SubmitTransactionResponse": {
        "type": "object",
        "properties": {
          "tx_hash": {
            "type": "string",
            "description": "The transaction hash returned after successful broadcast.",
            "default": "",
            "example": "3h9ZEkZqKwHvzyWdRBBZzK8u8CpRJikvV1UWzMykwMyB"
          }
        },
        "example": {
          "tx_hash": "3h9ZEkZqKwHvzyWdRBBZzK8u8CpRJikvV1UWzMykwMyB"
        }
      },
      "TokenKind": {
        "type": "string",
        "description": "What kind of asset this is on that network",
        "enum": [
          "native",
          "erc20",
          "spl"
        ]
      },
      "TokenMeta": {
        "type": "object",
        "required": [
          "network",
          "slug",
          "label",
          "symbol",
          "exponent",
          "kind",
          "aliases"
        ],
        "properties": {
          "addr": {
            "type": [
              "string",
              "null"
            ],
            "description": "Primary address/mint (None for natives)."
          },
          "aliases": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Extra accepted inputs for parsing (symbols, legacy names, alternate mints)."
          },
          "exponent": {
            "type": "integer",
            "format": "int32",
            "description": "Base-10 exponent (USDC=6).",
            "minimum": 0
          },
          "kind": {
            "$ref": "#/components/schemas/TokenKind",
            "description": "Type on this chain."
          },
          "label": {
            "type": "string",
            "description": "Human label (UI)."
          },
          "network": {
            "$ref": "#/components/schemas/Network"
          },
          "slug": {
            "type": "string",
            "description": "Canonical slug you expose on the wire (lowercase, e.g., \"usdc\")."
          },
          "symbol": {
            "type": "string",
            "description": "Symbol typically fed to aggregators that want symbols (e.g., \"USDC\")."
          }
        }
      },
      "TransactionReport": {
        "type": "object",
        "description": "Summary of a processed on-chain transaction.\n\nA `TransactionReport` captures the lifecycle and compliance details\nof a submitted transfer, including its hash, network, amount,\nand any associated IVMS101 sender and recipient records.",
        "required": [
          "tx_hash",
          "network",
          "amount",
          "travel_rule_compliant",
          "created_at"
        ],
        "properties": {
          "amount": {
            "type": "integer",
            "format": "int64",
            "description": "The transaction amount in the smallest base unit.\n\nFor example, 1 USDC = `1000000` when using 6-decimal precision.",
            "example": 1000000
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp when the transaction was created or first observed.\n\nUses UTC and ISO 8601 format.",
            "example": "2025-11-06T19:45:32Z"
          },
          "network": {
            "type": "string",
            "description": "The blockchain network on which the transaction was broadcast.\n\nTypically matches one of the supported Faraday networks such as\n`ethereum\"`, or `\"solana\"`.",
            "example": "solana"
          },
          "recipient": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/Person",
                "description": "Full IVMS101 record of the transaction recipient, if available.\n\nWill be `null` if the recipient record has not been attached or processed."
              }
            ]
          },
          "sender": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/Person",
                "description": "Full IVMS101 record of the transaction sender, if available.\n\nWill be `null` if the sender record has not been attached or processed."
              }
            ]
          },
          "travel_rule_compliant": {
            "type": "boolean",
            "description": "Whether this transaction was compliant with the Travel Rule (FATF R.16).\n\nIf `true`, sender and recipient identity information were\nsuccessfully attached and transmitted according to IVMS101 standards.",
            "example": true
          },
          "tx_hash": {
            "type": "string",
            "description": "The on-chain transaction hash.\n\nUsed to uniquely identify the transaction on the given network.",
            "example": "0x9a9b6f5a123c4def5678901234567890abcdef1234567890abcdef1234567890"
          }
        }
      },
      "TxStatus": {
        "type": "string",
        "description": "Canonical transaction lifecycle states shared across all providers.",
        "enum": [
          "submitted",
          "pending",
          "completed",
          "failed",
          "abandoned",
          "unknown"
        ],
        "example": "pending"
      },
      "TxStatusResponse": {
        "type": "object",
        "required": [
          "provider",
          "status",
          "raw"
        ],
        "properties": {
          "provider": {
            "type": "string",
            "description": "Provider name (e.g., \"Skip Go\", \"Squid\", \"Axelar\").",
            "example": "Skip Go"
          },
          "raw": {
            "type": "object",
            "description": "Raw provider payload for debugging or analytics."
          },
          "status": {
            "$ref": "#/components/schemas/TxStatus",
            "description": "Normalized transaction status (Pending, Completed, etc.)"
          }
        }
      }
    },
    "securitySchemes": {
      "BearerAuth": {
        "type": "http",
        "scheme": "bearer"
      }
    }
  },
  "security": [
    {
      "BearerAuth": []
    }
  ],
  "tags": [
    {
      "name": "Transactions",
      "description": "Send, track and find transactions"
    },
    {
      "name": "Persons",
      "description": "Manage IVMS101 Person records. This includes creation and retrieval of structured person data for compliance with FATF Travel Rule standards."
    },
    {
      "name": "Chains",
      "description": "Chains supported by Faraday"
    },
    {
      "name": "Tokens",
      "description": "Tokens supported by Faraday"
    },
    {
      "name": "Providers",
      "description": "Providers supported by Faraday"
    }
  ]
}