{"info":{"_postman_id":"d0c6c5cc-8b47-4da5-bb55-b970e21adf09","name":"4DMotion public API 2.0","description":"<html><head></head><body><p>The 4DMotion Public API is</p>\n<ul>\n<li><p>over HTTP</p>\n</li>\n<li><p>which assumes all communication (requests and responses) to be UTF-8 encoded</p>\n</li>\n</ul>\n<h2 id=\"request-parameters\">Request Parameters</h2>\n<ul>\n<li><p>parameter names are case-sensitive</p>\n</li>\n<li><p>query string parameters should be url-encoded to function properly</p>\n</li>\n<li><p>additional (unrecognized) parameters are ignored by the server, no error is generated</p>\n</li>\n</ul>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[],"owner":"6299022","collectionId":"d0c6c5cc-8b47-4da5-bb55-b970e21adf09","publishedId":"2sB2izFDua","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2026-07-10T13:25:53.000Z"},"item":[{"name":"What's new in v2.0","item":[],"id":"31566e70-98fd-41d6-b211-2fe184b5a2b2","description":"<p>Zip creation is moved to the background to better use resources and ensure a more stable delivery. You can now initatiate the creation of a download link, monitor the preparation progress and then get access to the static file.</p>\n<h2 id=\"deprecation-policy\">Deprecation policy</h2>\n<p>At the moment, the v1.x API is still available. You can read its documentation at <a href=\"https://legacy-api.4dmotionsports.com\">https://legacy-api.4dmotionsports.com</a> . The old API will stop working at a later date, which will be announced ahead of time.</p>\n","_postman_id":"31566e70-98fd-41d6-b211-2fe184b5a2b2"},{"name":"Rate Limiting","item":[],"id":"b7ccf00c-b82a-412e-ae3b-aedc51cb1dfe","description":"<p>The 4DMotion Public API accepts requests (excluding authentication) at the maximum rate of 1 request / minute. If you exceed this, you will get a <code>429 Too Many Requests</code> response. In this case, please increase the downtime between requests.</p>\n","_postman_id":"b7ccf00c-b82a-412e-ae3b-aedc51cb1dfe"},{"name":"Authentication","item":[{"name":"Creating an App Secret","item":[],"id":"f60bba37-eb39-48f6-9d46-8d9e1327085c","description":"<p>Application id / secret pairs are the user name and password for your application. The public API can only be accessed with a valid app id/secret pair. You can create one on the web panel. An application will have the exact same rights as the owner.</p>\n<h2 id=\"step-by-step-guide\">Step by Step Guide</h2>\n<ol>\n<li><p>Go to <a href=\"https://my.4dmotionsports.com/login\">https://my.4dmotionsports.com/login</a></p>\n</li>\n<li><p>Log in with your user credentials, as you would in the mobile app</p>\n</li>\n<li><p>Navigate to the API keys menu</p>\n<p><img src=\"https://s3.us-east-2.amazonaws.com/apidocs.4dmotionsports.com/api_key_menu.png\" alt=\"API Key Menu location\" /></p>\n</li>\n<li><p>Click on the “Create API key” button</p>\n</li>\n<li><p>Make sure that you’ve saved the secret that’s just been display, you won’t be able to access it later</p>\n</li>\n</ol>\n<p> <img src=\"https://s3.us-east-2.amazonaws.com/apidocs.4dmotionsports.com/api_key_gen.png\" alt=\"API Key Gen\" /></p>\n","_postman_id":"f60bba37-eb39-48f6-9d46-8d9e1327085c"},{"name":"retrieve access token","event":[{"listen":"prerequest","script":{"id":"183a82e8-ab0f-4538-83b9-3c35cd02a168","exec":["postman.setEnvironmentVariable(\"e-app-secret\", encodeURIComponent(postman.getEnvironmentVariable(\"app-secret\")))"],"type":"text/javascript"}},{"listen":"test","script":{"id":"d73862c4-b3fa-4263-b430-d779c0397720","exec":["postman.setEnvironmentVariable(\"access-token\", JSON.parse(responseBody).access_token)","postman.setEnvironmentVariable(\"e-refresh-token\", encodeURIComponent(JSON.parse(responseBody).refresh_token))"],"type":"text/javascript"}}],"id":"77f09209-c44c-4cff-bf7a-738034381715","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"secret\" : \"{{e-app-secret}}\"\n}","options":{"raw":{"language":"json"}}},"url":"{{root-url}}/public/{{public-version}}/access-token?app_id={{app-id}}","description":"<p>Returns access token / refresh token pair for valid app credentials.</p>\n<h2 id=\"fields\">Fields:</h2>\n<ul>\n<li><em>access_token:</em> short-lived token to access api endpoints</li>\n<li><em>refresh_token:</em> long-lived token to refresh access</li>\n<li><em>expires_in:</em> the validity of the access token, in seconds (since creation)</li>\n<li><em>token_type:</em> \"Bearer\"</li>\n</ul>\n","urlObject":{"path":["public","{{public-version}}","access-token"],"host":["{{root-url}}"],"query":[{"key":"app_id","value":"{{app-id}}"}],"variable":[]}},"response":[],"_postman_id":"77f09209-c44c-4cff-bf7a-738034381715"},{"name":"renew access token","event":[{"listen":"test","script":{"id":"31a887bc-9055-4d9c-b5cf-b9b8d56abe00","exec":["postman.setEnvironmentVariable(\"access-token\", JSON.parse(responseBody).access_token)"],"type":"text/javascript"}}],"id":"fe1fcc68-c4ff-4ec2-991b-53d75efbddb0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"refresh_token\" : \"{{e-refresh-token}}\"\n}","options":{"raw":{"language":"json"}}},"url":"{{root-url}}/public/{{public-version}}/access-token.renew?app_id={{app-id}}","description":"<p>Returns access token for valid refresh token</p>\n<h2 id=\"fields\">Fields:</h2>\n<ul>\n<li><em>access_token:</em> short-lived token to access api endpoints</li>\n<li><em>expires_in:</em> the validity of the access token, in seconds (since creation)</li>\n<li><em>token_type:</em> \"Bearer\"</li>\n</ul>\n","urlObject":{"path":["public","{{public-version}}","access-token.renew"],"host":["{{root-url}}"],"query":[{"key":"app_id","value":"{{app-id}}"}],"variable":[]}},"response":[{"id":"e1fd64d9-4665-4727-9c29-a4eee89898c7","name":"renew access token","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"refresh_token\" : \"{{e-refresh-token}}\"\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"{{root-url}}/public/{{public-version}}/access-token.renew?app_id={{app-id}}","host":["{{root-url}}"],"path":["public","{{public-version}}","access-token.renew"],"query":[{"key":"app_id","value":"{{app-id}}"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Mon, 23 Sep 2024 12:04:38 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"Server","value":"nginx/1.22.1"},{"key":"Vary","value":"Origin"},{"key":"Request-Time","value":"111"},{"key":"X-Clacks-Overhead","value":"GNU Terry Pratchett"},{"key":"Content-Encoding","value":"gzip"}],"cookie":[],"responseTime":null,"body":"{\n    \"access_token\": \"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJleUp3Y205MmFXUmxja2xFSWpvaVlYQndMV3RsZVNJc0luQnliM1pwWkdWeVMyVjVJam9pTWpRME1EYzVORGd6T1RNME56TTJNakUwT0RJaWZRPT0iLCJsaWNlbnNlcyI6WyJHT0xGIiwiSU5TVFJVQ1RPUiIsIk1RXzgiLCJEQVRBRVhQT1JUIiwiQUYiLCJGVUxMU1lTVEVNIiwiR09MRl9NT0RVTEVTIiwiR1JBUEhTIiwiUERGUkVQT1JUIiwiR09MRkZPVU5EQVRJT04iLCJGT1VSRE1PVElPTiIsIkdPTEYiLCJHT0xGRk9VTkRBVElPTl9LRVlQT0lOVF9BTkFMWVNJUyJdLCJpc3MiOiI0ZG1vdGlvbi1tb2JpbGUtYXBpIiwiZXhwIjoxNzI3MDk0ODc4LCJpYXQiOjE3MjcwOTMwNzgsImp0aSI6Ijk5Yjg2ZWJlZThiOWY0ZWJkNDdjMTFlYTNiN2RkNWU4Y2M1MWEyMzhlMzVlOTIxZjYyNzUwMTU4NDhjZjU5YmVhNTA2ZWIzOWYzYmFiY2NlODZjY2RiMmM3MjU3MTRmNjViMTk3OTNjOTkzMDllMWQ5NDU5NTA3MjEyMDM4MDE1MTUyYWRmZWI3ZmViYTYyNDdkOWYxZWU0YTVlN2IxZWJhNWVjNjliZDBhYTFhZGUzNjk5MzBlZGMyMTRkMTQyN2IxZjUwNDUwN2YyOWIzMWRkYjAxYjkxNWJkNGYxMjExNWRiNzk3N2UyZjk1MWNiODJlOTA5NzBlMTY2OGVlZDYifQ.GswqiQ6IaPvt2Ktl2sYnJp6TjDzDGOIUmI9AoHdPebk\",\n    \"expires_in\": 1800,\n    \"token_type\": \"Bearer\"\n}"}],"_postman_id":"fe1fcc68-c4ff-4ec2-991b-53d75efbddb0"}],"id":"e8b76fe2-39ee-42ab-afc1-f89baa078f03","description":"<p>Most of the API endpoints require authentication. This can be achieved by setting the X-Auth-Token header to a valid access token.</p>\n<p>You can retrieve an access token via the access token endpoint while providing valid app credentials.</p>\n<h2 id=\"access-tokens\">Access Tokens</h2>\n<p>Access tokens are short-lived (about 30 minutes) tokens that can be used to authenticate and authorize your app to access certain endpoints. Access tokens can be retrieved via the access token and he refesh token endpoints, with credentials or Refresh tokens respectively.</p>\n<h2 id=\"refresh-tokens\">Refresh Tokens</h2>\n<p>Refresh tokens are long-live tokens which can be exchanged for short-lived access tokens. One app can only have one active refresh token at any given time. See refesh token for more details on how to get access tokens. If you have a refresh token and receive a 401 Unauthorized response to a request, you should try to exchange that instead of using your credentials again.</p>\n<p>It is considered best practice, if you take the expiration time into account, and refresh your access token if expiration is within 5 minutes.</p>\n","event":[{"listen":"prerequest","script":{"id":"e72ac1d3-6bfa-49a8-8be3-885085b0cdef","type":"text/javascript","exec":[""]}},{"listen":"test","script":{"id":"058d5e82-ce62-4bc4-a825-f8821bf6e950","type":"text/javascript","exec":[""]}}],"_postman_id":"e8b76fe2-39ee-42ab-afc1-f89baa078f03"},{"name":"sensor-measurements","item":[{"name":"export/estimate","id":"48f41b1d-5fe1-441d-b5bc-c4c06f678dd7","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"X-Auth-Token","value":"{{access-token}}","type":"text"}],"url":"{{root-url}}/public/{{public-version}}/export/estimate?zoneId=Europe/Budapest&from=2025-01-25T10:00:00&until=2025-04-08T10:00:00&mode=all&subject=all","description":"<p>Get an estimation for how many csv files will be generated with the given parameters. While te estimation is not exact, you can be sure that if you get 0, there will be no files downloaded with the same parameters.</p>\n<h2 id=\"response-fields\">Response fields</h2>\n<ul>\n<li><strong>expected:</strong> int. the estimated amount of csv files.</li>\n</ul>\n","urlObject":{"path":["public","{{public-version}}","export","estimate"],"host":["{{root-url}}"],"query":[{"description":{"content":"<p>a valid time zone id, in which from and until parameters should be understood</p>\n","type":"text/plain"},"key":"zoneId","value":"Europe/Budapest"},{"description":{"content":"<p>a datetime string indicating the start of the time interval (inclusive) to export measuremets from</p>\n","type":"text/plain"},"key":"from","value":"2025-01-25T10:00:00"},{"description":{"content":"<p>a datetime string indicating the end of the time interval (exclusive) to export measurements until</p>\n","type":"text/plain"},"key":"until","value":"2025-04-08T10:00:00"},{"description":{"content":"<p>either <strong>graph</strong>, <strong>raw</strong>, <strong>metrics</strong> or <strong>all</strong>, indicating what kind of data should be included in the csv files</p>\n","type":"text/plain"},"key":"mode","value":"all"},{"description":{"content":"<p>either <strong>self</strong> for own measurements or <strong>all</strong> for own and students’ measurements, or provide an email address for one student only</p>\n","type":"text/plain"},"key":"subject","value":"all"}],"variable":[]}},"response":[{"id":"d8ad589b-0aa0-4102-baa2-d88aa1728250","name":"example","originalRequest":{"method":"GET","header":[{"key":"X-Auth-Token","value":"{{access-token}}","type":"text"}],"url":{"raw":"{{root-url}}/public/{{public-version}}/export/estimate?zoneId=Europe/Budapest&from=2025-01-25T10:00:00&until=2025-04-08T10:00:00&mode=all&subject=all","host":["{{root-url}}"],"path":["public","{{public-version}}","export","estimate"],"query":[{"key":"zoneId","value":"Europe/Budapest","description":"a valid time zone id, in which from and until parameters should be understood"},{"key":"from","value":"2025-01-25T10:00:00","description":"a datetime string indicating the start of the time interval (inclusive) to export measuremets from"},{"key":"until","value":"2025-04-08T10:00:00","description":"a datetime string indicating the end of the time interval (exclusive) to export measurements until"},{"key":"mode","value":"all","description":"either **graph**, **raw**, **metrics** or **all**, indicating what kind of data should be included in the csv files"},{"key":"subject","value":"all","description":"either **self** for own measurements or **all** for own and students’ measurements, or provide an email address for one student only"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Sat, 26 Apr 2025 06:46:29 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"15"},{"key":"Connection","value":"keep-alive"},{"key":"Server","value":"nginx/1.22.1"},{"key":"Vary","value":"Origin"},{"key":"Request-Time","value":"1711"},{"key":"X-Clacks-Overhead","value":"GNU Terry Pratchett"}],"cookie":[],"responseTime":null,"body":"{\n    \"expected\": 24\n}"}],"_postman_id":"48f41b1d-5fe1-441d-b5bc-c4c06f678dd7"},{"name":"export/init","id":"3f05517d-d726-4a32-80a9-78c66ad57f5f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"X-Auth-Token","value":"{{access-token}}","type":"text"}],"url":"{{root-url}}/public/{{public-version}}/export/init?zoneId=Europe/Budapest&from=2025-01-25T10:00:00&until=2025-04-08T10:00:00&mode=all&subject=all","description":"<p>Initiate the process of generating csv files for downloading. The response contains the <strong>exportJobId</strong> you can use to monitor the progress</p>\n","urlObject":{"path":["public","{{public-version}}","export","init"],"host":["{{root-url}}"],"query":[{"description":{"content":"<p>a valid time zone id, in which from and until parameters should be understood</p>\n","type":"text/plain"},"key":"zoneId","value":"Europe/Budapest"},{"description":{"content":"<p>a datetime string indicating the start of the time interval (inclusive) to export measuremets from</p>\n","type":"text/plain"},"key":"from","value":"2025-01-25T10:00:00"},{"description":{"content":"<p>a datetime string indicating the end of the time interval (exclusive) to export measurements until</p>\n","type":"text/plain"},"key":"until","value":"2025-04-08T10:00:00"},{"description":{"content":"<p>either <strong>graph</strong>, <strong>raw</strong>, <strong>metrics</strong> or <strong>all</strong>, indicating what kind of data should be included in the csv files</p>\n","type":"text/plain"},"key":"mode","value":"all"},{"description":{"content":"<p>either <strong>self</strong> for own measurements or <strong>all</strong> for own and students’ measurements, or provide an email address for one student only</p>\n","type":"text/plain"},"key":"subject","value":"all"}],"variable":[]}},"response":[{"id":"4e2ba900-26ee-4643-9df5-9b8ebd3b8bdf","name":"start job","originalRequest":{"method":"POST","header":[{"key":"X-Auth-Token","value":"{{access-token}}","type":"text"}],"url":{"raw":"{{root-url}}/public/{{public-version}}/export/init?zoneId=Europe/Budapest&from=2025-01-25T10:00:00&until=2025-04-08T10:00:00&mode=all&subject=all","host":["{{root-url}}"],"path":["public","{{public-version}}","export","init"],"query":[{"key":"zoneId","value":"Europe/Budapest","description":"a valid time zone id, in which from and until parameters should be understood"},{"key":"from","value":"2025-01-25T10:00:00","description":"a datetime string indicating the start of the time interval (inclusive) to export measuremets from"},{"key":"until","value":"2025-04-08T10:00:00","description":"a datetime string indicating the end of the time interval (exclusive) to export measurements until"},{"key":"mode","value":"all","description":"either **graph**, **raw**, **metrics** or **all**, indicating what kind of data should be included in the csv files"},{"key":"subject","value":"all","description":"either **self** for own measurements or **all** for own and students’ measurements, or provide an email address for one student only"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Sat, 26 Apr 2025 07:48:39 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"Server","value":"nginx/1.22.1"},{"key":"Vary","value":"Origin"},{"key":"Request-Time","value":"381"},{"key":"X-Clacks-Overhead","value":"GNU Terry Pratchett"},{"key":"Content-Encoding","value":"gzip"}],"cookie":[],"responseTime":null,"body":"{\n    \"exportJobId\": \"f734571d-f852-4336-8d94-e7c6a0a1a186\"\n}"}],"_postman_id":"3f05517d-d726-4a32-80a9-78c66ad57f5f"},{"name":"export/progress","id":"f7d5084d-395f-40bb-97fc-b82d7863a5ab","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"X-Auth-Token","value":"{{access-token}}","type":"text"}],"url":"{{root-url}}/public/{{public-version}}/export/progress?exportJobId=f734571d-f852-4336-8d94-e7c6a0a1a186","description":"<p>Monitor the progress of an already-started export job. Should be called periodically. It is recommended that you not call this more frequently than once in every 10 seconds, so you won't run into rate limiting.</p>\n<h2 id=\"responses\">Responses</h2>\n<p><strong>state=exporting:</strong> the csv generation is still in progress. The <strong>progress</strong> field contains a relative number to give you an idea about how much of the process is done.</p>\n<p><strong>statte=downloadable:</strong> the csv generation is finished. You can download your output (zip or csv) with the <strong>url</strong> field's value (no further authentication is necessary, the url expires in 24 hours).</p>\n<p><strong>state=error:</strong> some error occured during csv generation. If this persists, please contact support with details of your download.</p>\n","urlObject":{"path":["public","{{public-version}}","export","progress"],"host":["{{root-url}}"],"query":[{"description":{"content":"<p>the job id retrieved when initating rhe progress</p>\n","type":"text/plain"},"key":"exportJobId","value":"f734571d-f852-4336-8d94-e7c6a0a1a186"}],"variable":[]}},"response":[{"id":"74e1ccfa-2b7b-463a-a86d-ddad20fe51bc","name":"malformed job id","originalRequest":{"method":"GET","header":[{"key":"X-Auth-Token","value":"{{access-token}}","type":"text"}],"url":{"raw":"{{root-url}}/public/{{public-version}}/export/progress?exportJobId=wrong","host":["{{root-url}}"],"path":["public","{{public-version}}","export","progress"],"query":[{"key":"exportJobId","value":"wrong","description":"the job id retrieved when initating rhe progress"}]}},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Sat, 26 Apr 2025 07:21:44 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"90"},{"key":"Connection","value":"keep-alive"},{"key":"Server","value":"nginx/1.22.1"},{"key":"Vary","value":"Origin"},{"key":"Request-Time","value":"66"},{"key":"X-Clacks-Overhead","value":"GNU Terry Pratchett"}],"cookie":[],"responseTime":null,"body":"{\n    \"error\": \"exportJobId query parameter is malformed\",\n    \"reason\": \"Invalid UUID string: wrong\"\n}"},{"id":"746de228-09fa-489c-aa22-87dc991dca7f","name":"invalid job id","originalRequest":{"method":"GET","header":[{"key":"X-Auth-Token","value":"{{access-token}}","type":"text"}],"url":{"raw":"{{root-url}}/public/{{public-version}}/export/progress?exportJobId=a979256d-ec4e-4f28-95d3-563290a29b3e","host":["{{root-url}}"],"path":["public","{{public-version}}","export","progress"],"query":[{"key":"exportJobId","value":"a979256d-ec4e-4f28-95d3-563290a29b3e","description":"the job id retrieved when initating rhe progress"}]}},"status":"Not Found","code":404,"_postman_previewlanguage":"plain","header":[{"key":"Date","value":"Sat, 26 Apr 2025 07:22:20 GMT"},{"key":"Content-Length","value":"0"},{"key":"Connection","value":"keep-alive"},{"key":"Server","value":"nginx/1.22.1"},{"key":"Vary","value":"Origin"},{"key":"Request-Time","value":"25"},{"key":"X-Clacks-Overhead","value":"GNU Terry Pratchett"}],"cookie":[],"responseTime":null,"body":null},{"id":"be66cdd5-a728-431c-8813-f2d5699b1040","name":"finished export","originalRequest":{"method":"GET","header":[{"key":"X-Auth-Token","value":"{{access-token}}","type":"text"}],"url":{"raw":"{{root-url}}/public/{{public-version}}/export/progress?exportJobId=f734571d-f852-4336-8d94-e7c6a0a1a186","host":["{{root-url}}"],"path":["public","{{public-version}}","export","progress"],"query":[{"key":"exportJobId","value":"f734571d-f852-4336-8d94-e7c6a0a1a186","description":"the job id retrieved when initating rhe progress"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Sat, 26 Apr 2025 07:49:08 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"Server","value":"nginx/1.22.1"},{"key":"Vary","value":"Origin"},{"key":"Request-Time","value":"97"},{"key":"X-Clacks-Overhead","value":"GNU Terry Pratchett"},{"key":"Content-Encoding","value":"gzip"}],"cookie":[],"responseTime":null,"body":"{\n    \"state\": \"downloadable\",\n    \"url\": \"https://4dmotion-export-cache.s3.us-east-2.amazonaws.com/downloadable/f734571d-f852-4336-8d94-e7c6a0a1a186.zip?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20250426T074908Z&X-Amz-SignedHeaders=host&X-Amz-Credential=AKIAIMYKSI4OJC63QVWQ%2F20250426%2Fus-east-2%2Fs3%2Faws4_request&X-Amz-Expires=86400&X-Amz-Signature=d9b03a21afd7100a65e4347610c1124fb1fd9aa632965c5f9b7c425429b18106\"\n}"}],"_postman_id":"f7d5084d-395f-40bb-97fc-b82d7863a5ab"}],"id":"31b805cd-a0e5-4990-8d59-5bbeed4c55d2","description":"<h2 id=\"zip-file-structure\">Zip file structure</h2>\n<p>Each measurement is represented by one or two csv files. <strong>raw</strong> and <strong>graph</strong> data are put together in one file, while <strong>metrics</strong> data is in another.</p>\n<h2 id=\"examples\">Examples</h2>\n<p>Exporting data of 3 full system captures (5 sensor, Torso • Lead Arm • Bat configuration)</p>\n<p>Zip contains all graph, raw and metrics data</p>\n<p><a href=\"https://4dmotion-api-examples.s3.us-east-2.amazonaws.com/full_system_captures_sample.zip\">full_system_captures_sample.zip</a></p>\n<p>Exporting data of 3 module captures (3 sensor, Kinematic Sequence and Angles Hitting module)</p>\n<p>Zip contains all graph, raw and metrics data</p>\n<p><a href=\"https://4dmotion-api-examples.s3.us-east-2.amazonaws.com/module_captures_export_sample.zip\">module_captures_export_sample.zip</a></p>\n<h3 id=\"graph-export-columns\">Graph export columns</h3>\n<p>Exported when mode is set to <strong>graph</strong> or <strong>all</strong>.</p>\n<p>General notes:</p>\n<ul>\n<li><p>Always verify that the exported data is appropriate for your use case, especially for angles representing the orientation of a body part! There's several conventions for expressing the same orientation, and the one used by 4D Motion may not be the one that you expect.</p>\n</li>\n<li><p><strong>Lead</strong> and <strong>trail</strong> are sports-specific terms. For example, in golf, the lead side is the left side for a right-handed perso and the right side for a left-handed person. The trail side is always the opposite of lead side.</p>\n</li>\n<li><p><strong>Open</strong> and <strong>closed</strong> are also sports-specific terms. \"Open\" means \"towards the lead side\", \"closed\" means \"towards the trail side\".</p>\n</li>\n<li><p><strong>Transition</strong> in golf is the point in time when the movement switches from the backswing to the downswing. There's a similar concept in baseball hitting and softball.</p>\n</li>\n<li><p>For angular data, <strong>0°</strong> means the <strong>attention pose</strong>, as instructed by the 4D Motion app during <strong>User Pose Calibration</strong>, unless otherwise noted.</p>\n</li>\n</ul>\n<p>Graph export columns:</p>\n<ul>\n<li><p><strong>Frame</strong><br />  Sequence starting at 0 and incrementing by 1 for each sample in the measurement. A sample consists of multiple data points (exported as columns in the CSV), all measured or estimated at the same time.</p>\n</li>\n<li><p><strong>Frequency</strong> [Hz]<br />  The number of frames per captured second in the measurement.</p>\n</li>\n<li><p><strong>Sec</strong> [s]<br />  Time elapsed since the start of the measurement, measured in seconds.</p>\n</li>\n<li><p><strong>UTC time</strong> [ISO 8601]<br />  Calendar date and time of the frame.</p>\n</li>\n<li><p><strong>Pelvis</strong> or <strong>Kinematic sequence - Hip</strong> [°/s]<br />  Angular speed of the pelvis around the vertical axis. (Negative: movement in the closed direction. Positive: movement in the open direction.)</p>\n</li>\n<li><p><strong>Chest</strong> or <strong>Kinematic sequence - Chest</strong> [°/s]<br />  Angular speed of the chest around the vertical axis. (Negative: movement in the closed direction. Positive: movement in the open direction.)</p>\n</li>\n<li><p><strong>Lead arm</strong> or <strong>Kinematic sequence - Lead upper arm</strong> [°/s]<br />  Net angular speed of the upper arm on the lead side. (Negative: before transition. Positive: after transition.)</p>\n</li>\n<li><p><strong>Trail arm</strong> or <strong>Kinematic sequence - Trail upper arm</strong> [°/s]<br />  Net angular speed of the upper arm on the trail side. (Negative: before transition. Positive: after transition.)</p>\n</li>\n<li><p><strong>Lead forearm</strong> or <strong>Kinematic sequence - Lead forearm</strong> [°/s]<br />  Net angular speed of the forearm on the lead side. (Negative: before transition. Positive: after transition.)</p>\n</li>\n<li><p><strong>Trail forearm</strong> or <strong>Kinematic sequence - Trail forearm</strong> [°/s]<br />  Net angular speed of the forearm on the trail side. (Negative: before transition. Positive: after transition.)</p>\n</li>\n<li><p><strong>Club</strong> or <strong>Kinematic sequence - Club/Bat</strong> [°/s]<br />  Net angular speed of the golf club or baseball bat. (Negative: before transition. Positive: after transition.)</p>\n</li>\n<li><p><strong>Chest Rotation</strong> [°]<br />  Rotation angle of the chest around the vertical axis, using the golf interpretation. (Negative: closed. Positive: open.)</p>\n</li>\n<li><p><strong>Chest Side Bend</strong> [°]<br />  Rotation angle of the chest around the sagittal axis, using the golf interpretation. (Negative: lead. Positive: trail.)</p>\n</li>\n<li><p><strong>Chest Forward/Backward Bend</strong> [°]<br />  Rotation angle of the chest around the frontal axis, using the golf interpretation. (Negative: backward. Positive: forward.)</p>\n</li>\n<li><p><strong>Hip Rotation</strong>, <strong>Hip Side Bend</strong>, *<em>Hip Forward/Backward Bend</em>***Same as Chest.</p>\n</li>\n<li><p><strong>Hip/Chest Rotation Delta</strong> [°]<br />  Separation of the hip and the chest around the vertical axis. (Negative: chest is more closed than hip. Positive: chest is more open than hip.)</p>\n</li>\n<li><p><strong>Bat Rotation</strong> [°]<br />  Rotation of the bat around the vertical axis, using the golf/baseball interpretation.</p>\n</li>\n<li><p><strong>Bat Side Bend</strong> [°]<br />  Rotation of the bat around the sagittal axis, using the golf/baseball interpretation.</p>\n</li>\n<li><p><strong>Bat Forward/Backward Bend</strong> [°]<br />  Rotation of the bat around the frontal axis, using the golf/baseball interpretation.</p>\n</li>\n<li><p><strong>Knee Bend</strong> [°]<br />  Rotation of the lower leg around the frontal axis, with respect to the thigh. (0° is fully extended. Negative: hyperextension.)</p>\n</li>\n<li><p><strong>Wrist Flexion/Extension</strong> [°]<br />  (Negative: extension. Positive: flexion.)</p>\n</li>\n<li><p><strong>Wrist Radial/Ulnar</strong> [°]<br />  (Negative: radial. Positive: ulnar.)</p>\n</li>\n<li><p><strong>Wrist Supination/Pronation</strong> [°]<br />  (Negative: pronation. Positive: supination.)</p>\n</li>\n<li><p><strong>Elbow Bend</strong> [°]<br />  Rotation of the forearm around the frontal axis, with respect to the upper arm. (0° is fully extended. Positive: hyperextension.)</p>\n</li>\n<li><p><strong>Hip/Thigh Relative Rotation, Side Bend, Forward/Backward Bend</strong> [°]<br />  Sagittal-vertical-frontal Euler angle decomposition of the hip joint orientation. (Thigh with respect to the pelvis.)</p>\n</li>\n<li><p><strong>Shoulder Adduction/Abduction</strong> [°]<br />  Projection angle of the upper arm with respect to the collarbone, to the frontal plane. (Negative: adduction. Positive: abduction.)</p>\n</li>\n<li><p><strong>Shoulder Flexion/Extension</strong> [°]<br />  Projection angle of the upper arm with respect to the collarbone, to the sagittal plane. (Negative: extension. Positive: flexion.)</p>\n</li>\n<li><p><strong>Shoulder Internal/External Rotation</strong> [°]<br />  Rotation of the upper arm around its own longitudinal axis, with respect to the collarbone. (Negative: internal. Positive: external.)</p>\n</li>\n<li><p><strong>Shoulder Combo Angle</strong> [°]<br />  Angle between the collarbone and the upper arm in 3D. (Always positive. 90° in attention pose.)</p>\n</li>\n<li><p><strong>C Spine Lateral [°]</strong><br />  Projection angle of the head with respect to the chest, to the frontal plane.</p>\n</li>\n<li><p><strong>C Spine</strong> <strong>Rotation [°]</strong><br />  Rotation of the head around the vertical axis, with respect to the chest.</p>\n</li>\n<li><p><strong>C Spine</strong> <strong>Flexion/Extension [°]</strong><br />  Projection angle of the head with respect to the chest, to the sagittal plane (Negative: extension. Positive: flexion.)</p>\n</li>\n<li><p><strong>C Spine Lateral Speed [°/s]</strong></p>\n</li>\n<li><p><strong>C Spine Rotation Speed [°/s]</strong></p>\n</li>\n<li><p><strong>C Spine Flexion/Extension speed [°/s]</strong></p>\n</li>\n<li><p><strong>Trunk Lateral [°]</strong><br />  Projection angle of the chest with respect to the pelvis, to the frontal plane.</p>\n</li>\n<li><p><strong>Trunk Rotation[°]</strong><br />  Rotation of the chest around the vertical axis, with respect to the pelvis.</p>\n</li>\n<li><p><strong>Trunk Flexion/Extension[°]</strong><br />  Projection angle of the chest with respect to the pelvis, to the sagittal plane (Negative: extension. Positive: flexion.)</p>\n</li>\n<li><p><strong>Chest bend speed [°/s]</strong><br />  Angular speed of the chest's forward/backward bend</p>\n</li>\n<li><p><strong>Pelvis sway speed [m/s]</strong><br />  Linear speed of the pelvis moving side to side along the target line (toward the lead or trail side)</p>\n</li>\n<li><p><strong>Pelvis lift speed [m/s]</strong><br />  Linear speed of the pelvis moving vertically (up or down).</p>\n</li>\n<li><p><strong>Pelvis thrust speed [m/s]</strong><br />  Linear speed of the pelvis moving toward or away from the ball, perpendicular to the target line (front to back).</p>\n</li>\n<li><p><strong>Pelvis net speed [m/s]</strong><br />  Overall magnitude of the pelvis's linear velocity, combining sway, lift, and thrust into a single speed.</p>\n</li>\n</ul>\n<h3 id=\"raw-export-orientation-columns\">Raw export orientation columns</h3>\n<p>Exported when mode is set to <strong>raw</strong> or <strong>all</strong></p>\n<p>4 columns per body part: w, x, y, z, forming a quaternion</p>\n<ul>\n<li><p>Hip</p>\n</li>\n<li><p>Chest</p>\n</li>\n<li><p>Left upper arm</p>\n</li>\n<li><p>Left forearm</p>\n</li>\n<li><p>Left hand</p>\n</li>\n<li><p>Right upper arm</p>\n</li>\n<li><p>Right forearm</p>\n</li>\n<li><p>Right hand</p>\n</li>\n<li><p>Head</p>\n</li>\n<li><p>Left thigh</p>\n</li>\n<li><p>Left lower leg</p>\n</li>\n<li><p>Left foot</p>\n</li>\n<li><p>Right thigh</p>\n</li>\n<li><p>Right lower leg</p>\n</li>\n<li><p>Right foot</p>\n</li>\n<li><p>Club/bat (if measured)</p>\n</li>\n</ul>\n<h3 id=\"raw-export-linear-acceleration-columns\">Raw export linear acceleration columns</h3>\n<p>Exported when mode is set to <strong>raw</strong> or <strong>all</strong></p>\n<p>3 columns per body part: x, y, z, forming an acceleration vector in the global reference frame</p>\n<p>Same body parts as above.</p>\n<h3 id=\"optional-columns\">Optional columns</h3>\n<p>only present if the measurement has the given column filled:</p>\n<ul>\n<li><p>Comment</p>\n</li>\n<li><p>Baseball: swing quality</p>\n</li>\n<li><p>Baseball: swing direction</p>\n</li>\n<li><p>Baseball: shot shape</p>\n</li>\n<li><p>Golf: swing quality</p>\n</li>\n<li><p>Golf: swing shot shape</p>\n</li>\n<li><p>Golf: swing height</p>\n</li>\n<li><p>Baseball: pitching type</p>\n</li>\n<li><p>Baseball: pitching quality</p>\n</li>\n<li><p>Baseball: pitching height</p>\n</li>\n<li><p>Baseball: pitching location</p>\n</li>\n<li><p>Baseball: pitching ball velocity</p>\n</li>\n</ul>\n<h3 id=\"metrics-file\">Metrics file</h3>\n<p>Exported when mode is set to <strong>metrics</strong> or <strong>all</strong></p>\n<p>Metric list can be different depending on the configuration of selected measurements or the sensor type. Full system and module captures are all supported.</p>\n<p>A metrics csv file has two columns: metric and value.</p>\n<p>Here are some of the typical metrics by activity (the list might not contain all elements):</p>\n<h4 id=\"golf\">Golf</h4>\n<ul>\n<li><p>Sequence - Transition</p>\n</li>\n<li><p>Sequence - Deceleration</p>\n</li>\n<li><p>Chest - Gain from Pelvis speed</p>\n</li>\n<li><p>Arm - Gain from Chest speed</p>\n</li>\n<li><p>Club - Gain from Arm speed</p>\n</li>\n<li><p>Spine - Stability</p>\n</li>\n<li><p>Pelvis - Peak rot speed</p>\n</li>\n<li><p>Chest - Peak rot speed</p>\n</li>\n<li><p>Arm - Peak rot speed</p>\n</li>\n<li><p>Club - Peak rot speed</p>\n</li>\n<li><p>Spine - Max separation</p>\n</li>\n<li><p>Chest - Chest delay</p>\n</li>\n<li><p>Spine - Spine load</p>\n</li>\n<li><p>Shoulder - Shoulder load</p>\n</li>\n<li><p>Wrist - Wrist load</p>\n</li>\n<li><p>Pelvis - Pelvis quickness</p>\n</li>\n<li><p>Chest - Chest quickness</p>\n</li>\n<li><p>Club - Club quickness</p>\n</li>\n<li><p>Pelvis - Peak rot acceleration</p>\n</li>\n<li><p>Chest - Peak rot acceleration</p>\n</li>\n<li><p>Arm - Peak rot acceleration</p>\n</li>\n<li><p>Club - Peak rot acceleration</p>\n</li>\n<li><p>Left Hand radial/ulnar - Address</p>\n</li>\n<li><p>Right Hand radial/ulnar - Address</p>\n</li>\n<li><p>Left Hand flexion/extension - Address</p>\n</li>\n<li><p>Right Hand flexion/extension - Address</p>\n</li>\n<li><p>Left Hand radial/ulnar - Top</p>\n</li>\n<li><p>Right Hand radial/ulnar - Top</p>\n</li>\n<li><p>Left Hand flexion/extension - Top</p>\n</li>\n<li><p>Right Hand flexion/extension - Top</p>\n</li>\n<li><p>Pelvis forward bend - Impact</p>\n</li>\n<li><p>Pelvis AMM rotation - Impact</p>\n</li>\n<li><p>Pelvis side bend - Impact</p>\n</li>\n<li><p>Chest forward bend - Impact</p>\n</li>\n<li><p>Chest AMM rotation - Impact</p>\n</li>\n<li><p>Chest side bend - Impact</p>\n</li>\n</ul>\n<h4 id=\"baseball--softball-pitching\">Baseball / Softball Pitching</h4>\n<ul>\n<li><p>Sequence - Transition</p>\n</li>\n<li><p>Sequence - Deceleration</p>\n</li>\n<li><p>Chest - Gain from Pelvis speed</p>\n</li>\n<li><p>Arm - Gain from Chest speed</p>\n</li>\n<li><p>Spine - Stability</p>\n</li>\n<li><p>Chest - Chest maximum extension</p>\n</li>\n<li><p>Chest - Chest flexion speed</p>\n</li>\n<li><p>Pelvis - Peak rot speed</p>\n</li>\n<li><p>Chest - Peak rot speed</p>\n</li>\n<li><p>Arm - Peak rot speed</p>\n</li>\n<li><p>Spine - Max separation</p>\n</li>\n<li><p>Chest - Chest delay</p>\n</li>\n<li><p>Pelvis - Peak linear Pelvis speed</p>\n</li>\n<li><p>Chest - Peak linear Chest speed</p>\n</li>\n<li><p>Spine - Spine load</p>\n</li>\n<li><p>Shoulder - Shoulder load</p>\n</li>\n<li><p>Pelvis - Pelvis quickness</p>\n</li>\n<li><p>Chest - Chest quickness</p>\n</li>\n<li><p>Pelvis - Peak rot acceleration</p>\n</li>\n<li><p>Chest - Peak rot acceleration</p>\n</li>\n<li><p>Arm - Peak rot acceleration</p>\n</li>\n<li><p>Right Hand radial/ulnar - Address</p>\n</li>\n<li><p>Right Hand flexion/extension - Address</p>\n</li>\n<li><p>Right Hand radial/ulnar - Top</p>\n</li>\n<li><p>Right Hand flexion/extension - Top</p>\n</li>\n<li><p>Left shoulder - Peak rotation</p>\n</li>\n<li><p>Right shoulder - Peak rotation</p>\n</li>\n<li><p>Left knee bend - Peak knee bend speed</p>\n</li>\n<li><p>Right knee bend - Peak knee bend speed</p>\n</li>\n<li><p>Pelvis forward bend - Impact</p>\n</li>\n<li><p>Pelvis AMM rotation - Impact</p>\n</li>\n<li><p>Pelvis side bend - Impact</p>\n</li>\n<li><p>Chest forward bend - Impact</p>\n</li>\n<li><p>Chest AMM rotation - Impact</p>\n</li>\n<li><p>Chest side bend - Impact</p>\n</li>\n</ul>\n<h4 id=\"baseball--softball-hitting\">Baseball / Softball Hitting</h4>\n<ul>\n<li><p>Sequence - Transition</p>\n</li>\n<li><p>Sequence - Deceleration</p>\n</li>\n<li><p>Chest - Gain from Pelvis speed</p>\n</li>\n<li><p>Arm - Gain from Chest speed</p>\n</li>\n<li><p>Bat - Gain from Arm speed</p>\n</li>\n<li><p>Spine - Stability</p>\n</li>\n<li><p>Pelvis - Peak rot speed</p>\n</li>\n<li><p>Chest - Peak rot speed</p>\n</li>\n<li><p>Arm - Peak rot speed</p>\n</li>\n<li><p>Bat - Peak rot speed</p>\n</li>\n<li><p>Spine - Max separation</p>\n</li>\n<li><p>Chest - Chest delay</p>\n</li>\n<li><p>Pelvis - Peak linear Pelvis speed</p>\n</li>\n<li><p>Chest - Peak linear Chest speed</p>\n</li>\n<li><p>Spine - Spine load</p>\n</li>\n<li><p>Shoulder - Shoulder load</p>\n</li>\n<li><p>Wrist - Wrist load</p>\n</li>\n<li><p>Pelvis - Pelvis quickness</p>\n</li>\n<li><p>Chest - Chest quickness</p>\n</li>\n<li><p>Bat - Speed to impact</p>\n</li>\n<li><p>Pelvis - Peak rot acceleration</p>\n</li>\n<li><p>Chest - Peak rot acceleration</p>\n</li>\n<li><p>Arm - Peak rot acceleration</p>\n</li>\n<li><p>Bat - Peak rot acceleration</p>\n</li>\n<li><p>Left Hand radial/ulnar - Address</p>\n</li>\n<li><p>Right Hand radial/ulnar - Address</p>\n</li>\n<li><p>Left Hand flexion/extension - Address</p>\n</li>\n<li><p>Right Hand flexion/extension - Address</p>\n</li>\n<li><p>Left Hand radial/ulnar - Top</p>\n</li>\n<li><p>Right Hand radial/ulnar - Top</p>\n</li>\n<li><p>Left Hand flexion/extension - Top</p>\n</li>\n<li><p>Right Hand flexion/extension - Top</p>\n</li>\n<li><p>Left shoulder - Peak rotation</p>\n</li>\n<li><p>Right shoulder - Peak rotation</p>\n</li>\n<li><p>Left knee bend - Peak knee bend speed</p>\n</li>\n<li><p>Right knee bend - Peak knee bend speed</p>\n</li>\n<li><p>Bat - Bat to spine angle</p>\n</li>\n<li><p>Bat - Bat horizontal angle at impact</p>\n</li>\n<li><p>Bat - Bat vertical angle at impact</p>\n</li>\n<li><p>Bat - Bat time</p>\n</li>\n<li><p>Bat - Bat attack angle</p>\n</li>\n<li><p>Pelvis forward bend - Impact</p>\n</li>\n<li><p>Pelvis AMM rotation - Impact</p>\n</li>\n<li><p>Pelvis side bend - Impact</p>\n</li>\n<li><p>Chest forward bend - Impact</p>\n</li>\n<li><p>Chest AMM rotation - Impact</p>\n</li>\n<li><p>Chest side bend - Impact</p>\n</li>\n</ul>\n<h3 id=\"pt\">PT</h3>\n<ul>\n<li><p>C spine - Extension/Flexion</p>\n</li>\n<li><p>C spine lateral - Right/Left</p>\n</li>\n<li><p>C spine rotation - Right/Left</p>\n</li>\n<li><p>Trunk - Extension/Flexion</p>\n</li>\n<li><p>Trunk lateral - Right/Left</p>\n</li>\n<li><p>Trunk rotation - Right/Left</p>\n</li>\n<li><p>Chest bend speed - Up/Down</p>\n</li>\n<li><p>Left Hip bend speed - Up/Down</p>\n</li>\n<li><p>Right Hip bend speed - Up/Down</p>\n</li>\n<li><p>Left hip - Extension/Flexion</p>\n</li>\n<li><p>Right hip - Extension/Flexion</p>\n</li>\n<li><p>Left hip - Adduction/Abduction</p>\n</li>\n<li><p>Right hip - Adduction/Abduction</p>\n</li>\n<li><p>Left hip rotation - External/Internal</p>\n</li>\n<li><p>Right hip rotation - External/Internal</p>\n</li>\n<li><p>Left shoulder - Extension/Flexion</p>\n</li>\n<li><p>Right shoulder - Extension/Flexion</p>\n</li>\n<li><p>Left shoulder - Adduction/Abduction</p>\n</li>\n<li><p>Right shoulder - Adduction/Abduction</p>\n</li>\n<li><p>Left shoulder rotation - Internal/External</p>\n</li>\n<li><p>Right shoulder rotation - Internal/External</p>\n</li>\n<li><p>Left elbow bend - Min/Max</p>\n</li>\n<li><p>Right elbow bend - Min/Max</p>\n</li>\n<li><p>Left wrist - Radial/Ulnar</p>\n</li>\n<li><p>Right wrist - Radial/Ulnar</p>\n</li>\n<li><p>Left wrist - Extension/Flexion</p>\n</li>\n<li><p>Right wrist - Extension/Flexion</p>\n</li>\n<li><p>Left wrist - Pronation/Supination</p>\n</li>\n<li><p>Right wrist - Pronation/Supination</p>\n</li>\n<li><p>Left Knee bend speed - Up/Down</p>\n</li>\n<li><p>Right Knee bend speed - Up/Down</p>\n</li>\n<li><p>Left tibia bend (rel. thigh) - Min/Max</p>\n</li>\n<li><p>Right tibia bend (rel. thigh) - Min/Max</p>\n</li>\n<li><p>Left tibia lateral (rel. thigh) - Right/Left</p>\n</li>\n<li><p>Right tibia lateral (rel. thigh) - Right/Left</p>\n</li>\n<li><p>Left tibia rotation (rel thigh) - Right/Left</p>\n</li>\n<li><p>Right tibia rotation (rel. thigh) - Right/Left</p>\n</li>\n</ul>\n<h3 id=\"aggregated-metrics-files\">Aggregated Metrics files</h3>\n<p>Exported when mode is set to <strong>metrics</strong> or <strong>all</strong></p>\n<p>Located in a directory, aggregated metrics are provided.</p>\n<p>Measurements are separated into files by configuration used.</p>\n<p>Currently the following capture modules are <strong>NOT</strong> supported in aggregation:</p>\n<ul>\n<li><p>all modules associated with the football activity</p>\n</li>\n<li><p>Chest, Lower legs, 3 sensors</p>\n</li>\n<li><p>Running Speed: Chest, Lower legs, 3 sensors</p>\n</li>\n</ul>\n","_postman_id":"31b805cd-a0e5-4990-8d59-5bbeed4c55d2"}],"event":[{"listen":"prerequest","script":{"id":"e0193ce6-0731-4f05-a538-6aebde43a88d","type":"text/javascript","exec":[""]}},{"listen":"test","script":{"id":"54fc3f2b-5154-46f3-9f98-4976c6d7ca4b","type":"text/javascript","exec":[""]}}]}