---
title: "Sends a transaction through the specified relayer."
method: POST
path: "/api/v1/relayers/{relayer_id}/transactions"
tags: ["Relayers"]
---

# Sends a transaction through the specified relayer.

`POST /api/v1/relayers/{relayer_id}/transactions`

## Path parameters

- `relayer_id` string, required

## Request body

- union
  - EvmTransactionRequest
    - `data` string
    - `gas_limit` integer, nullable
    - `gas_price` integer
    - `max_fee_per_gas` integer
    - `max_priority_fee_per_gas` integer
    - `speed` 'fastest' | 'fast' | 'average' | 'safeLow'
    - `to` string
    - `valid_until` string
    - `value` integer, required
  - SolanaTransactionRequest
    - `instructions` SolanaInstructionSpec[], nullable — Instructions to build transaction from (mutually exclusive with transaction)
      - `accounts` SolanaAccountMeta[], required — Account metadata for the instruction
        - `is_signer` boolean, required — Whether the account is a signer
        - `is_writable` boolean, required — Whether the account is writable
        - `pubkey` string, required — Account public key (base58-encoded)
      - `data` string, required — Instruction data (base64-encoded)
      - `program_id` string, required — Program ID (base58-encoded pubkey)
    - `transaction` string
    - `valid_until` string, nullable — Optional RFC3339 timestamp when transaction should expire
  - StellarTransactionRequest
    - `fee_bump` boolean, nullable — Explicitly request fee-bump wrapper Only valid when transaction_xdr contains a signed transaction
    - `max_fee` integer, nullable — Maximum fee in stroops (defaults to 0.1 XLM = 1,000,000 stroops)
    - `memo` union
      - object
        - `type` 'none', required
      - object
        - `type` 'text', required
        - `value` string, required
      - object
        - `type` 'id', required
        - `value` string, required — Non-negative integer (memo ID) encoded as a decimal string to preserve precision.
      - object
        - `type` 'hash', required
        - `value` integer[], required
      - object
        - `type` 'return', required
        - `value` integer[], required
    - `network` string, required
    - `operations` OperationSpec[], nullable
      - union
        - object
          - `amount` string, required — Amount in stroops, encoded as a decimal string to preserve precision.
          - `asset` union, required
            - object
              - …
            - object
              - …
            - object
              - …
          - `destination` string, required
          - `type` 'payment', required
        - object
          - `args` unknown[], required
            - unknown
          - `auth` union — Authorization specification for Soroban operations
            - object — No authorization required
              - …
            - object — Use the transaction source account for authorization
              - …
            - object — Use specific addresses for authorization
              - …
            - object — Advanced format - provide complete XDR auth entries as base64-encoded strings
              - …
          - `contract_address` string, required
          - `function_name` string, required
          - `type` 'invoke_contract', required
        - object
          - `auth` union — Authorization specification for Soroban operations
            - object — No authorization required
              - …
            - object — Use the transaction source account for authorization
              - …
            - object — Use specific addresses for authorization
              - …
            - object — Advanced format - provide complete XDR auth entries as base64-encoded strings
              - …
          - `constructor_args` unknown[], nullable
            - unknown
          - `salt` string, nullable
          - `source` union, required — Represents the source for contract creation
            - object
              - …
            - object
              - …
          - `type` 'create_contract', required
          - `wasm_hash` string, required
        - object
          - `auth` union — Authorization specification for Soroban operations
            - object — No authorization required
              - …
            - object — Use the transaction source account for authorization
              - …
            - object — Use specific addresses for authorization
              - …
            - object — Advanced format - provide complete XDR auth entries as base64-encoded strings
              - …
          - `type` 'upload_wasm', required
          - `wasm` union, required — Represents different ways to provide WASM code
            - object
              - …
            - object
              - …
    - `signed_auth_entry` string, nullable — 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` string, nullable
    - `transaction_xdr` string, nullable — 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` string, nullable

## Response `200`

Relayer transactions sent successfully

