logo of client website
  • Analytics
  • Trading
    Automated Trading Documentation
  • Pricing
  • Articles
  • Admin
    My Manager
  • Contact
  •  Security
     Sign In  Register  Forgotten Detail  Forget Me
Crypto Analysis
×

Share This Page

Facebook Twitter LinkedIn WhatsApp Telegram Email

Cryptocurrency Data and API Developer Guide - 07 July 2023

Welcome to Crypto Statto's Developer API Guide

Crypto Statto is an awesome platform that collects data from different cryptocurrency sources on a regular basis. Rather than focusing on point to point time series data (i.e. every single price), we pull regular snapshots of information. Our focus is more on taking information aggregating and summarising it to produce metrics to give a better picture on the crypto currency market.

This means you may need to check the accuracy and frequency of information being consumed but is infinitely better than going chart by chart, or currency by currency to get a feel for the market.

How our platform works

Behind Crypto Statto are a powerful set of services and technologies replicated for different data sources and report types. Our data engines run on a periodic basis calling data from external data sources such as APIs, pushing them to data reporting low before pulling it back to local data repository and finally pushing it to the web data platform whereby these new data items are detected and pulled into the website reporting architecture. We do this as agnostically as possible to focus more on the datasets and interpreting them for data visualisation.

We don't continually query databases but instead do regular pulls and pushes of information based upon events. The result is that we minimise database load which should main data processing is impacted less than conventional website reporting platforms. This is designed for scalability.

We have designed this architecture to run on very low cost hardware but to also allow for upscaling as the platform becomes more popular. The goal is to keep our fees low and focus more on managing requests.

Our expertise is in enriching data, adding metrics and presenting it at the right granularity for happy users.

Data gaps will occur on our platform for the not too distant future

We have only multiple data feeds at the moment on very low cost hardware and testing production of information. For this reason you may find that reports will be incomplete and developers should be mindful of this also.

The significance of Client Report Types for Data Visualisation

Dashboard or Data Visualisation commonly falls under the umbrella of Business Intelligence. The basic principle of Business Intelligence (BI) is that data is modelled into reportable datasets and presented to BI software for presenting to end users. In our opinion, the mistake most BI software makes is to focus on building user tailored specific dashboards. Instead, we think that in many situations, having access to multiple datasets matching the same data content in a summarised form is quicker to develop and gives users more than enough information to draw insights from.

For this reason, we build many of our datasets to have the same field/column structure, add a few metadata columns where displays interpret the data and output this information more generically.

Some general principles on our API

Preserving the integrity of our API

We don't imagine thousands of developers writing code for algorithmic trading against our platform. We do expect traders to use our platform for signal and trend based information not available on existing trading platforms in future.

  • We recommend investigating the endpoints with a tool such as postman or fiddler and downloading these json data items to work with these locally within your chosen JavaScript client code. This is a good idea because if you have data available it is better to save it and work with it offline where you can be sure that this data won't disappear or get updated.

Please only poll our API every 10 minutes or more

  • Most datasets we consume are pushed to our platform every 10 minutes to one hour. We do collect data at more granular levels but these only get revealed within the platform every 10 to 15 minutes will stop

Throttle user refreshes where possible

  • We are focusing on building applications that use the API metadata and contextual information to build interactive user interfaces that provides lots of information on screen without overburdening our website data platform
  • Consider disabling buttons whilst loading is occurring
  • Feel free to suggest improvements to reduce over requesting on our platform

Secure API Requests

We can optionally lock down our endpoints. Indeed - many of them are. We also tie charging to this, and monetisation. You can read more about making secure requests in this helpful short guide - Using our Secure API Key Endpoints for Billable Content

How we have worked with our cryptocurrency API endpoints

Here is a brief overview on how we have ended up using it to create example reports.

The reports produced from our reporting layer are matched to a report type if the fields match. We recognise that many data sets have common fields, we prefer to focus on metadata to help bring visualisations alive. We create more generic datasets with metadata within them to help give the user information about what that data is. This has allowed us to build rich interactive screens whereby users can choose from a type of report and see lots of information on page.

Some of these client report types may change but are likely to be minor, we will add more. Please do contact us if you are concerned that we may remove report types. A clue, we are unlikely to remove client report types when we have already built reports on them.

Alternatively you may wish to build on interactive dashboard purely on one report type or multiple report types.

Report VMs and options

You will notice that we produce what is known as a report VM. Not only does a Report VM contain metadata but also the unique values per column within the data set. These can be used to pass back to the application to filter data. Despite us providing this information and the mechanism to undertake filtering, we don't recommend this approach and indeed think it could be overused. Instead we suggest pulling down the data and providing filtering within the client. We keep these datasets low in size and already know that users prefer to interact with the data in an immersive experience as opposed to continually querying and filtering.

Key REST API endpoints

These are the main endpoints whereby you can discover the types of reports and the data returned. Start with the end point, use the results, and pass those back to the end point with some possible restructuring the json data. This makes our endpoints restful, and useful.

Get a list of Entities

Note how we return a Display version and a named version. You may wish to tidy up your front-end code/calls

Get Call

Get entities and their display names. To be used in subsequent calls.

https://www.cryptostatto.com/api/EntityReport

Sample data returned

[{"entityDisplayName":"Assets","entityName":"Assets"},{"entityDisplayName":"Coin Category","entityName":"Coin-Category"},{"entityDisplayName":"CoinCategoryMovementMetrics","entityName":"Coin-Category-Movement-Metrics"},{"entityDisplayName":"CryptoCurrencyMovementsMonthly","entityName":"Crypto-Currency-Movements-Monthly"},{"entityDisplayName":"DataTimelinessData","entityName":"Data-Timeliness-Data"},{"entityDisplayName":"ExchangeRateMoves","entityName":"Exchange-Rate-Moves"},{"entityDisplayName":"FXExample","entityName":"F-X-Example"}]

