You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

3062 lines
122 KiB

# Group Authorization
## Auth Request View [GET /auth?authRequest={authRequestToken}]
This endpoint is accessed internally by
[blockstack.js](https://github.com/blockstack/blockstack.js) to process user
sign-in requests. Applications use `blockstack.js` to direct users to sign in
or sign up. Please see the [blockstack.js
documentation](http://blockstack.github.io/blockstack.js/#authentication) on
authentication for details.
When the user clicks the Blockstack login button in an application, the app should
redirect the user to this endpoint (via `blockstack.js`). If the user already has an
account, they will be redirected along with requested data. If the
user doesn’t have an account, the user will be presented with each of
the app’s requested permissions, then will satisfy or deny them. The
sign-in dashboard will then redirect the user back to the application
with a signed JWT. This JWT contains a signature and an API
token that the app can use for future authorization of endpoints.
Each application specifies in advance which family of API calls it
will need to make to function properly. This list is passed along to
this endpoint when creating an application account. The
account-creation page shows this list of API endpoints and what they
do, and allows the user to line-item approve or deny them. The list
is stored to the user's profile, and returned to the application
application as part of the session JWT. The API
server will NACK requests to endpoints in API families absent from the
session JWT.
+ Requires root authorization
+ Parameters
+ authRequestToken: eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NksifQ.eyJhcHBfZG9tYWluIjoiaGVsbG9ibG9ja3N0YWNrLmNvbSIsIm1ldGhvZHMiOltdLCJhcHBfcHVibGljX2tleSI6IjAyYjk0ZjY4NDgzOGFkMjdmZTE0Nzk1MGMyNjQ1ZjRhYzhjYmU1OTJlYjYzYmQwYTQ5MWQ2YzBlYWZjNjE0YzVjMCJ9.0lLrxt8uGtB2rCKB9sb0jK1DdrrWuuuWM-nsyjvFnmjNx0XfG14Npl72w6hp9W2OHoXdPe7VuXkfvKmVNlQdeA (jwt token) - app token before signing
+ Response 200
+ Body
{"token":
"eyJhbGciOiJFUzI1NksiLCJ0eXAiOiJKV1QifQ.eyJhcHBfZG9tYWluIjoiaGVsbG9ibG9ja3N0YWNrLmNvbSIsIm1ldGhvZHMiOltdLCJ0aW1lc3RhbXAiOjE0OTkzNDc4OTUsImV4cGlyZXMiOjE0OTk5NTI2OTUsImFwcF91c2VyX2lkIjoiMUVITmE2UTRKejJ1dk5FeEw0OTdtRTQzaWtYaHdGNmtabSIsImRldmljZV9pZCI6IjAiLCJibG9ja2NoYWluX2lkIjpudWxsLCJzdG9yYWdlIjp7ImNsYXNzZXMiOnsid3JpdGVfcHJpdmF0ZSI6WyJkaXNrIiwiczMiLCJibG9ja3N0YWNrX3NlcnZlciIsImRodCJdLCJyZWFkX2xvY2FsIjpbImRpc2siXSwicmVhZF9wdWJsaWMiOlsiczMiLCJibG9ja3N0YWNrX3Jlc29sdmVyIiwiYmxvY2tzdGFja19zZXJ2ZXIiLCJodHRwIiwiZGh0Il0sIndyaXRlX2xvY2FsIjpbImRpc2siXSwid3JpdGVfcHVibGljIjpbXSwicmVhZF9wcml2YXRlIjpbImRpc2siXX0sInByZWZlcmVuY2VzIjp7fX0sImFwaV9lbmRwb2ludCI6ImxvY2FsaG9zdDo2MjcwIiwiYXBwX3B1YmxpY19rZXlzIjpbXSwidmVyc2lvbiI6MX0.Bhne8wQpPVfkV-VLf2mrsoMmNiE2e04crgLN7OUFKEh_YWeGmqjoZU7JVSzXA5r7LCpZ9Eki5uAWlJSHk-JuCA"
}
# Group Core Node Administration
Blockstack Core's API module provides a set of API calls for interacting with
the node's configuration. However, most of this section is **DEPRECATED** in favor
of moving configuration state to the [Blockstack
Browser](https://github.com/blockstack/blockstack-browser). Client-side state
is managed by [blockstack.js](https://github.com/blockstack/blockstack.js).
## Ping the node [GET /v1/node/ping]
Ping the Blockstack node to see if it's alive.
+ Public Endpoint
+ Response 200 (application/json)
+ Body
{
"status": "alive",
"version": "###version###"
}
+ Schema
{
"type": "object",
"properties": {
"status": {
"type": "string"
},
"version": {
"type": "string"
}
},
"required": [
"status",
"version"
]
}
## Get the node's config [GET /v1/node/config]
Returns the current configuation settings of the Blockstack node.
+ DEPRECATED. Blockstack clients should use
[blockstack.js](https://github.com/blockstack/blockstack.js) for querying
client-side configuration state.
+ Requires root authorization
+ Legacy Endpoint
+ Response 200 (application/json)
+ Body
{
"bitcoind": {
"passwd": "blockstacksystem",
"port": "18332",
"regtest": "True",
"server": "localhost",
"spv_path": "/tmp/.../spv_headers.dat",
"use_https": "False",
"user": "blockstack"
},
"blockchain-reader": {
"port": "18332",
"rpc_password": "blockstacksystem",
"rpc_username": "blockstack",
"server": "localhost",
"use_https": "False",
"utxo_provider": "bitcoind_utxo",
"version_byte": "0"
},
"blockchain-writer": {
"port": "18332",
"rpc_password": "blockstacksystem",
"rpc_username": "blockstack",
"server": "localhost",
"use_https": "False",
"utxo_provider": "bitcoind_utxo",
"version_byte": "0"
},
"blockstack-client": {
"advanced_mode": "true",
"api_endpoint_port": "6270",
"api_password": "...",
"blockchain_reader": "bitcoind_utxo",
"blockchain_writer": "bitcoind_utxo",
"client_version": "0.18.0.0",
"poll_interval": "300",
"port": "16264",
"queue_path": "/tmp/.../client/queues.db",
"rpc_detach": "True",
"server": "localhost",
"storage_drivers": "disk",
"storage_drivers_required_write": "disk",
}
}
+ Schema
{
'type': 'object',
'patternProperties': {
'.+': {
'type': 'string',
'pattern': '.+',
},
}
## Set config field [POST /v1/node/config/{section}?{key}={value}]
Set one or more config fields in a config section.
+ DEPRECATED. Blockstack clients should use
[blockstack.js](https://github.com/blockstack/blockstack.js) for client-side
configuration management.
+ Requires root authorization
+ Legacy Endpoint
+ Parameters
+ section: blockstack-client (string) - configuration section
+ key: server (string) - configuration variable to set
+ value: node.blockstack.org (string) - value to set
+ Response 200 (application/json)
+ Body
{ 'status' : true }
+ Schema
{
'anyOf': [
{
'type': 'object',
'properties': {
'status': {
'type': 'boolean'
},
},
},
{
'type': 'object',
'properties': {
'error': {
'type': 'string',
},
},
},
],
}
## Delete a config field [DELETE /v1/node/config/{section}/{key}]
Delete a single field from the configuration.
+ DEPRECATED. Blockstack clients should use
[blockstack.js](https://github.com/blockstack/blockstack.js) for client-side
configuration management.
+ Requires root authorization
+ Legacy Endpoint
+ Parameters
+ section: blockstack-client (string) - configuration section
+ key: advanced_mode (string) - configuration variable to set
+ Response 200 (application/json)
+ Body
{ 'status' : true }
+ Schema
{
'anyOf': [
{
'type': 'object',
'properties': {
'status': {
'type': 'boolean'
},
},
},
{
'type': 'object',
'properties': {
'error': {
'type': 'string',
},
},
},
],
}
## Delete a config section [DELETE /v1/node/config/{section}]
Deletes a whole section from the node's configuration.
+ DEPRECATED. Blockstack clients should use
[blockstack.js](https://github.com/blockstack/blockstack.js) for client-side
configuration management.
+ Requires root authorization
+ Legacy Endpoint
+ Parameters
+ section: blockstack-client (string) - configuration section
+ Response 200 (application/json)
+ Body
{ 'status' : true }
+ Schema
{
'anyOf': [
{
'type': 'object',
'properties': {
'status': {
'type': 'boolean'
},
},
},
{
'type': 'object',
'properties': {
'error': {
'type': 'string',
},
},
},
],
}
## Get registrar state [GET /v1/node/registrar/state]
Gets the current state of the registrar. That is, the Blockstack operations
that have been submitted to the blockchain but are still waiting for
enough confirmations.
+ DEPRECATED. Blockstack clients should use
[blockstack.js](https://github.com/blockstack/blockstack.js) to query
the status of pending transactions.
+ Requires root authorization
+ Legacy Endpoint
+ Response 200 (application/json)
+ Body
[
{
"block_height": 666,
"fqu": "bar.test",
"owner_address": "myaPViveUWiiZQQTb51KXCDde4iLC3Rf3K",
"payment_address": "mv1uqYWZpnap4VBSKTHfKW6noTZcNtxtCW",
"profile": {
"@type": "Person",
"accounts": []
},
"transfer_address": null,
"tx_hash": "b0fa7d4d79bb69cb3eccf40978514dec1620d05fe7822c550c2764c670efcd29",
"type": "preorder",
"zonefile": "$ORIGIN bar.test\n$TTL 3600\npubkey TXT \"pubkey:data:03ea5d8c2a3ba84eb17625162320bb53440557c71f7977a57d61405e86be7bdcda\"\n_file URI 10 1 \"file:///home/bar/.blockstack/storage-disk/mutable/bar.test\"\n",
"zonefile_hash": "cbe11bbbfffe415b915a7f9566748f72a0d8b2bd"
}
]
+ Schema
{
'type': 'array',
'items': {
'type': 'object',
'properties': {
'block_height': {
'type': 'integer',
'minimum': 0,
},
'fqu': {
'type': 'string',
'pattern': r'^([a-z0-9\\-_.+]{3,37})$',
},
'owner_address': {
'type': 'string',
'pattern': r'^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$',
},
'payment_address': {
'type': 'string',
'pattern': r'^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$',
},
'profile': {
'type': 'object',
'additionalProperties': true,
'properties': {
'@context': {
'optional': true,
'type': 'string'
},
'@id': {
'optional': true,
'type': 'string'
},
'@type': {
'type': 'string'
},
'account': {
'items': {
'properties': {
'@type': {
'type': 'string'
},
'identifier': {
'optional': true,
'type': 'string'
},
'proofMessage': {
'optional': true,
'type': 'string'
},
'proofSignature': {
'optional': true,
'type': 'string'
},
'proofType': {
'optional': true,
'type': 'string'
},
'proofUrl': {
'optional': true,
'type': 'string'
},
'service': {
'optional': true,
'type': 'string'
}
},
'type': 'object'
},
'optional': true,
'type': 'array'
},
'address': {
'optional': true,
'properties': {
'@type': {
'type': 'string'
},
'addressCountry': {
'optional': true,
'type': 'string'
},
'addressLocality': {
'optional': true,
'type': 'string'
},
'postalCode': {
'optional': true,
'type': 'string'
},
'streetAddress': {
'optional': true,
'type': 'string'
}
},
'type': 'object'
},
'birthDate': {
'optional': true,
'type': 'string'
},
'description': {
'optional': true,
'type': 'string'
},
'familyName': {
'optional': true,
'type': 'string'
},
'givenName': {
'optional': true,
'type': 'string'
},
'image': {
'items': {
'properties': {
'@type': {
'type': 'string'
},
'contentUrl': {
'optional': true,
'type': 'string'
},
'name': {
'optional': true,
'type': 'string'
}
},
'type': 'object'
},
'optional': true,
'type': 'array'
},
'knows': {
'items': {
'properties': {
'@id': {
'optional': true,
'type': 'string'
},
'@type': {
'type': 'string'
}
},
'type': 'object'
},
'optional': true,
'type': 'array'
},
'name': {
'optional': true,
'type': 'string'
},
'taxID': {
'optional': true,
'type': 'string'
},
'website': {
'items': {
'properties': {
'@type': {
'type': 'string'
},
'url': {
'optional': true,
'type': 'string'
}
},
'type': 'object'
},
'optional': true,
'type': 'array'
},
'worksFor': {
'items': {
'properties': {
'@id': {
'optional': true,
'type': 'string'
},
'@type': {
'type': 'string'
}
},
'type': 'object'
},
'optional': true,
'type': 'array'
}
}
},
'transfer_address': r'^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$',
'tx_hash': r'^([0-9a-fA-F]+)$',
'type': '.+',
'zonefile': '.+',
'zonefile_hash': r'^([0-9a-fA-F]+)$'
}
}
}
# Group Core Wallet Management
This entire section is **DEPRECATED** in favor of the wallet software in
[blockstack.js](https://github.com/blockstack/blockstack.js). Names registered
with this API will need to be transferred to the Blockstack Browser.
The Blockstack Core node manages its own wallet -- this has three keys
for payment, name ownership, and signing data (e.g., user profiles). This
wallet can be managed through these endpoints.
## Get balance via mock-insight API [GET /insight-api/addr/{address}/balance]
Returns the integer satoshi balance of the given address, with mininum
of 1 confirmation.
+ DEPRECATED. Blockstack clients should use
[blockstack.js](https://github.com/blockstack/blockstack.js) to query
balances.
+ Authorization: `wallet_read`
+ Legacy Endpoint
+ Response 200 (application/json)
+ Body
2104
+ Schema
{ 'type' : 'integer' }
## Get unconfirmed balance via mock-insight API [GET /insight-api/addr/{address}/unconfirmedBalance]
Returns the integer *unconfirmed* satoshi balance of the given address
(only the 0-confirmation balance). To get the min_conf=0 balance of an
address, you want *unconfirmedBalance* + *balance*. The unconfirmed
balance may be negative (if there is an unconfirmed spend). This
specification is strange, I know, but it replicates the interface of
insight-api.
+ DEPRECATED. Blockstack clients should use
[blockstack.js](https://github.com/blockstack/blockstack.js) to query
balances.
+ Authorization: `wallet_read`
+ Legacy Endpoint
+ Response 200 (application/json)
+ Body
-1000
+ Schema
{ 'type' : 'integer' }
## Get wallet payment address [GET /v1/wallet/payment_address]
Returns core node's payment address.
+ DEPRECATED. Blockstack clients should use
[blockstack.js](https://github.com/blockstack/blockstack.js) to manage keys
and query UTXOs.
+ Authorization: `wallet_read`
+ Legacy Endpoint
+ Response 200 (application/json)
+ Body
{
"address": "mv1uqYWZpnap4VBSKTHfKW6noTZcNtxtCW"
}
+ Schema
{
'type': 'object',
'properties': {
'type': 'string',
'pattern': r'^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$',
}
}
## Set a specific wallet key [PUT /v1/wallet/keys/{keyname}]
This call instructs the blockstack core node to use a particular key
instead of the core node's configured wallet key. The setting of this
key is *temporary* by default, meaning that it is not written to
`~/.blockstack/wallet.json`, and on a subsequent restart, the key will
return to the original key. However, the core registrar *tracks* the
owner key used for each `PREORDER`, and stores that private key
encrypted (with `scrypt` and the core wallet password) in the
queue. When the registrar detects that the key being used for a
particular name has changed, it will recover by submitting further
transactions with the stored key.
However, for blockstack core >= 0.14.5, the `persist_change` keyword
will instruct the core node to write the changed key to
`~/.blockstack/wallet.json`. In this mode, the node will backup the
previous wallet to `~/.blockstack/wallet.json.prior.<timestamp>`
+ DEPRECATED. Blockstack clients should use
[blockstack.js](https://github.com/blockstack/blockstack.js) to manage keys.
+ Requires root authorization
+ Legacy Endpoint
+ Parameters
+ keyname: owner (string) - which key to set (one of 'owner', 'data', 'payment')
+ Request (application/json)
+ Body
"cPo24qGYz76xSbUCug6e8LzmzLGJPZoowQC7fCVPLN2tzCUJgfcW"
+ Request (application/json)
+ Schema
{
"type" : "object",
"properties" : {
"private_key" : {
"anyOf": [
{
"anyOf": [
{
"pattern": "^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$",
"type": "string"
},
{
"pattern": "^([0-9a-fA-F]+)$",
"type": "string"
}
]
},
{
"properties": {
"address": {
"pattern": "^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$",
"type": "string"
},
"private_keys": {
"items": {
"anyOf": [
{
"pattern": "^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$",
"type": "string"
},
{
"pattern": "^([0-9a-fA-F]+)$",
"type": "string"
}
]
},
"type": "array"
},
"redeem_script": {
"pattern": "^([0-9a-fA-F]+)$",
"type": "string"
}
},
"required": [
"address",
"redeem_script",
"private_keys"
],
"type": "object"
}
]
},
"persist_change" : {"type" : "boolean"}
},
"required" : [ "private_key" ]
}
+ Request (application/json)
+ Schema
{
"anyOf": [
{
"anyOf": [
{
"pattern": "^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$",
"type": "string"
},
{
"pattern": "^([0-9a-fA-F]+)$",
"type": "string"
}
]
},
{
"properties": {
"address": {
"pattern": "^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$",
"type": "string"
},
"private_keys": {
"items": {
"anyOf": [
{
"pattern": "^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$",
"type": "string"
},
{
"pattern": "^([0-9a-fA-F]+)$",
"type": "string"
}
]
},
"type": "array"
},
"redeem_script": {
"pattern": "^([0-9a-fA-F]+)$",
"type": "string"
}
},
"required": [
"address",
"redeem_script",
"private_keys"
],
"type": "object"
}
]
}
+ Response 200 (application/json)
+ Body
{"status": true}
+ Schema
{
'anyOf': [
{
'type': 'object',
'properties': {
'status': {
'type': 'boolean'
},
},
},
{
'type': 'object',
'properties': {
'error': {
'type': 'string',
},
},
},
],
}
## Get payment wallet balance [GET /v1/wallet/balance/{minconfs}]
Fetches wallet balance, including UTXOs from transactions with at
least a specified number of confirmations.
+ DEPRECATED. Blockstack clients should use
[blockstack.js](https://github.com/blockstack/blockstack.js) to manage keys
and query UTXOs.
+ Authorization: `wallet_read`
+ Legacy Endpoint
+ Parameters
+ minconfs: 0 (number, optional) - the minimum confs of transactions to include in balance
+ Response 200 (application/json)
+ Body
{
"balance": {
"bitcoin": 49.931727,
"satoshis": 4993172700
}
}
+ Schema
{
'type': 'object',
'properties': {
'balance': {
'type': 'object',
'properties': {
'bitcoin': {
'type': 'number',
'minimum': 0,
},
'satoshis': {
'type': 'integer',
'minimum': 0,
},
},
},
},
}
## Withdraw payment wallet funds [POST /v1/wallet/balance]
Withdraw an amount (given in satoshis) from the core payment
wallet, to a particular address.
+ DEPRECATED. Blockstack clients should use
[blockstack.js](https://github.com/blockstack/blockstack.js) to manage keys,
generate transactions, and send transactions.
+ Authorization: `wallet_write`
+ Legacy Endpoint
+ Request (application/json)
+ Body
{'address' : 'mibZW6EBpXSTWQNQ9E4fi9hhGKYSMkjyg9',
'amount' : 100,
'min_confs' : 6,
'tx_only' : false}
+ Schema
{
'type': 'object',
'properties': {
'address': {
'type': 'string',
'pattern': r"^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$",
},
'amount': {
'type': 'integer',
'minimum': 0,
},
'message': {
'type': 'string',
'pattern': '^.{1,80}$',
}
'min_confs': {
'type': 'integer',
'minimum': 0,
},
'tx_only': {
'type': 'boolean'
},
'payment_key': {
'anyOf': [
{
'anyOf': [
{
'pattern': '^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$',
'type': 'string'
},
{
'pattern': '^([0-9a-fA-F]+)$',
'type': 'string'
}
]
},
{
'properties': {
'address': {
'pattern': '^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$',
'type': 'string'
},
'private_keys': {
'items': {
'anyOf': [
{
'pattern': '^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$',
'type': 'string'
},
{
'pattern': '^([0-9a-fA-F]+)$',
'type': 'string'
}
]
},
'type': 'array'
},
'redeem_script': {
'pattern': '^([0-9a-fA-F]+)$',
'type': 'string'
}
},
'required': [
'owner'
],
'type': 'object'
}
]
}
},
'required': [
'address'
],
}
+ Response 200 (application/json)
+ Body
{
"status": true,
"transaction_hash": "c4ee8d1993794487e6b5aca802a1793530bdff35c763ca051fbaa4b998780822",
"success": true
}
+ Schema
{
'anyOf': [
{
'type': 'object',
'properties': {
'success': {
'type': 'boolean'
},
'transaction_hash': {
'type': 'string',
'pattern': r'^([0-9a-fA-F]+)$',
},
},
},
{
'type': 'object',
'properties': {
'error': {
'type': 'string',
},
},
},
],
}
## Get wallet owner address [GET /v1/wallet/owner_address]
Returns core node's owner address.
+ DEPRECATED. Blockstack clients should use
[blockstack.js](https://github.com/blockstack/blockstack.js) to manage keys.
+ Authorization: `wallet_read`
+ Legacy Endpoint
+ Response 200 (application/json)
+ Body
{
"address": "myaPViveUWiiZQQTb51KXCDde4iLC3Rf3K"
}
+ Schema
{
'anyOf': [
{
'type': 'object',
'properties': {
'address': {
'type': 'string',
'pattern': r"^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$",
},
},
},
{
'type': 'object',
'properties': {
'error': {
'type': 'string',
},
},
},
],
}
## Get wallet data public key [GET /v1/wallet/data_pubkey]
Returns the public key the core node uses for signing user data
+ DEPRECATED. Blockstack clients should use
[blockstack.js](https://github.com/blockstack/blockstack.js) to manage keys.
+ Authorization: `wallet_read`
+ Legacy Endpoint
+ Response 200 (application/json)
+ Body
{
"public_key": "03ea5d8c2a3ba84eb17625162320bb53440557c71f7977a57d61405e86be7bdcda"
}
+ Schema
{
'anyOf': [
{
'type': 'object',
'properties': {
'public_key': {
'type': 'string',
'pattern': r'^([0-9a-fA-F]+)$',
},
},
},
{
'type': 'object',
'properties': {
'error': {
'type': 'string',
},
},
},
],
}
## Change wallet password [PUT /v1/wallet/password]
This will change the password for core's wallet. Currently not working endpoint.
+ DEPRECATED. Blockstack clients should use
[blockstack.js](https://github.com/blockstack/blockstack.js) to encrypt keys.
+ Authorization: `wallet_write`
+ Legacy Endpoint
+ Request (application/json)
+ Body
{'password' : '"0123456789abcdef"',
'new_password' : "abcdef0123456789"'}
+ Schema
{
'anyOf': [
{
'type': 'object',
'properties': {
'password': {
'type': 'string',
},
'new_password': {
'type': 'string',
},
},
},
{
'type': 'object',
'properties': {
'error': {
'type': 'string',
},
},
},
],
}
## Set all wallet keys [PUT /v1/wallet/keys]
+ DEPRECATED. Blockstack clients should use
[blockstack.js](https://github.com/blockstack/blockstack.js) to manage keys
in a client wallet.
+ Legacy Endpoint
+ Requires root authorization
## Get all wallet keys [GET /v1/wallet/keys]
+ DEPRECATED. Blockstack clients should use
[blockstack.js](https://github.com/blockstack/blockstack.js) to interact with
a client wallet.
+ Legacy Endpoint
+ Requires root authorization
# Group Managing Names
All POST, PUT, and DELETE routes in this section are **DEPRECATED** in favor of using either the [Blockstack
Browser](https://github.com/blockstack/blockstack-browser) or
[blockstack.js](https://github.com/blockstack/blockstack.js) to register and
manage names.
All GET routes are still valid.
## Register a name [POST /v1/names]
Registers a name, optionally to a given owner key and optionally using
a given payment key to pay for the name and transaction fees.
This method takes a JSON blob with the following fields:
* `name`: (required) the fully-qualified name to register.
* `zonefile`: (optional) the zone file to associate with this name. If one is
not given, a default one will be generated.
* `owner_address`: (optional) the recipient of this name. See below.
* `min_confs`: (optional) this is the minimum number of confirmations for UTXOs
that will be used for payments for this name registration. Lower values speed
up the name registration time, at the risk of blockchain reorgs or frontrunners
invalidating your name's registration.
* `tx_fee`: (optional) use this transaction fee (in satoshis) instead of
estimating one.
* `cost_satoshis`: (optional) how much to pay for this name. This value will be
sent to the name's namespace's designated burn address. If not given, the
precise value will be looked up automatically.
* `unsafe`: (optional) ignore internal safety checks when generating and sending
transactions. See below.
* `owner_key`: (optional) if given, this is the *private key* of the owner
that will receive the name. Useful for when you want to use your *personal*
node to register names to a different key, without having to bother with the
extra `NAME_TRANSFER` transaction required by passing `owner_address`.
DO NOT USE IN PUBLIC SETTINGS.
* `payment_key`: (optional) if given, this is the *private key* used to pay for
the name registration fee and transaction fees. Useful for when you want to
use your *personal* node to register names with a different payment key. DO NOT
USE IN PUBLIC SETTINGS.
If no `owner_address` is supplied in the POSTed JSON
object, the node will register a name for the `owner_key` given in the
JSON blob. If no `owner_key` is given, then the node's current owner address
in its wallet will be used.
If an `owner_address` is supplied, a `TRANSFER` transaction will be
broadcasted to send the name to appropriate owner. If you intend to register
many names to different addresses, it is recommended that you use one of the
wallet endpoints to set the node's owner keys to save yourself the extra
`TRANSFER` transactions (or pass `owner_key`). However, you should *ONLY* do
this if you trust the node (i.e. only do this for personal nodes).
The `min_confs` keyword controls the minimum number of confirmations for
UTXOs used as payments for name registration.
The `unsafe` keyword instructs the node's registrar to ignore certain
safety checks while registering the name (in particular, the registrar
will not verify that the user own's the name before issuing a
`REGISTER` and `UPDATE`). This allows the registrar to submit
operations before they have been confirmed on remote resolvers or
indexers, in this mode, the registrar will wait for 4 confirmations on
a `PREORDER`, 1 confirmation on a `REGISTER` and 1 confirmation on an
`UPDATE`. `node.blockstack.org` will correctly detect the registration
after the `UPDATE` has 6 confirmations.
+ DEPRECATED. Registering names is now performed by [Blockstack
Browser](https://github.com/blockstack/blocktack-browser) and
[blockstack.js](https://github.com/blockstack/blockstack.js).
+ Authorization: `register`
+ Legacy Endpoint
+ Request (application/json)
+ Body
{
'name' : 'bar.test'
}
+ Request (application/json)
+ Schema
{
'type': 'object',
'properties': {
"name": {
'type': 'string',
'pattern': OP_NAME_PATTERN
},
"zonefile": {
'type': 'string',
'maxLength': RPC_MAX_ZONEFILE_LEN,
},
"owner_address": {
'type': 'string',
'pattern': OP_BASE58CHECK_PATTERN,
},
'min_confs': {
'type': 'integer',
'minimum': 0,
},
'tx_fee': {
'type': 'integer',
'minimum': 0,
'maximum': TX_MAX_FEE,
},
'cost_satoshis': {
'type': 'integer',
'minimum': 0,
},
'unsafe': {
'type': 'boolean'
},
'owner_key': {
'anyOf': [
{
'anyOf': [
{
'pattern': '^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$',
'type': 'string'
},
{
'pattern': '^([0-9a-fA-F]+)$',
'type': 'string'
}
]
},
{
'properties': {
'address': {
'pattern': '^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$',
'type': 'string'
},
'private_keys': {
'items': {
'anyOf': [
{
'pattern': '^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$',
'type': 'string'
},
{
'pattern': '^([0-9a-fA-F]+)$',
'type': 'string'
}
]
},
'type': 'array'
},
'redeem_script': {
'pattern': '^([0-9a-fA-F]+)$',
'type': 'string'
}
},
'required': [
'owner'
],
'type': 'object'
}
]
},
'payment_key': {
'anyOf': [
{
'anyOf': [
{
'pattern': '^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$',
'type': 'string'
},
{
'pattern': '^([0-9a-fA-F]+)$',
'type': 'string'
}
]
},
{
'properties': {
'address': {
'pattern': '^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$',
'type': 'string'
},
'private_keys': {
'items': {
'anyOf': [
{
'pattern': '^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$',
'type': 'string'
},
{
'pattern': '^([0-9a-fA-F]+)$',
'type': 'string'
}
]
},
'type': 'array'
},
'redeem_script': {
'pattern': '^([0-9a-fA-F]+)$',
'type': 'string'
}
},
'required': [
'owner'
],
'type': 'object'
}
]
}
},
'required': [
'name'
],
'additionalProperties': False,
}
+ Response 200 (application/json)
+ Body
{
"message": "Name queued for registration. The process takes several hours. You can check the status with `blockstack info`.",
"success": true,
"transaction_hash": "6cdb9722f72875b30e1ab3de463e3960aced951f674be942b302581a9a9469a5"
}
+ Schema
{
'anyOf': [
{
'type': 'object',
'properties': {
'success': {
'type': 'boolean'
},
'transaction_hash': {
'type': 'string',
'pattern': r'^([0-9a-fA-F]+)$',
},
},
},
{
'type': 'object',
'properties': {
'error': {
'type': 'string',
},
},
},
],
}
## Revoke name [DELETE /v1/names/{name}]
Revokes the name from Blockstack. This renders
the name unusable until it expires. Use this method if your private keys
are compromised.
+ DEPRECATED. Blockstack clients should use
[blockstack.js](https://github.com/blockstack/blockstack.js) for generating
transactions.
+ Authorization: `revoke`
+ Legacy Endpoint
+ Parameters
+ name: bar.test (string) - fully-qualified name
+ Response 200 (application/json)
+ Body
{
"message": "Name queued for revocation. The process takes ~1 hour. You can check the status with `blockstack info`.",
"success": true,
"transaction_hash": "b2745b706d7a14ce652265de103d7eaefb44a75eb658d7bb1db8868da08768b2"
}
+ Schema
{
'anyOf': [
{
'type': 'object',
'properties': {
'success': {
'type': 'boolean'
},
'transaction_hash': {
'type': 'string',
'pattern': r'^([0-9a-fA-F]+)$',
},
},
},
{
'type': 'object',
'properties': {
'error': {
'type': 'string',
},
},
},
],
}
## Transfer name [PUT /v1/names/{name}/owner]
Transfers a name to a different owner.
+ DEPRECATED. Blockstack clients should use
[blockstack.js](https://github.com/blockstack/blockstack.js) for generating
transactions.
+ Authorization: `transfer`
+ Legacy Endpoint
+ Parameters
+ name: bar.test (string) - name to transfer
+ Request (application/json)
+ Body
{ "owner" : "mjZicz7GSJBZuGeCMEgpzr8U9w6d41DfXm" }
+ Request (application/json)
+ Schema
{
'type': 'object',
'properties': {
'owner': {
'type': 'string',
'pattern': OP_BASE58CHECK_PATTERN,
},
'tx_fee': {
'type': 'integer',
'minimum': 0,
'maximum': 500000
},
'owner_key': {
'anyOf': [
{
'anyOf': [
{
'pattern': '^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$',
'type': 'string'
},
{
'pattern': '^([0-9a-fA-F]+)$',
'type': 'string'
}
]
},
{
'properties': {
'address': {
'pattern': '^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$',
'type': 'string'
},
'private_keys': {
'items': {
'anyOf': [
{
'pattern': '^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$',
'type': 'string'
},
{
'pattern': '^([0-9a-fA-F]+)$',
'type': 'string'
}
]
},
'type': 'array'
},
'redeem_script': {
'pattern': '^([0-9a-fA-F]+)$',
'type': 'string'
}
},
'required': [
'owner'
],
'type': 'object'
}
]
},
'payment_key': {
'anyOf': [
{
'anyOf': [
{
'pattern': '^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$',
'type': 'string'
},
{
'pattern': '^([0-9a-fA-F]+)$',
'type': 'string'
}
]
},
{
'properties': {
'address': {
'pattern': '^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$',
'type': 'string'
},
'private_keys': {
'items': {
'anyOf': [
{
'pattern': '^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$',
'type': 'string'
},
{
'pattern': '^([0-9a-fA-F]+)$',
'type': 'string'
}
]
},
'type': 'array'
},
'redeem_script': {
'pattern': '^([0-9a-fA-F]+)$',
'type': 'string'
}
},
'required': [
'owner'
],
'type': 'object'
}
]
}
},
'additionalProperties': False,
}
+ Response 202 (application/json)
+ Body
{
"message": "Name queued for transfer. The process takes ~1 hour. You can check the status with `blockstack info`.",
"success": true,
"transaction_hash": "c0d677f9ee681abbed8ca6d231bc4ece517c8c6695ce883e5e196b5395402779"
}
+ Schema
{
'anyOf': [
{
'type': 'object',
'properties': {
'success': {
'type': 'boolean'
},
'transaction_hash': {
'type': 'string',
'pattern': r'^([0-9a-fA-F]+)$',
},
},
},
{
'type': 'object',
'properties': {
'error': {
'type': 'string',
},
},
},
],
}
## Publish zone file [POST /v1/names/zonefile]
Publish the zonefile which has _already_ been announced.
Submit either as a string with the 'zonefile' property, or
as a base64 encoded blob with the 'zonefile_b64' property.
We recommend base64-encoding your zone files in order to guarantee that they
will be JSON-encodable.
+ DEPRECATED.
+ Request (application/json)
+ Schema
{
'type': 'object',
'properties': {
"zonefile": {
'type': 'string',
},
"zonefile_b64": {
'type': 'string',
}
},
'additionalProperties': False,
}
+ Response 200 (application/json)
+ Body
{'success': true, 'servers' : ['...']}
## Set zone file [PUT /v1/names/{name}/zonefile]
Sets the user's zonefile hash, and, if supplied, propagates the
zonefile. If you supply the zonefile, the hash will be calculated from
that. Ultimately, your requests should only supply one of `zonefile`,
`zonefile_b64`, or `zonefile_hash`.
The value for `zonefile_b64` is a base64-encoded string.
New clients _should_ use the `zonefile_b64` field when specifying a zone file.
The `zonefile` field is preserved for legacy compatibility.
This API call issues a `NAME_UPDATE` transaction for a name that is owned by
this node's wallet. That is, you can only call this API method if your node
owns the name you're updating.
+ DEPRECATED. Blockstack clients should use
[blockstack.js](https://github.com/blockstack/blockstack.js) for generating
transactions.
+ Authorization: `update`
+ Legacy Endpoint
+ Parameters
+ name: bar.test (string) - fully-qualified name
+ Request (application/json)
+ Schema
{
'type': 'object',
'properties': {
"zonefile": {
'type': 'string',
},
'zonefile_b64': {
'type': 'string',
'pattern': r'^((?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4}))$'
},
'zonefile_hash': {
'type': 'string',
'pattern': '^([0-9a-fA-F]{20})$'
},
'tx_fee': {
'type': 'integer',
'minimum': 0,
'maximum': 500000
},
'owner_key': {
'anyOf': [
{
'anyOf': [
{
'pattern': '^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$',
'type': 'string'
},
{
'pattern': '^([0-9a-fA-F]+)$',
'type': 'string'
}
]
},
{
'properties': {
'address': {
'pattern': '^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$',
'type': 'string'
},
'private_keys': {
'items': {
'anyOf': [
{
'pattern': '^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$',
'type': 'string'
},
{
'pattern': '^([0-9a-fA-F]+)$',
'type': 'string'
}
]
},
'type': 'array'
},
'redeem_script': {
'pattern': '^([0-9a-fA-F]+)$',
'type': 'string'
}
},
'required': [
'owner'
],
'type': 'object'
}
]
},
'payment_key': {
'anyOf': [
{
'anyOf': [
{
'pattern': '^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$',
'type': 'string'
},
{
'pattern': '^([0-9a-fA-F]+)$',
'type': 'string'
}
]
},
{
'properties': {
'address': {
'pattern': '^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$',
'type': 'string'
},
'private_keys': {
'items': {
'anyOf': [
{
'pattern': '^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$',
'type': 'string'
},
{
'pattern': '^([0-9a-fA-F]+)$',
'type': 'string'
}
]
},
'type': 'array'
},
'redeem_script': {
'pattern': '^([0-9a-fA-F]+)$',
'type': 'string'
}
},
'required': [
'owner'
],
'type': 'object'
}
]
}
},
'additionalProperties': False,
}
+ Response 202 (application/json)
+ Body
{'success': true, 'transaction_hash' : '...'}
+ Schema
{
'anyOf': [
{
'type': 'object',
'properties': {
'success': {
'type': 'boolean'
},
'transaction_hash': {
'type': 'string',
'pattern': r'^([0-9a-fA-F]+)$',
},
},
},
{
'type': 'object',
'properties': {
'error': {
'type': 'string',
},
},
},
],
}
## Fetch zone file [GET /v1/names/{name}/zonefile]
Fetch a user's raw zone file. This only works for RFC-compliant zone files.
This method returns an error for names that have non-standard zone files.
+ Parameters
+ name: bar.test (string) - fully-qualified name
+ Response 200 (application/json)
+ Body
{
"zonefile": "$ORIGIN bar.test\n$TTL 3600\n_https._tcp URI 10 1 \"https://blockstack.s3.amazonaws.com/bar.test\"\n"
}
+ Schema
{
'anyOf': [
{
'type': 'object',
'properties': {
'zonefile': {
'type': 'string',
'pattern': '.+',
},
},
{
'type': 'object',
'properties': {
'error': {
'type': 'string',
'pattern': '.+',
},
},
]
}
# Group Name Querying
This family of API endpoints deals with querying name information.
## Get all names [GET /v1/names?page={page}]
Fetch a list of all names known to the node.
+ Public Endpoint
+ Parameters
+ page: 23 (number) - names are returned in pages of size 100,
so specify the page number.
+ Response 200 (application/json)
+ Body
[ "aldenquimby.id", "aldeoryn.id",
"alderete.id", "aldert.id",
"aldi.id", "aldighieri.id", ... ]
+ Schema
{
'type': 'array',
'items': {
'type': 'string',
'pattern': r'^([a-z0-9\\-_.+]{3,37})$',
}
}
## Get all subdomains [GET /v1/subdomains?page={page}]
Fetch a list of all names known to the node.
+ Public Endpoint
+ Parameters
+ page: 3 (number) - names are returned in pages of size 100,
so specify the page number.
+ Response 200 (application/json)
+ Body
[
"collegeinfogeek.verified.podcast",
"collider.verified.podcast",
"combatandclassics.verified.podcast",
"combatjack.verified.podcast",
"comedybangbang.verified.podcast",
"comedybutton.verified.podcast",
"commonsense.verified.podcast",
"concilio002.personal.id", ... ]
+ Schema
{
'type': 'array',
'items': {
'type': 'string',
'pattern': r'^([a-z0-9\\-_.+]{3,37})\.([a-z0-9\\-_.+]{3,37})$',
}
}
## Get name info [GET /v1/names/{name}]
+ Public Endpoint
+ Subdomain Aware
+ Parameters
+ name: muneeb.id (string) - fully-qualified name
+ Response 200 (application/json)
+ Body
{
"address": "1QJQxDas5JhdiXhEbNS14iNjr8auFT96GP",
"blockchain": "bitcoin",
"expire_block": 489247,
"last_txid": "1edfa419f7b83f33e00830bc9409210da6c6d1db60f99eda10c835aa339cad6b",
"status": "registered",
"zonefile": "$ORIGIN muneeb.id\n$TTL 3600\n_http._tcp IN URI 10 1 \"https://blockstack.s3.amazonaws.com/muneeb.id\"\n",
"zonefile_hash": "b100a68235244b012854a95f9114695679002af9"
}
+ Schema
{
'type': 'object',
'properties': {
'address': {
'type': 'string',
'pattern': r"^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$",
},
'blockchain': {
'type': 'string',
'pattern': '^bitcoin$',
},
'expire_block': {
'type': 'integer',
'minimum': 0,
},
'last_txid': {
'type': 'string',
'pattern': '^[0-9a-fA-F]+$',
},
'status': {
'type': 'string',
'pattern': '^(registered|revoked)$',
},
'zonefile': {
'anyOf': [
{
'type': 'string',
},
{
'type': 'object',
'properties': {
'error': {
'type': 'string',
},
},
},
],
},
'zonefile_hash': {
'type': 'string',
'pattern': '^[0-9a-fA-F]{20}$`,
},
},
{ 'required':
[
'address', 'blockchain', 'last_txid',
'status', 'zonefile', 'zonefile_hash'
]
}
}
## Name history [GET /v1/names/{name}/history?page={page}]
Get a history of all blockchain records of a registered name.
+ Public Endpoint
+ Subdomain aware
+ Parameters
+ name: muneeb.id (string) - name to query
+ page: 0 (integer) - the page (in 20-entry pages) of the history to fetch
+ Response 200 (application/json)
+ Body
{
"373821": [
{
"address": "1QJQxDas5JhdiXhEbNS14iNjr8auFT96GP",
"block_number": 373821,
"consensus_hash": null,
"first_registered": 373821,
"importer": "76a9143e2b5fdd12db7580fb4d3434b31d4fe9124bd9f088ac",
"importer_address": "16firc3qZU97D1pWkyL6ZYwPX5UVnWc82V",
"last_creation_op": ";",
"last_renewed": 373821,
"name": "muneeb.id",
"name_hash128": "deb7fe99776122b77925cbf0a24ab6f8",
"namespace_block_number": 373601,
"namespace_id": "id",
"op": ";",
"op_fee": 100000.0,
"opcode": "NAME_IMPORT",
"preorder_block_number": 373821,
}
]
}
+ Schema
{
'type': 'object',
'patternProperties': {
'^[0-9]+': {
'type': 'array',
'items': {
'type': 'object',
'properties': {
'address': {
'type': 'string',
'pattern': r"^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$",
},
'base': {
'type': 'integer',
'minimum': 0,
'maximum': 255,
},
'buckets': {
'anyOf': [
{
'type': 'array',
'items': {
'type': 'integer',
'minItems': 16,
'maxItems': 16,
},
},
{
'type': 'null',
},
],
},
'block_number': {
'type': 'integer',
'minimum': 0,
},
'coeff': {
'anyOf': [
{
'type': 'integer',
'minimum': 0,
'maximum': 255,
},
{
'type': 'null'
},
],
},
'consensus_hash': {
'anyOf': [
{
'type': 'string',
'pattern': '^[0-9a-fA-F]{32}',
},
{
'type': 'null'
},
],
},
'fee': {
'type': 'integer',
'minimum': 0,
},
'first_registered': {
'type': 'integer',
'minimum': 0,
},
'history_snapshot': {
'type': 'boolean',
},
'importer': {
'anyOf': [
{
'type': 'string',
'pattern': r'^76[aA]914[0-9a-fA-F]{40}88[aA][cC]$',
},
{
'type': 'null',
},
],
},
'importer_address': {
'anyOf': [
{
'type': 'string',
'pattern': r"^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$",
},
{
'type': 'null',
},
],
},
'last_renewed': {
'type': 'integer',
'minimum': 0,
},
'op': {
'type': 'string',
'pattern': '^([>?+~:!&*:;#]{1}|>>|>~|::)$',
},
'op_fee': {
'type': 'number',
},
'opcode': {
'type': 'string',
'pattern': '^NAME_TRANSFER|NAME_PREORDER|NAME_UPDATE|NAME_REVOKE|NAME_REGISTRATION|NAMESPACE_READY|NAMESPACE_REVEAL|NAMESPACE_PREORDER|NAME_RENEWAL|NAME_IMPORT|ANNOUNCE$'
},
'revoked': {
'type': 'boolean',
},
'sender': {
'type': 'string',
'pattern': '^([0-9a-fA-F]+)$',
},
'sender_pubkey': {
'anyOf': [
{
'type': 'string',
'pattern': '^([0-9a-fA-F]+)$',
},
{
'type': 'null'
},
],
},
'recipient': {
'anyOf': [
{
'type': 'string',
'pattern': '^([0-9a-fA-F]+)$',
},
{
'type': 'null'
},
],
},
'recipient_address': {
'anyOf': [
{
'type': 'string',
'pattern': '^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$',
},
{
'type': 'null'
},
],
},
'recipient_pubkey': {
'anyOf': [
{
'type': 'string',
'pattern': '^([0-9a-fA-F]+)$',
},
{
'type': 'null'
},
],
},
'txid': {
'type': 'string',
'pattern': '^([0-9a-fA-F]+)$',
},
'value_hash': {
'anyOf': [
{
'type': 'string',
'pattern': '^([0-9a-fA-F]{40})$',
},
{
'type': 'null',
},
],
},
'vtxindex': {
'type': 'integer',
'minimum': 0,
},
},
'required': [
'op',
'opcode',
'txid',
'vtxindex'
],
}
}
}
}
## Get historical zone file [GET /v1/names/{name}/zonefile/{zoneFileHash}]
Fetches the historical zonefile specified by the username and zone hash.
+ Public Endpoint
+ Subdomain aware
+ Parameters
+ name: muneeb.id (string) username to fetch
+ zoneFileHash: b100a68235244b012854a95f9114695679002af9
+ Response 200 (application/json)
+ Body
{
"zonefile":
"$ORIGIN muneeb.id\n$TTL 3600\n_http._tcp IN URI 10 1 \"https://blockstack.s3.amazonaws.com/muneeb.id\"\n"
}
+ Schema
{
'anyOf': [
{
'type': 'object',
'properties': {
'zonefile': { 'type': 'string' },
},
},
{
'type': 'object',
'properties': {
'error': { 'type': 'string' },
},
},
],
}
## Get names owned by address [GET /v1/addresses/{blockchain}/{address}]
Retrieves a list of names owned by the address provided.
+ Subdomain Aware
+ Public Endpoint
+ Parameters
+ blockchain: bitcoin (string) - the layer-1 blockchain for the address
+ address: 1QJQxDas5JhdiXhEbNS14iNjr8auFT96GP (string) - the address to lookup
+ Response 200 (application/json)
+ Body
{
"names": ["muneeb.id"]
}
+ Schema
{
'type': 'object',
'properties': {
'names': {
'type': 'array',
'items': {
'type': 'string',
'pattern': '^([a-z0-9\-_.+]{3,37})$',
},
},
},
}
# Group Price Checks
## Get namespace price [GET /v1/prices/namespaces/{tld}]
This endpoint is used to get the price of a namespace. Anyone can create a
namespace by following [this
tutorial](https://github.com/blockstack/blockstack-core/blob/master/docs/namespace_creation.md).
+ Public Endpoint
+ Parameters
+ tld: id (string) - namespace to query price for
+ Response 200 (application/json)
+ Body
{
"satoshis": 4000000000
}
+ Schema
{
'type': 'object',
'properties': {
'satoshis': {
'type': 'integer',
'minimum': 0,
},
},
}
## Get name price [GET /v1/prices/names/{name}]
This endpoint is used to get the price of a name. If you are using
a public endpoint, you should *only* rely on the `name_price` field in the
returned JSON blob. Other fields are **DEPRECATED**, since they are relevant
only for estimating the cost of registering a name (which should be done via
[blockstack.js](https://github.com/blockstack/blockstack.js) or the [Blockstack
Browser](https://github.com/blockstack/blockstack-browser)).
+ Public Endpoint
+ Parameters
+ name: muneeb.id (string) - name to query price information for
+ Response 200 (application/json)
+ Body
{
"name_price": {
"satoshis": 100000,
"btc": 0.001
},
"total_tx_fees": 519209,
"register_tx_fee": {
"satoshis": 159110,
"btc": 0.0015911
},
"preorder_tx_fee": {
"satoshis": 163703,
"btc": 0.00163703
},
"warnings": [
"Insufficient funds; fees are rough estimates."
],
"total_estimated_cost": {
"satoshis": 619209,
"btc": 0.00619209
},
"update_tx_fee": {
"satoshis": 196396,
"btc": 0.00196396
}
}
+ Schema
{
'type': 'object',
'properties': {
'name_price': {
'type': 'object',
'properties': {
'btc': { 'type': 'number', 'minimum': 0 },
'satoshis': { 'type': 'integer', 'minimum': 0 }
}
},
'preorder_tx_fee': {
'type': 'object',
'properties': {
'btc': { 'type': 'number', 'minimum': 0 },
'satoshis': { 'type': 'integer', 'minimum': 0 }
}
},
'register_tx_fee': {
'type': 'object',
'properties': {
'btc': { 'type': 'number', 'minimum': 0 },
'satoshis': { 'type': 'integer', 'minimum': 0 }
}
},
'update_tx_fee': {
'type': 'object',
'properties': {
'btc': { 'type': 'number', 'minimum': 0 },
'satoshis': { 'type': 'integer', 'minimum': 0 }
}
},
'total_estimated_cost': {
'type': 'object',
'properties': {
'btc': { 'type': 'number', 'minimum': 0 },
'satoshis': { 'type': 'integer', 'minimum': 0 }
}
},
'total_tx_fees': {
'type': 'integer',
'minimum': 0,
}
'name_price': {
'type': 'object',
'properties': {
'btc': { 'type': 'number', 'minimum': 0 },
'satoshis': { 'type': 'integer', 'minimum': 0 }
}
},
'warnings': {
'type': 'array',
'items': {
'type': 'string',
},
},
},
}
# Group Blockchain Operations
## Get consensus hash [GET /v1/blockchains/{blockchainName}/consensus]
Get the current Blockstack consensus hash on a blockchain.
+ Public Endpoint
+ Parameters
+ blockchainName : bitcoin (string) - the given blockchain
+ Response 200 (application/json)
+ Body
{
"consensus_hash": "2fcbdf66c350894fe03b42c6a2e8a6ac"
}
+ Schema
{
'type': 'object',
'properties': {
'consensus_hash': {
'type': 'string',
'pattern': '^[0-9a-fA-F]{32}$`,
},
},
}
## Get number of names on blockchain [GET /v1/blockchains/{blockchainName}/name_count{?all}]
Get the number of names on a blockchain.
+ Public Endpoint
+ Parameters
+ blockchainName: bitcoin (string) - the given blockchain
+ all: true (enum[string], optional) - include expired names
+ Response 200 (application/json)
+ Body
{
"names_count": 73950
}
+ Schema
{
'type': 'object',
'properties': {
'names_count': {
'type': 'integer',
'minimum': 0,
},
},
}
+ Response 401 (application/json)
+ Body
{ "error": "Unsupported blockchain" }
+ Schema
{
'type': 'object',
'properties': {
'error': { 'type': 'string' },
},
},
## Get number of subdomains on blockchain [GET /v1/blockchains/{blockchainName}/subdomains_count]
Get the number of subdomains on a blockchain.
+ Public Endpoint
+ Parameters
+ blockchainName: bitcoin (string) - the given blockchain
+ Response 200 (application/json)
+ Body
{
"names_count": 1646
}
+ Schema
{
'type': 'object',
'properties': {
'names_count': {
'type': 'integer',
'minimum': 0,
},
},
}
+ Response 401 (application/json)
+ Body
{ "error": "Unsupported blockchain" }
+ Schema
{
'type': 'object',
'properties': {
'error': { 'type': 'string' },
},
},
## Get operations in block [GET /v1/blockchains/{blockchainName}/operations/{blockHeight}]
Get the Blockstack operations in a given block
+ Parameters
+ blockchainName : bitcoin (string) - the given blockchain
+ blockHeight : 462592 (integer) - the block height
+ Response 200 (application/json)
+ Body
[
{
"address": "1GS1eHthSK2gqnU9MW9Nis1pUyHP3bJnFK",
"block_number": 462592,
"burn_address": "1111111111111111111114oLvT2",
"consensus_hash": "d206b2f615de00803402cade4d0d51d4",
"op": "?",
"op_fee": 6250,
"opcode": "NAME_PREORDER",
"preorder_hash": "ba22cdf24b05b9a7972e13ada69f96a7850b471e",
"sender": "76a914a944d29012f83c00105778e0bc717c46ea2accfc88ac",
"sender_pubkey": "0343b263f7adc6ae59e8d8310f4a6a87799f6b10cec608f3236cd6a802ffc71728",
"txid": "b3f4f7a43d60666d1a9b42131f9117ad7deac34a478b6ca152344da3d734691f",
"vtxindex": 173
},
{
"address": "1gijbF8NkbgwzcoZR1nXMa76NbdcD7GQW",
"block_number": 462592,
"burn_address": "1111111111111111111114oLvT2",
"consensus_hash": "d206b2f615de00803402cade4d0d51d4",
"op": "?",
"op_fee": 6250,
"opcode": "NAME_PREORDER",
"preorder_hash": "386e2de88a908ad056361e586faa95852be454ca",
"sender": "76a91407830f81167f6a2aa253c0f176b7ff2e1c04c61a88ac",
"sender_pubkey": "03b7795d33b362338179e5b2a579431b285f6c303d07ddd83c897277be4e5eb916",
"txid": "4dd315ad1d1b318614a19e15e767efb7ef327bd5cd4ebaf8f80ede58fd1da107",
"vtxindex": 174
},
{
"address": "17QEd6rrhNZp4xoyWu6BpA8NQ4axyNKaZy",
"block_number": 462592,
"burn_address": "1111111111111111111114oLvT2",
"consensus_hash": "d206b2f615de00803402cade4d0d51d4",
"op": "?",
"op_fee": 6250,
"opcode": "NAME_PREORDER",
"preorder_hash": "a7a388a2bbe0e7741c6cfdc54d7b5a67811cd582",
"sender": "76a9144635b1794a22bfbe6c5c5eba17b693f4aaf0e34888ac",
"sender_pubkey": "020d6e50b2660af27933c42bc1395fe93df90ffac5e2a989f6a134919fb8cf8075",
"txid": "51d6bd117da5889e710c62967d03233a84fc27f7fad10ca4359111928818f017",
"vtxindex": 332
},
{
"address": "15YMyvqz6v9ATSbmqJnudwrdm7RiVfkU3s",
"block_number": 462453,
"consensus_hash": "f6491e1d2b9817fa58512fc9bf8cd3df",
"first_registered": 462575,
"importer": null,
"importer_address": null,
"keep_data": true,
"last_renewed": 462575,
"name": "ablankstein.id",
"name_hash128": "943b8e0613d975c05a05ccd5472e2a72",
"namespace_block_number": 373601,
"namespace_id": "id",
"op": ">>",
"op_fee": 25000,
"opcode": "NAME_TRANSFER",
"preorder_block_number": 462453,
"preorder_hash": "822d5cb6f2e3f0f901d6af8c1111ee466b6c07bd",
"revoked": false,
"sender": "76a91431cee995f242f0f66518080a291714cd7e8d2f5e88ac",
"sender_pubkey": null,
"txid": "121540e81223c45d139fbe03a9713ddd292372f2f88fe2b10b6a7c5e6738e87f",
"value_hash": "96ec93cbc57d17b16a347c11ddfa7ea88d2cf93b",
"vtxindex": 633
},
{
"address": "1Dwq9oA5BNz7DAR1LtDncEa647ZxgmkoVV",
"block_number": 462325,
"consensus_hash": "1288cef43f52bf97e2f458a4afe40b61",
"first_registered": 462359,
"importer": null,
"importer_address": null,
"keep_data": true,
"last_renewed": 462359,
"name": "fpenrose.id",
"name_hash128": "7af28a9834934a0af81a19ee14a45f8e",
"namespace_block_number": 373601,
"namespace_id": "id",
"op": ">>",
"op_fee": 25000,
"opcode": "NAME_TRANSFER",
"preorder_block_number": 462325,
"preorder_hash": "59c25d7cddf433b5122cabcbf2ebcc1bc1519e4d",
"revoked": false,
"sender": "76a9148e002a93b9b1936b5d320967194eaff3deaa979088ac",
"sender_pubkey": null,
"txid": "6461bb4bbf517e9c80ffcac4c349836972656572e113aba736b356119655064e",
"value_hash": "ac73155702ca7aea1161d0f0c7877ac81d48d8fc",
"vtxindex": 637
},
{
"address": "1Q44Md5KFr6gxQ6TdUSFaCRm3MaUyXMF6t",
"block_number": 462316,
"consensus_hash": "1288cef43f52bf97e2f458a4afe40b61",
"first_registered": 462353,
"importer": null,
"importer_address": null,
"keep_data": true,
"last_renewed": 462353,
"name": "rahulpradhan.id",
"name_hash128": "c55ff9e14c72b2950b14ff10067d7e27",
"namespace_block_number": 373601,
"namespace_id": "id",
"op": ">>",
"op_fee": 25000,
"opcode": "NAME_TRANSFER",
"preorder_block_number": 462316,
"preorder_hash": "fcb3389ca4d2ab8003ce8b6b3baa0a5ae1600cce",
"revoked": false,
"sender": "76a914fcdef125f40f984fafad4b58e30e3b1761a953f388ac",
"sender_pubkey": null,
"txid": "be58e02642c457fec2835a354fbc2de45e8c838aa5b7fd18ed831f67d08269e6",
"value_hash": "e213e58ca1446875b79d866720130cc90cbca681",
"vtxindex": 638
},
{
"address": "1D8pL725X9HWvoTVgzqDNbTPayHGG7tkY6",
"block_number": 462345,
"consensus_hash": "919df884f14f34fd15a791af2fddb569",
"first_registered": 462380,
"importer": null,
"importer_address": null,
"keep_data": true,
"last_renewed": 462380,
"name": "sajithskurup.id",
"name_hash128": "3fda1c60620c42e1ede385bb246bd5f0",
"namespace_block_number": 373601,
"namespace_id": "id",
"op": ">>",
"op_fee": 25000,
"opcode": "NAME_TRANSFER",
"preorder_block_number": 462345,
"preorder_hash": "540daefe1f3b520253f7ab954dbc8bf131471133",
"revoked": false,
"sender": "76a914851bee0185dd799755234fb20710a26ec40354d288ac",
"sender_pubkey": null,
"txid": "e7d35196ca3eec697274d848136f5267b1c935055a917020f93e8ecaf821ba99",
"value_hash": "92534954e934019718478bb52150765dfad79171",
"vtxindex": 644
},
{
"address": "1EbjXtYv9QCVBp8iWiDH6xQ1B74oFW696X",
"block_number": 462345,
"consensus_hash": "e0c31e03125f2feefd4090e5c635ee45",
"first_registered": 462380,
"importer": null,
"importer_address": null,
"keep_data": true,
"last_renewed": 462380,
"name": "hubject.id",
"name_hash128": "03e8bf92dd3cbde65cac012350efb79d",
"namespace_block_number": 373601,
"namespace_id": "id",
"op": ">>",
"op_fee": 25000,
"opcode": "NAME_TRANSFER",
"preorder_block_number": 462345,
"preorder_hash": "ded4d097614cf5321388bbe56b24d3d592b2ef76",
"revoked": false,
"sender": "76a914952b4844005dd98a1f7fc99813db2a649109b45988ac",
"sender_pubkey": null,
"txid": "7b7a2a2963f7454b93003031cfce64ac609f902b4c2cababfbbfad2c01bbeb9b",
"value_hash": "be968a1f17ac828179e5b2fbc70d238056af7482",
"vtxindex": 645
},
{
"address": "14YsDo5qgAP7kmnq33tw9JdHVBywpg9pge",
"block_number": 462326,
"consensus_hash": "e0c31e03125f2feefd4090e5c635ee45",
"first_registered": 462354,
"importer": null,
"importer_address": null,
"keep_data": true,
"last_renewed": 462354,
"name": "ramimassoud.id",
"name_hash128": "61a48b6f8aeb027883ecd1f8d808c8ac",
"namespace_block_number": 373601,
"namespace_id": "id",
"op": ">>",
"op_fee": 25000,
"opcode": "NAME_TRANSFER",
"preorder_block_number": 462326,
"preorder_hash": "23aa275e42d7d6d7e538584a799252939687c457",
"revoked": false,
"sender": "76a91426ef31b7aac60eff23cbbab51d453b84700e330388ac",
"sender_pubkey": null,
"txid": "85babcf66caf41cb7beb2e637cbed4e728ab8030337fb5df8461d0e14dd2be75",
"value_hash": "e27c9c3dcce8a8445d84fb8b4d81fbd30fac9749",
"vtxindex": 646
},
{
"address": "1H934mT7AVVZmHwjddUZ9EiostLwm655oF",
"block_number": 462345,
"consensus_hash": "919df884f14f34fd15a791af2fddb569",
"first_registered": 462391,
"importer": null,
"importer_address": null,
"keep_data": true,
"last_renewed": 462391,
"name": "was2bme.id",
"name_hash128": "f2b5688682fd47b8f3fbf709bb35ef33",
"namespace_block_number": 373601,
"namespace_id": "id",
"op": ">>",
"op_fee": 6250,
"opcode": "NAME_TRANSFER",
"preorder_block_number": 462345,
"preorder_hash": "3dfdcee2b0e64697c4bb0b0dd791518bcb078dc7",
"revoked": false,
"sender": "76a914b107105f8ae57e7bb5bad58caba666faa679c70f88ac",
"sender_pubkey": null,
"txid": "16171e4e20778354a94c5353b0c6ed0b29a3e73c1b59b9bfbcbe6d26c570fd0c",
"value_hash": "ac73155702ca7aea1161d0f0c7877ac81d48d8fc",
"vtxindex": 649
},
{
"address": "1B4zxvVMPm1PBGarc8PrYQjQY2ezwniyG6",
"block_number": 462345,
"consensus_hash": "e0c31e03125f2feefd4090e5c635ee45",
"first_registered": 462391,
"importer": null,
"importer_address": null,
"keep_data": true,
"last_renewed": 462391,
"name": "tadas_serbenta.id",
"name_hash128": "6d800932daf830925ab47dee5ceb8661",
"namespace_block_number": 373601,
"namespace_id": "id",
"op": ">>",
"op_fee": 6250,
"opcode": "NAME_TRANSFER",
"preorder_block_number": 462345,
"preorder_hash": "07a85eac4dbf20000a66a14a4a89a01134b70fab",
"revoked": false,
"sender": "76a9146e72e44bbe4c1706ea5830096a4bb4449dcc948f88ac",
"sender_pubkey": null,
"txid": "e3f0b019550417a7acfe27addfbd34ec7ec5fc1dd9616ed8c6bc86a0ad148290",
"value_hash": "fbac107ba5d9bbfc30ecdeae3e10ca3db72b3431",
"vtxindex": 855
},
{
"address": "16BF35VputeLEmbsk7gDnUcwKXcjwPDUvf",
"block_number": 462345,
"consensus_hash": "919df884f14f34fd15a791af2fddb569",
"first_registered": 462359,
"importer": null,
"importer_address": null,
"keep_data": true,
"last_renewed": 462359,
"name": "alexucf.id",
"name_hash128": "d9bc88b0fdc536e7ac5467609faed518",
"namespace_block_number": 373601,
"namespace_id": "id",
"op": ">>",
"op_fee": 25000,
"opcode": "NAME_TRANSFER",
"preorder_block_number": 462345,
"preorder_hash": "30f841114af6ada90ba720d563672113c4f74439",
"revoked": false,
"sender": "76a91438c8814ae2a9035e85bbf2b7976919c2e3387ac588ac",
"sender_pubkey": null,
"txid": "f8e9eebd48b9182b82b22e5ce10f805d3db38786bb2aaf56f9badf83aa3cc0ee",
"value_hash": "8ae0f51263f540be175230d6b46f5d9609de799d",
"vtxindex": 856
},
{
"address": "1EmXTRHC6f9bnLJkVZRavv7HLG1owLgNir",
"block_number": 462326,
"consensus_hash": "31a304b682e3291811441a12f19d14e5",
"first_registered": 462391,
"importer": null,
"importer_address": null,
"keep_data": true,
"last_renewed": 462391,
"name": "seamur.id",
"name_hash128": "09f3b9d2da3d0aa1999824f7884f0d18",
"namespace_block_number": 373601,
"namespace_id": "id",
"op": ">>",
"op_fee": 100000,
"opcode": "NAME_TRANSFER",
"preorder_block_number": 462326,
"preorder_hash": "678991fd4d3833babe27f732206a40d1f15dd3ca",
"revoked": false,
"sender": "76a91497055c47fa0ab396fb321e9d37f6bce1796e3d5688ac",
"sender_pubkey": null,
"txid": "e32124770c359eaf57709e5a666894f2954aa687820c41c6911f214e9006b58e",
"value_hash": "4bcdd931185537902ef1af9975198c6404d4c73e",
"vtxindex": 857
},
{
"address": "13pGtMcHsNdq3EeLMa1yVVKppP1WjSKgFG",
"block_number": 462345,
"consensus_hash": "e0c31e03125f2feefd4090e5c635ee45",
"first_registered": 462354,
"importer": null,
"importer_address": null,
"keep_data": true,
"last_renewed": 462354,
"name": "innergame.id",
"name_hash128": "a3e4e010d82369ee19b64fccc2b97f69",
"namespace_block_number": 373601,
"namespace_id": "id",
"op": ">>",
"op_fee": 25000,
"opcode": "NAME_TRANSFER",
"preorder_block_number": 462345,
"preorder_hash": "f54850caf10c3041cb2a4d9186bbb234dd7d9f85",
"revoked": false,
"sender": "76a9141ee10ff0ae9969e2dc39d94a959e3160b26b6adf88ac",
"sender_pubkey": null,
"txid": "28de7193e28e1b0c950a32af393284578669c15dc98bad68f382f8b920d94509",
"value_hash": "bab40c2b10f676288edea119edade67ff5e853ba",
"vtxindex": 869
}
]
## Get pending transactions [GET /v1/blockchains/{blockchainName}/pending]
Get the current transactions that the node has issued and are still pending.
+ DEPRECATED. Blockstack clients should use
[blockstack.js](https://github.com/blockstack/blockstack.js) to query the
blockchain.
+ Public Endpoint
+ Parameters
+ blockchainName : bitcoin (string) - the given blockchain
+ Response 200 (application/json)
+ Body
{
"queues": {}
}
+ Schema
{
'type': 'object',
'properties': {
'preorder': {
'type': 'array',
'items': {
'type': 'object',
'properties': {
'name': { 'type': 'string', 'pattern': '^([a-z0-9\-_.+]{3,37})$' },
'tx_hash': { 'type': 'string', 'pattern': '^[0-9a-fA-F]+$' },
'confirmations': { 'type': 'integer', 'minimum': 0 },
},
},
},
'register': {
'type': 'array',
'items': {
'type': 'object',
'properties': {
'name': { 'type': 'string', 'pattern': '^([a-z0-9\-_.+]{3,37})$' },
'tx_hash': { 'type': 'string', 'pattern': '^[0-9a-fA-F]+$' },
'confirmations': { 'type': 'integer', 'minimum': 0 },
},
},
},
'update': {
'type': 'array',
'items': {
'type': 'object',
'properties': {
'name': { 'type': 'string', 'pattern': '^([a-z0-9\-_.+]{3,37})$' },
'tx_hash': { 'type': 'string', 'pattern': '^[0-9a-fA-F]+$' },
'confirmations': { 'type': 'integer', 'minimum': 0 },
},
},
},
'transfer': {
'type': 'array',
'items': {
'type': 'object',
'properties': {
'name': { 'type': 'string', 'pattern': '^([a-z0-9\-_.+]{3,37})$' },
'tx_hash': { 'type': 'string', 'pattern': '^[0-9a-fA-F]+$' },
'confirmations': { 'type': 'integer', 'minimum': 0 },
},
},
},
'renew': {
'type': 'array',
'items': {
'type': 'object',
'properties': {
'name': { 'type': 'string', 'pattern': '^([a-z0-9\-_.+]{3,37})$' },
'tx_hash': { 'type': 'string', 'pattern': '^[0-9a-fA-F]+$' },
'confirmations': { 'type': 'integer', 'minimum': 0 },
},
},
},
'revoke': {
'type': 'array',
'items': {
'type': 'object',
'properties': {
'name': { 'type': 'string', 'pattern': '^([a-z0-9\-_.+]{3,37})$' },
'tx_hash': { 'type': 'string', 'pattern': '^[0-9a-fA-F]+$' },
'confirmations': { 'type': 'integer', 'minimum': 0 },
},
},
},
'name_import': {
'type': 'array',
'items': {
'type': 'object',
'properties': {
'name': { 'type': 'string', 'pattern': '^([a-z0-9\-_.+]{3,37})$' },
'tx_hash': { 'type': 'string', 'pattern': '^[0-9a-fA-F]+$' },
'confirmations': { 'type': 'integer', 'minimum': 0 },
},
},
},
}
}
## Get unspent outputs [GET /v1/blockchains/{blockchainName}/{address}/unspent]
+ DEPRECATED. Blockstack clients should use
[blockstack.js](https://github.com/blockstack/blockstack.js) to query the
blockchain.
+ Authorization: `blockchain`
+ Parameters
+ blockchainName : bitcoin (string) - the given blockchain
+ address : 1GuKR3nJi2VH3E1ZSPvuX8nAu3jNnr7xzq (string) - the address to get unspents for
+ Response 200 (application/json)
+ Body
[
{
"confirmations": 18,
"out_script": "76a914ae6ee3760fccb8225541ca89f08c927930adf97b88ac",
"outpoint": {
"hash": "977d3a025790e2cbdb50f63761872f36e78fbb9c53d515cb4c53155a1964932d",
"index": 1
},
"transaction_hash": "977d3a025790e2cbdb50f63761872f36e78fbb9c53d515cb4c53155a1964932d",
"value": 76779
}
]
+ Schema
{
'type': 'array',
'items': {
'type': 'object',
'properties': {
'confirmations': { 'type': 'integer', 'minimum': 0 },
'out_script': { 'type': 'string', 'pattern': '^[0-9a-fA-F]+$' },
'outpoint': {
'type': 'object',
'properties': {
'hash': { 'type': 'string', 'pattern': '^[0-9a-fA-F]+$' },
'index': { 'type': 'integer', 'minimum': 0 },
},
},
'transaction_hash': { 'type': 'string', 'pattern': '^[0-9a-fA-F]+$' },
'value': { 'type': 'integer', 'minimum': 0 },
},
},
}
## Broadcast transaction [POST /v1/blockchains/{blockchainName}/txs]
+ DEPRECATED. Blockstack clients should use
[blockstack.js](https://github.com/blockstack/blockstack.js) to broadcast
transactions.
+ Authorization: `blockchain`
+ Parameters
+ blockchainName : bitcoin (string) - the blockchain to broadcast on
+ Request (application/json)
+ Schema
{
'type': 'object',
'properties': {
'tx': {
'type': 'string',
'pattern': OP_HEX_PATTERN,
},
},
'additionalProperties': False,
'required': [
'tx'
],
}
+ Response 200 (application/json)
+ Body
{ 'status' : True, 'tx_hash' : '...' }
+ Schema
{
'anyOf': [
{
'type': 'object',
'properties': {
'status': { 'type': 'boolean' },
'tx_hash': { 'type': 'string', 'pattern': '^[0-9a-fA-F]+$' },
},
},
{
'type': 'object',
'properties': {
'error': { 'type': 'string' },
},
},
]
}
# Group Namespace Operations
## Get all namespaces [GET /v1/namespaces]
+ Public Endpoint
+ Response 200 (application/json)
+ Body
{
"namespaces": [
".id"
]
}
## Get namespace names [GET /v1/namespaces/{tld}/names?page={page}]
Fetch a list of names from the namespace.
+ Public Endpoint
+ Parameters
+ tld: id (string) - the namespace to fetch names from
+ page: 23 (number) - names are returned in pages of size 100,
so specify the page number.
+ Response 200 (application/json)
+ Body
[ "aldenquimby.id", "aldeoryn.id",
"alderete.id", "aldert.id",
"aldi.id", "aldighieri.id", ... ]
# Group Resolver Endpoints
## Lookup User [GET /v1/users/{username}]
Lookup and resolver a user's profile. Defaults to the `id` namespace.
Note that [blockstack.js](https://github.com/blockstack/blockstack.js) does
*not* rely on this endpoint.
+ Public Only Endpoint
+ Subdomain Aware
+ Legacy Endpoint
+ Parameters
+ username: fred (string) - username to lookup
+ Response 200 (application/json)
{
"fred.id": {
"owner_address": "1CER5u4QXuqffHjHKrU76iMCsqtJLM5VHu",
"profile": {
"@context": "http://schema.org",
"@type": "Person",
"account": [
{
"@type": "Account",
"identifier": "fredwilson",
"placeholder": false,
"proofType": "http",
"proofUrl": "https://twitter.com/fredwilson/status/943066895422455809",
"service": "twitter"
}
],
"description": "I am a VC",
"image": [
{
"@type": "ImageObject",
"contentUrl": "https://gaia.blockstack.org/hub/1CER5u4QXuqffHjHKrU76iMCsqtJLM5VHu/0/avatar-0",
"name": "avatar"
}
],
"name": "Fred Wilson"
},
"public_key": "026c94d1897fa148fa6401247a339b55abd869a3d562fdae8a7fcb9a11f1f846f3",
"verifications": [
{
"identifier": "fredwilson",
"proof_url": "https://twitter.com/fredwilson/status/943066895422455809",
"service": "twitter",
"valid": true
}
],
"zone_file": {
"$origin": "fred.id",
"$ttl": 3600,
"uri": [
{
"name": "_http._tcp",
"priority": 10,
"target": "https://gaia.blockstack.org/hub/1CER5u4QXuqffHjHKrU76iMCsqtJLM5VHu/0/profile.json",
"weight": 1
}
]
}
}
}
## Profile Search [GET /v1/search?query={query}]
Searches for a profile using a search string.
+ Public Only Endpoint
+ Parameters
+ query: wenger (string) - the search query
+ Response 200 (application/json)
+ Body
{
"results": [
{
"fullyQualifiedName": "albertwenger.id",
"username": "albertwenger",
"profile": {
"@type": "Person",
"account": [
{
"@type": "Account",
"identifier": "albertwenger",
"proofType": "http",
"service": "twitter"
},
{
"@type": "Account",
"identifier": "albertwenger",
"proofType": "http",
"service": "facebook"
},
{
"@type": "Account",
"identifier": "albertwenger",
"proofType": "http",
"service": "github"
},
{
"@type": "Account",
"identifier": "1QHDGGLEKK7FZWsBEL78acV9edGCTarqXt",
"role": "payment",
"service": "bitcoin"
}
],
"address": {
"@type": "PostalAddress",
"addressLocality": "New York"
},
"description": "VC at USV.com",
...
}