Developer Reference

Deep Link Documentation

Integrate Steem Keychain Mobile into your dApp with deep links. Trigger transfers, votes, delegations, and more with a single URL.

Quick Start

Add a deep link to your app in 30 seconds:

HTML
<a href="steem://transfer?to=kafio&amount=1.000&currency=STEEM&memo=tip">
  Tip 1 STEEM via Keychain
</a>

When a user with Steem Keychain Mobile installed taps this link, it opens the wallet with a pre-filled transfer confirmation screen.

Overview

Steem Keychain Mobile handles two URL protocols:

ProtocolPurposeExample
steem://Blockchain operations (transfer, vote, delegate, etc.)steem://transfer?to=kafio&amount=1.000
steem-keychain://App commands (browser, add account, sign request)steem-keychain://browser/https%3A%2F%2Fsteempro.com

steem:// Protocol

The steem:// protocol triggers blockchain operations. Each operation maps to a Keychain signing request.

Transfer

URI Format
steem://transfer?to={recipient}&amount={amount}&currency={STEEM|SBD}&memo={memo}&from={sender}&enforce={true|false}
ParameterRequiredDefaultDescription
toRecipient account
amountAmount (e.g. 1.000 or 1.000 STEEM)
currencySTEEMSTEEM or SBD
memo""Transaction memo
fromActive accountSender account
enforcefalseLock amount/recipient fields
Example
steem://transfer?to=kafio&amount=5.000&currency=STEEM&memo=Thanks%20for%20building

Vote

URI Format
steem://vote?author={author}&permlink={permlink}&weight={weight}&voter={voter}
ParameterRequiredDefaultDescription
authorPost author
permlinkPost permlink
weight10000Vote weight (-10000 to 10000)
voterActive accountVoting account
Example
steem://vote?author=kafio&permlink=steem-keychain-mobile-phase-8&weight=10000

Delegate

URI Format
steem://delegate?to={delegatee}&amount={amount}&from={delegator}
ParameterRequiredDefaultDescription
toAccount receiving delegation
amountSP amount
fromActive accountDelegating account
Example
steem://delegate?to=kafio&amount=100.000

Power Up

URI Format
steem://power-up?from={account}&to={recipient}&amount={amount}
ParameterRequiredDefaultDescription
fromAccount powering up
toSame as fromRecipient of SP
amountSTEEM amount

Power Down

URI Format
steem://power-down?account={account}&amount={amount}
ParameterRequiredDefaultDescription
accountAccount to power down
amountSP amount to power down

Witness Vote

URI Format
steem://witness-vote?witness={witness}&account={voter}&approve={true|false}
ParameterRequiredDefaultDescription
witnessWitness account name
accountActive accountVoter account
approvetrueVote or unvote
Example
steem://witness-vote?witness=kafio.wit&approve=true

Follow / Unfollow

URI Format
steem://follow?follower={you}&following={target}
steem://unfollow?follower={you}&following={target}
ParameterRequiredDefaultDescription
followerActive accountYour account
followingAccount to follow/unfollow

Reblog

URI Format
steem://reblog?account={you}&author={author}&permlink={permlink}
ParameterRequiredDefaultDescription
accountActive accountReblogging account
authorOriginal post author
permlinkOriginal post permlink

Post / Comment

Also accepts: steem://comment

URI Format
steem://post?username={author}&title={title}&body={body}&parent_perm={permlink}&json_metadata={json}
ParameterRequiredDefaultDescription
usernameActive accountAuthor account
title""Post title
body""Post body (markdown)
parent_perm""Parent permlink (for comments)
parent_usernamenullParent author (for comments)
json_metadata{}Post metadata JSON
permlinkAuto-generatedCustom permlink
comment_optionsnullComment options JSON (beneficiaries, max payout)

Sign Buffer (Authentication)

Also accepts: steem://sign-buffer

URI Format
steem://signBuffer?username={account}&message={message}&keyType={Posting|Active}
ParameterRequiredDefaultDescription
usernameActive accountAccount to sign with
messageMessage to sign
keyTypePostingKey type to use

Broadcast (Advanced)

URI Format
steem://broadcast?username={account}&operations={json_ops}&keyType={Active|Posting}
ParameterRequiredDefaultDescription
usernameActive accountBroadcasting account
operationsJSON array of operations
keyTypePostingActive or Posting

Sign (Raw Transaction)

URI Format
steem://sign?ops={url_encoded_json_operations}&account={account}

The ops parameter should be a URL-encoded JSON array of blockchain operations. The wallet will prompt the user to sign the transaction with their Active key.

steem-keychain:// Protocol

The steem-keychain:// protocol triggers app-level commands — opening the browser, importing accounts, or sending arbitrary signing requests.

Open Browser

Opens a URL in Keychain's built-in dApp browser with Keychain JS bridge injected.

URI Format
steem-keychain://browser/{url_encoded_url}
Example — Open SteemPro
steem-keychain://browser/https%3A%2F%2Fsteempro.com

Add Account

Import an account into the wallet with pre-filled keys.

URI Format
steem-keychain://add_account={"name":"username","keys":{"posting":"5K..."}}

Request (Any Operation)

Send any Keychain operation as a JSON-encoded request. This is the most flexible method — any operation the Keychain API supports can be triggered via this endpoint.

URI Format
steem-keychain://request?data={url_encoded_json_request}
Example — Transfer via Request
steem-keychain://request?data=%7B%22type%22%3A%22transfer%22%2C%22to%22%3A%22kafio%22%2C%22amount%22%3A%221.000%22%2C%22currency%22%3A%22STEEM%22%7D

QR Codes

Steem Keychain Mobile includes a universal QR scanner that automatically detects:

  • steem:// deep links → routes to operation confirmation
  • steem-keychain:// protocol → executes app command
  • Account import QR codes → routes to add account
  • Regular URLs → opens in built-in browser
Generate QR codes using the Deep Link Lab. Build a URI, and the QR code is generated automatically.

Integration Guide

Examples for integrating deep links into your application:

HTML

HTML
<a href="steem://transfer?to=kafio&amount=1.000&currency=STEEM&memo=tip">
  Tip 1 STEEM
</a>

JavaScript

JavaScript
const deepLink = `steem://transfer?to=${recipient}&amount=${amount}&currency=${currency}&memo=${encodeURIComponent(memo)}`;
window.location.href = deepLink;

React Native

React Native
import { Linking } from 'react-native';

Linking.openURL('steem://transfer?to=kafio&amount=1.000&currency=STEEM');

Testing

Use the Deep Link Lab to build, validate, and test any deep link:

  • Builder — Select an operation, fill the form, get a URI + QR code
  • Parser — Paste any URI to decode and validate it
  • History — Save and replay your test URIs