Call Get

Entity and its report View Models (ReportVMs).

We pass the correct Entity Name (not display name to the same end point as follows). We get back metadata about that report with a unique list of values per field.

Get Call

https://www.cryptostatto.com/api/EntityReport/Assets

Sample data returned

{"entityName":"Assets","reportVMs":[{"entityReportKey":"02781c93-347d-4a99-a56f-d90c4ee844f6","reportName":"Asset MetricsAsset Metrics MarketCapUsd","reportType":4,"reportOptions":[{"isDefault":false,"option":{"fieldName":"ReportingType","values":["MarketCapUsd"]}},{"isDefault":false,"option":{"fieldName":"YAxisCategory","values":["Asset"]}},{"isDefault":false,"option":{"fieldName":"YAxisKey","values":["1INCH","AAVE","ADA","AGIX","ALGO","ATOM","AVAX","AXS","BAL","BAT","BCH","BNB","BSV","BTC","BTCB","BUSD","CAKE","CFX","CHZ","COMP","CRO","CRV","CSPR","CVX","DAI","DASH","DOGE","DOT","DYDX","EGLD","ENJ","EOS","ETC","ETH","FEI","FIL","FLOW","FTM","FTT","FXS","GRT","GT","HBAR","HOT","HT","ICP","INJ","KAVA","KCS","KLAY","LDO","LEO","LINK","LRC","LTC","LUSD","MANA","MASK","MATIC","MINA","MIOTA","MKR","NEAR","NEO","NEXO","QNT","QTUM","RNDR","ROSE","RPL","RUNE","RVN","SAND","SHIB","SNX","SOL","STX","TFUEL","THETA","TRX","TUSD","TWT","UNI","USDC","USDP","USDT","VET","WBTC","WOO","XDC","XEC","XEM","XLM","XMR","XRP","XTZ","ZEC","ZIL"]}},{"isDefault":false,"option":{"fieldName":"YAxisName","values":["1inch Network","Aave","Cardano","SingularityNET","Algorand","Cosmos","Avalanche","Axie Infinity","Balancer","Basic Attention Token","Bitcoin Cash","BNB","Bitcoin SV","Bitcoin","Bitcoin BEP2","Binance USD","PancakeSwap","Conflux","Chiliz","Compound","Crypto.com Coin","Curve DAO Token","Casper","Convex Finance","Multi Collateral DAI","Dash","Dogecoin","Polkadot","dYdX","MultiversX","Enjin Coin","EOS","Ethereum Classic","Ethereum","Fei Protocol","Filecoin","Flow","Fantom","FTX Token","Frax Share","The Graph","GateToken","Hedera Hashgraph","Holo","Huobi Token","Internet Computer","Injective","Kava","KuCoin Token","Klaytn","Lido DAO","UNUS SED LEO","Chainlink","Loopring","Litecoin","Liquity USD","Decentraland","Mask Network","Polygon","Mina","IOTA","Maker","NEAR Protocol","Neo","Nexo","Quant","Qtum","Render Token","Oasis Network","Rocket Pool","THORChain","Ravencoin","The Sandbox","Shiba Inu","Synthetix","Solana","Stacks","Theta Fuel","THETA","TRON","TrueUSD","Trust Wallet Token","Uniswap","USD Coin","Pax Dollar","Tether","VeChain","Wrapped Bitcoin","WOO Network","XinFin Network","eCash","Stellar","Monero","XRP","Tezos","Zcash","Zilliqa"]}}]}]}

Post Call

Construct a request for running a report and retrieving data.

https://www.cryptostatto.com/api/EntityReport

Note, the ReportRequestOptions can be null or match the expected type.

The result returned is the json report result. Note - the result is dynamic in that a json data object is returned.

Call example, no parameters, how we tend to call this most of the time

{

"ReportKey": "10c5c140-0a1a-49e1-86ef-a662f6cb3f38"

,

"ReportRequestOptions" : null

, "EntityName" : "Assets"

}

Post example

With report request options


{

"ReportKey": "10c5c140-0a1a-49e1-86ef-a662f6cb3f38"

,

"ReportRequestOptions" : [{"parameterName" : "someFieldName", "selectedValues" : [{"key" : "someKey",  "description" : "someDescription"},{"key" : "someOtherKey",  "description" : "someOtherDescription"}]}]

, "EntityName" : "Assets"

}

Sample data returned

Can be anything. This is why we have client report types.


