Sometimes, developer may need to know user's transaction history. But in mixin network, there is no notification about transaction which is available in mixin messenger bots. To read user's transaction history , developer has to read all mixin network snapshots. If snapshot sender or receiver is created by developer, details of transaction will be available.
// cURL Examplecurl -i --header "Authorization: Bearer eyJhbGciOiJSUzUxMiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1Mjc1ODYyODQsImlhdCI6MTUyNzU4NjIyNCwianRpIjoiMjZlMjQyM2QtZGUzMC00MTA0LTkyZTQtOTk2MzczOWRkZGE5Iiwic2lkIjoiYWM2ZDFmODYtYTY0Yi00NWRkLTllZmEtN2JmMGVjZjI2MDU2Iiwic2lnIjoiMGIxNGJlZTU5YjE1ODU0MjI1ZTc5ZTU4ZDQwMjZkNDJhYWUyY2Q4ODM4OWE1N2RhNjU4YTRlMjVhNzJlNjRlZSIsInVpZCI6IjMxYjFhMTdjLWFiMzgtNGFhNC05YmM5LWY0NjQyNzEyODExMyJ9.0OUDLd0E1SKslsBJ5nHDE3bC9XKQc_6PPSqBD6Z2E9XYMjQyGht3QWF-uQLohCwbtR_Q7w3_my5MoWM4UyHtWlYh8-mJwg54VFWlhLuFLcWTeG8P971WGVc8oOqNspsEnxDxdBezQVqF1N-XjUtJsVsyJkT6ZEX7VazRm2I2xMM" --header "Content-Type: application/json" --header "Content-length: 0" "https://api.mixin.one/network/snapshots?limit=10&offset=2018-05-29T16:30:24.845515732%2B08:00"
response
// Sample Response{"data":[{"amount":"-1688168","asset":{"asset_id":"965e5c6e-434c-3fa9-b780-c50f43cd955c","chain_id":"43d61dcd-e413-450d-80b8-101d5e903357","icon_url":"https://images.mixin.one/0sQY63dDMkWTURkJVjowWY6Le4ICjAFuu3ANVyZA4uI3UdkbuOT5fjJUT82ArNYmZvVcxDXyNjxoOv0TAYbQTNKS=s128","name":"Chui Niu Bi","symbol":"CNB","type":"asset"},"created_at":"2018-05-29T09:31:04.202186212Z","data":"","snapshot_id":"529934b0-abfd-43ab-9431-1805773000a4","source":"TRANSFER_INITIALIZED","type":"snapshot"// Options only for user (or App) who has access."user_id":"06aed1e3-bd77-4a59-991a-5bb5ae6fbb09","trace_id":"7c67e8e8-b142-488b-80a3-61d4d29c90bf","opponent_id":"a465ffdb-4441-4cb9-8b45-00cf79dfbc46","data":"Transfer!"},...]}​
Go-get-snapshotsfunc (ex *Exchange) requestMixinNetwork(ctx context.Context, checkpoint time.Time, limit int) ([]*Snapshot, error) {uri := fmt.Sprintf("/network/snapshots?offset=%s&order=ASC&limit=%d", checkpoint.Format(time.RFC3339Nano), limit)token, err := bot.SignAuthenticationToken(config.ClientId, config.SessionId, config.SessionKey, "GET", uri, "")if err != nil {return nil, err}body, err := bot.Request(ctx, "GET", uri, nil, token)if err != nil {return nil, err}var resp struct {Data []*Snapshot `json:"data"`Error string `json:"error"`}err = json.Unmarshal(body, &resp)if err != nil {return nil, err}if resp.Error != "" {return nil, errors.New(resp.Error)}return resp.Data, nil}​
​
def searchSnapShots(robot, config, offset, limit, order):finalURL = "/network/snapshots?offset=%s&order=ASC&limit=%d" % (offset, limit)encoded = robot.genGETJwtToken_extConfig(finalURL, "" , config)request_header = {"Authorization":"Bearer " + encoded, 'Content-Type': 'application/json', 'Content-length': '0'}r = requests.get('https://api.mixin.one' + finalURL, headers = request_header)if r.status_code != 200:error_body = result_obj['error']print(error_body)​r.raise_for_status()​result_obj = r.json()snapshots = result_obj["data"]​for singleSnapShot in snapshots:if "user_id" in singleSnapShot:print(singleSnapShot)print("This snapshot happen to an account")return snapshots​