lbry-sdk/docs/api.json

1389 lines
66 KiB
JSON
Raw Normal View History

2018-08-22 06:20:30 +02:00
[
{
"name": "account_add",
"description": "Add a previously created account from a seed, private key or public key (read-only).\nSpecify --single_key for single address or vanity address accounts.",
2018-08-22 06:20:30 +02:00
"arguments": [
{
"name": "account_name",
"type": "str",
"description": "name of the account to add",
"is_required": true
},
{
"name": "seed",
"type": "str",
"description": "seed to generate new account from",
"is_required": false
},
{
"name": "private_key",
"type": "str",
"description": "private key for new account",
"is_required": false
},
{
"name": "public_key",
"type": "str",
"description": "public key for new account",
"is_required": false
},
{
"name": "single_key",
"type": "bool",
"description": "create single key account, default is multi-key",
"is_required": false
2018-08-22 06:20:30 +02:00
}
],
"returns": "(map) added account details"
},
2018-08-22 06:20:30 +02:00
{
"name": "account_balance",
"description": "Return the balance of an account",
2018-08-22 06:20:30 +02:00
"arguments": [
{
"name": "account_id",
"type": "str",
2018-12-12 18:19:26 +01:00
"description": "If provided only the balance for this account will be given. Otherwise default account.",
"is_required": false
},
{
2018-12-12 18:19:26 +01:00
"name": "confirmations",
"type": "int",
"description": "Only include transactions with this many confirmed blocks.",
"is_required": false
2018-08-22 06:20:30 +02:00
}
],
"returns": "(decimal) amount of lbry credits in wallet"
},
2018-08-22 06:20:30 +02:00
{
"name": "account_create",
"description": "Create a new account. Specify --single_key if you want to use\nthe same address for all transactions (not recommended).",
2018-08-22 06:20:30 +02:00
"arguments": [
{
"name": "account_name",
"type": "str",
"description": "name of the account to create",
"is_required": true
},
{
"name": "single_key",
"type": "bool",
"description": "create single key account, default is multi-key",
"is_required": false
2018-08-22 06:20:30 +02:00
}
],
"returns": "(map) new account details"
},
{
"name": "account_decrypt",
2019-02-19 23:26:08 +01:00
"description": "Decrypt an encrypted account, this will remove the wallet password. The account must be unlocked to decrypt it",
2018-12-12 18:19:26 +01:00
"arguments": [
{
"name": "account_id",
"type": "str",
"description": "id for the account to decrypt",
"is_required": false
}
],
"returns": "(bool) true if wallet is decrypted, otherwise false"
},
2018-08-22 06:20:30 +02:00
{
"name": "account_encrypt",
2018-12-12 18:19:26 +01:00
"description": "Encrypt an unencrypted account with a password",
2018-08-22 06:20:30 +02:00
"arguments": [
{
2018-12-12 18:19:26 +01:00
"name": "account_id",
"type": "str",
2018-12-12 18:19:26 +01:00
"description": "id for the account to encrypt",
"is_required": false
2018-08-22 06:20:30 +02:00
}
],
"returns": "(bool) true if wallet is decrypted, otherwise false"
},
2018-08-22 06:20:30 +02:00
{
"name": "account_fund",
"description": "Transfer some amount (or --everything) to an account from another\naccount (can be the same account). Amounts are interpreted as LBC.\nYou can also spread the transfer across a number of --outputs (cannot\nbe used together with --everything).",
2018-08-22 06:20:30 +02:00
"arguments": [
{
"name": "to_account",
"type": "str",
"description": "send to this account",
2018-12-12 18:19:26 +01:00
"is_required": false
},
{
"name": "from_account",
"type": "str",
"description": "spend from this account",
2018-12-12 18:19:26 +01:00
"is_required": false
},
{
"name": "amount",
"type": "str",
"description": "the amount to transfer lbc",
"is_required": true
},
{
"name": "everything",
"type": "bool",
"description": "transfer everything (excluding claims), default: false.",
"is_required": false
},
{
"name": "outputs",
"type": "int",
"description": "split payment across many outputs, default: 1.",
"is_required": false
},
{
"name": "broadcast",
"type": "bool",
"description": "actually broadcast the transaction, default: false.",
"is_required": false
2018-08-22 06:20:30 +02:00
}
],
"returns": "(map) transaction performing requested action"
},
2018-08-22 06:20:30 +02:00
{
"name": "account_list",
"description": "List details of all of the accounts or a specific account.",
2018-08-22 06:20:30 +02:00
"arguments": [
{
"name": "account_id",
"type": "str",
"description": "If provided only the balance for this account will be given",
"is_required": false
},
{
"name": "confirmations",
"type": "int",
2018-12-12 18:19:26 +01:00
"description": "required confirmations (default: 0)",
"is_required": false
},
{
"name": "include_claims",
"type": "bool",
"description": "include claims, requires than a LBC account is specified (default: false)",
"is_required": false
},
{
"name": "show_seed",
"type": "bool",
"description": "show the seed for the account",
"is_required": false
2018-08-22 06:20:30 +02:00
}
],
"returns": "(map) balance of account(s)"
},
2018-12-12 18:19:26 +01:00
{
"name": "account_lock",
"description": "Lock an unlocked account",
"arguments": [
{
"name": "account_id",
"type": "str",
"description": "id for the account to lock",
"is_required": false
}
],
"returns": "(bool) true if account is locked, otherwise false"
},
2018-08-22 06:20:30 +02:00
{
"name": "account_max_address_gap",
"description": "Finds ranges of consecutive addresses that are unused and returns the length\nof the longest such range: for change and receiving address chains. This is\nuseful to figure out ideal values to set for 'receiving_gap' and 'change_gap'\naccount settings.",
2018-08-22 06:20:30 +02:00
"arguments": [
{
"name": "account_id",
"type": "str",
"description": "account for which to get max gaps",
"is_required": true
2018-08-22 06:20:30 +02:00
}
],
"returns": "(map) maximum gap for change and receiving addresses"
},
2018-08-22 06:20:30 +02:00
{
"name": "account_remove",
"description": "Remove an existing account.",
2018-08-22 06:20:30 +02:00
"arguments": [
{
"name": "account_id",
"type": "str",
"description": "id of the account to remove",
"is_required": true
2018-08-22 06:20:30 +02:00
}
],
"returns": "(map) details of removed account"
},
2018-12-12 18:19:26 +01:00
{
"name": "account_send",
"description": "Send the same number of credits to multiple addresses.",
"arguments": [
{
"name": "account_id",
"type": "str",
"description": "account to fund the transaction",
"is_required": false
},
{
"name": "broadcast",
"type": "bool",
"description": "actually broadcast the transaction, default: false.",
"is_required": false
}
],
"returns": ""
},
2018-08-22 06:20:30 +02:00
{
"name": "account_set",
"description": "Change various settings on an account.",
2018-08-22 06:20:30 +02:00
"arguments": [
{
"name": "account_id",
"type": "str",
"description": "id of the account to change",
"is_required": true
},
{
"name": "default",
"type": "bool",
"description": "make this account the default",
"is_required": false
},
{
"name": "new_name",
"type": "str",
"description": "new name for the account",
"is_required": false
},
{
"name": "receiving_gap",
"type": "int",
"description": "set the gap for receiving addresses",
"is_required": false
},
{
"name": "receiving_max_uses",
"type": "int",
"description": "set the maximum number of times to use a receiving address",
"is_required": false
},
{
"name": "change_gap",
"type": "int",
"description": "set the gap for change addresses",
"is_required": false
},
{
"name": "change_max_uses",
"type": "int",
"description": "set the maximum number of times to use a change address",
"is_required": false
2018-08-22 06:20:30 +02:00
}
],
"returns": "(map) updated account details"
},
2018-08-22 06:20:30 +02:00
{
"name": "account_unlock",
"description": "Unlock an encrypted account",
"arguments": [
{
2018-12-12 18:19:26 +01:00
"name": "account_id",
"type": "str",
2018-12-12 18:19:26 +01:00
"description": "id for the account to unlock",
"is_required": false
}
],
"returns": "(bool) true if account is unlocked, otherwise false"
},
2018-08-22 06:20:30 +02:00
{
"name": "address_is_mine",
"description": "Checks if an address is associated with the current wallet.",
2018-08-22 06:20:30 +02:00
"arguments": [
{
"name": "address",
"type": "str",
"description": "address to check",
"is_required": true
},
2018-08-22 06:20:30 +02:00
{
"name": "account_id",
"type": "str",
"description": "id of the account to use",
"is_required": false
2018-08-22 06:20:30 +02:00
}
],
"returns": "(bool) true, if address is associated with current wallet"
},
2018-08-22 06:20:30 +02:00
{
"name": "address_list",
"description": "List account addresses",
2018-08-22 06:20:30 +02:00
"arguments": [
{
"name": "account_id",
"type": "str",
"description": "id of the account to use",
"is_required": false
2018-12-12 18:19:26 +01:00
},
2018-08-22 06:20:30 +02:00
{
2018-12-12 18:19:26 +01:00
"name": "page",
"type": "int",
"description": "page to return during paginating",
"is_required": false
},
{
"name": "page_size",
"type": "int",
"description": "number of items on page during pagination",
"is_required": false
2018-08-22 06:20:30 +02:00
}
],
2018-12-12 18:19:26 +01:00
"returns": "List of wallet addresses"
},
2018-08-22 06:20:30 +02:00
{
"name": "address_unused",
"description": "Return an address containing no balance, will create\na new address if there is none.",
2018-08-22 06:20:30 +02:00
"arguments": [
{
"name": "account_id",
"type": "str",
"description": "id of the account to use",
"is_required": false
2018-08-22 06:20:30 +02:00
}
],
"returns": "(str) Unused wallet address in base58"
},
2018-08-22 06:20:30 +02:00
{
"name": "blob_announce",
"description": "Announce blobs to the DHT",
2018-08-22 06:20:30 +02:00
"arguments": [
{
"name": "blob_hash",
"type": "str",
"description": "announce a blob, specified by blob_hash",
"is_required": false
},
{
"name": "stream_hash",
"type": "str",
"description": "announce all blobs associated with stream_hash",
"is_required": false
},
{
"name": "sd_hash",
"type": "str",
"description": "announce all blobs associated with sd_hash and the sd_hash itself",
"is_required": false
2018-08-22 06:20:30 +02:00
}
],
"returns": "(bool) true if successful"
},
{
"name": "blob_delete",
"description": "Delete a blob",
"arguments": [
2018-08-22 06:20:30 +02:00
{
"name": "blob_hash",
"type": "str",
"description": "blob hash of the blob to delete",
"is_required": true
2018-08-22 06:20:30 +02:00
}
],
"returns": "(str) Success/fail message"
},
2018-08-22 06:20:30 +02:00
{
"name": "blob_get",
"description": "Download and return a blob",
2018-08-22 06:20:30 +02:00
"arguments": [
{
"name": "blob_hash",
"type": "str",
"description": "blob hash of the blob to get",
"is_required": true
},
{
"name": "timeout",
"type": "int",
"description": "timeout in number of seconds",
"is_required": false
2018-08-22 06:20:30 +02:00
}
],
"returns": "(str) Success/Fail message or (dict) decoded data"
},
2018-08-22 06:20:30 +02:00
{
"name": "blob_list",
"description": "Returns blob hashes. If not given filters, returns all blobs known by the blob manager",
2018-08-22 06:20:30 +02:00
"arguments": [
{
"name": "needed",
"type": "bool",
"description": "only return needed blobs",
"is_required": false
},
{
"name": "finished",
"type": "bool",
"description": "only return finished blobs",
"is_required": false
},
{
"name": "uri",
"type": "str",
"description": "filter blobs by stream in a uri",
"is_required": false
},
{
"name": "stream_hash",
"type": "str",
"description": "filter blobs by stream hash",
"is_required": false
},
{
"name": "sd_hash",
"type": "str",
"description": "filter blobs by sd hash",
"is_required": false
},
{
"name": "page_size",
"type": "int",
"description": "results page size",
"is_required": false
},
{
"name": "page",
"type": "int",
"description": "page of results to return",
"is_required": false
2018-08-22 06:20:30 +02:00
}
],
"returns": "(list) List of blob hashes"
},
2018-08-22 06:20:30 +02:00
{
"name": "blob_reflect",
"description": "Reflects specified blobs",
2018-08-22 06:20:30 +02:00
"arguments": [
{
"name": "reflector_server",
"type": "str",
"description": "reflector address",
"is_required": false
2018-08-22 06:20:30 +02:00
}
],
"returns": "(list) reflected blob hashes"
},
2018-08-22 06:20:30 +02:00
{
"name": "blob_reflect_all",
"description": "Reflects all saved blobs",
"arguments": [],
"returns": "(bool) true if successful"
},
2018-08-22 06:20:30 +02:00
{
"name": "block_show",
"description": "Get contents of a block",
"arguments": [
{
"name": "blockhash",
"type": "str",
"description": "hash of the block to look up",
"is_required": true
},
{
"name": "height",
"type": "int",
"description": "height of the block to look up",
"is_required": true
}
],
"returns": "(dict) Requested block"
},
2018-08-22 06:20:30 +02:00
{
"name": "channel_export",
"description": "Export serialized channel signing information for a given certificate claim id",
2018-08-22 06:20:30 +02:00
"arguments": [
{
"name": "claim_id",
"type": "str",
"description": "Claim ID to export information about",
"is_required": true
2018-08-22 06:20:30 +02:00
}
],
"returns": "(str) Serialized certificate information"
},
2018-08-22 06:20:30 +02:00
{
"name": "channel_import",
"description": "Import serialized channel signing information (to allow signing new claims to the channel)",
2018-08-22 06:20:30 +02:00
"arguments": [
{
"name": "serialized_certificate_info",
"type": "str",
"description": "certificate info",
"is_required": true
2018-08-22 06:20:30 +02:00
}
],
"returns": "(dict) Result dictionary"
},
{
"name": "channel_list",
"description": "Get certificate claim infos for channels that can be published to",
2018-12-12 18:19:26 +01:00
"arguments": [
{
"name": "account_id",
"type": "str",
"description": "id of the account to use",
"is_required": false
},
{
"name": "page",
"type": "int",
"description": "page to return during paginating",
"is_required": false
},
{
"name": "page_size",
"type": "int",
"description": "number of items on page during pagination",
"is_required": false
}
],
"returns": "(list) ClaimDict, includes 'is_mine' field to indicate if the certificate claim\n is in the wallet."
},
2018-08-22 06:20:30 +02:00
{
"name": "channel_new",
"description": "Generate a publisher key and create a new '@' prefixed certificate claim",
2018-08-22 06:20:30 +02:00
"arguments": [
{
"name": "channel_name",
"type": "str",
"description": "name of the channel prefixed with '@'",
"is_required": true
},
{
"name": "amount",
"type": "decimal",
"description": "bid amount on the channel",
"is_required": true
2018-12-12 18:19:26 +01:00
},
{
"name": "account_id",
"type": "str",
"description": "id of the account to store channel",
"is_required": false
2018-08-22 06:20:30 +02:00
}
],
"returns": "(dict) Dictionary containing result of the claim\n {\n 'tx' : (str) hex encoded transaction\n 'txid' : (str) txid of resulting claim\n 'nout' : (int) nout of the resulting claim\n 'fee' : (float) fee paid for the claim transaction\n 'claim_id' : (str) claim ID of the resulting claim\n }"
},
2018-08-22 06:20:30 +02:00
{
"name": "claim_abandon",
"description": "Abandon a name and reclaim credits from the claim",
2018-08-22 06:20:30 +02:00
"arguments": [
{
"name": "claim_id",
"type": "str",
"description": "claim_id of the claim to abandon",
"is_required": false
},
{
"name": "txid",
"type": "str",
"description": "txid of the claim to abandon",
"is_required": false
},
{
"name": "nout",
"type": "int",
"description": "nout of the claim to abandon",
"is_required": false
},
{
"name": "account_id",
"type": "str",
"description": "id of the account to use",
"is_required": false
2018-12-12 18:19:26 +01:00
},
{
"name": "blocking",
"type": "bool",
"description": "wait until abandon is in mempool",
"is_required": false
2018-08-22 06:20:30 +02:00
}
],
"returns": "(dict) Dictionary containing result of the claim\n {\n success: (bool) True if txn is successful\n txid : (str) txid of resulting transaction\n }"
},
2018-08-22 06:20:30 +02:00
{
"name": "claim_list",
"description": "List current claims and information about them for a given name",
2018-08-22 06:20:30 +02:00
"arguments": [
{
"name": "name",
"type": "str",
"description": "name of the claim to list info about",
"is_required": true
2018-08-22 06:20:30 +02:00
}
],
"returns": "(dict) State of claims assigned for the name\n {\n 'claims': (list) list of claims for the name\n [\n {\n 'amount': (float) amount assigned to the claim\n 'effective_amount': (float) total amount assigned to the claim,\n including supports\n 'claim_id': (str) claim ID of the claim\n 'height': (int) height of block containing the claim\n 'txid': (str) txid of the claim\n 'nout': (int) nout of the claim\n 'permanent_url': (str) permanent url of the claim,\n 'supports': (list) a list of supports attached to the claim\n 'value': (str) the value of the claim\n },\n ]\n 'supports_without_claims': (list) supports without any claims attached to them\n 'last_takeover_height': (int) the height of last takeover for the name\n }"
},
2018-08-22 06:20:30 +02:00
{
"name": "claim_list_by_channel",
"description": "Get paginated claims in a channel specified by a channel uri",
2018-08-22 06:20:30 +02:00
"arguments": [
{
"name": "uri",
"type": "str",
"description": "uri of the channel",
"is_required": true
},
{
"name": "uris",
"type": "list",
"description": "uris of the channel",
"is_required": false
},
{
"name": "page",
"type": "int",
"description": "which page of results to return where page 1 is the first page, defaults to no pages",
"is_required": false
},
{
"name": "page_size",
"type": "int",
"description": "number of results in a page, default of 10",
"is_required": false
2018-08-22 06:20:30 +02:00
}
],
"returns": "{\n resolved channel uri: {\n If there was an error:\n 'error': (str) error message\n\n 'claims_in_channel': the total number of results for the channel,\n\n If a page of results was requested:\n 'returned_page': page number returned,\n 'claims_in_channel': [\n {\n 'absolute_channel_position': (int) claim index number in sorted list of\n claims which assert to be part of the\n channel\n 'address': (str) claim address,\n 'amount': (float) claim amount,\n 'effective_amount': (float) claim amount including supports,\n 'claim_id': (str) claim id,\n 'claim_sequence': (int) claim sequence number,\n 'decoded_claim': (bool) whether or not the claim value was decoded,\n 'height': (int) claim height,\n 'depth': (int) claim depth,\n 'has_signature': (bool) included if decoded_claim\n 'name': (str) claim name,\n 'supports: (list) list of supports [{'txid': (str) txid,\n 'nout': (int) nout,\n 'amount': (float) amount}],\n 'txid': (str) claim txid,\n 'nout': (str) claim nout,\n 'signature_is_valid': (bool), included if has_signature,\n 'value': ClaimDict if decoded, otherwise hex string\n }\n ],\n }\n }"
},
2018-08-22 06:20:30 +02:00
{
"name": "claim_list_mine",
"description": "List my name claims",
2018-08-22 06:20:30 +02:00
"arguments": [
{
"name": "account_id",
"type": "str",
"description": "id of the account to query",
"is_required": false
2018-12-12 18:19:26 +01:00
},
{
"name": "page",
"type": "int",
"description": "page to return during paginating",
"is_required": false
},
{
"name": "page_size",
"type": "int",
"description": "number of items on page during pagination",
"is_required": false
}
],
"returns": "(list) List of name claims owned by user\n [\n {\n 'address': (str) address that owns the claim\n 'amount': (float) amount assigned to the claim\n 'blocks_to_expiration': (int) number of blocks until it expires\n 'category': (str) \"claim\", \"update\" , or \"support\"\n 'claim_id': (str) claim ID of the claim\n 'confirmations': (int) number of blocks of confirmations for the claim\n 'expiration_height': (int) the block height which the claim will expire\n 'expired': (bool) true if expired, false otherwise\n 'height': (int) height of the block containing the claim\n 'is_spent': (bool) true if claim is abandoned, false otherwise\n 'name': (str) name of the claim\n 'permanent_url': (str) permanent url of the claim,\n 'txid': (str) txid of the claim\n 'nout': (int) nout of the claim\n 'value': (str) value of the claim\n },\n ]"
},
{
"name": "claim_new_support",
"description": "Support a name claim",
"arguments": [
2018-08-22 06:20:30 +02:00
{
"name": "name",
"type": "str",
"description": "name of the claim to support",
"is_required": true
},
{
"name": "claim_id",
"type": "str",
"description": "claim_id of the claim to support",
"is_required": true
},
{
"name": "amount",
"type": "decimal",
"description": "amount of support",
"is_required": true
},
{
"name": "account_id",
"type": "str",
"description": "id of the account to use",
"is_required": false
2018-08-22 06:20:30 +02:00
}
],
"returns": "(dict) Dictionary containing the transaction information\n {\n \"hex\": (str) raw transaction,\n \"inputs\": (list) inputs(dict) used for the transaction,\n \"outputs\": (list) outputs(dict) for the transaction,\n \"total_fee\": (int) fee in dewies,\n \"total_input\": (int) total of inputs in dewies,\n \"total_output\": (int) total of outputs in dewies(input - fees),\n \"txid\": (str) txid of the transaction,\n }"
},
2018-08-22 06:20:30 +02:00
{
"name": "claim_send_to_address",
"description": "Send a name claim to an address",
2018-08-22 06:20:30 +02:00
"arguments": [
{
"name": "claim_id",
"type": "str",
"description": "claim_id to send",
"is_required": true
},
{
"name": "address",
"type": "str",
"description": "address to send the claim to",
"is_required": true
},
{
"name": "amount",
"type": "int",
"description": "Amount of credits to claim name for, defaults to the current amount on the claim",
"is_required": false
2018-08-22 06:20:30 +02:00
}
],
"returns": "(dict) Dictionary containing result of the claim\n {\n 'tx' : (str) hex encoded transaction\n 'txid' : (str) txid of resulting claim\n 'nout' : (int) nout of the resulting claim\n 'fee' : (float) fee paid for the claim transaction\n 'claim_id' : (str) claim ID of the resulting claim\n }"
},
2018-08-22 06:20:30 +02:00
{
"name": "claim_show",
"description": "Resolve claim info from txid/nout or with claim ID",
2018-08-22 06:20:30 +02:00
"arguments": [
{
"name": "txid",
"type": "str",
"description": "look for claim with this txid, nout must also be specified",
"is_required": false
},
{
"name": "nout",
"type": "int",
"description": "look for claim with this nout, txid must also be specified",
"is_required": false
},
{
"name": "claim_id",
"type": "str",
"description": "look for claim with this claim id",
"is_required": false
2018-08-22 06:20:30 +02:00
}
],
"returns": "(dict) Dictionary containing claim info as below,\n\n {\n 'txid': (str) txid of claim\n 'nout': (int) nout of claim\n 'amount': (float) amount of claim\n 'value': (str) value of claim\n 'height' : (int) height of claim takeover\n 'claim_id': (str) claim ID of claim\n 'supports': (list) list of supports associated with claim\n }\n\n if claim cannot be resolved, dictionary as below will be returned\n\n {\n 'error': (str) reason for error\n }"
},
2018-08-22 06:20:30 +02:00
{
"name": "claim_tip",
"description": "Tip the owner of the claim",
2018-08-22 06:20:30 +02:00
"arguments": [
{
"name": "claim_id",
"type": "str",
"description": "claim_id of the claim to support",
"is_required": true
},
{
"name": "amount",
"type": "decimal",
"description": "amount of support",
"is_required": true
},
{
"name": "account_id",
"type": "str",
"description": "id of the account to use",
"is_required": false
2018-08-22 06:20:30 +02:00
}
],
"returns": "(dict) Dictionary containing the transaction information\n {\n \"hex\": (str) raw transaction,\n \"inputs\": (list) inputs(dict) used for the transaction,\n \"outputs\": (list) outputs(dict) for the transaction,\n \"total_fee\": (int) fee in dewies,\n \"total_input\": (int) total of inputs in dewies,\n \"total_output\": (int) total of outputs in dewies(input - fees),\n \"txid\": (str) txid of the transaction,\n }"
},
2018-08-22 06:20:30 +02:00
{
"name": "file_delete",
"description": "Delete a LBRY file",
2018-08-22 06:20:30 +02:00
"arguments": [
{
"name": "delete_from_download_dir",
"type": "bool",
"description": "delete file from download directory, instead of just deleting blobs",
"is_required": false
},
{
"name": "delete_all",
"type": "bool",
"description": "if there are multiple matching files, allow the deletion of multiple files. Otherwise do not delete anything.",
"is_required": false
},
{
"name": "sd_hash",
"type": "str",
"description": "delete by file sd hash",
"is_required": false
},
{
"name": "file_name",
"type": "str",
"description": "delete by file name in downloads folder",
"is_required": false
},
{
"name": "stream_hash",
"type": "str",
"description": "delete by file stream hash",
"is_required": false
},
{
"name": "rowid",
"type": "int",
"description": "delete by file row id",
"is_required": false
},
{
"name": "claim_id",
"type": "str",
"description": "delete by file claim id",
"is_required": false
},
{
"name": "txid",
"type": "str",
"description": "delete by file claim txid",
"is_required": false
},
{
"name": "nout",
"type": "int",
"description": "delete by file claim nout",
"is_required": false
},
{
"name": "claim_name",
"type": "str",
"description": "delete by file claim name",
"is_required": false
},
{
"name": "channel_claim_id",
"type": "str",
"description": "delete by file channel claim id",
"is_required": false
},
{
"name": "channel_name",
"type": "str",
"description": "delete by file channel claim name",
"is_required": false
2018-08-22 06:20:30 +02:00
}
],
"returns": "(bool) true if deletion was successful"
},
2018-08-22 06:20:30 +02:00
{
"name": "file_list",
"description": "List files limited by optional filters",
"arguments": [
{
"name": "sd_hash",
"type": "str",
"description": "get file with matching sd hash",
"is_required": false
},
{
"name": "file_name",
"type": "str",
"description": "get file with matching file name in the downloads folder",
"is_required": false
},
{
"name": "stream_hash",
"type": "str",
"description": "get file with matching stream hash",
"is_required": false
},
{
"name": "rowid",
"type": "int",
"description": "get file with matching row id",
"is_required": false
},
{
"name": "claim_id",
"type": "str",
"description": "get file with matching claim id",
"is_required": false
},
{
"name": "outpoint",
"type": "str",
"description": "get file with matching claim outpoint",
"is_required": false
},
{
"name": "txid",
"type": "str",
"description": "get file with matching claim txid",
"is_required": false
},
{
"name": "nout",
"type": "int",
"description": "get file with matching claim nout",
"is_required": false
},
{
"name": "channel_claim_id",
"type": "str",
"description": "get file with matching channel claim id",
"is_required": false
},
{
"name": "channel_name",
"type": "str",
"description": "get file with matching channel name",
"is_required": false
},
{
"name": "claim_name",
"type": "str",
"description": "get file with matching claim name",
"is_required": false
},
2019-02-19 23:26:08 +01:00
{
"name": "blobs_in_stream<blobs_in_stream>",
"type": "int",
"description": "get file with matching blobs in stream",
"is_required": false
},
{
"name": "blobs_remaining",
"type": "int",
"description": "amount of remaining blobs to download",
"is_required": false
},
{
"name": "sort",
"type": "str",
2019-02-19 23:26:08 +01:00
"description": "field to sort by (one of the above filter fields)",
"is_required": false
},
{
"name": "comparison",
"type": "str",
"description": "logical comparision, (eq | ne | g | ge | l | le)",
"is_required": false
}
],
2019-02-19 23:26:08 +01:00
"returns": "(list) List of files\n\n [\n {\n 'completed': (bool) true if download is completed,\n 'file_name': (str) name of file,\n 'download_directory': (str) download directory,\n 'points_paid': (float) credit paid to download file,\n 'stopped': (bool) true if download is stopped,\n 'stream_hash': (str) stream hash of file,\n 'stream_name': (str) stream name ,\n 'suggested_file_name': (str) suggested file name,\n 'sd_hash': (str) sd hash of file,\n 'download_path': (str) download path of file,\n 'mime_type': (str) mime type of file,\n 'key': (str) key attached to file,\n 'total_bytes_lower_bound': (int) lower bound file size in bytes,\n 'total_bytes': (int) file upper bound size in bytes,\n 'written_bytes': (int) written size in bytes,\n 'blobs_completed': (int) number of fully downloaded blobs,\n 'blobs_in_stream': (int) total blobs on stream,\n 'blobs_remaining': (int) total blobs remaining to download,\n 'status': (str) downloader status\n 'claim_id': (str) None if claim is not found else the claim id,\n 'txid': (str) None if claim is not found else the transaction id,\n 'nout': (int) None if claim is not found else the transaction output index,\n 'outpoint': (str) None if claim is not found else the tx and output,\n 'metadata': (dict) None if claim is not found else the claim metadata,\n 'channel_claim_id': (str) None if claim is not found or not signed,\n 'channel_name': (str) None if claim is not found or not signed,\n 'claim_name': (str) None if claim is not found else the claim name\n },\n ]\n}"
},
2018-08-22 06:20:30 +02:00
{
"name": "file_reflect",
"description": "Reflect all the blobs in a file matching the filter criteria",
"arguments": [
{
"name": "sd_hash",
"type": "str",
"description": "get file with matching sd hash",
"is_required": false
},
{
"name": "file_name",
"type": "str",
"description": "get file with matching file name in the downloads folder",
"is_required": false
},
{
"name": "stream_hash",
"type": "str",
"description": "get file with matching stream hash",
"is_required": false
},
{
"name": "rowid",
"type": "int",
"description": "get file with matching row id",
"is_required": false
},
{
"name": "reflector",
"type": "str",
"description": "reflector server, ip address or url by default choose a server from the config",
"is_required": false
}
],
"returns": "(list) list of blobs reflected"
},
2018-08-22 06:20:30 +02:00
{
"name": "file_set_status",
"description": "Start or stop downloading a file",
2018-08-22 06:20:30 +02:00
"arguments": [
{
"name": "status",
"type": "str",
"description": "one of \"start\" or \"stop\"",
"is_required": true
},
{
"name": "sd_hash",
"type": "str",
"description": "set status of file with matching sd hash",
"is_required": false
},
{
"name": "file_name",
"type": "str",
"description": "set status of file with matching file name in the downloads folder",
"is_required": false
},
{
"name": "stream_hash",
"type": "str",
"description": "set status of file with matching stream hash",
"is_required": false
},
{
"name": "rowid",
"type": "int",
"description": "set status of file with matching row id",
"is_required": false
2018-08-22 06:20:30 +02:00
}
],
"returns": "(str) Confirmation message"
},
2018-08-22 06:20:30 +02:00
{
"name": "get",
"description": "Download stream from a LBRY name.",
"arguments": [
{
"name": "uri",
"type": "str",
"description": "uri of the content to download",
"is_required": false
},
{
"name": "file_name",
"type": "str",
"description": "specified name for the downloaded file",
"is_required": false
},
{
"name": "timeout",
"type": "int",
"description": "download timeout in number of seconds",
"is_required": false
}
],
"returns": "(dict) Dictionary containing information about the stream\n {\n 'completed': (bool) true if download is completed,\n 'file_name': (str) name of file,\n 'download_directory': (str) download directory,\n 'points_paid': (float) credit paid to download file,\n 'stopped': (bool) true if download is stopped,\n 'stream_hash': (str) stream hash of file,\n 'stream_name': (str) stream name ,\n 'suggested_file_name': (str) suggested file name,\n 'sd_hash': (str) sd hash of file,\n 'download_path': (str) download path of file,\n 'mime_type': (str) mime type of file,\n 'key': (str) key attached to file,\n 'total_bytes': (int) file size in bytes,\n 'written_bytes': (int) written size in bytes,\n 'blobs_completed': (int) number of fully downloaded blobs,\n 'blobs_in_stream': (int) total blobs on stream,\n 'status': (str) downloader status,\n 'claim_id': (str) claim id,\n 'outpoint': (str) claim outpoint string,\n 'txid': (str) claim txid,\n 'nout': (int) claim nout,\n 'metadata': (dict) claim metadata,\n 'channel_claim_id': (str) None if claim is not signed\n 'channel_name': (str) None if claim is not signed\n 'claim_name': (str) claim name\n }"
},
2018-08-22 06:20:30 +02:00
{
"name": "peer_list",
"description": "Get peers for blob hash",
2018-08-22 06:20:30 +02:00
"arguments": [
{
"name": "blob_hash",
"type": "str",
"description": "find available peers for this blob hash",
"is_required": true
},
2018-08-22 06:20:30 +02:00
{
2019-02-19 23:26:08 +01:00
"name": "search_bottom_out_limit",
"type": "int",
2019-02-19 23:26:08 +01:00
"description": "the number of search probes in a row that don't find any new peers before giving up and returning",
"is_required": false
2018-08-22 06:20:30 +02:00
}
],
2019-02-19 23:26:08 +01:00
"returns": "(list) List of contact dictionaries {'address': <peer ip>, 'udp_port': <dht port>, 'tcp_port': <peer port>,\n 'node_id': <peer node id>}"
},
2018-08-22 06:20:30 +02:00
{
"name": "peer_ping",
"description": "Send a kademlia ping to the specified peer. If address and port are provided the peer is directly pinged,\nif not provided the peer is located first.",
2019-02-19 23:26:08 +01:00
"arguments": [],
"returns": "(str) pong, or {'error': <error message>} if an error is encountered"
},
2018-08-22 06:20:30 +02:00
{
"name": "publish",
"description": "Make a new name claim and publish associated data to lbrynet,\nupdate over existing claim if user already has a claim for name.\n\nFields required in the final Metadata are:\n 'title'\n 'description'\n 'author'\n 'language'\n 'license'\n 'nsfw'\n\nMetadata can be set by either using the metadata argument or by setting individual arguments\nfee, title, description, author, language, license, license_url, thumbnail, preview, nsfw,\nor sources. Individual arguments will overwrite the fields specified in metadata argument.",
2018-08-22 06:20:30 +02:00
"arguments": [
{
"name": "name",
"type": "str",
"description": "name of the content (can only consist of a-z A-Z 0-9 and -(dash))",
"is_required": true
},
{
"name": "bid",
"type": "decimal",
"description": "amount to back the claim",
"is_required": true
},
{
"name": "metadata",
"type": "dict",
"description": "ClaimDict to associate with the claim.",
"is_required": false
},
{
"name": "file_path",
"type": "str",
"description": "path to file to be associated with name. If provided, a lbry stream of this file will be used in 'sources'. If no path is given but a sources dict is provided, it will be used. If neither are provided, an error is raised.",
"is_required": false
},
{
"name": "fee",
"type": "dict",
"description": "Dictionary representing key fee to download content: { 'currency': currency_symbol, 'amount': decimal, 'address': str, optional } supported currencies: LBC, USD, BTC If an address is not provided a new one will be automatically generated. Default fee is zero.",
"is_required": false
},
{
"name": "title",
"type": "str",
"description": "title of the publication",
"is_required": false
},
{
"name": "description",
"type": "str",
"description": "description of the publication",
"is_required": false
},
{
"name": "author",
"type": "str",
"description": "author of the publication. The usage for this field is not the same as for channels. The author field is used to credit an author who is not the publisher and is not represented by the channel. For example, a pdf file of 'The Odyssey' has an author of 'Homer' but may by published to a channel such as '@classics', or to no channel at all",
"is_required": false
},
{
"name": "language",
"type": "str",
"description": "language of the publication",
"is_required": false
},
{
"name": "license",
"type": "str",
"description": "publication license",
"is_required": false
},
{
"name": "license_url",
"type": "str",
"description": "publication license url",
"is_required": false
},
{
"name": "thumbnail",
"type": "str",
"description": "thumbnail url",
"is_required": false
},
{
"name": "preview",
"type": "str",
"description": "preview url",
"is_required": false
},
{
"name": "nsfw",
"type": "bool",
"description": "whether the content is nsfw",
"is_required": false
},
{
"name": "channel_name",
"type": "str",
"description": "name of the publisher channel name in the wallet",
"is_required": false
},
{
"name": "channel_id",
"type": "str",
"description": "claim id of the publisher channel, does not check for channel claim being in the wallet. This allows publishing to a channel where only the certificate private key is in the wallet.",
"is_required": false
},
2018-12-12 18:19:26 +01:00
{
"name": "channel_account_id",
"type": "str",
"description": "one or more account ids for accounts to look in for channel certificates, defaults to all accounts.",
"is_required": false
},
{
"name": "account_id",
"type": "str",
"description": "account to use for funding the transaction",
"is_required": false
},
{
"name": "claim_address",
"type": "str",
2018-10-18 13:40:37 +02:00
"description": "address where the claim is sent to, if not specified new address will automatically be created",
"is_required": false
2018-08-22 06:20:30 +02:00
}
],
"returns": "(dict) Dictionary containing result of the claim\n {\n 'tx' : (str) hex encoded transaction\n 'txid' : (str) txid of resulting claim\n 'nout' : (int) nout of the resulting claim\n 'fee' : (decimal) fee paid for the claim transaction\n 'claim_id' : (str) claim ID of the resulting claim\n }"
},
2018-08-22 06:20:30 +02:00
{
"name": "report_bug",
"description": "Report a bug to slack",
"arguments": [
{
"name": "message",
"type": "str",
"description": "Description of the bug",
"is_required": true
}
],
"returns": "(bool) true if successful"
},
2018-08-22 06:20:30 +02:00
{
"name": "resolve",
2019-02-19 23:26:08 +01:00
"description": "Get the claim that a URL refers to.",
"arguments": [
{
2019-02-19 23:26:08 +01:00
"name": "urls",
"type": "str, list",
"description": "one or more urls to resolve",
"is_required": false
}
],
2019-02-19 23:26:08 +01:00
"returns": "Dictionary of results, keyed by url\n '<url>': {\n If a resolution error occurs:\n 'error': Error message\n\n If the url resolves to a channel or a claim in a channel:\n 'certificate': {\n 'address': (str) claim address,\n 'amount': (float) claim amount,\n 'effective_amount': (float) claim amount including supports,\n 'claim_id': (str) claim id,\n 'claim_sequence': (int) claim sequence number,\n 'decoded_claim': (bool) whether or not the claim value was decoded,\n 'height': (int) claim height,\n 'depth': (int) claim depth,\n 'has_signature': (bool) included if decoded_claim\n 'name': (str) claim name,\n 'permanent_url': (str) permanent url of the certificate claim,\n 'supports: (list) list of supports [{'txid': (str) txid,\n 'nout': (int) nout,\n 'amount': (float) amount}],\n 'txid': (str) claim txid,\n 'nout': (str) claim nout,\n 'signature_is_valid': (bool), included if has_signature,\n 'value': ClaimDict if decoded, otherwise hex string\n }\n\n If the url resolves to a channel:\n 'claims_in_channel': (int) number of claims in the channel,\n\n If the url resolves to a claim:\n 'claim': {\n 'address': (str) claim address,\n 'amount': (float) claim amount,\n 'effective_amount': (float) claim amount including supports,\n 'claim_id': (str) claim id,\n 'claim_sequence': (int) claim sequence number,\n 'decoded_claim': (bool) whether or not the claim value was decoded,\n 'height': (int) claim height,\n 'depth': (int) claim depth,\n 'has_signature': (bool) included if decoded_claim\n 'name': (str) claim name,\n 'permanent_url': (str) permanent url of the claim,\n 'channel_name': (str) channel name if claim is in a channel\n 'supports: (list) list of supports [{'txid': (str) txid,\n 'nout': (int) nout,\n 'amount': (float) amount}]\n 'txid': (str) claim txid,\n 'nout': (str) claim nout,\n 'signature_is_valid': (bool), included if has_signature,\n 'value': ClaimDict if decoded, otherwise hex string\n }\n }"
},
{
"name": "routing_table_get",
"description": "Get DHT routing information",
"arguments": [],
2019-02-19 23:26:08 +01:00
"returns": "(dict) dictionary containing routing and peer information\n {\n \"buckets\": {\n <bucket index>: [\n {\n \"address\": (str) peer address,\n \"udp_port\": (int) peer udp port,\n \"tcp_port\": (int) peer tcp port,\n \"node_id\": (str) peer node id,\n }\n ]\n },\n \"node_id\": (str) the local dht node id\n }"
},
2018-08-22 06:20:30 +02:00
{
"name": "settings_get",
"description": "Get daemon settings",
"arguments": [],
"returns": "(dict) Dictionary of daemon settings\n See ADJUSTABLE_SETTINGS in lbrynet/conf.py for full list of settings"
},
2018-08-22 06:20:30 +02:00
{
"name": "settings_set",
"description": "Set daemon settings",
2019-02-19 23:26:08 +01:00
"arguments": [],
"returns": "(dict) Updated dictionary of daemon settings"
},
{
"name": "status",
"description": "Get daemon status",
"arguments": [],
2019-02-19 23:26:08 +01:00
"returns": "(dict) lbrynet-daemon status\n {\n 'installation_id': (str) installation id - base58,\n 'is_running': (bool),\n 'skipped_components': (list) [names of skipped components (str)],\n 'startup_status': { Does not include components which have been skipped\n 'blob_manager': (bool),\n 'blockchain_headers': (bool),\n 'database': (bool),\n 'dht': (bool),\n 'exchange_rate_manager': (bool),\n 'hash_announcer': (bool),\n 'peer_protocol_server': (bool),\n 'stream_manager': (bool),\n 'upnp': (bool),\n 'wallet': (bool),\n },\n 'connection_status': {\n 'code': (str) connection status code,\n 'message': (str) connection status message\n },\n 'blockchain_headers': {\n 'downloading_headers': (bool),\n 'download_progress': (float) 0-100.0\n },\n 'wallet': {\n 'blocks': (int) local blockchain height,\n 'blocks_behind': (int) remote_height - local_height,\n 'best_blockhash': (str) block hash of most recent block,\n 'is_encrypted': (bool),\n 'is_locked': (bool),\n },\n 'dht': {\n 'node_id': (str) lbry dht node id - hex encoded,\n 'peers_in_routing_table': (int) the number of peers in the routing table,\n },\n 'blob_manager': {\n 'finished_blobs': (int) number of finished blobs in the blob manager,\n },\n 'hash_announcer': {\n 'announce_queue_size': (int) number of blobs currently queued to be announced\n },\n 'stream_manager': {\n 'managed_files': (int) count of files in the stream manager,\n },\n 'upnp': {\n 'aioupnp_version': (str),\n 'redirects': {\n <TCP | UDP>: (int) external_port,\n },\n 'gateway': (str) manufacturer and model,\n 'dht_redirect_set': (bool),\n 'peer_redirect_set': (bool),\n 'external_ip': (str) external ip address,\n }\n }"
},
{
"name": "stop",
2019-02-19 23:26:08 +01:00
"description": "Stop lbrynet API server.",
"arguments": [],
"returns": "(string) Shutdown message"
},
2018-08-22 06:20:30 +02:00
{
"name": "stream_cost_estimate",
"description": "Get estimated cost for a lbry stream",
"arguments": [
{
"name": "uri",
"type": "str",
"description": "uri to use",
"is_required": true
}
],
"returns": "(float) Estimated cost in lbry credits, returns None if uri is not\n resolvable"
},
2018-08-22 06:20:30 +02:00
{
"name": "transaction_list",
"description": "List transactions belonging to wallet",
2018-08-22 06:20:30 +02:00
"arguments": [
{
"name": "account_id",
"type": "str",
"description": "id of the account to query",
"is_required": false
2018-12-12 18:19:26 +01:00
},
{
"name": "page",
"type": "int",
"description": "page to return during paginating",
"is_required": false
},
{
"name": "page_size",
"type": "int",
"description": "number of items on page during pagination",
"is_required": false
2018-08-22 06:20:30 +02:00
}
],
"returns": "(list) List of transactions\n\n {\n \"claim_info\": (list) claim info if in txn [{\n \"address\": (str) address of claim,\n \"balance_delta\": (float) bid amount,\n \"amount\": (float) claim amount,\n \"claim_id\": (str) claim id,\n \"claim_name\": (str) claim name,\n \"nout\": (int) nout\n }],\n \"abandon_info\": (list) abandon info if in txn [{\n \"address\": (str) address of abandoned claim,\n \"balance_delta\": (float) returned amount,\n \"amount\": (float) claim amount,\n \"claim_id\": (str) claim id,\n \"claim_name\": (str) claim name,\n \"nout\": (int) nout\n }],\n \"confirmations\": (int) number of confirmations for the txn,\n \"date\": (str) date and time of txn,\n \"fee\": (float) txn fee,\n \"support_info\": (list) support info if in txn [{\n \"address\": (str) address of support,\n \"balance_delta\": (float) support amount,\n \"amount\": (float) support amount,\n \"claim_id\": (str) claim id,\n \"claim_name\": (str) claim name,\n \"is_tip\": (bool),\n \"nout\": (int) nout\n }],\n \"timestamp\": (int) timestamp,\n \"txid\": (str) txn id,\n \"update_info\": (list) update info if in txn [{\n \"address\": (str) address of claim,\n \"balance_delta\": (float) credited/debited\n \"amount\": (float) absolute amount,\n \"claim_id\": (str) claim id,\n \"claim_name\": (str) claim name,\n \"nout\": (int) nout\n }],\n \"value\": (float) value of txn\n }"
},
2018-08-22 06:20:30 +02:00
{
"name": "transaction_show",
"description": "Get a decoded transaction from a txid",
2018-08-22 06:20:30 +02:00
"arguments": [
{
"name": "txid",
"type": "str",
"description": "txid of the transaction",
"is_required": true
2018-08-22 06:20:30 +02:00
}
],
"returns": "(dict) JSON formatted transaction"
},
2018-08-22 06:20:30 +02:00
{
"name": "utxo_list",
"description": "List unspent transaction outputs",
2018-08-22 06:20:30 +02:00
"arguments": [
{
"name": "account_id",
"type": "str",
"description": "id of the account to query",
"is_required": false
2018-12-12 18:19:26 +01:00
},
{
"name": "page",
"type": "int",
"description": "page to return during paginating",
"is_required": false
},
{
"name": "page_size",
"type": "int",
"description": "number of items on page during pagination",
"is_required": false
2018-08-22 06:20:30 +02:00
}
],
"returns": "(list) List of unspent transaction outputs (UTXOs)\n [\n {\n \"address\": (str) the output address\n \"amount\": (float) unspent amount\n \"height\": (int) block height\n \"is_claim\": (bool) is the tx a claim\n \"is_coinbase\": (bool) is the tx a coinbase tx\n \"is_support\": (bool) is the tx a support\n \"is_update\": (bool) is the tx an update\n \"nout\": (int) nout of the output\n \"txid\": (str) txid of the output\n },\n ...\n ]"
},
{
2019-02-19 23:26:08 +01:00
"name": "utxo_release",
"description": "When spending a UTXO it is locally locked to prevent double spends;\noccasionally this can result in a UTXO being locked which ultimately\ndid not get spent (failed to broadcast, spend transaction was not\naccepted by blockchain node, etc). This command releases the lock\non all UTXOs in your account.",
2018-08-22 06:20:30 +02:00
"arguments": [
{
2019-02-19 23:26:08 +01:00
"name": "account_id",
"type": "str",
"description": "id of the account to query",
"is_required": false
2018-08-22 06:20:30 +02:00
}
],
2019-02-19 23:26:08 +01:00
"returns": "None"
},
{
"name": "version",
"description": "Get lbrynet API server version information",
"arguments": [],
"returns": "(dict) Dictionary of lbry version information\n {\n 'build': (str) build type (e.g. \"dev\", \"rc\", \"release\"),\n 'ip': (str) remote ip, if available,\n 'lbrynet_version': (str) lbrynet_version,\n 'lbryum_version': (str) lbryum_version,\n 'lbryschema_version': (str) lbryschema_version,\n 'os_release': (str) os release string\n 'os_system': (str) os name\n 'platform': (str) platform string\n 'processor': (str) processor type,\n 'python_version': (str) python version,\n }"
},
2018-08-22 06:20:30 +02:00
{
"name": "wallet_send",
"description": "Send credits. If given an address, send credits to it. If given a claim id, send a tip\nto the owner of a claim specified by uri. A tip is a claim support where the recipient\nof the support is the claim address for the claim being supported.",
"arguments": [
{
"name": "amount",
"type": "decimal",
"description": "amount of credit to send",
"is_required": true
},
{
"name": "address",
"type": "str",
"description": "address to send credits to",
"is_required": true
},
{
"name": "claim_id",
"type": "str",
"description": "claim_id of the claim to send to tip to",
"is_required": true
},
{
"name": "account_id",
"type": "str",
"description": "account to fund the transaction",
"is_required": false
}
],
"returns": "If sending to an address:\n (dict) Dictionary containing the transaction information\n {\n \"hex\": (str) raw transaction,\n \"inputs\": (list) inputs(dict) used for the transaction,\n \"outputs\": (list) outputs(dict) for the transaction,\n \"total_fee\": (int) fee in dewies,\n \"total_input\": (int) total of inputs in dewies,\n \"total_output\": (int) total of outputs in dewies(input - fees),\n \"txid\": (str) txid of the transaction,\n }\n\n If sending a claim tip:\n (dict) Dictionary containing the result of the support\n {\n txid : (str) txid of resulting support claim\n nout : (int) nout of the resulting support claim\n fee : (float) fee paid for the transaction\n }"
2018-08-22 06:20:30 +02:00
}
]