[{"StartTimeSliceKey":1,"TimeSliceKey":600,"Hour":0,"Minute":10,"Second":0},{"StartTimeSliceKey":601,"TimeSliceKey":1200,"Hour":0,"Minute":20,"Second":0},{"StartTimeSliceKey":1201,"TimeSliceKey":1800,"Hour":0,"Minute":30,"Second":0},{"StartTimeSliceKey":1801,"TimeSliceKey":2400,"Hour":0,"Minute":40,"Second":0},{"StartTimeSliceKey":2401,"TimeSliceKey":3000,"Hour":0,"Minute":50,"Second":0},{"StartTimeSliceKey":3001,"TimeSliceKey":3600,"Hour":1,"Minute":0,"Second":0},{"StartTimeSliceKey":3601,"TimeSliceKey":4200,"Hour":1,"Minute":10,"Second":0},{"StartTimeSliceKey":4201,"TimeSliceKey":4800,"Hour":1,"Minute":20,"Second":0},{"StartTimeSliceKey":4801,"TimeSliceKey":5400,"Hour":1,"Minute":30,"Second":0},{"StartTimeSliceKey":5401,"TimeSliceKey":6000,"Hour":1,"Minute":40,"Second":0},{"StartTimeSliceKey":6001,"TimeSliceKey":6600,"Hour":1,"Minute":50,"Second":0},{"StartTimeSliceKey":6601,"TimeSliceKey":7200,"Hour":2,"Minute":0,"Second":0},{"StartTimeSliceKey":7201,"TimeSliceKey":7800,"Hour":2,"Minute":10,"Second":0},{"StartTimeSliceKey":7801,"TimeSliceKey":8400,"Hour":2,"Minute":20,"Second":0},{"StartTimeSliceKey":8401,"TimeSliceKey":9000,"Hour":2,"Minute":30,"Second":0},{"StartTimeSliceKey":9001,"TimeSliceKey":9600,"Hour":2,"Minute":40,"Second":0},{"StartTimeSliceKey":9601,"TimeSliceKey":10200,"Hour":2,"Minute":50,"Second":0},{"StartTimeSliceKey":10201,"TimeSliceKey":10800,"Hour":3,"Minute":0,"Second":0},{"StartTimeSliceKey":10801,"TimeSliceKey":11400,"Hour":3,"Minute":10,"Second":0},{"StartTimeSliceKey":11401,"TimeSliceKey":12000,"Hour":3,"Minute":20,"Second":0},{"StartTimeSliceKey":12001,"TimeSliceKey":12600,"Hour":3,"Minute":30,"Second":0},{"StartTimeSliceKey":12601,"TimeSliceKey":13200,"Hour":3,"Minute":40,"Second":0},{"StartTimeSliceKey":13201,"TimeSliceKey":13800,"Hour":3,"Minute":50,"Second":0},{"StartTimeSliceKey":13801,"TimeSliceKey":14400,"Hour":4,"Minute":0,"Second":0},{"StartTimeSliceKey":14401,"TimeSliceKey":15000,"Hour":4,"Minute":10,"Second":0},{"StartTimeSliceKey":15001,"TimeSliceKey":15600,"Hour":4,"Minute":20,"Second":0},{"StartTimeSliceKey":15601,"TimeSliceKey":16200,"Hour":4,"Minute":30,"Second":0},{"StartTimeSliceKey":16201,"TimeSliceKey":16800,"Hour":4,"Minute":40,"Second":0},{"StartTimeSliceKey":16801,"TimeSliceKey":17400,"Hour":4,"Minute":50,"Second":0}]

Report View Models by Client Report Type

To avoid having to loop through each entity, retrieve their view models and filter by type - we added a method to pass in the client report type. This call will be less expensive than the iterative approach.

https://www.cryptostatto.com/api/EntityReport/AllEntities/someClientReportType

Get Entity Client Report Types

Get example

No parameters, how we tend to call this most of the time

https://www.cryptostatto.com/api/EntityClientReportType

Returns a list of currently configured Client Report Types. It does not mean there are current live reports matching this and you should handle the absence of data in your application. If we have created an entity client report type it is probable this won't alter much. However, please contact us if you have any questions about this.

Sample data returned

[

{

"expectedFields": [

"Component",

"DateValue",

"WeekdayName",

"Down",

"Same",

"Up",

"LowRanking",

"MidRanking",

"HighRanking",

"NetPercentage",

"Points",

"Ranking",

"HexColorCode",

"Start",

"End"

],

"completeFieldsIntersect": true,

"reportType": "Component Aggregate Ranking Report"

},

{

"expectedFields": [

"Component",

"MeasureName",

"ItemCode",

"ItemName",

"Period",

"PeriodValue",

"Value",

"MeasureType",

"IsScaled"

],

"completeFieldsIntersect": true,

"reportType": "Periodic Value Pivotable Data"

},

{

"expectedFields": [

"ReportingType",

"YAxisCategory",

"YAxisKey",

"YAxisName",

"MinValue",

"MaxValue",

"ValueRange",

"AverageValue",

"WeekdayName",

"Date",

"Hour"

],

"completeFieldsIntersect": true,

"reportType": "Chartable Hourly Report"

},

{

"expectedFields": [

"Date",

"DateValue",

"PrevDateValue",

"MinutesDifference",

"Hour",

"StartMinute",

"EndMinute"

],

"completeFieldsIntersect": true,

"reportType": "Data Timeliness Report"

},

{

"expectedFields": [

"LowestRanking",

"HighestRanking",

"CurrentRanking",

"Component",

"ItemCode",

"ItemName",

"ParentPeriod",

"ParentName",

"ChildPeriod",

"ChildPeriodName"

],

"completeFieldsIntersect": true,

"reportType": "Ranking Period Breakdown"

}

]

Post call

Returns multiple datasets for a client by report type

https://www.cryptostatto.com/api/EntityClientReportType

It will return all reports for an entity matching this specific Report Type.

Please note, entity names needs to match precisely.

json parameter example


{"EntityName" : "Assets",

"ReportTypes" : ["Chartable Hourly Report"]}

Sample data returned

Please note, we return a collection of datasets that all conform to the specific Report Type/Client Report Type. We won't detail an example.

Simple Reports on our API

We are moving away from using Entity Reports And View Models to just Simple Reports. Don't panic - you will only need a couple of small lines of code to use the new version. The reason for using Simple Reports this is because this site does not use filtering on the data and it is more resource intensive. This will be the new way that most reports are accessible on the platform in the future.

You will see entity reports with the same name as simple reports, as we use this as a hook for our Report Type Dashboard tool. Remember, when querying the endpoint it will be secured so don't forget to attach the APIKey in your request header.

Simple Get Request

http://www.cryptostatto.com/api/simplereport

Result

