Skip to main content
POST
/
v1
/
redemptions
/
{id}
/
submit
curl -X POST \
  https://grail-stack-dev.onrender.com/v1/redemptions/red_a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d/submit \
  -H "x-api-key: grail_partner_<hex>" \
  -H "Content-Type: application/json" \
  -d '{
    "signed_tx": "AQAAAAABAAEC...<base64>..."
  }'
{
  "redemption_id": "red_a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
  "tx_hash": "4ABC...base58"
}

Overview

Broadcasts the fully-signed redemption transaction and returns the on-chain signature. Pure passthrough — no database write. The indexer transitions the redemption from quoted to submitted (or failed on revert) once the transaction is confirmed on-chain.
You may also broadcast directly to any Solana RPC. The indexer will pick up the transaction regardless.

Headers

x-api-key
string
required
A valid PARTNER scope key.

Path Parameters

id
string
required
Redemption identifier (prefixed red_) returned by Quote Redemption.

Request Body

signed_tx
string
required
Base64-encoded, fully-signed Solana transaction (GRAIL’s partial sig + user).

Response

redemption_id
string
Echo of the path parameter.
tx_hash
string
Solana transaction signature (base58).

Errors

HTTPerrorWhen
400invalid_requestMissing or non-string signed_tx
400broadcast_failedSolana RPC rejected the transaction — message has reason
curl -X POST \
  https://grail-stack-dev.onrender.com/v1/redemptions/red_a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d/submit \
  -H "x-api-key: grail_partner_<hex>" \
  -H "Content-Type: application/json" \
  -d '{
    "signed_tx": "AQAAAAABAAEC...<base64>..."
  }'
{
  "redemption_id": "red_a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
  "tx_hash": "4ABC...base58"
}