openapi: 3.1.0 info: title: OpenZeppelin Relayer Health Relayers API description: OpenZeppelin Relayer API termsOfService: https://www.openzeppelin.com/tos contact: name: OpenZeppelin url: https://www.openzeppelin.com license: name: AGPL-3.0 license url: https://github.com/OpenZeppelin/openzeppelin-relayer/blob/main/LICENSE version: 1.5.0 tags: - name: Relayers description: Relayers are the core components of the OpenZeppelin Relayer API. They are responsible for executing transactions on behalf of users and providing a secure and reliable way to interact with the blockchain. paths: /api/v1/relayers: get: tags: - Relayers summary: Relayer routes implementation description: 'Note: OpenAPI documentation for these endpoints can be found in the `openapi.rs` file Lists all relayers with pagination support.' operationId: listRelayers parameters: - name: page in: query description: Page number for pagination (starts at 1) required: false schema: type: integer minimum: 0 - name: per_page in: query description: 'Number of items per page (default: 10)' required: false schema: type: integer minimum: 0 responses: '200': description: Relayer list retrieved successfully content: application/json: schema: $ref: '#/components/schemas/ApiResponse_Vec_RelayerResponse' '400': description: BadRequest content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Bad Request success: false '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Unauthorized success: false '429': description: Too Many Requests content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Too Many Requests success: false '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Internal Server Error success: false security: - bearer_auth: [] post: tags: - Relayers summary: Creates a new relayer. operationId: createRelayer requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateRelayerRequest' required: true responses: '201': description: Relayer created successfully content: application/json: schema: $ref: '#/components/schemas/ApiResponse_RelayerResponse' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Bad Request success: false '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Unauthorized success: false '409': description: Relayer with this ID already exists content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Relayer with this ID already exists success: false '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Internal Server Error success: false security: - bearer_auth: [] /api/v1/relayers/{relayer_id}: get: tags: - Relayers summary: Retrieves details of a specific relayer by ID. operationId: getRelayer parameters: - name: relayer_id in: path description: The unique identifier of the relayer required: true schema: type: string responses: '200': description: Relayer details retrieved successfully content: application/json: schema: $ref: '#/components/schemas/ApiResponse_RelayerResponse' '400': description: BadRequest content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Bad Request success: false '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Unauthorized success: false '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Relayer with ID relayer_id not found success: false '429': description: Too Many Requests content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Too Many Requests success: false '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Internal Server Error success: false security: - bearer_auth: [] delete: tags: - Relayers summary: Deletes a relayer by ID. operationId: deleteRelayer parameters: - name: relayer_id in: path description: The unique identifier of the relayer required: true schema: type: string responses: '200': description: Relayer deleted successfully content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' '400': description: Bad Request - Cannot delete relayer with active transactions content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Cannot delete relayer 'relayer_id' because it has N transaction(s). Please wait for all transactions to complete or cancel them before deleting the relayer. success: false '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Unauthorized success: false '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Relayer with ID relayer_id not found success: false '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Internal Server Error success: false security: - bearer_auth: [] patch: tags: - Relayers summary: Updates a relayer's information based on the provided update request. operationId: updateRelayer parameters: - name: relayer_id in: path description: The unique identifier of the relayer required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateRelayerRequest' required: true responses: '200': description: Relayer updated successfully content: application/json: schema: $ref: '#/components/schemas/ApiResponse_RelayerResponse' '400': description: BadRequest content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Bad Request success: false '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Unauthorized success: false '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Relayer with ID relayer_id not found success: false '429': description: Too Many Requests content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Too Many Requests success: false '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Internal Server Error success: false security: - bearer_auth: [] /api/v1/relayers/{relayer_id}/balance: get: tags: - Relayers summary: Retrieves the balance of a specific relayer. operationId: getRelayerBalance parameters: - name: relayer_id in: path description: The unique identifier of the relayer required: true schema: type: string responses: '200': description: Relayer balance retrieved successfully content: application/json: schema: $ref: '#/components/schemas/ApiResponse_BalanceResponse' '400': description: BadRequest content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Bad Request success: false '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Unauthorized success: false '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Relayer with ID relayer_id not found success: false '429': description: Too Many Requests content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Too Many Requests success: false '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Internal Server Error success: false security: - bearer_auth: [] /api/v1/relayers/{relayer_id}/rpc: post: tags: - Relayers summary: Performs a JSON-RPC call using the specified relayer. operationId: rpc parameters: - name: relayer_id in: path description: The unique identifier of the relayer required: true schema: type: string requestBody: description: JSON-RPC request with method and parameters content: application/json: schema: $ref: '#/components/schemas/JsonRpcRequest_NetworkRpcRequest' example: id: 1 jsonrpc: '2.0' method: feeEstimate params: fee_token: SOL network: solana transaction: base64_encoded_transaction required: true responses: '200': description: RPC method executed successfully content: application/json: schema: $ref: '#/components/schemas/JsonRpcResponse_NetworkRpcResult' '400': description: BadRequest content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Bad Request success: false '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Unauthorized success: false '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Relayer with ID relayer_id not found success: false '429': description: Too Many Requests content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Too Many Requests success: false '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Internal Server Error success: false security: - bearer_auth: [] /api/v1/relayers/{relayer_id}/sign: post: tags: - Relayers summary: Signs data using the specified relayer. operationId: sign parameters: - name: relayer_id in: path description: The unique identifier of the relayer required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/SignDataRequest' required: true responses: '200': description: Relayer signed data successfully content: application/json: schema: $ref: '#/components/schemas/ApiResponse_SignDataResponse' '400': description: BadRequest content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Bad Request success: false '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Unauthorized success: false '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Not found success: false '429': description: Too Many Requests content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Too Many Requests success: false '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Internal Server Error success: false security: - bearer_auth: [] /api/v1/relayers/{relayer_id}/sign-transaction: post: tags: - Relayers summary: Signs a transaction using the specified relayer (Stellar only). operationId: signTransaction parameters: - name: relayer_id in: path description: The unique identifier of the relayer required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/SignTransactionRequest' required: true responses: '200': description: Transaction signed successfully content: application/json: schema: $ref: '#/components/schemas/ApiResponse_SignTransactionResponse' '400': description: BadRequest content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Bad Request success: false '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Unauthorized success: false '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Relayer with ID relayer_id not found success: false '429': description: Too Many Requests content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Too Many Requests success: false '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Internal Server Error success: false security: - bearer_auth: [] /api/v1/relayers/{relayer_id}/sign-typed-data: post: tags: - Relayers summary: Signs typed data using the specified relayer. operationId: signTypedData parameters: - name: relayer_id in: path description: The unique identifier of the relayer required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/SignTypedDataRequest' required: true responses: '200': description: Relayer signed typed data successfully content: application/json: schema: $ref: '#/components/schemas/ApiResponse_SignDataResponse' '400': description: BadRequest content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Bad Request success: false '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Unauthorized success: false '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Relayer with ID relayer_id not found success: false '429': description: Too Many Requests content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Too Many Requests success: false '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Internal Server Error success: false security: - bearer_auth: [] /api/v1/relayers/{relayer_id}/status: get: tags: - Relayers summary: Fetches the current status of a specific relayer. operationId: getRelayerStatus parameters: - name: relayer_id in: path description: The unique identifier of the relayer required: true schema: type: string responses: '200': description: Relayer status retrieved successfully content: application/json: schema: $ref: '#/components/schemas/ApiResponse_RelayerStatus' '400': description: BadRequest content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Bad Request success: false '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Unauthorized success: false '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Relayer with ID relayer_id not found success: false '429': description: Too Many Requests content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Too Many Requests success: false '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Internal Server Error success: false security: - bearer_auth: [] /api/v1/relayers/{relayer_id}/transactions: post: tags: - Relayers summary: Sends a transaction through the specified relayer. operationId: sendTransaction parameters: - name: relayer_id in: path description: The unique identifier of the relayer required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/NetworkTransactionRequest' required: true responses: '200': description: Relayer transactions sent successfully content: application/json: schema: $ref: '#/components/schemas/ApiResponse_TransactionResponse' '400': description: BadRequest content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Bad Request success: false '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Unauthorized success: false '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Relayer with ID relayer_id not found success: false '429': description: Too Many Requests content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Too Many Requests success: false '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Internal Server Error success: false security: - bearer_auth: [] /api/v1/relayers/{relayer_id}/transactions/: get: tags: - Relayers summary: Lists all transactions for a specific relayer with pagination. operationId: listTransactions parameters: - name: relayer_id in: path description: The unique identifier of the relayer required: true schema: type: string - name: page in: query description: Page number for pagination (starts at 1) required: false schema: type: integer minimum: 0 - name: per_page in: query description: 'Number of items per page (default: 10)' required: false schema: type: integer minimum: 0 responses: '200': description: Relayer transactions retrieved successfully content: application/json: schema: $ref: '#/components/schemas/ApiResponse_Vec_TransactionResponse' '400': description: BadRequest content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Bad Request success: false '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Unauthorized success: false '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Relayer with ID relayer_id not found success: false '429': description: Too Many Requests content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Too Many Requests success: false '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Internal Server Error success: false security: - bearer_auth: [] /api/v1/relayers/{relayer_id}/transactions/by-nonce/{nonce}: get: tags: - Relayers summary: Retrieves a transaction by its nonce value. operationId: getTransactionByNonce parameters: - name: relayer_id in: path description: The unique identifier of the relayer required: true schema: type: string - name: nonce in: path description: The nonce of the transaction required: true schema: type: integer minimum: 0 responses: '200': description: Relayer transaction retrieved successfully content: application/json: schema: $ref: '#/components/schemas/ApiResponse_TransactionResponse' '400': description: BadRequest content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Bad Request success: false '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Unauthorized success: false '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Not found success: false '429': description: Too Many Requests content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Too Many Requests success: false '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Internal Server Error success: false security: - bearer_auth: [] /api/v1/relayers/{relayer_id}/transactions/pending: delete: tags: - Relayers summary: Deletes all pending transactions for a specific relayer. operationId: deletePendingTransactions parameters: - name: relayer_id in: path description: The unique identifier of the relayer required: true schema: type: string responses: '200': description: Relayer pending transactions successfully content: application/json: schema: $ref: '#/components/schemas/ApiResponse_DeletePendingTransactionsResponse' '400': description: BadRequest content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Bad Request success: false '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Unauthorized success: false '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Relayer with ID relayer_id not found success: false '429': description: Too Many Requests content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Too Many Requests success: false '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Internal Server Error success: false security: - bearer_auth: [] /api/v1/relayers/{relayer_id}/transactions/sponsored/build: post: tags: - Relayers summary: Prepares a sponsored (gasless) transaction with fee payments. description: 'This endpoint builds a transaction where the relayer will pay the network fees on behalf of the user. The user pays fees in a token of their choice (e.g., USDC) instead of the native network currency. The endpoint accepts either a pre-built transaction XDR or a set of operations to build a transaction from. It returns a prepared transaction that includes: - The transaction XDR (base64 encoded) ready for signing - The fee amount in both the fee token and native currency (stroops for Stellar) - The fee token identifier - The transaction validity timestamp After receiving the prepared transaction, the user must sign it and submit it through the standard transaction submission endpoint. For Stellar, the transaction will be wrapped in a fee-bump transaction where the relayer pays the network fees.' operationId: buildSponsoredTransaction parameters: - name: relayer_id in: path description: The unique identifier of the relayer required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/SponsoredTransactionBuildRequest' required: true responses: '200': description: Sponsored transaction built successfully content: application/json: schema: $ref: '#/components/schemas/ApiResponse_SponsoredTransactionBuildResponse' example: data: fee_in_stroops: '100000' fee_in_token: '1.5' fee_token: USDC:GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN transaction: AAAAAgAAAAD... valid_until: '2024-01-01T00:00:00Z' message: Sponsored transaction built successfully success: true '400': description: Bad Request - Invalid request parameters content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Bad Request success: false '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Unauthorized success: false '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Relayer with ID relayer_id not found success: false '429': description: Too Many Requests content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Too Many Requests success: false '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Internal Server Error success: false security: - bearer_auth: [] /api/v1/relayers/{relayer_id}/transactions/sponsored/quote: post: tags: - Relayers summary: Estimates fees for a sponsored (gasless) transaction. description: 'This endpoint provides fee estimation for transactions where the relayer will pay the network fees on behalf of the user. The user pays fees in a token of their choice (e.g., USDC) instead of the native network currency (e.g., XLM for Stellar). The endpoint accepts either a pre-built transaction XDR or a set of operations to build a transaction from. It returns the estimated fee amount in the specified fee token and the conversion rate from the native currency.' operationId: quoteSponsoredTransaction parameters: - name: relayer_id in: path description: The unique identifier of the relayer required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/SponsoredTransactionQuoteRequest' required: true responses: '200': description: Fee estimate retrieved successfully content: application/json: schema: $ref: '#/components/schemas/ApiResponse_SponsoredTransactionQuoteResponse' example: data: conversion_rate: '0.15' estimated_fee: '1.5' message: Fee estimate retrieved successfully success: true '400': description: Bad Request - Invalid request parameters content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Bad Request success: false '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Unauthorized success: false '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Relayer with ID relayer_id not found success: false '429': description: Too Many Requests content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Too Many Requests success: false '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Internal Server Error success: false security: - bearer_auth: [] /api/v1/relayers/{relayer_id}/transactions/{transaction_id}: get: tags: - Relayers summary: Retrieves a specific transaction by its ID. operationId: getTransactionById parameters: - name: relayer_id in: path description: The unique identifier of the relayer required: true schema: type: string - name: transaction_id in: path description: The unique identifier of the transaction required: true schema: type: string responses: '200': description: Relayer transaction retrieved successfully content: application/json: schema: $ref: '#/components/schemas/ApiResponse_TransactionResponse' '400': description: BadRequest content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Bad Request success: false '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Unauthorized success: false '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Not Found success: false '429': description: Too Many Requests content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Too Many Requests success: false '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Internal Server Error success: false security: - bearer_auth: [] put: tags: - Relayers summary: Replaces a specific transaction with a new one. operationId: replaceTransaction parameters: - name: relayer_id in: path description: The unique identifier of the relayer required: true schema: type: string - name: transaction_id in: path description: The unique identifier of the transaction required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/NetworkTransactionRequest' required: true responses: '200': description: Relayer transaction replaced successfully content: application/json: schema: $ref: '#/components/schemas/ApiResponse_TransactionResponse' '400': description: BadRequest content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Bad Request success: false '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Unauthorized success: false '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Not found success: false '429': description: Too Many Requests content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Too Many Requests success: false '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Internal Server Error success: false security: - bearer_auth: [] delete: tags: - Relayers summary: Cancels a specific transaction by its ID. operationId: cancelTransaction parameters: - name: relayer_id in: path description: The unique identifier of the relayer required: true schema: type: string - name: transaction_id in: path description: The unique identifier of the transaction required: true schema: type: string responses: '200': description: Relayer transaction canceled successfully content: application/json: schema: $ref: '#/components/schemas/ApiResponse_TransactionResponse' '400': description: BadRequest content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Bad Request success: false '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Unauthorized success: false '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Not found success: false '429': description: Too Many Requests content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Too Many Requests success: false '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ApiResponse_String' example: data: null message: Internal Server Error success: false security: - bearer_auth: [] components: schemas: AssetSpec: oneOf: - type: object required: - type properties: type: type: string enum: - native - type: object required: - code - issuer - type properties: code: type: string issuer: type: string type: type: string enum: - credit4 - type: object required: - code - issuer - type properties: code: type: string issuer: type: string type: type: string enum: - credit12 CreateRelayerPolicyRequest: oneOf: - $ref: '#/components/schemas/RelayerEvmPolicy' - $ref: '#/components/schemas/RelayerSolanaPolicy' - $ref: '#/components/schemas/RelayerStellarPolicy' description: Policy types for create requests - deserialized based on network_type from parent request SignAndSendTransactionResult: type: object required: - transaction - signature - id properties: id: type: string signature: type: string transaction: $ref: '#/components/schemas/EncodedSerializedTransaction' EvmRpcResult: oneOf: - description: Raw JSON-RPC response value. Covers string, array or object results. TransactionStatus: type: string enum: - canceled - pending - sent - submitted - mined - confirmed - failed - expired RelayerSolanaSwapConfig: type: object description: Solana swap policy configuration properties: cron_schedule: type: string description: Cron schedule for executing token swap logic to keep relayer funded. Optional. jupiter_swap_options: $ref: '#/components/schemas/JupiterSwapOptions' description: Swap options for JupiterSwap strategy. Optional. min_balance_threshold: type: integer format: int64 description: Min sol balance to execute token swap logic to keep relayer funded. Optional. minimum: 0 strategy: $ref: '#/components/schemas/SolanaSwapStrategy' description: DEX strategy to use for token swaps. additionalProperties: false ApiResponse_BalanceResponse: type: object required: - success properties: data: type: object required: - balance - unit properties: balance: type: integer minimum: 0 unit: type: string example: wei error: type: string metadata: $ref: '#/components/schemas/PluginMetadata' pagination: $ref: '#/components/schemas/PaginationMeta' success: type: boolean RelayerEvmPolicy: type: object description: EVM-specific relayer policy configuration properties: eip1559_pricing: type: - boolean - 'null' gas_limit_estimation: type: - boolean - 'null' gas_price_cap: type: - integer - 'null' minimum: 0 min_balance: type: - integer - 'null' minimum: 0 private_transactions: type: - boolean - 'null' whitelist_receivers: type: - array - 'null' items: type: string additionalProperties: false UpdateRelayerRequest: type: object properties: custom_rpc_urls: type: - array - 'null' items: $ref: '#/components/schemas/RpcConfig' name: type: - string - 'null' notification_id: type: string paused: type: boolean policies: $ref: '#/components/schemas/CreateRelayerPolicyRequest' description: Raw policy JSON - will be validated against relayer's network type during application additionalProperties: false SignDataRequest: type: object required: - message properties: message: type: string SolanaTransactionResponse: type: object required: - id - status - created_at - transaction properties: confirmed_at: type: string created_at: type: string id: type: string instructions: type: array items: $ref: '#/components/schemas/SolanaInstructionSpec' sent_at: type: string signature: type: string status: $ref: '#/components/schemas/TransactionStatus' status_reason: type: string transaction: type: string RelayerNetworkType: type: string description: Network type enum for relayers enum: - evm - solana - stellar RpcConfig: type: object description: 'Configuration for an RPC endpoint. This struct contains only persistent configuration (URL and weight). Health metadata (failures, pause state) is managed separately via `RpcHealthStore`.' required: - url - weight properties: url: type: string description: The RPC endpoint URL. weight: type: integer format: int32 description: 'The weight of this endpoint in the weighted round-robin selection. Defaults to [`DEFAULT_RPC_WEIGHT`]. Should be between 0 and 100.' default: 100 maximum: 100 minimum: 0 example: url: https://rpc.example.com weight: 100 SolanaRpcRequest: oneOf: - type: object required: - params - method properties: method: type: string enum: - feeEstimate params: $ref: '#/components/schemas/SolanaFeeEstimateRequestParams' example: feeEstimate - type: object required: - params - method properties: method: type: string enum: - transferTransaction params: $ref: '#/components/schemas/TransferTransactionRequestParams' example: transferTransaction - type: object required: - params - method properties: method: type: string enum: - prepareTransaction params: $ref: '#/components/schemas/SolanaPrepareTransactionRequestParams' example: prepareTransaction - type: object required: - params - method properties: method: type: string enum: - signTransaction params: $ref: '#/components/schemas/SignTransactionRequestParams' example: signTransaction - type: object required: - params - method properties: method: type: string enum: - signAndSendTransaction params: $ref: '#/components/schemas/SignAndSendTransactionRequestParams' example: signAndSendTransaction - type: object required: - params - method properties: method: type: string enum: - getSupportedTokens params: $ref: '#/components/schemas/GetSupportedTokensRequestParams' example: getSupportedTokens - type: object required: - params - method properties: method: type: string enum: - getFeaturesEnabled params: $ref: '#/components/schemas/GetFeaturesEnabledRequestParams' example: getFeaturesEnabled - type: object required: - params - method properties: method: type: string enum: - rawRpcRequest params: type: object required: - method - params properties: method: type: string params: {} example: rawRpcRequest ApiResponse_SponsoredTransactionQuoteResponse: type: object required: - success properties: data: oneOf: - $ref: '#/components/schemas/SolanaFeeEstimateResult' description: Solana-specific fee estimate result - $ref: '#/components/schemas/StellarFeeEstimateResult' description: Stellar-specific fee estimate result (classic and Soroban) description: 'Network-agnostic fee estimate response for gasless transactions. Contains network-specific fee estimate results.' error: type: string metadata: $ref: '#/components/schemas/PluginMetadata' pagination: $ref: '#/components/schemas/PaginationMeta' success: type: boolean TransferTransactionRequestParams: type: object required: - amount - token - source - destination properties: amount: type: integer format: int64 minimum: 0 destination: type: string source: type: string token: type: string additionalProperties: false StellarPolicyResponse: type: object description: Stellar policy response model for OpenAPI documentation properties: allowed_tokens: type: array items: $ref: '#/components/schemas/StellarAllowedTokensPolicy' concurrent_transactions: type: boolean fee_margin_percentage: type: number format: float fee_payment_strategy: $ref: '#/components/schemas/StellarFeePaymentStrategy' max_fee: type: integer format: int32 minimum: 0 min_balance: type: integer format: int64 minimum: 0 slippage_percentage: type: number format: float swap_config: $ref: '#/components/schemas/RelayerStellarSwapConfig' timeout_seconds: type: integer format: int64 minimum: 0 additionalProperties: false SolanaAllowedTokensPolicy: type: object description: Configuration for allowed token handling on Solana required: - mint properties: decimals: type: integer format: int32 minimum: 0 max_allowed_fee: type: integer format: int64 minimum: 0 mint: type: string swap_config: $ref: '#/components/schemas/SolanaAllowedTokensSwapConfig' symbol: type: string additionalProperties: false SignTransactionRequest: oneOf: - $ref: '#/components/schemas/SignTransactionRequestStellar' - type: array items: type: integer format: int32 minimum: 0 - $ref: '#/components/schemas/SignTransactionRequestSolana' SolanaAccountMeta: type: object description: Account metadata for a Solana instruction required: - pubkey - is_signer - is_writable properties: is_signer: type: boolean description: Whether the account is a signer is_writable: type: boolean description: Whether the account is writable pubkey: type: string description: Account public key (base58-encoded) CreateRelayerRequest: type: object description: Request model for creating a new relayer required: - name - network - paused - network_type - signer_id properties: custom_rpc_urls: type: array items: $ref: '#/components/schemas/RpcConfig' id: type: string name: type: string network: type: string network_type: $ref: '#/components/schemas/RelayerNetworkType' notification_id: type: string paused: type: boolean policies: $ref: '#/components/schemas/CreateRelayerPolicyRequest' description: Policies - will be deserialized based on the network_type field signer_id: type: string additionalProperties: false StellarFeeEstimateResult: type: object required: - fee_in_token_ui - fee_in_token - conversion_rate properties: conversion_rate: type: string description: Conversion rate from XLM to token (as string) fee_in_token: type: string description: Estimated fee in token amount (raw units as string) fee_in_token_ui: type: string description: Estimated fee in token amount (decimal UI representation as string) max_fee_in_token: type: - string - 'null' description: 'Maximum fee in token amount (raw units as string). Only present for Soroban gas abstraction - includes slippage buffer.' max_fee_in_token_ui: type: - string - 'null' description: 'Maximum fee in token amount (decimal UI representation as string). Only present for Soroban gas abstraction - includes slippage buffer.' SolanaPrepareTransactionRequestParams: type: object required: - transaction - fee_token properties: fee_token: type: string transaction: $ref: '#/components/schemas/EncodedSerializedTransaction' additionalProperties: false SolanaInstructionSpec: type: object description: Specification for a Solana instruction required: - program_id - accounts - data properties: accounts: type: array items: $ref: '#/components/schemas/SolanaAccountMeta' description: Account metadata for the instruction data: type: string description: Instruction data (base64-encoded) program_id: type: string description: Program ID (base58-encoded pubkey) SolanaPolicyResponse: type: object description: Solana policy response model for OpenAPI documentation properties: allowed_accounts: type: array items: type: string allowed_programs: type: array items: type: string allowed_tokens: type: array items: $ref: '#/components/schemas/SolanaAllowedTokensPolicy' disallowed_accounts: type: array items: type: string fee_margin_percentage: type: number format: float fee_payment_strategy: $ref: '#/components/schemas/SolanaFeePaymentStrategy' max_allowed_fee_lamports: type: integer format: int64 minimum: 0 max_signatures: type: integer format: int32 minimum: 0 max_tx_data_size: type: integer format: int32 minimum: 0 min_balance: type: integer format: int64 minimum: 0 swap_config: $ref: '#/components/schemas/RelayerSolanaSwapConfig' additionalProperties: false SignTransactionRequestParams: type: object required: - transaction properties: transaction: $ref: '#/components/schemas/EncodedSerializedTransaction' additionalProperties: false SponsoredTransactionBuildRequest: oneOf: - $ref: '#/components/schemas/SolanaPrepareTransactionRequestParams' description: Solana-specific prepare transaction request parameters - $ref: '#/components/schemas/StellarPrepareTransactionRequestParams' description: Stellar-specific prepare transaction request parameters (classic and Soroban) description: 'Network-agnostic prepare transaction request parameters for gasless transactions. Contains network-specific request parameters for preparing transactions with fee payments. The network type is inferred from the relayer''s network configuration. For Stellar, supports both classic and Soroban gas abstraction: - Classic: Pass operations or transaction_xdr with classic fee token - Soroban: Pass transaction_xdr containing InvokeHostFunction, user_address, and contract fee token' StellarFeeEstimateRequestParams: type: object required: - fee_token properties: fee_token: type: string description: 'Asset identifier for fee token. For classic: "native" or "USDC:GA5Z..." format. For Soroban: contract address (C...) format.' operations: type: - array - 'null' items: $ref: '#/components/schemas/OperationSpec' description: 'Operations array to build transaction from Mutually exclusive with transaction_xdr field' source_account: type: - string - 'null' description: 'Source account address (required when operations are provided) For sponsored transactions, this should be the user''s account address' transaction_xdr: type: - string - 'null' description: 'Pre-built transaction XDR (base64 encoded, signed or unsigned) Mutually exclusive with operations field. For Soroban gas abstraction: pass XDR containing InvokeHostFunction operation.' additionalProperties: false RelayerStellarSwapConfig: type: object description: Stellar swap policy configuration properties: cron_schedule: type: string description: Cron schedule for executing token swap logic to keep relayer funded. Optional. min_balance_threshold: type: integer format: int64 description: Min XLM balance (in stroops) to execute token swap logic to keep relayer funded. Optional. minimum: 0 strategies: type: array items: $ref: '#/components/schemas/StellarSwapStrategy' description: 'DEX strategies to use for token swaps, in priority order. Strategies are tried sequentially until one can handle the asset.' additionalProperties: false StellarFeePaymentStrategy: type: string description: 'Stellar fee payment strategy Determines who pays transaction fees: - `User`: User must include fee payment to relayer in transaction (for custom RPC methods) - `Relayer`: Relayer pays all transaction fees (recommended for send transaction endpoint)' enum: - user - relayer TransferTransactionResult: type: object required: - transaction - fee_in_spl - fee_in_lamports - fee_token - valid_until_blockheight properties: fee_in_lamports: type: string fee_in_spl: type: string fee_token: type: string transaction: $ref: '#/components/schemas/EncodedSerializedTransaction' valid_until_blockheight: type: integer format: int64 minimum: 0 JsonRpcResponse_NetworkRpcResult: type: object description: 'JSON-RPC 2.0 Response structure. Represents a JSON-RPC response that can contain either a result or an error.' required: - jsonrpc properties: error: $ref: '#/components/schemas/JsonRpcError' id: $ref: '#/components/schemas/JsonRpcId' jsonrpc: type: string result: oneOf: - $ref: '#/components/schemas/SolanaRpcResult' - $ref: '#/components/schemas/StellarRpcResult' - $ref: '#/components/schemas/EvmRpcResult' WasmSource: oneOf: - type: object required: - hex properties: hex: type: string - type: object required: - base64 properties: base64: type: string description: Represents different ways to provide WASM code StellarRpcResult: oneOf: - description: Raw JSON-RPC response value. Covers string or structured JSON values. SolanaPrepareTransactionResult: type: object required: - transaction - fee_in_spl - fee_in_lamports - fee_token - valid_until_blockheight properties: fee_in_lamports: type: string fee_in_spl: type: string fee_token: type: string transaction: $ref: '#/components/schemas/EncodedSerializedTransaction' valid_until_blockheight: type: integer format: int64 minimum: 0 EvmPolicyResponse: type: object description: EVM policy response model for OpenAPI documentation properties: eip1559_pricing: type: boolean gas_limit_estimation: type: boolean gas_price_cap: type: integer minimum: 0 min_balance: type: integer minimum: 0 private_transactions: type: boolean whitelist_receivers: type: array items: type: string additionalProperties: false ApiResponse_String: type: object required: - success properties: data: type: string error: type: string metadata: $ref: '#/components/schemas/PluginMetadata' pagination: $ref: '#/components/schemas/PaginationMeta' success: type: boolean SolanaTransactionRequest: type: object properties: instructions: type: - array - 'null' items: $ref: '#/components/schemas/SolanaInstructionSpec' description: Instructions to build transaction from (mutually exclusive with transaction) transaction: oneOf: - type: 'null' - $ref: '#/components/schemas/EncodedSerializedTransaction' description: Pre-built base64-encoded transaction (mutually exclusive with instructions) valid_until: type: - string - 'null' description: Optional RFC3339 timestamp when transaction should expire GetSupportedTokensRequestParams: type: object additionalProperties: false ApiResponse_Vec_RelayerResponse: type: object required: - success properties: data: type: array items: type: object description: Relayer response model for API endpoints required: - id - name - network - network_type - paused - signer_id properties: address: type: string custom_rpc_urls: type: array items: $ref: '#/components/schemas/MaskedRpcConfig' description: 'Custom RPC URLs with sensitive path/query parameters masked for security. The domain is visible to identify providers (e.g., Alchemy, Infura) but API keys embedded in paths are hidden.' disabled_reason: $ref: '#/components/schemas/DisabledReason' id: type: string name: type: string network: type: string network_type: $ref: '#/components/schemas/RelayerNetworkType' notification_id: type: string paused: type: boolean policies: $ref: '#/components/schemas/RelayerNetworkPolicyResponse' description: 'Policies without redundant network_type tag - network type is available at top level Only included if user explicitly provided policies (not shown for empty/default policies)' signer_id: type: string system_disabled: type: boolean error: type: string metadata: $ref: '#/components/schemas/PluginMetadata' pagination: $ref: '#/components/schemas/PaginationMeta' success: type: boolean ApiResponse_Vec_TransactionResponse: type: object required: - success properties: data: type: array items: oneOf: - $ref: '#/components/schemas/EvmTransactionResponse' - $ref: '#/components/schemas/SolanaTransactionResponse' - $ref: '#/components/schemas/StellarTransactionResponse' error: type: string metadata: $ref: '#/components/schemas/PluginMetadata' pagination: $ref: '#/components/schemas/PaginationMeta' success: type: boolean StellarAllowedTokensPolicy: type: object description: Configuration for allowed token handling on Stellar required: - asset properties: asset: type: string max_allowed_fee: type: integer format: int64 minimum: 0 metadata: $ref: '#/components/schemas/StellarTokenMetadata' swap_config: $ref: '#/components/schemas/StellarAllowedTokensSwapConfig' additionalProperties: false ApiResponse_SignDataResponse: type: object required: - success properties: data: oneOf: - $ref: '#/components/schemas/SignDataResponseEvm' - $ref: '#/components/schemas/SignDataResponseSolana' error: type: string metadata: $ref: '#/components/schemas/PluginMetadata' pagination: $ref: '#/components/schemas/PaginationMeta' success: type: boolean EvmTransactionRequest: type: object required: - value properties: data: type: string gas_limit: type: - integer - 'null' format: int64 minimum: 0 gas_price: type: integer minimum: 0 max_fee_per_gas: type: integer minimum: 0 max_priority_fee_per_gas: type: integer minimum: 0 speed: $ref: '#/components/schemas/Speed' to: type: string valid_until: type: string value: type: integer format: u128 minimum: 0 GetFeaturesEnabledResult: type: object required: - features properties: features: type: array items: type: string SolanaFeePaymentStrategy: type: string description: 'Solana fee payment strategy Determines who pays transaction fees: - `User`: User must include fee payment to relayer in transaction (for custom RPC methods) - `Relayer`: Relayer pays all transaction fees (recommended for send transaction endpoint) Default is `User`.' enum: - user - relayer StellarTransactionRequest: type: object required: - network properties: fee_bump: type: - boolean - 'null' description: 'Explicitly request fee-bump wrapper Only valid when transaction_xdr contains a signed transaction' max_fee: type: - integer - 'null' format: int64 description: Maximum fee in stroops (defaults to 0.1 XLM = 1,000,000 stroops) memo: oneOf: - type: 'null' - $ref: '#/components/schemas/MemoSpec' network: type: string operations: type: - array - 'null' items: $ref: '#/components/schemas/OperationSpec' signed_auth_entry: type: - string - 'null' description: 'Signed Soroban authorization entry (base64 encoded SorobanAuthorizationEntry XDR) Used for Soroban gas abstraction: contains the user''s signed auth entry from /build response. When provided, transaction_xdr must also be provided (the FeeForwarder transaction from /build). The relayer will inject this signed auth entry into the transaction before submitting.' source_account: type: - string - 'null' transaction_xdr: type: - string - 'null' description: 'Pre-built transaction XDR (base64 encoded, signed or unsigned) Mutually exclusive with operations field. For Soroban gas abstraction: submit the transaction XDR from sponsored/build response with the user''s signed auth entry updated inside.' valid_until: type: - string - 'null' JsonRpcId: oneOf: - type: string description: String identifier - type: integer format: int64 description: Numeric identifier (should not contain fractional parts per spec) description: 'Represents a JSON-RPC 2.0 ID value. According to the spec, the ID can be a String or Number. When used in `Option`: Some(id) = actual ID, None = explicit null.' GetSupportedTokensItem: type: object required: - mint - symbol - decimals properties: conversion_slippage_percentage: type: number format: float decimals: type: integer format: int32 minimum: 0 max_allowed_fee: type: integer format: int64 minimum: 0 mint: type: string symbol: type: string StellarTokenMetadata: type: object required: - kind - decimals - canonical_asset_id properties: canonical_asset_id: type: string decimals: type: integer format: int32 minimum: 0 kind: $ref: '#/components/schemas/StellarTokenKind' additionalProperties: false AuthSpec: oneOf: - type: object description: No authorization required required: - type properties: type: type: string enum: - none - type: object description: Use the transaction source account for authorization required: - type properties: type: type: string enum: - source_account - type: object description: Use specific addresses for authorization required: - signers - type properties: signers: type: array items: type: string type: type: string enum: - addresses - type: object description: Advanced format - provide complete XDR auth entries as base64-encoded strings required: - entries - type properties: entries: type: array items: type: string type: type: string enum: - xdr description: Authorization specification for Soroban operations SignDataResponseSolana: type: object required: - signature - public_key properties: public_key: type: string signature: type: string DisabledReason: oneOf: - type: object description: Nonce synchronization failed during initialization required: - details - type properties: details: type: string description: Nonce synchronization failed during initialization type: type: string enum: - NonceSyncFailed - type: object description: RPC endpoint validation failed required: - details - type properties: details: type: string description: RPC endpoint validation failed type: type: string enum: - RpcValidationFailed - type: object description: Balance check failed (below minimum threshold) required: - details - type properties: details: type: string description: Balance check failed (below minimum threshold) type: type: string enum: - BalanceCheckFailed - type: object description: Sequence number synchronization failed (Stellar) required: - details - type properties: details: type: string description: Sequence number synchronization failed (Stellar) type: type: string enum: - SequenceSyncFailed - type: object description: Multiple failures occurred simultaneously required: - details - type properties: details: type: array items: type: string description: Multiple failures occurred simultaneously type: type: string enum: - Multiple description: 'Reason for a relayer being disabled by the system This represents persistent state, converted from HealthCheckFailure when disabling' LogEntry: type: object required: - level - message properties: level: $ref: '#/components/schemas/LogLevel' message: type: string SignTransactionRequestSolana: type: object required: - transaction properties: transaction: $ref: '#/components/schemas/EncodedSerializedTransaction' SponsoredTransactionQuoteRequest: oneOf: - $ref: '#/components/schemas/SolanaFeeEstimateRequestParams' description: Solana-specific fee estimate request parameters - $ref: '#/components/schemas/StellarFeeEstimateRequestParams' description: Stellar-specific fee estimate request parameters (classic and Soroban) description: 'Network-agnostic fee estimate request parameters for gasless transactions. Contains network-specific request parameters for fee estimation. The network type is inferred from the relayer''s network configuration. For Stellar, supports both classic and Soroban gas abstraction: - Classic: Pass operations or transaction_xdr with classic fee token (native/USDC:GA...) - Soroban: Pass transaction_xdr containing InvokeHostFunction, user_address, and contract fee token (C...)' ApiResponse_RelayerStatus: type: object required: - success properties: data: oneOf: - type: object required: - balance - pending_transactions_count - system_disabled - paused - nonce - network_type properties: balance: type: string last_confirmed_transaction_timestamp: type: - string - 'null' network_type: type: string enum: - evm nonce: type: string paused: type: boolean pending_transactions_count: type: integer format: int64 minimum: 0 system_disabled: type: boolean - type: object required: - balance - pending_transactions_count - system_disabled - paused - sequence_number - network_type properties: balance: type: string last_confirmed_transaction_timestamp: type: - string - 'null' network_type: type: string enum: - stellar paused: type: boolean pending_transactions_count: type: integer format: int64 minimum: 0 sequence_number: type: string system_disabled: type: boolean - type: object required: - balance - pending_transactions_count - system_disabled - paused - network_type properties: balance: type: string last_confirmed_transaction_timestamp: type: - string - 'null' network_type: type: string enum: - solana paused: type: boolean pending_transactions_count: type: integer format: int64 minimum: 0 system_disabled: type: boolean description: Relayer status with runtime information error: type: string metadata: $ref: '#/components/schemas/PluginMetadata' pagination: $ref: '#/components/schemas/PaginationMeta' success: type: boolean GetFeaturesEnabledRequestParams: type: object additionalProperties: false StellarAllowedTokensSwapConfig: type: object description: Stellar token swap configuration properties: max_amount: type: integer format: int64 description: Maximum amount of tokens to swap. Optional. minimum: 0 min_amount: type: integer format: int64 description: Minimum amount of tokens to swap. Optional. minimum: 0 retain_min_amount: type: integer format: int64 description: Minimum amount of tokens to retain after swap. Optional. minimum: 0 slippage_percentage: type: number format: float description: Conversion slippage percentage for token. Optional. additionalProperties: false StellarTokenKind: oneOf: - type: string enum: - native - type: object required: - classic properties: classic: type: object required: - code - issuer properties: code: type: string issuer: type: string - type: object required: - contract properties: contract: type: object required: - contract_id properties: contract_id: type: string ApiResponse_RelayerResponse: type: object required: - success properties: data: type: object description: Relayer response model for API endpoints required: - id - name - network - network_type - paused - signer_id properties: address: type: string custom_rpc_urls: type: array items: $ref: '#/components/schemas/MaskedRpcConfig' description: 'Custom RPC URLs with sensitive path/query parameters masked for security. The domain is visible to identify providers (e.g., Alchemy, Infura) but API keys embedded in paths are hidden.' disabled_reason: $ref: '#/components/schemas/DisabledReason' id: type: string name: type: string network: type: string network_type: $ref: '#/components/schemas/RelayerNetworkType' notification_id: type: string paused: type: boolean policies: $ref: '#/components/schemas/RelayerNetworkPolicyResponse' description: 'Policies without redundant network_type tag - network type is available at top level Only included if user explicitly provided policies (not shown for empty/default policies)' signer_id: type: string system_disabled: type: boolean error: type: string metadata: $ref: '#/components/schemas/PluginMetadata' pagination: $ref: '#/components/schemas/PaginationMeta' success: type: boolean RelayerNetworkPolicyResponse: oneOf: - $ref: '#/components/schemas/EvmPolicyResponse' - $ref: '#/components/schemas/StellarPolicyResponse' - $ref: '#/components/schemas/SolanaPolicyResponse' description: 'Policy types for responses - these don''t include network_type tags since the network_type is already available at the top level of RelayerResponse' PluginMetadata: type: object properties: logs: type: - array - 'null' items: $ref: '#/components/schemas/LogEntry' traces: type: - array - 'null' items: {} SolanaRpcResult: oneOf: - allOf: - $ref: '#/components/schemas/SolanaFeeEstimateResult' - type: object required: - method properties: method: type: string enum: - feeEstimate - allOf: - $ref: '#/components/schemas/TransferTransactionResult' - type: object required: - method properties: method: type: string enum: - transferTransaction - allOf: - $ref: '#/components/schemas/SolanaPrepareTransactionResult' - type: object required: - method properties: method: type: string enum: - prepareTransaction - allOf: - $ref: '#/components/schemas/SignTransactionResult' - type: object required: - method properties: method: type: string enum: - signTransaction - allOf: - $ref: '#/components/schemas/SignAndSendTransactionResult' - type: object required: - method properties: method: type: string enum: - signAndSendTransaction - allOf: - $ref: '#/components/schemas/GetSupportedTokensResult' - type: object required: - method properties: method: type: string enum: - getSupportedTokens - allOf: - $ref: '#/components/schemas/GetFeaturesEnabledResult' - type: object required: - method properties: method: type: string enum: - getFeaturesEnabled - type: object required: - method properties: method: type: string enum: - rawRpc JupiterSwapOptions: type: object description: Jupiter swap options properties: dynamic_compute_unit_limit: type: boolean priority_fee_max_lamports: type: integer format: int64 description: Maximum priority fee (in lamports) for a transaction. Optional. minimum: 0 priority_level: type: string description: Priority. Optional. additionalProperties: false OperationSpec: oneOf: - type: object required: - destination - amount - asset - type properties: amount: type: string description: Amount in stroops, encoded as a decimal string to preserve precision. pattern: ^-?[0-9]+$ asset: $ref: '#/components/schemas/AssetSpec' destination: type: string type: type: string enum: - payment - type: object required: - contract_address - function_name - args - type properties: args: type: array items: {} auth: oneOf: - type: 'null' - $ref: '#/components/schemas/AuthSpec' contract_address: type: string function_name: type: string type: type: string enum: - invoke_contract - type: object required: - source - wasm_hash - type properties: auth: oneOf: - type: 'null' - $ref: '#/components/schemas/AuthSpec' constructor_args: type: - array - 'null' items: {} salt: type: - string - 'null' source: $ref: '#/components/schemas/ContractSource' type: type: string enum: - create_contract wasm_hash: type: string - type: object required: - wasm - type properties: auth: oneOf: - type: 'null' - $ref: '#/components/schemas/AuthSpec' type: type: string enum: - upload_wasm wasm: $ref: '#/components/schemas/WasmSource' MaskedRpcConfig: type: object description: 'RPC configuration with masked URL for API responses. This type is used in API responses to prevent exposing sensitive API keys that are often embedded in RPC endpoint URLs (e.g., Alchemy, Infura, QuickNode). The URL path and query parameters are masked while keeping the host visible, allowing users to identify which provider is configured.' required: - url - weight properties: url: type: string description: The RPC endpoint URL with path/query masked. weight: type: integer format: int32 description: The weight of this endpoint in the weighted round-robin selection. maximum: 100 minimum: 0 example: url: https://eth-mainnet.g.alchemy.com/*** weight: 100 StellarRpcRequest: oneOf: - type: object required: - method - params properties: method: type: string params: {} example: rawRpcRequest ApiResponse_DeletePendingTransactionsResponse: type: object required: - success properties: data: type: object description: Response for delete pending transactions operation required: - queued_for_cancellation_transaction_ids - failed_to_queue_transaction_ids - total_processed properties: failed_to_queue_transaction_ids: type: array items: type: string queued_for_cancellation_transaction_ids: type: array items: type: string total_processed: type: integer format: int32 minimum: 0 error: type: string metadata: $ref: '#/components/schemas/PluginMetadata' pagination: $ref: '#/components/schemas/PaginationMeta' success: type: boolean EvmTransactionResponse: type: object required: - id - status - created_at - value - from - relayer_id properties: confirmed_at: type: string created_at: type: string data: type: string from: type: string gas_limit: type: - integer - 'null' format: int64 minimum: 0 gas_price: type: string hash: type: string id: type: string max_fee_per_gas: type: string max_priority_fee_per_gas: type: string nonce: type: integer format: int64 minimum: 0 relayer_id: type: string sent_at: type: string signature: oneOf: - type: 'null' - $ref: '#/components/schemas/EvmTransactionDataSignature' speed: oneOf: - type: 'null' - $ref: '#/components/schemas/Speed' status: $ref: '#/components/schemas/TransactionStatus' status_reason: type: - string - 'null' to: type: string value: type: string StellarSwapStrategy: type: string description: Stellar swap strategy enum: - order-book - soroswap StellarPrepareTransactionResult: type: object required: - transaction - fee_in_token - fee_in_token_ui - fee_in_stroops - fee_token - valid_until properties: fee_in_stroops: type: string description: Fee amount in stroops (as string) fee_in_token: type: string description: Fee amount in token (raw units as string) fee_in_token_ui: type: string description: Fee amount in token (decimal UI representation as string) fee_token: type: string description: Asset identifier for fee token max_fee_in_token: type: - string - 'null' description: 'Maximum fee in token amount (raw units as string). Only present for Soroban gas abstraction - includes slippage buffer.' max_fee_in_token_ui: type: - string - 'null' description: 'Maximum fee in token amount (decimal UI representation as string). Only present for Soroban gas abstraction - includes slippage buffer.' transaction: type: string description: Extended transaction XDR (base64 encoded) user_auth_entry: type: - string - 'null' description: 'User authorization entry XDR (base64 encoded). Present for Soroban gas abstraction - user must sign this auth entry.' valid_until: type: string description: Transaction validity timestamp (ISO 8601 format) EvmRpcRequest: oneOf: - type: object description: Unified raw request variant where params may be a JSON string or structured JSON value. required: - method - params properties: method: type: string params: {} StellarPrepareTransactionRequestParams: type: object required: - fee_token properties: fee_token: type: string description: 'Asset identifier for fee token. For classic: "native" or "USDC:GA5Z..." format. For Soroban: contract address (C...) format.' operations: type: - array - 'null' items: $ref: '#/components/schemas/OperationSpec' description: 'Operations array to build transaction from Mutually exclusive with transaction_xdr field' source_account: type: - string - 'null' description: 'Source account address (required when operations are provided) For gasless transactions, this should be the user''s account address' transaction_xdr: type: - string - 'null' description: 'Pre-built transaction XDR (base64 encoded, signed or unsigned) Mutually exclusive with operations field. For Soroban gas abstraction: pass XDR containing InvokeHostFunction operation.' additionalProperties: false EvmTransactionDataSignature: type: object required: - r - s - v - sig properties: r: type: string s: type: string sig: type: string v: type: integer format: int32 minimum: 0 SignTransactionRequestStellar: type: object required: - unsigned_xdr properties: unsigned_xdr: type: string SolanaSwapStrategy: type: string description: Solana swap strategy enum: - jupiter-swap - jupiter-ultra - noop MemoSpec: oneOf: - type: object required: - type properties: type: type: string enum: - none - type: object required: - value - type properties: type: type: string enum: - text value: type: string - type: object required: - value - type properties: type: type: string enum: - id value: type: string description: Non-negative integer (memo ID) encoded as a decimal string to preserve precision. pattern: ^[0-9]+$ - type: object required: - value - type properties: type: type: string enum: - hash value: type: array items: type: integer format: int32 minimum: 0 - type: object required: - value - type properties: type: type: string enum: - return value: type: array items: type: integer format: int32 minimum: 0 Speed: type: string enum: - fastest - fast - average - safeLow SignTransactionResult: type: object required: - transaction - signature properties: signature: type: string transaction: $ref: '#/components/schemas/EncodedSerializedTransaction' JsonRpcError: type: object description: 'JSON-RPC 2.0 Error structure. Represents an error in a JSON-RPC response.' required: - code - message - description properties: code: type: integer format: int32 description: type: string message: type: string SignDataResponseEvm: type: object required: - r - s - v - sig properties: r: type: string s: type: string sig: type: string v: type: integer format: int32 minimum: 0 ApiResponse_TransactionResponse: type: object required: - success properties: data: oneOf: - $ref: '#/components/schemas/EvmTransactionResponse' - $ref: '#/components/schemas/SolanaTransactionResponse' - $ref: '#/components/schemas/StellarTransactionResponse' error: type: string metadata: $ref: '#/components/schemas/PluginMetadata' pagination: $ref: '#/components/schemas/PaginationMeta' success: type: boolean RelayerSolanaPolicy: type: object description: Solana-specific relayer policy configuration properties: allowed_accounts: type: - array - 'null' items: type: string allowed_programs: type: - array - 'null' items: type: string allowed_tokens: type: - array - 'null' items: $ref: '#/components/schemas/SolanaAllowedTokensPolicy' disallowed_accounts: type: - array - 'null' items: type: string fee_margin_percentage: type: - number - 'null' format: float fee_payment_strategy: $ref: '#/components/schemas/SolanaFeePaymentStrategy' max_allowed_fee_lamports: type: - integer - 'null' format: int64 minimum: 0 max_signatures: type: - integer - 'null' format: int32 minimum: 0 max_tx_data_size: type: - integer - 'null' format: int32 minimum: 0 min_balance: type: - integer - 'null' format: int64 minimum: 0 swap_config: $ref: '#/components/schemas/RelayerSolanaSwapConfig' additionalProperties: false JsonRpcRequest_NetworkRpcRequest: allOf: - oneOf: - $ref: '#/components/schemas/SolanaRpcRequest' - $ref: '#/components/schemas/StellarRpcRequest' - $ref: '#/components/schemas/EvmRpcRequest' - type: object required: - jsonrpc properties: id: oneOf: - type: 'null' - $ref: '#/components/schemas/JsonRpcId' jsonrpc: type: string description: 'JSON-RPC 2.0 Request structure. Represents a JSON-RPC request with proper ID handling: - `Some(JsonRpcId)` = request with ID - `None` = explicit null ID or notification' ApiResponse_SponsoredTransactionBuildResponse: type: object required: - success properties: data: oneOf: - $ref: '#/components/schemas/SolanaPrepareTransactionResult' description: Solana-specific prepare transaction result - $ref: '#/components/schemas/StellarPrepareTransactionResult' description: 'Stellar-specific prepare transaction result (classic and Soroban) For Soroban: includes optional user_auth_entry, expiration_ledger' description: 'Network-agnostic prepare transaction response for gasless transactions. Contains network-specific prepare transaction results.' error: type: string metadata: $ref: '#/components/schemas/PluginMetadata' pagination: $ref: '#/components/schemas/PaginationMeta' success: type: boolean EncodedSerializedTransaction: type: string SignTypedDataRequest: type: object required: - domain_separator - hash_struct_message properties: domain_separator: type: string hash_struct_message: type: string ContractSource: oneOf: - type: object required: - address - from properties: address: type: string from: type: string enum: - address - type: object required: - contract - from properties: contract: type: string from: type: string enum: - contract description: Represents the source for contract creation StellarTransactionResponse: type: object required: - id - status - created_at - source_account - fee - sequence_number - relayer_id properties: confirmed_at: type: string created_at: type: string fee: type: integer format: int32 minimum: 0 hash: type: string id: type: string relayer_id: type: string sent_at: type: string sequence_number: type: string description: Stellar sequence number encoded as a decimal string to preserve precision. pattern: ^-?[0-9]+$ source_account: type: string status: $ref: '#/components/schemas/TransactionStatus' status_reason: type: - string - 'null' transaction_result_xdr: type: string SolanaFeeEstimateResult: type: object required: - estimated_fee - conversion_rate properties: conversion_rate: type: string estimated_fee: type: string RelayerStellarPolicy: type: object description: Stellar-specific relayer policy configuration properties: allowed_tokens: type: - array - 'null' items: $ref: '#/components/schemas/StellarAllowedTokensPolicy' concurrent_transactions: type: - boolean - 'null' fee_margin_percentage: type: - number - 'null' format: float fee_payment_strategy: $ref: '#/components/schemas/StellarFeePaymentStrategy' description: Fee payment strategy - determines who pays transaction fees (optional) max_fee: type: - integer - 'null' format: int32 minimum: 0 min_balance: type: - integer - 'null' format: int64 minimum: 0 slippage_percentage: type: - number - 'null' format: float swap_config: $ref: '#/components/schemas/RelayerStellarSwapConfig' timeout_seconds: type: - integer - 'null' format: int64 minimum: 0 additionalProperties: false SignTransactionResponseSolana: type: object required: - transaction - signature properties: signature: type: string transaction: $ref: '#/components/schemas/EncodedSerializedTransaction' LogLevel: type: string enum: - log - info - error - warn - debug - result GetSupportedTokensResult: type: object required: - tokens properties: tokens: type: array items: $ref: '#/components/schemas/GetSupportedTokensItem' SignAndSendTransactionRequestParams: type: object required: - transaction properties: transaction: $ref: '#/components/schemas/EncodedSerializedTransaction' additionalProperties: false PaginationMeta: type: object required: - current_page - per_page - total_items properties: current_page: type: integer format: int32 minimum: 0 per_page: type: integer format: int32 minimum: 0 total_items: type: integer format: int64 minimum: 0 NetworkTransactionRequest: oneOf: - $ref: '#/components/schemas/EvmTransactionRequest' - $ref: '#/components/schemas/SolanaTransactionRequest' - $ref: '#/components/schemas/StellarTransactionRequest' ApiResponse_SignTransactionResponse: type: object required: - success properties: data: oneOf: - $ref: '#/components/schemas/SignTransactionResponseStellar' - type: array items: type: integer format: int32 minimum: 0 - $ref: '#/components/schemas/SignTransactionResponseSolana' error: type: string metadata: $ref: '#/components/schemas/PluginMetadata' pagination: $ref: '#/components/schemas/PaginationMeta' success: type: boolean SignTransactionResponseStellar: type: object required: - signedXdr - signature properties: signature: type: string signedXdr: type: string SolanaAllowedTokensSwapConfig: type: object description: Solana token swap configuration properties: max_amount: type: integer format: int64 description: Maximum amount of tokens to swap. Optional. minimum: 0 min_amount: type: integer format: int64 description: Minimum amount of tokens to swap. Optional. minimum: 0 retain_min_amount: type: integer format: int64 description: Minimum amount of tokens to retain after swap. Optional. minimum: 0 slippage_percentage: type: number format: float description: Conversion slippage percentage for token. Optional. additionalProperties: false SolanaFeeEstimateRequestParams: type: object required: - transaction - fee_token properties: fee_token: type: string transaction: $ref: '#/components/schemas/EncodedSerializedTransaction' additionalProperties: false securitySchemes: bearer_auth: type: http scheme: bearer