[

{

"entityDisplayName": "Another",

"entityName": "Another"

},

{

"entityDisplayName": "AssetMetricsHourlyChangeComparedLastToValue",

"entityName": "Asset-Metrics-Hourly-Change-Compared-Last-To-Value"

},

{

"entityDisplayName": "AssetPercentageChangeRangePeriod",

"entityName": "Asset-Percentage-Change-Range-Period"

},

{

"entityDisplayName": "BigWhaleAnalysis",

"entityName": "Big-Whale-Analysis"

},

{

"entityDisplayName": "Cars",

"entityName": "Cars"

},

{

"entityDisplayName": "ExchangeRateMoves",

"entityName": "Exchange-Rate-Moves"

},

{

"entityDisplayName": "HelloData",

"entityName": "Hello-Data"

},

{

"entityDisplayName": "PeriodicStatsAndValueComparison",

"entityName": "Periodic-Stats-And-Value-Comparison"

},

{

"entityDisplayName": "PeriodValueIntraAndChildParentMetrics",

"entityName": "Period-Value-Intra-And-Child-Parent-Metrics"

}

]

Retrieving Entity Report Data with a Post request

This requires a Json parameter. Remember to include the request header.

The result

A collection of keyed Json strings are returned. You would need to deserialise this to a Json object using Json.Parse. Almost always, these are Json collections.

http://www.cryptostatto.com/api/simplereport

JSON Body to pass to the API enpoint

{

"EntityName" : "Periodic-Stats-And-Value-Comparison"

}

Sample Subset of data returned belowYour data will be returned as below

