{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"10d67f87-d93b-4705-b3e2-506766a5e343","name":"Exchange API V1","description":"# V4 API available here:\n\n[https://api-docs.shiftmarkets.com](https://api-docs.shiftmarkets.com/)\n\n---\n\nThis API describes all the methods available for interacting with the exchange.\n\nAll requests (other than the initial requests to register and authenticate the user) require two headers to be provided:\n\nAuthorization: Bearer `exchange_access_token`\n\nwhere `exchange_access_token` is returned in a successful unauthenticated call to the `/exchangeToken` endpoint (see Authorization section below).\n\nx-deltix-nonce: `1234567890`\n\nIn order to increase security and prevent the same message from being re-sent repeatedly, each request requires that a special header x-deltix-nonce to be set. This is a numeric value, called a nonce. Within each authentication session, identified by the access token, each subsequent request must have a nonce value greater than the previous one. If the request contains the same or lower nonce as the previous request, the request will be rejected with status 400 (Bad Request) and message \"Nonce.\".\n\nThe recommended value for nonce is a timestamp with at least milliseconds resolution. This may still be insufficient if requests are sent with a high frequency. In this case it is recommended for the nonce value to be manually incremented with each request sent.\n\n# Websocket API\n\nAs well as the REST API examples described in this document, the exchange maintains a websocket API that can be used to perform a majority of the same functions. In particular, it is recommended to use the websocket API to receive order book snapshots and update instructions. This is due to the large volume of updates and the high frequency at which they occur.\n\nOur Websocket API uses the STOMP protocol for communication. It is recommended that you make use of a STOMP library such as [https://www.npmjs.com/package/@stomp/stompjs](https://www.npmjs.com/package/@stomp/stompjs) to simplify working with the websocket connection.\n\nAfter an `exchange_access_token` has been obtained through a successful call to the `/exchangeToken` endpoint, the next step is to make a CONNECT request to the websocket:\n\n**Websocket url:** `wss://test.shiftmarkets.com/websocket/v1`\n\n```\nCONNECT\nAuthorization:\naccept-version:1.1,1.0\nheart-beat:10000,10000\n\n```\n\nExamples of websocket requests for each endpoint are included throughout this document (where available).\n\nTypically websocket requests fall into two categories:\n\n**Send Requests**\n\nSend requests are very similar to REST requests in that you should expect to receive a single reply in response to each request. Example:\n\n```\nSEND\ndestination:/app/v1/securities\nX-Deltix-Nonce:1575420825\ncorrelation-id:e8db3871-16a4-11ea-867e-9b064165617a\n\n```\n\n**Subscription Requests**\n\nSubscription requests are where the websocket really excels as a communication protocol compared to REST. Each of these requests initiates a subscription to a feed of responses. So long as the websocket connection remains active, you should expect to receive a constant supply of updates specific to each subscription that you initiate. The most common use of these subscription requests would be to subscribe to price changes as well as order book updates. For example:\n\n```\nSUBSCRIBE\nX-Deltix-Nonce:1575420826\nid:sub-1\ndestination:/user/v1/market-data/BTCUSD\n\n```\n\nNote that both `SEND` and `SUBSCRIBE` requests require the same `X-Deltix-Nonce` header as described earlier in this document. In addition, `SEND` requests require a `correlation-id` and `SUBSCRIBE` requests require an `id` (subscription id). Each of these fields require that you provide a unique string value for this field. Responses from the websocket will include the same string value to make it easier to match response messages back to each specific initial request.\n\n**An Important Subscription Request**\n\nEach endpoint described in this document contains examples of corresponding websocket equivalent requests that can be made, however there is also one more generalized websocket subscription that is required:\n\n```\nSUBSCRIBE\nX-Deltix-Nonce:1575420827\nid:sub-0\ndestination:/user/v1/responses\n\n```\n\nThis subscription supports a range of possible responses. Some of the other requests in this document will actually have their results returned via this subscription and certain errors that may have occurred will also be returned via this subscription. It is recommended to first subscribe to this endpoint before making additional SEND and SUBSCRIBE requests to other endpoints detailed in this document.","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"8384733","team":463704,"collectionId":"10d67f87-d93b-4705-b3e2-506766a5e343","publishedId":"Tzm6mvyX","public":true,"publicUrl":"https://api-docs-v1.shiftmarkets.com","privateUrl":"https://go.postman.co/documentation/8384733-10d67f87-d93b-4705-b3e2-506766a5e343","customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"7ACD45"},"documentationLayout":"classic-double-column","customisation":null,"version":"8.10.1","publishDate":"2021-07-09T20:25:26.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{},"logos":{}},"statusCode":200},"environments":[{"name":"Shift Demo V1","id":"00171e0f-b450-4e82-82dc-7776af81f160","owner":"8384733","values":[{"key":"baseUrl","value":"https://test.shiftmarkets.com/api/v1","enabled":true},{"key":"accessToken","value":"eyJraWQiOiJGN....","enabled":true},{"key":"accountId","value":"c6f99a95-a766-4520-826e-11d1c6038c54","enabled":true},{"key":"securityId","value":"BTCUSD","enabled":true},{"key":"destination","value":"SHIFTFX","enabled":true},{"key":"exchangeName","value":"DEMO","enabled":true},{"key":"username","value":"shift_demo_user12@mailinator.com","enabled":true},{"key":"password","value":"Password^123","enabled":true},{"key":"currencyId","value":"BTC","enabled":true},{"key":"baseUrlAuth","value":"https://sandbox.shiftmarkets.com/authentication","enabled":true},{"key":"clientAccessToken","value":"eyJraWQiOiJGN....","enabled":true},{"key":"twoFACode","value":"","enabled":true},{"key":"new_username","value":"shift_demo_user11@mailinator.com","enabled":true},{"key":"baseUrlWallet","value":"https://sandbox.shiftmarkets.com/wallet","enabled":true},{"key":"confirmationCode","value":"123456","enabled":true},{"key":"refreshToken","value":"eyJraWQiOiJGN....","enabled":true},{"key":"newPassword","value":"Password^123","enabled":true},{"key":"baseUrlTrade","value":"https://sandbox.shiftmarkets.com/trade","enabled":true},{"key":"orderId","value":"165CBB7C-4353-4CD8-8F45-48C9896CFD37","enabled":true},{"key":"baseUrlExchangeData","value":"https://sandbox.shiftmarkets.com/exchange","enabled":true},{"key":"reusable","value":"true","enabled":true,"type":"default"}],"published":true}],"user":{"authenticated":false,"permissions":{"publish":false}},"run":{"button":{"js":"https://run.pstmn.io/button.js","css":"https://run.pstmn.io/button.css"}},"web":"https://www.getpostman.com/","team":{"logo":"https://res.cloudinary.com/postman/image/upload/t_team_logo_pubdoc/v1/team/feb2fccfc105247316d2b61d36a9794617caf629ad1f3cc65702cd765f3f910e","favicon":"https://shiftmarkets.com/favicon.ico"},"isEnvFetchError":false,"languages":"[{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"HttpClient\"},{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"RestSharp\"},{\"key\":\"curl\",\"label\":\"cURL\",\"variant\":\"cURL\"},{\"key\":\"dart\",\"label\":\"Dart\",\"variant\":\"http\"},{\"key\":\"go\",\"label\":\"Go\",\"variant\":\"Native\"},{\"key\":\"http\",\"label\":\"HTTP\",\"variant\":\"HTTP\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"OkHttp\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"Unirest\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"Fetch\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"jQuery\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"XHR\"},{\"key\":\"c\",\"label\":\"C\",\"variant\":\"libcurl\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Axios\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Native\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Request\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Unirest\"},{\"key\":\"objective-c\",\"label\":\"Objective-C\",\"variant\":\"NSURLSession\"},{\"key\":\"ocaml\",\"label\":\"OCaml\",\"variant\":\"Cohttp\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"cURL\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"Guzzle\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"HTTP_Request2\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"pecl_http\"},{\"key\":\"powershell\",\"label\":\"PowerShell\",\"variant\":\"RestMethod\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"http.client\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"Requests\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"httr\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"RCurl\"},{\"key\":\"ruby\",\"label\":\"Ruby\",\"variant\":\"Net::HTTP\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"Httpie\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"wget\"},{\"key\":\"swift\",\"label\":\"Swift\",\"variant\":\"URLSession\"}]","languageSettings":[{"key":"csharp","label":"C#","variant":"HttpClient"},{"key":"csharp","label":"C#","variant":"RestSharp"},{"key":"curl","label":"cURL","variant":"cURL"},{"key":"dart","label":"Dart","variant":"http"},{"key":"go","label":"Go","variant":"Native"},{"key":"http","label":"HTTP","variant":"HTTP"},{"key":"java","label":"Java","variant":"OkHttp"},{"key":"java","label":"Java","variant":"Unirest"},{"key":"javascript","label":"JavaScript","variant":"Fetch"},{"key":"javascript","label":"JavaScript","variant":"jQuery"},{"key":"javascript","label":"JavaScript","variant":"XHR"},{"key":"c","label":"C","variant":"libcurl"},{"key":"nodejs","label":"NodeJs","variant":"Axios"},{"key":"nodejs","label":"NodeJs","variant":"Native"},{"key":"nodejs","label":"NodeJs","variant":"Request"},{"key":"nodejs","label":"NodeJs","variant":"Unirest"},{"key":"objective-c","label":"Objective-C","variant":"NSURLSession"},{"key":"ocaml","label":"OCaml","variant":"Cohttp"},{"key":"php","label":"PHP","variant":"cURL"},{"key":"php","label":"PHP","variant":"Guzzle"},{"key":"php","label":"PHP","variant":"HTTP_Request2"},{"key":"php","label":"PHP","variant":"pecl_http"},{"key":"powershell","label":"PowerShell","variant":"RestMethod"},{"key":"python","label":"Python","variant":"http.client"},{"key":"python","label":"Python","variant":"Requests"},{"key":"r","label":"R","variant":"httr"},{"key":"r","label":"R","variant":"RCurl"},{"key":"ruby","label":"Ruby","variant":"Net::HTTP"},{"key":"shell","label":"Shell","variant":"Httpie"},{"key":"shell","label":"Shell","variant":"wget"},{"key":"swift","label":"Swift","variant":"URLSession"}],"languageOptions":[{"label":"C# - HttpClient","value":"csharp - HttpClient - C#"},{"label":"C# - RestSharp","value":"csharp - RestSharp - C#"},{"label":"cURL - cURL","value":"curl - cURL - cURL"},{"label":"Dart - http","value":"dart - http - Dart"},{"label":"Go - Native","value":"go - Native - Go"},{"label":"HTTP - HTTP","value":"http - HTTP - HTTP"},{"label":"Java - OkHttp","value":"java - OkHttp - Java"},{"label":"Java - Unirest","value":"java - Unirest - Java"},{"label":"JavaScript - Fetch","value":"javascript - Fetch - JavaScript"},{"label":"JavaScript - jQuery","value":"javascript - jQuery - JavaScript"},{"label":"JavaScript - XHR","value":"javascript - XHR - JavaScript"},{"label":"C - libcurl","value":"c - libcurl - C"},{"label":"NodeJs - Axios","value":"nodejs - Axios - NodeJs"},{"label":"NodeJs - Native","value":"nodejs - Native - NodeJs"},{"label":"NodeJs - Request","value":"nodejs - Request - NodeJs"},{"label":"NodeJs - Unirest","value":"nodejs - Unirest - NodeJs"},{"label":"Objective-C - NSURLSession","value":"objective-c - NSURLSession - Objective-C"},{"label":"OCaml - Cohttp","value":"ocaml - Cohttp - OCaml"},{"label":"PHP - cURL","value":"php - cURL - PHP"},{"label":"PHP - Guzzle","value":"php - Guzzle - PHP"},{"label":"PHP - HTTP_Request2","value":"php - HTTP_Request2 - PHP"},{"label":"PHP - pecl_http","value":"php - pecl_http - PHP"},{"label":"PowerShell - RestMethod","value":"powershell - RestMethod - PowerShell"},{"label":"Python - http.client","value":"python - http.client - Python"},{"label":"Python - Requests","value":"python - Requests - Python"},{"label":"R - httr","value":"r - httr - R"},{"label":"R - RCurl","value":"r - RCurl - R"},{"label":"Ruby - Net::HTTP","value":"ruby - Net::HTTP - Ruby"},{"label":"Shell - Httpie","value":"shell - Httpie - Shell"},{"label":"Shell - wget","value":"shell - wget - Shell"},{"label":"Swift - URLSession","value":"swift - URLSession - Swift"}],"layoutOptions":[{"value":"classic-single-column","label":"Single Column"},{"value":"classic-double-column","label":"Double Column"}],"versionOptions":[],"environmentOptions":[{"value":"0","label":"No Environment"},{"label":"Shift Demo V1","value":"8384733-00171e0f-b450-4e82-82dc-7776af81f160"}],"canonicalUrl":"https://api-docs-v1.shiftmarkets.com/view/metadata/Tzm6mvyX"}