- ApiResponseTransactionResponse
  - `data` union
    - EvmTransactionResponse
      - `confirmed_at` string
      - `created_at` string, required
      - `data` string
      - `from` string, required
      - `gas_limit` integer, nullable
      - `gas_price` string
      - `hash` string
      - `id` string, required
      - `max_fee_per_gas` string
      - `max_priority_fee_per_gas` string
      - `nonce` integer
      - `relayer_id` string, required
      - `sent_at` string
      - `signature` EvmTransactionDataSignature
        - `r` string, required
        - `s` string, required
        - `sig` string, required
        - `v` integer, required
      - `speed` 'fastest' | 'fast' | 'average' | 'safeLow'
      - `status` 'canceled' | 'pending' | 'sent' | 'submitted' | 'mined' | 'confirmed' | 'failed' | 'expired', required
      - `status_reason` string, nullable
      - `to` string
      - `value` string, required
    - SolanaTransactionResponse
      - `confirmed_at` string
      - `created_at` string, required
      - `id` string, required
      - `instructions` SolanaInstructionSpec[]
        - `accounts` SolanaAccountMeta[], required — Account metadata for the instruction
          - `is_signer` boolean, required — Whether the account is a signer
          - `is_writable` boolean, required — Whether the account is writable
          - `pubkey` string, required — Account public key (base58-encoded)
        - `data` string, required — Instruction data (base64-encoded)
        - `program_id` string, required — Program ID (base58-encoded pubkey)
      - `sent_at` string
      - `signature` string
      - `status` 'canceled' | 'pending' | 'sent' | 'submitted' | 'mined' | 'confirmed' | 'failed' | 'expired', required
      - `status_reason` string
      - `transaction` string, required
    - StellarTransactionResponse
      - `confirmed_at` string
      - `created_at` string, required
      - `fee` integer, required
      - `hash` string
      - `id` string, required
      - `relayer_id` string, required
      - `sent_at` string
      - `sequence_number` string, required — Stellar sequence number encoded as a decimal string to preserve precision.
      - `source_account` string, required
      - `status` 'canceled' | 'pending' | 'sent' | 'submitted' | 'mined' | 'confirmed' | 'failed' | 'expired', required
      - `status_reason` string, nullable
      - `transaction_result_xdr` string
  - `error` string
  - `metadata` PluginMetadata
    - `logs` LogEntry[], nullable
      - `level` 'log' | 'info' | 'error' | 'warn' | 'debug' | 'result', required
      - `message` string, required
    - `traces` unknown[], nullable
      - unknown
  - `pagination` PaginationMeta
    - `current_page` integer, required
    - `per_page` integer, required
    - `total_items` integer, required
  - `success` boolean, required

## Other responses

- `400` — BadRequest
- `401` — Unauthorized
- `404` — Not Found
- `429` — Too Many Requests
- `500` — Internal server error

## Changes

- **2026-06-05** `97fada1b2001` — 5 breaking, 1 info
  - added the pattern `^-?[0-9]+$` to the request property `oneOf[#/components/schemas/StellarTransactionRequest]/operations/items/oneOf[subschema #1]/amount`
  - added the pattern `^[0-9]+$` to the request property `oneOf[#/components/schemas/StellarTransactionRequest]/memo/oneOf[#/components/schemas/MemoSpec]/oneOf[subschema #3]/value`
  - the `oneOf[#/components/schemas/StellarTransactionRequest]/memo/oneOf[#/components/schemas/MemoSpec]/oneOf[subschema #3]/value` request property type/format changed from `integer`/`int64` to `string`/``
  - the `oneOf[#/components/schemas/StellarTransactionRequest]/operations/items/oneOf[subschema #1]/amount` request property type/format changed from `integer`/`int64` to `string`/``
  - …2 more
- **2026-02-09** `6408963b7c93` — 1 info
  - added the new optional request property `oneOf[#/components/schemas/StellarTransactionRequest]/signed_auth_entry`
- **2025-12-22** `2abd60a9c2d8` — 1 info
  - added the optional property `data/oneOf[#/components/schemas/StellarTransactionResponse]/transaction_result_xdr` to the response with the `200` status
- …earlier changes not shown

[Full history](https://skmtc.dev/openzeppelin/apis/openzeppelin-relayer-api/changes/api/v1/relayers/:relayer_id/transactions/post.md)

---

[API](https://skmtc.dev/openzeppelin/apis/openzeppelin-relayer-api.md) · [All operations](https://skmtc.dev/openzeppelin/apis/openzeppelin-relayer-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/openzeppelin/openzeppelin-relayer-api/revisions/e6e7514284f5/schema)