[

{\"FieldKey\":\"4DFAA8D7-3020-44FC-B151-7631EF81D8E5\",\"Value\":0.0},{\"DimensionId\":45,\"FieldKey\":\"C62882F8-2279-499B-A1D5-E90497F56403\",\"Value\":0.46279},{\"DimensionId\":45,\"FieldKey\":\"ED606021-4E96-4054-8DCC-2D850B192B87\",\"Value\":0.46279},{\"DimensionId\":45,\"FieldKey\":\"62C3E089-8F21-4D12-AE62-ADB230996BA3\",\"Value\":-0.54536},{\"DimensionId\":45,\"FieldKey\":\"4DFAA8D7-3020-44FC-B151-7631EF81D8E5\",\"Value\":-0.54536},{\"DimensionId\":47,\"FieldKey\":\"C62882F8-2279-499B-A1D5-E90497F56403\",\"Value\":0.48229},{\"DimensionId\":47,\"FieldKey\":\"ED606021-4E96-4054-8DCC-2D850B192B87\",\"Value\":1.0722},{\"DimensionId\":47,\"FieldKey\":\"62C3E089-8F21-4D12-AE62-ADB230996BA3\",\"Value\":0.17045},{\"DimensionId\":47,\"FieldKey\":\"4DFAA8D7-3020-44FC-B151-7631EF81D8E5\",\"Value\":0.0},{\"DimensionId\":48,\"FieldKey\":\"C62882F8-2279-499B-A1D5-E90497F56403\",\"Value\":0.61406},{\"DimensionId\":48,\"FieldKey\":\"ED606021-4E96-4054-8DCC-2D850B192B87\",\"Value\":0.61406},{\"DimensionId\":48,\"FieldKey\":\"62C3E089-8F21-4D12-AE62-ADB230996BA3\",\"Value\":-0.28359},{\"DimensionId\":48,\"FieldKey\":\"4DFAA8D7-3020-44FC-B151-7631EF81D8E5\",\"Value\":-0.28359},{\"DimensionId\":50,\"FieldKey\":\"C62882F8-2279-499B-A1D5-E90497F56403\",\"Value\":1.02163},{\"DimensionId\":50,\"FieldKey\":\"ED606021-4E96-4054-8DCC-2D850B192B87\",\"Value\":2.19608},{\"DimensionId\":50,\"FieldKey\":\"62C3E089-8F21-4D12-AE62-ADB230996BA3\",\"Value\":0.30353},{\"DimensionId\":50,\"FieldKey\":\"4DFAA8D7-3020-44FC-B151-7631EF81D8E5\",\"Value\":0.0},{\"DimensionId\":51,\"FieldKey\":\"C62882F8-2279-499B-A1D5-E90497F56403\",\"Value\":1.34952},{\"DimensionId\":51,\"FieldKey\":\"ED606021-4E96-4054-8DCC-2D850B192B87\",\"Value\":1.34952},{\"DimensionId\":51,\"FieldKey\":\"62C3E089-8F21-4D12-AE62-ADB230996BA3\",\"Value\":-0.52734},{\"DimensionId\":51,\"FieldKey\":\"4DFAA8D7-3020-44FC-B151-7631EF81D8E5\",\"Value\":-0.52842},{\"DimensionId\":53,\"FieldKey\":\"C62882F8-2279-499B-A1D5-E90497F56403\",\"Value\":0.91335},{\"DimensionId\":53,\"FieldKey\":\"ED606021-4E96-4054-8DCC-2D850B192B87\",\"Value\":1.2408},{\"DimensionId\":53,\"FieldKey\":\"62C3E089-8F21-4D12-AE62-ADB230996BA3\",\"Value\":0.21667},{\"DimensionId\":53,\"FieldKey\":\"4DFAA8D7-3020-44FC-B151-7631EF81D8E5\",\"Value\":0.0},{\"DimensionId\":54,\"FieldKey\":\"C62882F8-2279-499B-A1D5-E90497F56403\",\"Value\":1.058},{\"DimensionId\":54,\"FieldKey\":\"ED606021-4E96-4054-8DCC-2D850B192B87\",\"Value\":1.058},{\"DimensionId\":54,\"FieldKey\":\"62C3E089-8F21-4D12-AE62-ADB230996BA3\",\"Value\":0.03572},{\"DimensionId\":54,\"FieldKey\":\"4DFAA8D7-3020-44FC-B151-7631EF81D8E5\",\"Value\":0.00018},{\"DimensionId\":56,\"FieldKey\":\"C62882F8-2279-499B-A1D5-E90497F56403\",\"Value\":1.36048},{\"DimensionId\":56,\"FieldKey\":\"ED606021-4E96-4054-8DCC-2D850B192B87\",\"Value\":2.29859},{\"DimensionId\":56,\"FieldKey\":\"62C3E089-8F21-4D12-AE62-ADB230996BA3\",\"Value\":0.65045},{\"DimensionId\":56,\"FieldKey\":\"4DFAA8D7-3020-44FC-B151-7631EF81D8E5\",\"Value\":0.0},{\"DimensionId\":57,\"FieldKey\":\"C62882F8-2279-499B-A1D5-E90497F56403\",\"Value\":0.89473},{\"DimensionId\":57,\"FieldKey\":\"ED606021-4E96-4054-8DCC-2D850B192B87\",\"Value\":0.89473},{\"DimensionId\":57,\"FieldKey\":\"62C3E089-8F21-4D12-AE62-ADB230996BA3\",\"Value\":-0.73078},{\"DimensionId\":57,\"FieldKey\":\"4DFAA8D7-3020-44FC-B151-7631EF81D8E5\",\"Value\":-0.75196},{\"DimensionId\":59,\"FieldKey\":\"C62882F8-2279-499B-A1D5-E90497F56403\",\"Value\":0.65631},{\"DimensionId\":59,\"FieldKey\":\"ED606021-4E96-4054-8DCC-2D850B192B87\",\"Value\":0.66553},{\"DimensionId\":59,\"FieldKey\":\"62C3E089-8F21-4D12-AE62-ADB230996BA3\",\"Value\":0.00041},{\"DimensionId\":59,\"FieldKey\":\"4DFAA8D7-3020-44FC-B151-7631EF81D8E5\",\"Value\":0.0},{\"DimensionId\":60,\"FieldKey\":\"C62882F8-2279-499B-A1D5-E90497F56403\",\"Value\":0.25763},{\"DimensionId\":60,\"FieldKey\":\"ED606021-4E96-4054-8DCC-2D850B192B87\",\"Value\":0.25763},{\"DimensionId\":60,\"FieldKey\":\"62C3E089-8F21-4D12-AE62-ADB230996BA3\",\"Value\":-0.4048},{\"DimensionId\":60,\"FieldKey\":\"4DFAA8D7-3020-44FC-B151-7631EF81D8E5\",\"Value\":-0.64643},{\"DimensionId\":62,\"FieldKey\":\"C62882F8-2279-499B-A1D5-E90497F56403\",\"Value\":0.48229},{\"DimensionId\":62,\"FieldKey\":\"ED606021-4E96-4054-8DCC-2D850B192B87\",\"Value\":1.0722},{\"DimensionId\":62,\"FieldKey\":\"62C3E089-8F21-4D12-AE62-ADB230996BA3\",\"Value\":0.17045},{\"DimensionId\":62,\"FieldKey\":\"4DFAA8D7-3020-44FC-B151-7631EF81D8E5\",\"Value\":0.0},{\"DimensionId\":63,\"FieldKey\":\"C62882F8-2279-499B-A1D5-E90497F56403\",\"Value\":0.61406},{\"DimensionId\":63,\"FieldKey\":\"ED606021-4E96-4054-8DCC-2D850B192B87\",\"Value\":0.61406},{\"DimensionId\":63,\"FieldKey\":\"62C3E089-8F21-4D12-AE62-ADB230996BA3\",\"Value\":-0.28359},{\"DimensionId\":63,\"FieldKey\":\"4DFAA8D7-3020-44FC-B151-7631EF81D8E5\",\"Value\":-0.28359},{\"DimensionId\":65,\"FieldKey\":\"C62882F8-2279-499B-A1D5-E90497F56403\",\"Value\":0.48229},{\"DimensionId\":65,\"FieldKey\":\"ED606021-4E96-4054-8DCC-2D850B192B87\",\"Value\":1.0722},{\"DimensionId\":65,\"FieldKey\":\"62C3E089-8F21-4D12-AE62-ADB230996BA3\",\"Value\":0.17045},{\"DimensionId\":65,\"FieldKey\":\"4DFAA8D7-3020-44FC-B151-7631EF81D8E5\",\"Value\":0.0},{\"DimensionId\":66,\"FieldKey\":\"C62882F8-2279-499B-A1D5-E90497F56403\",\"Value\":0.61406},{\"DimensionId\":66,\"FieldKey\":\"ED606021-4E96-4054-8DCC-2D850B192B87\",\"Value\":0.61406},{\"DimensionId\":66,\"FieldKey\":\"62C3E089-8F21-4D12-AE62-ADB230996BA3\",\"Value\":-0.28359},{\"DimensionId\":66,\"FieldKey\":\"4DFAA8D7-3020-44FC-B151-7631EF81D8E5\",\"Value\":-0.28359}]"},{"filename":"Reporting Set.json","reportKey":"75b85ccc-248f-4ddf-8e1b-f74a24a81944","hash":"7f842c5d29865770f54efee9446dc20a","dateAdded":"2024-12-12T11:59:32.6293421+00:00","isCurrent":true,"reportData":"[{\"SetKey\":\"1DD02B71-AFC2-4D97-B62A-87DDDA9D60F2\",\"SetName\":\"Ranked Asset Percentage Gains in USD\",\"ReportingSource\":\"PeriodValueIntraAndChildParentMetrics\"},{\"SetKey\":\"CFD1CE40-5AC9-42D8-A51A-A6D4938EFF3F\",\"SetName\":\"Child vs Parent Gain Direction from Percentage Gains in USD\",\"ReportingSource\":\"PeriodValueIntraAndChildParentMetrics\"},{\"SetKey\":\"412A6958-89D1-4236-983E-D302EA8927FA\",\"SetName\":\"Same Period Gains Comparisons in USD\",\"ReportingSource\":\"PeriodValueIntraAndChildParentMetrics\"}]"}]

]

Immediate API Access

The Immediate API was devised to overcome a common issue found when accessing external APIs in remote website apps - API rate limits. The issue is a simple one. If our website domain hosts a JavaScript client app and we have 100 users trying to access an eternal API, that API will assume our website is spamming their API and block access. We therefore created middleware to make the request in-between our API users and our website and make that data available. This provides an additional benefit in that we can have more frequent data on our site as it avoids our data layer.

