Skip to main content
POST
/
v1
/
inbound-receiver
/
register
Register a deposit for automatic bridging
curl --request POST \
  --url https://api.hypermid.io/v1/inbound-receiver/register \
  --header 'Content-Type: application/json' \
  --header 'X-API-Key: <api-key>' \
  --data '
{
  "txHash": "0xabc123...",
  "fromAddress": "0x0101e82F16792A3368Ca5c62c263F56a99C46c1a",
  "outputToken": "<string>",
  "signature": "<string>",
  "toAddress": "<string>",
  "destinationDomain": 369
}
'
{
  "data": {
    "id": 42,
    "usdcAmount": "4985000",
    "status": "USDC_ARRIVED",
    "message": "Deposit verified. Bridge will execute automatically within ~5 minutes."
  }
}

Documentation Index

Fetch the complete documentation index at: https://docs.hypermid.io/llms.txt

Use this file to discover all available pages before exploring further.

Confirms a deposit at the Hypermid bridge contract. Only needed for some PulseChain swap routes — the quote response tells you when.
When is this needed? Only when the quote response includes an afterStep1 field. Most swaps don’t need this — you just sign a transaction and you’re done.

When to Use This

  1. You called GET /v1/quote with toChain=369 (PulseChain) and a non-stablecoin source token
  2. The quote response included afterStep1 with signing instructions
  3. You signed and broadcast the swap transaction (Step 1)
  4. Now you need to confirm the deposit so Hypermid can bridge it automatically

Parameters

txHash
string
required
The confirmed transaction hash from Step 1.
fromAddress
string
required
The sender wallet address. Must match tx.from of the transaction.
toAddress
string
Recipient wallet address on PulseChain. Defaults to fromAddress.
outputToken
string
required
Desired output token on PulseChain (e.g., 0xA1077a294dDE1B09bB078844df40758a5D0f9a27 for PLS).
destinationDomain
number
Destination chain domain. Default: 369 (PulseChain).
signature
string
required
Wallet signature authorizing the routing. Generated by signing the data from afterStep1.eip712 in the quote response.

Full Example

// 1. Get a quote
const quote = await client.getQuote({
  fromChain: 8453, toChain: 369,
  fromToken: "0x0000000000000000000000000000000000000000", // ETH
  toToken: "0xA1077a294dDE1B09bB078844df40758a5D0f9a27",  // PLS
  fromAmount: "1000000000000000",
  fromAddress: "0xYourWallet",
});

// 2. Sign the swap transaction
const txHash = await wallet.sendTransaction(quote.data.steps[0].transactionRequest);
await publicClient.waitForTransactionReceipt({ hash: txHash });

// 3. If afterStep1 exists, confirm the deposit
if (quote.data.afterStep1) {
  // Sign the authorization (gasless — no transaction cost)
  const signature = await wallet.signTypedData({
    ...quote.data.afterStep1.eip712,
    message: { ...quote.data.afterStep1.eip712.message, txHash },
  });

  // Confirm with the API
  await fetch("https://api.hypermid.io/v1/inbound-receiver/register", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({
      ...quote.data.afterStep1.body,
      txHash,
      signature,
    }),
  });
}

// Done — Hypermid handles the rest (~5 min)
{
  "data": {
    "id": 42,
    "usdcAmount": "4985000",
    "status": "USDC_ARRIVED",
    "message": "Deposit verified. Bridge will execute automatically within ~5 minutes."
  }
}

Refunds & Fallback

If the bridge lands on PulseChain but the DEX swap fails after 3 retries, the backend automatically sends the bridged USDCh to the user’s wallet — the user never loses funds. If the user signed Step 1 but abandoned Step 2, they can resume by calling this endpoint later with the original tx hash. See the Safety & Fallback guide for the full state machine, every failure scenario, and the recovery script for abandoned flows.

Authorizations

X-API-Key
string
header
required

Partner API key. Optional for public endpoints, required for /v1/partner/*.

Body

application/json
txHash
string
required

The confirmed Step 1 transaction hash (0x-prefixed).

Example:

"0xabc123..."

fromAddress
string
required

Sender wallet address — must match tx.from on-chain.

Example:

"0x0101e82F16792A3368Ca5c62c263F56a99C46c1a"

outputToken
string
required

Desired output token address on PulseChain (e.g. 0xA1077a29... for WPLS).

signature
string
required

EIP-712 signature over RegisterDeposit(txHash, toAddress, outputToken, destinationDomain) using domain { name: "HypermidInboundReceiver", version: "1", chainId: }. Required — unsigned registrations are rejected with 400 SIGNATURE_REQUIRED.

toAddress
string

Recipient on PulseChain. Defaults to fromAddress.

destinationDomain
number

Hyperlane destination domain (369 for PulseChain).

Example:

369

Response

Deposit registered; backend will bridge + swap automatically

data
object