> For the complete documentation index, see [llms.txt](https://hub.bsvblockchain.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hub.bsvblockchain.org/bsv-skills-center/broadcasting/quickstart.md).

# Quickstart

Take a signed transaction from hex to mined in a few minutes using a public Arcade endpoint, from the command line or any of the SDKs.

This page gets one transaction onto the BSV blockchain and shows you how to watch it get mined. It uses a public [Arcade](/bsv-skills-center/broadcasting/arcade.md) endpoint, so there is nothing to install or sign up for. Where it says `<hex>`, substitute your own signed transaction.

## 1. Get a signed transaction

You need a fully signed transaction serialised as hex. If you do not have one yet:

* Follow the [Quick Start](/bsv-skills-center/intro/quick-start.md) in the Intro section, which funds a key and builds a transaction with the TypeScript SDK. Stop before the `tx.broadcast()` line and use `tx.toHex()` instead.
* Or use one of the SDK examples: [TypeScript](/bsv-skills-center/guides/sdks/ts/examples/example_simple_tx.md), [Go](/bsv-skills-center/guides/sdks/go/examples/create_simple_tx.md), or [Python](/bsv-skills-center/guides/sdks/py/examples/example_simple_tx.md).
* Or export a raw transaction from any wallet that offers it.

The transaction must spend outputs that exist and are unspent, and must pay at least the fee rate the endpoint requires, which you check next.

## 2. Pick an endpoint and read its policy

Choose the public instance nearest to you. This page uses the BSV Association's US endpoint throughout; the full list is on the [Arcade page](/bsv-skills-center/broadcasting/arcade.md#public-endpoints).

```bash
export ARCADE=https://arcade-us-1.bsvblockchain.tech
curl -s $ARCADE/policy
```

```json
{
  "policy": {
    "miningFee": { "satoshis": 1, "bytes": 1000 },
    "maxtxsizepolicy": 100000000,
    "maxscriptsizepolicy": 100000000,
    "maxtxsigopscountspolicy": 4294967295,
    "standardFormatSupported": true
  },
  "timestamp": "2026-10-16T12:00:00Z"
}
```

`miningFee` is the minimum rate the instance will accept, here one satoshi per kilobyte. If your transaction pays less, build it again with a higher fee before continuing.

## 3. Submit it

```bash
curl -s -X POST $ARCADE/tx \
  -H "Content-Type: text/plain" \
  --data "<hex>"
```

```json
{ "txid": "9f2b…", "status": 202, "txStatus": "RECEIVED" }
```

A `202` means Arcade validated the transaction and is delivering it to the network. If you get a `400` instead, the body tells you what is wrong with the transaction itself; fix it and resubmit. Nothing else is at fault, so do not try another service with the same bytes.

Sending the same transaction twice is harmless. You get another `202` with whatever status it has reached.

## 4. Watch it progress

```bash
curl -s $ARCADE/tx/<txid>
```

Run that a few times. Within seconds `txStatus` should move from `RECEIVED` through `SENT_TO_NETWORK` to `SEEN_ON_NETWORK`, at which point miners have it and it is safe to treat as a zero-confirmation payment. Within roughly ten minutes it should reach `MINED`:

```json
{
  "txid": "9f2b…",
  "txStatus": "MINED",
  "timestamp": "2026-10-16T12:09:41Z",
  "blockHash": "0000…",
  "blockHeight": 971340,
  "merklePath": "<BUMP hex>"
}
```

The `merklePath` is a [BUMP](https://bsv.brc.dev/transactions/0074) you can verify against block headers yourself. That is the proof of inclusion an SPV client needs, and you got it without running a node.

If you would rather not poll, open a stream instead. Submit with an `X-CallbackToken: mytoken` header, then:

```bash
curl -N "$ARCADE/events?callbackToken=mytoken"
```

Every status change for transactions submitted with that token arrives as a server-sent event.

## 5. The same from the SDKs

Each snippet loads a transaction from hex and broadcasts it to the same endpoint.

{% tabs %}
{% tab title="TypeScript" %}
Arcade's `/tx` endpoint takes a hex body, so a broadcaster is a few lines. The SDK's built-in `Teranode` class also works, but only when every input carries its `sourceTransaction`, which a transaction loaded from bare hex does not.

```ts
import { Transaction } from '@bsv/sdk'
import type { Broadcaster, BroadcastResponse, BroadcastFailure } from '@bsv/sdk'

class Arcade implements Broadcaster {
  constructor (private readonly url: string) {}

  async broadcast (tx: Transaction): Promise<BroadcastResponse | BroadcastFailure> {
    const res = await fetch(`${this.url}/tx`, {
      method: 'POST',
      headers: { 'Content-Type': 'text/plain' },
      body: tx.toHex()
    })
    const body = await res.json()
    if (res.ok) {
      return { status: 'success', txid: body.txid, message: body.txStatus }
    }
    return { status: 'error', code: String(res.status), description: body.reason ?? body.error }
  }
}

const tx = Transaction.fromHex('<hex>')
console.log(await tx.broadcast(new Arcade('https://arcade-us-1.bsvblockchain.tech')))
```

{% endtab %}

{% tab title="Go" %}
The Go SDK's `Arc` broadcaster posts to `{ApiUrl}/tx`, which is Arcade's path, and accepts the `202` response.

```go
package main

import (
    "fmt"

    "github.com/bsv-blockchain/go-sdk/transaction"
    "github.com/bsv-blockchain/go-sdk/transaction/broadcaster"
)

func main() {
    tx, err := transaction.NewTransactionFromHex("<hex>")
    if err != nil {
        panic(err)
    }

    success, failure := tx.Broadcast(&broadcaster.Arc{
        ApiUrl: "https://arcade-us-1.bsvblockchain.tech",
    })
    if failure != nil {
        panic(failure)
    }
    fmt.Println(success.Txid, success.Message)
}
```

{% endtab %}

{% tab title="Python" %}
The Python SDK has a native `Arcade` class.

```python
from bsv.broadcasters import Arcade
from bsv import Transaction

tx = Transaction.from_hex("<hex>")
arcade = Arcade("https://arcade-us-1.bsvblockchain.tech")

result = arcade.sync_broadcast(tx)
print(result.txid, result.message)

print(arcade.check_transaction_status(result.txid))
```

{% endtab %}
{% endtabs %}

## Where to go next

* **Get notified instead of polling.** Submit with `X-CallbackUrl` and Arcade will POST each status change to your server. See [Webhooks](/bsv-skills-center/broadcasting/arcade.md#webhooks).
* **Run your own Arcade.** The public endpoints are shared. For private callbacks, your own policy, and no third-party dependency, [run an instance](/bsv-skills-center/broadcasting/run-your-own-arcade.md); it takes about ten minutes.
* **Use a different route.** Every other way to broadcast, and when each one makes sense, is on the [overview](/bsv-skills-center/broadcasting/broadcasting.md).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://hub.bsvblockchain.org/bsv-skills-center/broadcasting/quickstart.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