A note on the Immediate API. This has been tested, is covered with Integration Tests and works well, but we have not activated this feature yet. When we do, we will providing a list of endpoints, how often they are updated. We have not made this information available within our website yet. When we do, you will see a list of Report Keys in our documentation.

Simple Post Request

{"ReportKey" : "8f3ce634-d756-4a2a-9c6d-ccdaa4da0465"}

Server Content Viewer and the API calls

One function of the cryptocurrency platform is to publish data to a storage area and make it available for download via web calls. This makes sense when we have older data, or large data volumes not typically suited to an API. Content could be zipped, archived, as pdfs, documents, or different media types.

We offer the capability to group information by dates and windows of a day, i.e. every 15 minutes. Whilst it does not mean that window specifically matches it does mean we can be confident where data exists but it is a guide.

We put together a simple data screener here to show how this works - Cryptocurrency Data Screener (cryptostatto.com)

Over time, we see most larger datasets being returned via the server content viewer and additional endpoints.

Get a list of Entities

Note how we return a Display version and a named version. You may wish to tidy up your front-end code/calls

Get Call

View Data Content Contexts. To be used in subsequent calls. Note how some folders are broken into date hierarchies.

https://www.cryptostatto.com/api/DataContent/

Sample data returned

[

{

"context": "Archived Prices",

"dayDates": [

"2023-04-18T00:00:00",

"2023-04-19T00:00:00",

"2023-04-20T00:00:00",

"2023-04-24T00:00:00",

"2023-04-25T00:00:00"

],

"dates": [

"2023-04-18T09:15:00",

"2023-04-19T09:45:00",

"2023-04-20T13:00:00",

"2023-04-24T23:00:00",

"2023-04-25T15:30:00",

"2023-04-25T16:15:00",

"2023-04-25T17:15:00",

"2023-04-25T09:45:00"

],

"accessibleFolderParts": [

"CryptoData",

"Prices",

"Archive",

"2023_4_18_9_15_0",

"2023_4_19_9_45_0",

"2023_4_20_13_0_0",

"2023_4_24_23_0_0",

"2023_4_25_15_30_0",

"2023_4_25_16_15_0",

"2023_4_25_17_15_0",

"2023_4_25_9_45_0",

"hello.zip",

"later"

]

}

]

Get Call

Get Context relevant Client Context Search Options. To be used in subsequent calls.

https://www.cryptostatto.com/api/DataContent/Archived%20Prices

Sample data returned

Note, the same data is returned as the first call but specific to the context without being a collection. In some respects you may not need to use this call, but may find it useful to avoid breaking apart the collection from the first call.


{

"context": "Archived Prices",

"dayDates": [

"2023-04-18T00:00:00",

"2023-04-19T00:00:00",

"2023-04-20T00:00:00",

"2023-04-24T00:00:00",

"2023-04-25T00:00:00"

],

"dates": [

"2023-04-18T09:15:00",

"2023-04-19T09:45:00",

"2023-04-20T13:00:00",

"2023-04-24T23:00:00",

"2023-04-25T15:30:00",

"2023-04-25T16:15:00",

"2023-04-25T17:15:00",

"2023-04-25T09:45:00"

],

"accessibleFolderParts": [

"CryptoData",

"Prices",

"Archive",

"2023_4_18_9_15_0",

"2023_4_19_9_45_0",

"2023_4_20_13_0_0",

"2023_4_24_23_0_0",

"2023_4_25_15_30_0",

"2023_4_25_16_15_0",

"2023_4_25_17_15_0",

"2023_4_25_9_45_0",

"hello.zip",

"later"

]

}

Post call

Returns multiple datasets for a client by report type

https://www.cryptostatto.com/api/EntityClientReportType

It will return all reports for an entity matching this specific Report Type.

Please note, entity names needs to match precisely.

json parameter example 1

{"Context":"Archived Prices","dateFilter":{"0":[2023],"3":[2,4]},"SearchParts":[]}


#### json parameter example 2

{"Context":"Archived Prices","dateFilter":{"0":[2023],"3":[2,4]},"SearchParts":["2023_4_25_17_15_0","2023_4_25_9_45_0"]}

Sample data returned

[{"context":"Archived Prices","accessibleFolderParts":["CryptoData","Prices","Archive","2023_4_25_17_15_0"],"resources":[{"fileName":"DataSet_20230425_170038.zip","url":"/CryptoData/Prices/Archive/2023_4_25_17_15_0/DataSet_20230425_170038.zip"},{"fileName":"DataSet_20230425_171539.zip","url":"/CryptoData/Prices/Archive/2023_4_25_17_15_0/DataSet_20230425_171539.zip"}],"child":1,"level":1,"ordinal":8,"serverEndPoint":"/CryptoData/Prices/Archive/2023_4_25_17_15_0","splitPeriodDates":[{"period":0,"part":2023,"originalDate":"2023-04-25T17:15:00"},{"period":1,"part":4,"originalDate":"2023-04-25T17:15:00"},{"period":2,"part":17,"originalDate":"2023-04-25T17:15:00"},{"period":3,"part":2,"originalDate":"2023-04-25T17:15:00"},{"period":4,"part":25,"originalDate":"2023-04-25T17:15:00"},{"period":5,"part":17,"originalDate":"2023-04-25T17:15:00"},{"period":6,"part":15,"originalDate":"2023-04-25T17:15:00"},{"period":7,"part":0,"originalDate":"2023-04-25T17:15:00"}],"resourceDate":"2023-04-25T17:15:00"},{"context":"Archived Prices","accessibleFolderParts":["CryptoData","Prices","Archive","2023_4_25_9_45_0"],"resources":[{"fileName":"DataSet_20230424_230119.zip","url":"/CryptoData/Prices/Archive/2023_4_25_9_45_0/DataSet_20230424_230119.zip"},{"fileName":"DataSet_20230424_231620.zip","url":"/CryptoData/Prices/Archive/2023_4_25_9_45_0/DataSet_20230424_231620.zip"}],"child":1,"level":1,"ordinal":8,"serverEndPoint":"/CryptoData/Prices/Archive/2023_4_25_9_45_0","splitPeriodDates":[{"period":0,"part":2023,"originalDate":"2023-04-25T09:45:00"},{"period":1,"part":4,"originalDate":"2023-04-25T09:45:00"},{"period":2,"part":17,"originalDate":"2023-04-25T09:45:00"},{"period":3,"part":2,"originalDate":"2023-04-25T09:45:00"},{"period":4,"part":25,"originalDate":"2023-04-25T09:45:00"},{"period":5,"part":9,"originalDate":"2023-04-25T09:45:00"},{"period":6,"part":45,"originalDate":"2023-04-25T09:45:00"},{"period":7,"part":0,"originalDate":"2023-04-25T09:45:00"}],"resourceDate":"2023-04-25T09:45:00"}]

