{"id":34073087,"url":"https://github.com/ankr-network/ankr-python-sdk","last_synced_at":"2025-12-14T08:37:50.098Z","repository":{"id":41336000,"uuid":"509176683","full_name":"Ankr-network/ankr-python-sdk","owner":"Ankr-network","description":"Compact Python library for interacting with Ankr's Advanced APIs","archived":false,"fork":false,"pushed_at":"2025-10-13T17:13:55.000Z","size":426,"stargazers_count":21,"open_issues_count":0,"forks_count":17,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-10-22T01:45:23.660Z","etag":null,"topics":["blockchain","sdk-python"],"latest_commit_sha":null,"homepage":"https://pypi.org/project/ankr-sdk/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Ankr-network.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2022-06-30T17:38:40.000Z","updated_at":"2025-10-13T17:13:29.000Z","dependencies_parsed_at":"2024-03-11T18:01:55.329Z","dependency_job_id":null,"html_url":"https://github.com/Ankr-network/ankr-python-sdk","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/Ankr-network/ankr-python-sdk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ankr-network%2Fankr-python-sdk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ankr-network%2Fankr-python-sdk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ankr-network%2Fankr-python-sdk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ankr-network%2Fankr-python-sdk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Ankr-network","download_url":"https://codeload.github.com/Ankr-network/ankr-python-sdk/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ankr-network%2Fankr-python-sdk/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":27723414,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-12-14T02:00:11.348Z","response_time":56,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["blockchain","sdk-python"],"created_at":"2025-12-14T08:37:48.691Z","updated_at":"2025-12-14T08:37:50.090Z","avatar_url":"https://github.com/Ankr-network.png","language":"Python","readme":"# ⚓️ Ankr Python SDK\n\nCompact Python library for interacting with Ankr's [Advanced APIs](https://www.ankr.com/advanced-api/).\n\n## Get started in 2 minutes\n\n#### 1. Install the package from PyPi\n\n```bash\npip install ankr-sdk\n```\n\n#### 2. Initialize the SDK\n\n_Note: to use Advanced API for free starting from May 29th, 2023 you have to register on the platform._\n\nGet your individual endpoint here https://www.ankr.com/rpc/advanced-api and provide it to the `AnkrWeb3` class.\n\n```python3\nfrom ankr import AnkrWeb3\n\nankr_w3 = AnkrWeb3(\"YOUR-TOKEN\")\n```\n\n#### 3. Use the sdk and call one of the supported methods\n\n#### Node's API\n```python3\nfrom ankr import AnkrWeb3\nankr_w3 = AnkrWeb3(\"YOUR-TOKEN\")\n\neth_block = ankr_w3.eth.get_block(\"latest\")\nbsc_block = ankr_w3.bsc.get_block(\"latest\")\npolygon_block = ankr_w3.polygon.get_block(\"latest\")\n```\n\n#### Ankr NFT API \n\n```python3\nfrom ankr import AnkrWeb3\nfrom ankr.types import Blockchain, GetNFTsByOwnerRequest\n\nankr_w3 = AnkrWeb3(\"YOUR-TOKEN\")\n\nnfts = ankr_w3.nft.get_nfts(\n    request=GetNFTsByOwnerRequest(\n        blockchain=Blockchain.Eth,\n        walletAddress=\"0x0E11A192d574b342C51be9e306694C41547185DD\"\n    )\n)\n```\n\n#### Ankr Token API\n```python3\nfrom ankr import AnkrWeb3\nfrom ankr.types import GetAccountBalanceRequest\n\nankr_w3 = AnkrWeb3(\"YOUR-TOKEN\")\n\nassets = ankr_w3.token.get_account_balance(\n    request=GetAccountBalanceRequest(\n        walletAddress=\"0x77A859A53D4de24bBC0CC80dD93Fbe391Df45527\"\n    )\n)\n```\n\n#### Ankr Query API\n```python3\nfrom ankr import AnkrWeb3\nfrom ankr.types import Blockchain, GetLogsRequest\n\nankr_w3 = AnkrWeb3(\"YOUR-TOKEN\")\n\nlogs = ankr_w3.query.get_logs(\n    request=GetLogsRequest(\n        blockchain=[Blockchain.Eth],\n        fromBlock=1181739,\n        toBlock=1181739,\n        address=[\"0x3589d05a1ec4af9f65b0e5554e645707775ee43c\"],\n        topics=[\n            [],\n            [\"0x000000000000000000000000feb92d30bf01ff9a1901666c5573532bfa07eeec\"],\n        ],\n        decodeLogs=True,\n    ),\n    limit=10\n)\n```\n\n## Ankr Advanced APIs supported chains\n\n`ankr-sdk` supports the following chains at this time:\n\nMainnet\n\n- Ethereum: `\"eth\"`\n- BNB Smart Chain: `\"bsc\"`\n- Polygon: `\"polygon\"`\n- Fantom: `\"fantom\"`\n- Arbitrum: `\"arbitrum\"`\n- Avalanche: `\"avalanche\"`\n- Syscoin NEVM: `\"syscoin\"`\n- Optimism: `\"optimism\"`\n- Polygon zkEVM: `\"polygon_zkevm\"`\n- Rollux: `\"rollux\"`\n- Base: `\"base\"`\n- Flare: `\"flare\"`\n- Gnosis Chain: `\"gnosis\"`\n- Scroll: `\"scroll\"`\n- Stellar: `\"stellar\"`\n- Linea: `\"linea\"`\n- Xai: `\"xai\"`\n- Xlayer: `\"xlayer\"`\n- Telos: `\"telos\"`\n\nTestnet\n\n- Ethereum Sepolia: `\"eth_sepolia\"`\n- Ethereum Holesky: `\"eth_holesky\"`\n- Avalanche Fuji: `\"avalanche_fuji\"`\n- Polygon Amoy: `\"polygon_amoy\"`\n- Optimism Sepolia: `\"optimism_sepolia\"`\n- Base Sepolia: `\"base_sepolia\"`\n- Neura Devnet `\"neura_devnet\"`\n- Neura Testnet `\"neura_testnet_v1\"`\n\nAppchain Testnet\n\n- Incentiv Devnet `\"incentiv_devnet_v3\"`\n- Incentiv Testnet `\"incentiv_testnet\"`\n\nWhen passing blockchain, you can use one available from `types.py` (preferred) or just a string value.  \n\n## Available methods\n\n`ankr-sdk` supports the following methods:\n\nEarly Access\n\n- [`get_token_price_history`](#gettokenpricehistory--gettokenpricehistoryraw)\n\nToken API\n\n- [`explain_token_price`](#explaintokenprice--explaintokenpriceraw)\n- [`get_account_balance`](#getaccountbalance--getaccountbalanceraw)\n- [`get_currencies`](#getcurrencies--getcurrenciesraw)\n- [`get_token_holders`](#gettokenholders--gettokenholdersraw)\n- [`get_token_holders_count_history`](#gettokenholderscounthistory--gettokenholderscounthistoryraw)\n- [`get_token_holders_count`](#gettokenholderscount--gettokenholderscountraw)\n- [`get_token_price`](#gettokenprice--gettokenpriceraw)\n- [`get_token_transfers`](#gettokentransfers--gettokentransfersraw)\n\nNFT API\n\n- [`get_nfts`](#getnfts--getnftsraw)\n- [`get_nft_metadata`](#getnftmetadata--getnftmetadataraw)\n- [`get_nft_holders`](#getnftholders--getnftholdersraw)\n- [`get_nft_transfers`](#getnfttransfers--getnfttransfersraw)\n\nQuery API\n\n- [`get_logs`](#getlogs--getlogsraw)\n- [`get_blocks`](#getblocks--getblocksraw)\n- [`get_transaction`](#gettransaction--gettransactionraw)\n- [`get_transactions_by_address`](#gettransactionsbyaddress--gettransactionsbyaddressraw)\n- [`get_blockchain_stats`](#getblockchainstats--getblockchainstatsraw)\n- [`get_interactions`](#getinteractions--getinteractionsraw)\n\n\nNote: some methods are available in *_raw format, allowing to get full reply with syncStatus and control pagination by hands.\n\n### Pagination\n\n- methods with *_raw ending support customized pagination, where you are controlling it, using `pageSize` and `pageToken`\n- other methods support automatic pagination, DON'T use `pageSize` and `pageToken` fields to these methods\n\n---\n\n## Examples\n\n### Early Access API\n\n#### `get_token_price_history` / `get_token_price_history_raw`\n\nGet a list of history of the price for given contract to given timestamp.\n\n```python3\nfrom ankr import AnkrAdvancedAPI\nfrom ankr.types import Blockchain, GetTokenPriceHistoryRequest\n\nadvancedAPI = AnkrAdvancedAPI(\"YOUR-TOKEN\")\n\nresult = advancedAPI.get_token_price_history(\n    request=GetTokenPriceHistoryRequest(\n        blockchain=Blockchain.Eth,\n        contractAddress='0x50327c6c5a14dcade707abad2e27eb517df87ab5',\n        toTimestamp=1696970653,\n        interval=100,\n        limit=10\n    )\n)\nprint(result)\n```\n\n\n### Token API\n\n#### `explain_token_price` / `explain_token_price_raw`\n\nGet a list of tokens and pool how price for calculated.\n\n```python3\nfrom ankr import AnkrAdvancedAPI\nfrom ankr.types import Blockchain, ExplainTokenPriceRequest\n\nadvancedAPI = AnkrAdvancedAPI(\"YOUR-TOKEN\")\n\npairs, estimates = advancedAPI.explain_token_price(\n    request=ExplainTokenPriceRequest(\n        blockchain=Blockchain.Eth,\n        tokenAddress='0x8290333cef9e6d528dd5618fb97a76f268f3edd4',\n        blockHeight=17463534,\n    )\n)\n\nprint(pairs)\nprint(estimates)\n```\n\n#### `get_account_balance` / `get_account_balance_raw`\n\nGet the coin and token balances of a wallet.\n\n```python3\nfrom ankr import AnkrAdvancedAPI\nfrom ankr.types import GetAccountBalanceRequest\n\nadvancedAPI = AnkrAdvancedAPI(\"YOUR-TOKEN\")\n\nresult = advancedAPI.get_account_balance(\n    request=GetAccountBalanceRequest(\n        walletAddress=\"0x77A859A53D4de24bBC0CC80dD93Fbe391Df45527\"\n    )\n)\n\nfor balance in result:\n    print(balance)\n```\n\n#### `get_currencies` / `get_currencies_raw`\n\nGet a list of supported currencies for a given blockchain.\n\n```python3\nfrom ankr import AnkrAdvancedAPI\nfrom ankr.types import Blockchain, GetCurrenciesRequest\n\nadvancedAPI = AnkrAdvancedAPI(\"YOUR-TOKEN\")\n\nresult = advancedAPI.get_currencies(\n    request=GetCurrenciesRequest(\n        blockchain=Blockchain.Fantom,\n    )\n)\n\nfor currency in result:\n    print(currency)\n```\n\n#### `get_token_holders` / `get_token_holders_raw`\n\nGet the list of token holders for a given contract address.\n\n```python3\nfrom ankr import AnkrAdvancedAPI\nfrom ankr.types import Blockchain, GetTokenHoldersRequest\n\nadvancedAPI = AnkrAdvancedAPI(\"YOUR-TOKEN\")\n\nresult = advancedAPI.get_token_holders(\n    request=GetTokenHoldersRequest(\n        blockchain=Blockchain.Eth,\n        contractAddress='0xdac17f958d2ee523a2206206994597c13d831ec7',\n    )\n)\n\nfor balance in result:\n    print(balance)\n```\n\n#### `get_token_holders_count_history` / `get_token_holders_count_history_raw`\n\nGet historical data about the number of token holders for a given contract address.\n\n```python3\nfrom ankr import AnkrAdvancedAPI\nfrom ankr.types import Blockchain, GetTokenHoldersCountRequest\n\nadvancedAPI = AnkrAdvancedAPI(\"YOUR-TOKEN\")\n\nresult = advancedAPI.get_token_holders_count_history(\n    request=GetTokenHoldersCountRequest(\n        blockchain=Blockchain.Eth,\n        contractAddress='0xdAC17F958D2ee523a2206206994597C13D831ec7',\n    )\n)\n\nfor balance in result:\n    print(balance)\n```\n\n#### `get_token_holders_count` / `get_token_holders_count_raw`\n\nGet current data about the number of token holders for a given contract address.\n\n```python3\nfrom ankr import AnkrAdvancedAPI\nfrom ankr.types import Blockchain, GetTokenHoldersCountRequest\n\nadvancedAPI = AnkrAdvancedAPI(\"YOUR-TOKEN\")\n\nresult = advancedAPI.get_token_holders_count_history_raw(\n    request=GetTokenHoldersCountRequest(\n        blockchain=Blockchain.Eth,\n        contractAddress='0xdAC17F958D2ee523a2206206994597C13D831ec7',\n    )\n)\n\nprint(result)\n```\n\n#### `get_token_price` / `get_token_price_raw`\n\nGet token price by contract.\n\n```python3\nfrom ankr import AnkrAdvancedAPI\nfrom ankr.types import Blockchain, GetTokenPriceRequest\n\nadvancedAPI = AnkrAdvancedAPI(\"YOUR-TOKEN\")\n\nresult = advancedAPI.get_token_price(\n    request=GetTokenPriceRequest(\n        blockchain=Blockchain.Eth,\n        contractAddress='',\n    )\n)\n\nprint(result)\n```\n\n#### `get_token_transfers` / `get_token_transfers_raw`\n\nGet token transfers of specified address.\n\n```python3\nfrom ankr import AnkrAdvancedAPI\nfrom ankr.types import Blockchain, GetTransfersRequest\n\nadvancedAPI = AnkrAdvancedAPI(\"YOUR-TOKEN\")\n\nresult = advancedAPI.get_token_transfers(\n    request=GetTransfersRequest(\n        blockchain=Blockchain.Eth,\n        address=['0xf16e9b0d03470827a95cdfd0cb8a8a3b46969b91'],\n        fromTimestamp=1674441035,\n        toTimestamp=1674441035,\n        descOrder=True,\n    )\n)\n\nfor transfer in result:\n    print(transfer)\n```\n\n### NFT API\n\n#### `get_nfts` / `get_nfts_raw`\n\nGet data about all the NFTs (collectibles) owned by a wallet.\n\n```python3\nfrom ankr import AnkrAdvancedAPI\nfrom ankr.types import Blockchain, GetNFTsByOwnerRequest\n\nadvancedAPI = AnkrAdvancedAPI(\"YOUR-TOKEN\")\n\nresult = advancedAPI.get_nfts(\n    request=GetNFTsByOwnerRequest(\n        blockchain=Blockchain.Eth,\n        walletAddress='0x0E11A192d574b342C51be9e306694C41547185DD',\n    )\n)\n\nfor nft in result:\n    print(nft)\n```\n\n#### `get_nft_metadata` / `get_nft_metadata_raw`\n\nGet NFT's contract metadata.\n\n```python3\nfrom ankr import AnkrAdvancedAPI\nfrom ankr.types import Blockchain, GetNFTMetadataRequest\n\nadvancedAPI = AnkrAdvancedAPI(\"YOUR-TOKEN\")\n\nreply = advancedAPI.get_nft_metadata(\n    request=GetNFTMetadataRequest(\n        blockchain=Blockchain.Eth,\n        contractAddress='0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d',\n        tokenId='1500',\n        forceFetch=False,\n    )\n)\n\nprint(reply.metadata)\nprint(reply.attributes)\n```\n\n#### `get_nft_holders` / `get_nft_holders_raw`\n\nGet NFT's holders.\n\n```python3\nfrom ankr import AnkrAdvancedAPI\nfrom ankr.types import Blockchain, GetNFTHoldersRequest\n\nadvancedAPI = AnkrAdvancedAPI(\"YOUR-TOKEN\")\n\nresult = advancedAPI.get_nft_holders(\n    request=GetNFTHoldersRequest(\n        blockchain=Blockchain.Arbitrum,\n        contractAddress='0xc36442b4a4522e871399cd717abdd847ab11fe88',\n    ),\n    limit=1000\n)\n\nfor holder in result:\n    print(holder)\n```\n\n#### `get_nft_transfers` / `get_nft_transfers_raw`\n\nGet NFT Transfers of specified address.\n\n```python3\nfrom ankr import AnkrAdvancedAPI\nfrom ankr.types import Blockchain, GetTransfersRequest\n\nadvancedAPI = AnkrAdvancedAPI(\"YOUR-TOKEN\")\n\nresult = advancedAPI.get_nft_transfers(\n    request=GetTransfersRequest(\n        blockchain=[Blockchain.Eth, Blockchain.Bsc],\n        address=['0xd8da6bf26964af9d7eed9e03e53415d37aa96045'],\n        fromTimestamp=1672553107,\n        toTimestamp=1672683207,\n    )\n)\n\nfor transfer in result:\n    print(transfer)\n```\n\n### Query API\n\n#### `get_logs` / `get_logs_raw`\n\nGet logs matching the filter.\n\n```python3\nfrom ankr import AnkrAdvancedAPI\nfrom ankr.types import Blockchain, GetLogsRequest\n\nadvancedAPI = AnkrAdvancedAPI(\"YOUR-TOKEN\")\n\nresult = advancedAPI.get_logs(\n    request=GetLogsRequest(\n        blockchain=[Blockchain.Eth],\n        fromBlock=1181739,\n        toBlock=1181739,\n        address=[\"0x3589d05a1ec4af9f65b0e5554e645707775ee43c\"],\n        topics=[\n            [],\n            [\"0x000000000000000000000000feb92d30bf01ff9a1901666c5573532bfa07eeec\"],\n        ],\n        decodeLogs=True,\n    ),\n    limit=10\n)\n\nfor log in result:\n    print(log)\n```\n\n#### `get_blocks` / `get_blocks_raw`\n\nQuery data about blocks within a specified range.\n\n```python3\nfrom ankr import AnkrAdvancedAPI\nfrom ankr.types import Blockchain, GetBlocksRequest\n\nadvancedAPI = AnkrAdvancedAPI(\"YOUR-TOKEN\")\n\nresult = advancedAPI.get_blocks(\n    request=GetBlocksRequest(\n        blockchain=Blockchain.Eth,\n        fromBlock=14500001,\n        toBlock=14500004,\n        descOrder=True,\n        includeLogs=True,\n        includeTxs=True,\n        decodeLogs=True,\n    )\n)\n\nfor block in result:\n    print(block)\n```\n\n#### `get_transaction` / `get_transaction_raw`\n\nQuery data about transaction by the transaction hash.\n\n```python3\nfrom ankr import AnkrAdvancedAPI\nfrom ankr.types import GetTransactionsByHashRequest\n\nadvancedAPI = AnkrAdvancedAPI(\"YOUR-TOKEN\")\n\nresult = advancedAPI.get_transaction(\n    request=GetTransactionsByHashRequest(\n        transactionHash='0x82c13aaac6f0b6471afb94a3a64ae89d45baa3608ad397621dbb0d847f51196f',\n        decodeTxData=True\n    )\n)\n\nprint(result)\n```\n\n#### `get_transactions_by_address` / `get_transactions_by_address_raw`\n\nQuery data about transactions of specified address.\n\n```python3\nfrom ankr import AnkrAdvancedAPI\nfrom ankr.types import Blockchain, GetTransactionsByAddressRequest\n\nadvancedAPI = AnkrAdvancedAPI(\"YOUR-TOKEN\")\n\nresult = advancedAPI.get_transactions_by_address(\n    request=GetTransactionsByAddressRequest(\n        blockchain=Blockchain.Bsc,\n        fromBlock=23593283,\n        toBlock=23593283,\n        address=[\n            \"0x97242e3315c7ece760dc7f83a7dd8af6659f8c4c\"\n        ],\n        descOrder=True,\n    )\n)\n\nfor transaction in result:\n    print(transaction)\n```\n\n#### `get_blockchain_stats` / `get_blockchain_stats_raw`\n\nReturns blockchain stats (num of txs, etc.).\n\n```python3\nfrom ankr import AnkrAdvancedAPI\nfrom ankr.types import Blockchain, GetBlockchainStatsRequest\n\nadvancedAPI = AnkrAdvancedAPI(\"YOUR-TOKEN\")\n\nresult = advancedAPI.get_blockchain_stats(\n    request=GetBlockchainStatsRequest(\n        blockchain=Blockchain.Bsc,\n    )\n)\n\nfor stat in result:\n    print(stat)\n```\n\n#### `get_interactions` / `get_interactions_raw`\n\nReturns on which chain address was interacting.\n\n```python3\nfrom ankr import AnkrAdvancedAPI\nfrom ankr.types import GetInteractionsRequest\n\nadvancedAPI = AnkrAdvancedAPI(\"YOUR-TOKEN\")\n\nresult = advancedAPI.get_interactions(\n    request=GetInteractionsRequest(\n        address='0xF977814e90dA44bFA03b6295A0616a897441aceC',\n    )\n)\n\nfor blockchain in result:\n    print(blockchain)\n```\n\n\n\n### About API keys\n\nAnkr is offering _free_ access to Advanced API, however you have to register on Ankr platform to access it.\n\nGet your individual API Key here https://www.ankr.com/rpc/advanced-api.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fankr-network%2Fankr-python-sdk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fankr-network%2Fankr-python-sdk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fankr-network%2Fankr-python-sdk/lists"}