Please note, we return a collection of datasets that all conform to the specific Report Type/Client Report Type. We won't detail an example.

Developing apps for hosting within our website

Having got to grips with our API, how do we build apps and host them on our website?

It is fairly simple to be honest. We already had plugin capability within our website and found we could develop rich applications to present data.

How we develop React Apps at the moment

We build our applications within Visual Studio Code. We point our development environment to a local proxy of the live website using hosts lookup with IIS. The key observation is that we have to change the paths of some reference paths to include the apps folder. We can omit certain paths too with regards to jQuery and bootstrap when publishing live.

The one thing that can catch you out is that the manifest related files has a uniquely generated key every time the application is built.

Once we have completed our apps, we drop them on our apps folder and configure our website to present these in an appropriate view.

In terms of layout within our website, we use Bootstap 4 now and for the foreseeable future. We recommend looking at existing apps. The key consideration is to ensure you don't nest your rows and cols too much to avoid squashing.

A development indexl.html file


<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="utf-8" />

<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />

<meta name="viewport" content="width=device-width, initial-scale=1" />

<meta name="theme-color" content="#000000" />

<meta

name="description"

content="Web site created using create-react-app"

/>

<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />

<!--

manifest.json provides metadata used when your web app is installed on a

user's mobile device or desktop. See [https://developers.google.com/web/fundamentals/web-app-manifest/](https://developers.google.com/web/fundamentals/web-app-manifest/)

-->

<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />

<link rel="stylesheet" href="bootstrap.min.css" />

<link rel="stylesheet" href="chart.css" />

<script src="jquery-3.4.1.slim.min.js"></script>

<script src="popper.min.js"></script>

<script src="bootstrap.min.js"></script>

<link

href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined"

rel="stylesheet"

/>

<link rel="stylesheet" href="simpleSpinner.css" />

<!--

Notice the use of %PUBLIC_URL% in the tags above.

It will be replaced with the URL of the `public` folder during the build.

Only files inside the `public` folder can be referenced from the HTML.

Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will

work correctly both with client-side routing and a non-root public URL.

Learn how to configure a non-root public URL by running `npm run build`.

-->

<title>React App</title>

</head>

<body>

<noscript>You need to enable JavaScript to run this app.</noscript>

<div id="root"></div>

<!--

This HTML file is a template.

If you open it directly in the browser, you will see an empty page.

You can add webfonts, meta tags, or analytics to this file.

The build step will place the bundled scripts into the <body> tag.

To begin the development, run `npm start` or `yarn start`.

To create a production bundle, use `npm run build` or `yarn build`.

-->

</body>

</html>

A live index.html file


<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="/logo192.png"/><link rel="manifest" href="/apps/ServerContent/manifest.json"/><script src="/apps/ServerContent/jquery-3.4.1.slim.min.js"></script><script src="/apps/ServerContent/popper.min.js"></script><script src="/apps/ServerContent/bootstrap.min.js"></script><link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined" rel="stylesheet"/><title>React App</title><script defer="defer" src="/apps/ServerContent/static/js/main.b83802aa.js"></script><link href="/apps/ServerContent/static/css/main.da2c0a83.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>

Simple Call to Action and Call to actions

Please note - you do not have to supply the json. Certainly in the short term, basic content is sufficient.

Simple Call to Action examples


[{

"Slug": "support-our-platform",

"Name": "support-our-platform-donate",

"After": false,

"IsCollapsible": false,

"Header": "Improve your platform - Crypto Statto",

"Paragraphs": [ "Consume a product or service or donate from a choice of a few QR Codes. Donate a few pounds or dollar equivalent."

,"If you enjoy our platform but don't want to register or pay, feel free to add a small contribution."

, "We appreciate it!"],

"ImageSrc": "/uploads/b0cf78c4-3e88-4557-a696-9a5a06743cf1-BuildingPEopleWalkingOutside.jpg",

"Link": null,

"CallsToAction": [  "ref-bitcoin-donation" , "ref-litecoin-donation", "ref-algorand-donation","ref-ethereum-classic-donation", "ref-pirate-chain-donation"]

}

,  {

"Slug": "support-our-platform",

"Name": "support-our-platform-affiliates",

"After": false,

"IsCollapsible": false,

"Header": "Affiliations",

"Paragraphs": [ "Please help our platform grow by considering visting referrals we have signed up on."

,"Always do your own research before using any potential service provider or product supplier." ],

"ImageSrc": "/uploads/b9c93c86-9ac0-4698-84f9-4379224df028-cryptocurrency symbols on the balloons.png",

"Link": null,

"CallsToAction": [  "ref-coinledger" ,  "ref-haas", "ref-swapzone", "ref-ledger-hardware","ref-trading-view"]

}

]

Calls to Action examples


[ {

"CallToActionName": "analytics-completeness",

"Title": "Platform Completeness",

"RawContent": "",

"Description": "",

"Icon": "fa fa-battery-2 fa-4x",

"Image": "",

"ExtraCSSHelper": "",

"ComponentToInclude": "",

"listItems": [

{

"icon": "fa-li fa fa-bug",

"Content": "Our platform is still in beta-mode"

}

,

{

"icon": "fa-li fa fa-binoculars",

"Content": "We focus on transparency and honesty on our platform"

}

,

{

"icon": "fa-li fa fa-plus-square",

"Content": "We will keep adding new datasets and reports"

}

,{

"icon": "fa-li fa fa-rocket",

"Content": "This platform will get better, and better, and better"

}

]

,"callToActionLinks": null

}

,

{

"CallToActionName": "IRContactList",

"Title": "Key ways to contact us",

"RawContent": "",

"Description": "Don't be afraid to send us multiple communications, ideas evolve.",

"Icon": "fa fa-envelope-square fa-4x",

"Image": "",

"ExtraCSSHelper": "",

"ComponentToInclude": "",

"listItems": null,

"callToActionLinks": [

{

"Url": "[mailto:info@cryptostatto.com](mailto:info@cryptostatto.com)",

"FriendlyName": "Email us",

"Target": "_self"

},

{

"Url": "[https://twitter.com/crypto_statto](https://twitter.com/crypto_statto)",

"FriendlyName": "Crypto Statto on Twitter",

"Target": "_blank"

}

,

{

"Url": "[https://t.me/cryptostatto](https://t.me/cryptostatto)",

"FriendlyName": "Find us on Telegram",

"Target": "_blank"

}

]

}

]

Featuring on Crypto Statto as a "partner", partner analytics

Within this section, each partner can have their own dedicated page.

New menu grid tab inside our analytics section


[www.cryptostatto.com/analytics](http://www.cryptostatto.com/analytics)

New Partners Landing Page


[www.cryptostatto.com/partner-analytics/{your-company-name}](http://www.cryptostatto.com/partner-analytics/%7byour-company-name%7d)

Our web data platform allows us to;

  • Include a Video gallery
  • Embed a client app - we use React and other js MVVM frameworks
  • Have calls to action, a header with backing image and text, and three calls to actions.

The basic rules are;

  • An appropriate page title and description if required
  • A useful application that works against our API as documented above
  • A header image for a call to action, small header, and description. We will put your image which you have own or rights on in an appropriate folder.
  • Three child calls to actions. One link only that leaves Crypto Statto
  • Videos should be hosted on a platform such as YouTube only, where safeguarding exists. If you have an alternative platform, please let us know.

Providing reports to our platform - coming soon

We have added an entirely new process for processing and holding data on our platform. We now have what is known as a Packaged Reports Manager. Packaged Reports are effectively, an entity with one or more reports contained within them. Our Web Data Platform identifies the latest file from a group of Entity's Packaged Reports. The earlier versions are pulled off the data folder and the latest one loaded into the platform. Reports become available soon after through the API or web views.

We will be publishing details on how to provide data to Crypto Statto in the near future.

FAQ

Why would we want to write applications for hosting on Crypto Statto? Is there profit sharing available?

The main benefit to developing against our API is to showcase your ability to a wider audience. As Crypto Statto grows to where we want it to be, we will seek to add development partners to our platform.

Can we have our own area on Crypto Statto for multiple apps?

We can accommodate this for free for initial pioneers on our platform. As the platform grows we are likely to limit this or charge for this capability. We would expect for a page to be added under http://www.cryptostatto.com/analytics/

. We are not looking at profit sharing but are open to discussion.

Can we develop our own applications and host them on our own site against your API?

Please contact us if you feel this is an avenue you wish to pursue. Currently, we are preferring to build our Crypto Statto capabilities in-site at the moment.

We want access you your database, can we have it?

We have no plans to open up our database but we are planning to make more information available through our server content viewer. We are looking at moving older data to a document store and making that available in future.

Is there a sandbox or testing area for developing on Crypto Statto?

Not at the moment, we are exploring the possibility of a second server where trusted partners can upload apps and see them running against a secondary website.

What is the process for providing apps to your app store?

We don't have a formalised process presently. Our thoughts are we maintain a public branch here - inforhino/CryptoStatto: Tools and utilities for traders and developers working with the Crypto Statto platform (github.com)

Perhaps you create a public repository on github or bitbucket and making that available to us. We can then take care of the build and deploy to Crypto Statto.

Reach out to us here www.cryptostatto.com/contact or email us support@cryptostatto.com

What about security and CORS?

We haven't made major efforts to restrict access to Crypto Statto for CORS but this will definitely happen once we start handling payments through Crypto Statto. Our APIs are currently open but we will be securing certain endpoints in future.

Can you develop for our platform?

Please read more here - Bespoke Software Development (cryptostatto.com)

We have our own data we would like to put on Crypto Statto - can we?

Definitely get in touch with us if this is something you wish to do.

Reach out to us here www.cryptostatto.com/contact or email us support@cryptostatto.com

Are you looking to set up websockets instead?

Not in the immediate future. Where we find we are moving more towards realtime information analytics, then this will definitely be on the cards.

Written with StackEdit.

Get in touch

Any questions on cryptocurrency analytics.

Email us

Need assistance?

Existing customer or need to understand more about anything on our website? Get in touch.

Support and help

Quick Links

  •  Contact us
  •  Community
  •  Articles
  •  Our Videos
  •  Our developers

Key Info

  •  FAQ
  •  Bespoke Development
  •  App & Data Hosting Services
  •  Support our platform
  •  Disclaimer

Follow us

  •  github
  •  YouTube

© Copyright 2023 - Info Rhino Limited. All rights reserved. Company Number - 07299641