{"info":{"_postman_id":"cbac8236-0de3-471f-8a72-2c1901111803","name":"Postman Echo","description":"Postman Echo is service you can use to test your REST clients and make sample API calls. It provides endpoints for `GET`, `POST`, `PUT`, various auth mechanisms and other utility endpoints.\n\nThe documentation for the endpoints as well as example responses can be found at [https://postman-echo.com](https://postman-echo.com/?source=echo-collection-app-onboarding)","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json"},"item":[{"name":"Request Methods","item":[{"name":"GET Request","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test(\"response is ok\", function () {","    pm.response.to.have.status(200);","});","","pm.test(\"response body has json with request queries\", function () {","    pm.response.to.have.jsonBody('args.foo1', 'bar1')","        .and.have.jsonBody('args.foo2', 'bar2');","});"]}}],"id":"0136fe65-de03-4754-bd76-ccc986e1091d","request":{"method":"GET","header":[],"url":{"raw":"https://postman-echo.com/get?foo1=bar1&foo2=bar2","protocol":"https","host":["postman-echo","com"],"path":["get"],"query":[{"key":"foo1","value":"bar1"},{"key":"foo2","value":"bar2"}]},"description":"The HTTP `GET` request method is meant to retrieve data from a server. The data\nis identified by a unique URI (Uniform Resource Identifier). \n\nA `GET` request can pass parameters to the server using \"Query String \nParameters\". For example, in the following request,\n\n> http://example.com/hi/there?hand=wave\n\nThe parameter \"hand\" has the value \"wave\".\n\nThis endpoint echoes the HTTP headers, request parameters and the complete\nURI requested."},"response":[{"id":"a4b5a71a-a1d9-4852-8d37-324c229024e3","name":"GET Request Woops","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://postman-echo.com/get?foo1=bar1&foo2=bar2","protocol":"https","host":["postman-echo","com"],"path":["get"],"query":[{"key":"foo1","value":"bar1"},{"key":"foo2","value":"bar2"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Encoding","value":"gzip"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Date","value":"Tue, 11 Jun 2019 10:43:13 GMT"},{"key":"ETag","value":"W/\"161-aLhNcsGArlgLSKbxPqfBW3viHPI\""},{"key":"Server","value":"nginx"},{"key":"set-cookie","value":"sails.sid=s%3AGz-wblZgXE8FCDq7aJpx_tUgZUcG3Nsw.LdNEN8L0C7nGWkvGLwvdw6R2s6Syjr%2FzkvyevA8qR0c; Path=/; HttpOnly"},{"key":"Vary","value":"Accept-Encoding"},{"key":"Content-Length","value":"249"},{"key":"Connection","value":"keep-alive"}],"cookie":[],"body":"{\n    \"args\": {\n        \"foo1\": \"bar1\",\n        \"foo2\": \"bar2\"\n    },\n    \"headers\": {\n        \"x-forwarded-proto\": \"https\",\n        \"host\": \"postman-echo.com\",\n        \"accept\": \"*/*\",\n        \"accept-encoding\": \"gzip, deflate\",\n        \"cache-control\": \"no-cache\",\n        \"postman-token\": \"5c27cd7d-6b16-4e5a-a0ef-191c9a3a275f\",\n        \"user-agent\": \"PostmanRuntime/7.6.1\",\n        \"x-forwarded-port\": \"443\"\n    },\n    \"url\": \"https://postman-echo.com/get?foo1=bar1&foo2=bar2\"\n}"}]},{"name":"POST Raw Text","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test(\"response is ok\", function () {","    pm.response.to.have.status(200);","});","","pm.test(\"response body has json with request body\", function () {","    pm.response.to.have.jsonBody('data', ","        'This is expected to be sent back as part of response body.');","});"]}}],"id":"dc9c15cb-8832-4ac3-bc3c-87835b44d1b3","request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"This is expected to be sent back as part of response body."},"url":"https://postman-echo.com/post","description":"The HTTP `POST` request method is meant to transfer data to a server \n(and elicit a response). What data is returned depends on the implementation\nof the server.\n\nA `POST` request can pass parameters to the server using \"Query String \nParameters\", as well as the Request Body. For example, in the following request,\n\n> POST /hi/there?hand=wave\n>\n> <request-body>\n\nThe parameter \"hand\" has the value \"wave\". The request body can be in multiple\nformats. These formats are defined by the MIME type of the request. The MIME \nType can be set using the ``Content-Type`` HTTP header. The most commonly used \nMIME types are:\n\n* `multipart/form-data`\n* `application/x-www-form-urlencoded`\n* `application/json`\n\nThis endpoint echoes the HTTP headers, request parameters, the contents of\nthe request body and the complete URI requested."},"response":[]},{"name":"POST Form Data","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test(\"response is ok\", function () {","    pm.response.to.have.status(200);","});","","pm.test(\"response body has json with form data\", function () {","    pm.response.to.have.jsonBody('form.foo1', 'bar1')","        .and.have.jsonBody('form.foo2', 'bar2');","});"]}}],"id":"40277a21-b07d-4bbe-9dcd-7abba16e75b5","request":{"method":"POST","header":[],"body":{"mode":"urlencoded","urlencoded":[{"key":"foo1","value":"bar1","type":"text"},{"key":"foo2","value":"bar2","type":"text"}]},"url":"https://postman-echo.com/post","description":"The HTTP `POST` request method is meant to transfer data to a server \n(and elicit a response). What data is returned depends on the implementation\nof the server.\n\nA `POST` request can pass parameters to the server using \"Query String \nParameters\", as well as the Request Body. For example, in the following request,\n\n> POST /hi/there?hand=wave\n>\n> <request-body>\n\nThe parameter \"hand\" has the value \"wave\". The request body can be in multiple\nformats. These formats are defined by the MIME type of the request. The MIME \nType can be set using the ``Content-Type`` HTTP header. The most commonly used \nMIME types are:\n\n* `multipart/form-data`\n* `application/x-www-form-urlencoded`\n* `application/json`\n\nThis endpoint echoes the HTTP headers, request parameters, the contents of\nthe request body and the complete URI requested when data is sent as a form parameter."},"response":[]},{"name":"PUT Request","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test(\"response is ok\", function () {","    pm.response.to.have.status(200);","});","","pm.test(\"response body has json with form data\", function () {","    pm.response.to.have.jsonBody('data', ","        'This is expected to be sent back as part of response body.');","});"]}}],"id":"a9e46d94-d959-4103-95b2-52cc0098aa61","request":{"method":"PUT","header":[],"body":{"mode":"raw","raw":"This is expected to be sent back as part of response body."},"url":"https://postman-echo.com/put","description":"The HTTP `PUT` request method is similar to HTTP `POST`. It too is meant to \ntransfer data to a server (and elicit a response). What data is returned depends on the implementation\nof the server.\n\nA `PUT` request can pass parameters to the server using \"Query String \nParameters\", as well as the Request Body. For example, in the following \nraw HTTP request,\n\n> PUT /hi/there?hand=wave\n>\n> <request-body>\n\n\n"},"response":[]},{"name":"PATCH Request","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test(\"response is ok\", function () {","    pm.response.to.have.status(200);","});","","pm.test(\"response body has json with form data\", function () {","    pm.response.to.have.jsonBody('data', ","        'This is expected to be sent back as part of response body.');","});"]}}],"id":"7ecd903f-63d9-49e9-9a7d-4d3b4a7844b4","request":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"This is expected to be sent back as part of response body."},"url":"https://postman-echo.com/patch","description":"The HTTP `PATCH` method is used to update resources on a server. The exact\nuse of `PATCH` requests depends on the server in question. There are a number\nof server implementations which handle `PATCH` differently. Technically, \n`PATCH` supports both Query String parameters and a Request Body.\n\nThis endpoint accepts an HTTP `PATCH` request and provides debug information\nsuch as the HTTP headers, Query String arguments, and the Request Body."},"response":[]},{"name":"DELETE Request","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test(\"response is ok\", function () {","    pm.response.to.have.status(200);","});","","pm.test(\"response body has json with form data\", function () {","    pm.response.to.have.jsonBody('data', ","        'This is expected to be sent back as part of response body.');","});"]}}],"id":"f1301434-f821-4fe9-b992-c413c2e6acb9","request":{"method":"DELETE","header":[],"body":{"mode":"raw","raw":"This is expected to be sent back as part of response body."},"url":"https://postman-echo.com/delete","description":"The HTTP `DELETE` method is used to delete resources on a server. The exact\nuse of `DELETE` requests depends on the server implementation. In general, \n`DELETE` requests support both, Query String parameters as well as a Request \nBody.\n\nThis endpoint accepts an HTTP `DELETE` request and provides debug information\nsuch as the HTTP headers, Query String arguments, and the Request Body."},"response":[]}],"id":"17af1741-ed60-45f8-bc9d-8ce182568907","description":"HTTP has multiple request \"verbs\", such as `GET`, `PUT`, `POST`, `DELETE`,\n`PATCH`, `HEAD`, etc. \n\nAn HTTP Method (verb) defines how a request should be interpreted by a server. \nThe endpoints in this section demonstrate various HTTP Verbs. Postman supports \nall the HTTP Verbs, including some rarely used ones, such as `PROPFIND`, `UNLINK`, \netc.\n\nFor details about HTTP Verbs, refer to [RFC 2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9)\n"},{"name":"Headers","item":[{"name":"Request Headers","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test(\"response is ok\", function () {","    pm.response.to.have.status(200);","});","","// we check to ensire that the headers we sent as request is returned as part of","// the response body. if you change the request headers, make sure to add them","// to the tests here","pm.test(\"sample request header should be returned in response body\", function () {","    pm.response.to.have.jsonBody('headers.my-sample-header', 'Lorem ipsum dolor sit amet');","});"]}}],"id":"2c72fe72-e9c1-4341-890f-537316ecfa55","request":{"method":"GET","header":[{"key":"my-sample-header","value":"Lorem ipsum dolor sit amet"}],"url":"https://postman-echo.com/headers","description":"A `GET` request to this endpoint returns the list of all request headers as part of the response JSON.\nIn Postman, sending your own set of headers through the [Headers tab](https://www.getpostman.com/docs/requests#headers?source=echo-collection-app-onboarding) will reveal the headers as part of the response."},"response":[{"id":"d4e1892c-8b77-4e74-af0c-1f89be4c812c","name":"my-sample-header","originalRequest":{"method":"GET","header":[{"key":"my-sample-header","value":"Lorem ipsum dolor sit amet","enabled":true}],"url":"https://echo.getpostman.com/headers"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Access-Control-Allow-Credentials","value":"","name":"Access-Control-Allow-Credentials","description":""},{"key":"Access-Control-Allow-Headers","value":"","name":"Access-Control-Allow-Headers","description":""},{"key":"Access-Control-Allow-Methods","value":"","name":"Access-Control-Allow-Methods","description":""},{"key":"Access-Control-Allow-Origin","value":"","name":"Access-Control-Allow-Origin","description":""},{"key":"Connection","value":"keep-alive","name":"Connection","description":""},{"key":"Content-Encoding","value":"gzip","name":"Content-Encoding","description":""},{"key":"Content-Length","value":"342","name":"Content-Length","description":""},{"key":"Content-Type","value":"application/json; charset=utf-8","name":"Content-Type","description":""},{"key":"Date","value":"Thu, 31 Mar 2016 11:14:00 GMT","name":"Date","description":""},{"key":"Server","value":"nginx/1.6.2","name":"Server","description":""},{"key":"Vary","value":"Accept-Encoding","name":"Vary","description":""},{"key":"X-Powered-By","value":"Sails <sailsjs.org>","name":"X-Powered-By","description":""}],"cookie":[{"expires":"Invalid Date","hostOnly":true,"httpOnly":true,"domain":"echo.getpostman.com","path":"/","secure":false,"session":true,"value":"s%3A9stja5zKmIILxq9Jvtha7Lp9LIz1VIdK.Vp8MHC%2BEUJe4ICZPXn2JAoXaV2bTgtoQd%2B3XJLNr51Y","key":"sails.sid"}],"body":"{\n    \"headers\": {\n        \"host\": \"echo.getpostman.com\",\n        \"accept\": \"*/*\",\n        \"accept-encoding\": \"gzip, deflate, sdch\",\n        \"accept-language\": \"en-US,en;q=0.8\",\n        \"cache-control\": \"no-cache\",\n        \"my-sample-header\": \"Lorem ipsum dolor sit amet\",\n        \"postman-token\": \"3c8ea80b-f599-fba6-e0b4-a0910440e7b6\",\n        \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36\",\n        \"x-forwarded-port\": \"443\",\n        \"x-forwarded-proto\": \"https\"\n    }\n}"}]},{"name":"Response Headers","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test(\"response is ok\", function () {","    pm.response.to.have.status(200);","});","","pm.test(\"response has the headers sent as part of request query\", function () {","    pm.response.to.have.header('foo1', 'bar1')","        .and.have.header('foo2', 'bar2');","});","","pm.test(\"sample request param should be returned in response body\", function () {","    pm.response.to.have.jsonBody('foo1', 'bar1')","        .and.have.jsonBody('foo2', 'bar2');","});"]}}],"id":"41031d0f-d7d9-4052-a7cb-19e4ce233771","request":{"method":"GET","header":[],"url":{"raw":"https://postman-echo.com/response-headers?foo1=bar1&foo2=bar2","protocol":"https","host":["postman-echo","com"],"path":["response-headers"],"query":[{"key":"foo1","value":"bar1"},{"key":"foo2","value":"bar2"}]},"description":"This endpoint causes the server to send custom set of response headers. Providing header values as part of the URL parameters of a `GET` request to this endpoint returns the same as part of response header.\n\nTo send your own set of headers, simply add or replace the the URL parameters with your own set."},"response":[{"id":"5f28bb55-b27e-42f9-ad58-863774a6e2b2","name":"Response headers","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://echo.getpostman.com/response-headers?Content-Type=text/html&test=response_headers","protocol":"https","host":["echo","getpostman","com"],"path":["response-headers"],"query":[{"key":"Content-Type","value":"text/html"},{"key":"test","value":"response_headers"}]}},"status":"OK","code":200,"_postman_previewlanguage":"html","header":[{"key":"Access-Control-Allow-Credentials","value":"","name":"Access-Control-Allow-Credentials","description":""},{"key":"Access-Control-Allow-Headers","value":"","name":"Access-Control-Allow-Headers","description":""},{"key":"Access-Control-Allow-Methods","value":"","name":"Access-Control-Allow-Methods","description":""},{"key":"Access-Control-Allow-Origin","value":"","name":"Access-Control-Allow-Origin","description":""},{"key":"Connection","value":"keep-alive","name":"Connection","description":""},{"key":"Content-Encoding","value":"gzip","name":"Content-Encoding","description":""},{"key":"Content-Length","value":"71","name":"Content-Length","description":""},{"key":"Content-Type","value":"text/html; charset=utf-8","name":"Content-Type","description":""},{"key":"Date","value":"Thu, 31 Mar 2016 11:14:18 GMT","name":"Date","description":""},{"key":"Server","value":"nginx/1.6.2","name":"Server","description":""},{"key":"Vary","value":"Accept-Encoding","name":"Vary","description":""},{"key":"X-Powered-By","value":"Sails <sailsjs.org>","name":"X-Powered-By","description":""},{"key":"test","value":"response_headers","name":"test","description":""}],"cookie":[{"expires":"Invalid Date","hostOnly":true,"httpOnly":true,"domain":"echo.getpostman.com","path":"/","secure":false,"session":true,"value":"s%3A9stja5zKmIILxq9Jvtha7Lp9LIz1VIdK.Vp8MHC%2BEUJe4ICZPXn2JAoXaV2bTgtoQd%2B3XJLNr51Y","key":"sails.sid"}],"body":"{\"Content-Type\":\"text/html\",\"test\":\"response_headers\"}"}]}],"id":"1a0f4e92-42e0-4b1b-9222-41f7ab9f27f7","description":"The following set of endpoints allow one to see the headers being sent as part of a request and to get a custom set of headers as part of response.\n\nHTTP header fields provide required information about the request or response, or about the object sent in the message body. Both request headers and response headers can be controlled using these endpoints."},{"name":"Authentication Methods","item":[{"name":"Basic Auth","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test(\"response is ok\", function () {","    pm.response.to.have.status(200);","});","","pm.test(\"response body has json saying 'authenticated'\", function () {","    pm.response.to.have.jsonBody('authenticated', true);","});"]}}],"id":"318484c6-e155-4c23-8ed6-6e3f31e95f13","request":{"auth":{"type":"basic","basic":{"username":"postman","password":"password","showPassword":false}},"method":"GET","header":[],"url":"https://postman-echo.com/basic-auth","description":"This endpoint simulates a **basic-auth** protected endpoint. \nThe endpoint accepts a default username and password and returns a status code of `200 ok` only if the same is provided. \nOtherwise it will return a status code `401 unauthorized`.\n\n> Username: `postman`\n> \n> Password: `password`\n\nTo use this endpoint, send a request with the header `Authorization: Basic cG9zdG1hbjpwYXNzd29yZA==`. \nThe cryptic latter half of the header value is a base64 encoded concatenation of the default username and password. \nUsing Postman, to send this request, you can simply fill in the username and password in the \"Authorization\" tab and Postman will do the rest for you.\n\nTo know more about basic authentication, refer to the [Basic Access Authentication](https://en.wikipedia.org/wiki/Basic_access_authentication) wikipedia article.\nThe article on [authentication helpers](https://www.getpostman.com/docs/helpers#basic-auth?source=echo-collection-app-onboarding) elaborates how to use the same within the Postman app."},"response":[{"id":"0403838b-1493-49bf-aab7-505d9e4f6f67","name":"200","originalRequest":{"auth":{"type":"basic","basic":{"username":"postman","password":"password","showPassword":false}},"method":"GET","header":[],"url":"https://postman-echo.com/basic-auth","description":"This endpoint simulates a **basic-auth** protected endpoint. \nThe endpoint accepts a default username and password and returns a status code of `200 ok` only if the same is provided. \nOtherwise it will return a status code `401 unauthorized`.\n\n> Username: `postman`\n> \n> Password: `password`\n\nTo use this endpoint, send a request with the header `Authorization: Basic cG9zdG1hbjpwYXNzd29yZA==`. \nThe cryptic latter half of the header value is a base64 encoded concatenation of the default username and password. \nUsing Postman, to send this request, you can simply fill in the username and password in the \"Authorization\" tab and Postman will do the rest for you.\n\nTo know more about basic authentication, refer to the [Basic Access Authentication](https://en.wikipedia.org/wiki/Basic_access_authentication) wikipedia article.\nThe article on [authentication helpers](https://www.getpostman.com/docs/helpers#basic-auth?source=echo-collection-app-onboarding) elaborates how to use the same within the Postman app."},"status":"OK","code":200,"_postman_previewlanguage":"javascript","header":[{"key":"Access-Control-Allow-Credentials","value":"","name":"Access-Control-Allow-Credentials","description":""},{"key":"Access-Control-Allow-Headers","value":"","name":"Access-Control-Allow-Headers","description":""},{"key":"Access-Control-Allow-Methods","value":"","name":"Access-Control-Allow-Methods","description":""},{"key":"Access-Control-Allow-Origin","value":"","name":"Access-Control-Allow-Origin","description":""},{"key":"Connection","value":"keep-alive","name":"Connection","description":""},{"key":"Content-Encoding","value":"gzip","name":"Content-Encoding","description":""},{"key":"Content-Length","value":"42","name":"Content-Length","description":""},{"key":"Content-Type","value":"application/json; charset=utf-8","name":"Content-Type","description":""},{"key":"Date","value":"Sat, 31 Oct 2015 06:38:25 GMT","name":"Date","description":""},{"key":"Server","value":"nginx/1.6.2","name":"Server","description":""},{"key":"Vary","value":"Accept-Encoding","name":"Vary","description":""},{"key":"X-Powered-By","value":"Sails <sailsjs.org>","name":"X-Powered-By","description":""}],"cookie":[],"body":"{\"authenticated\":true}"}]},{"name":"DigestAuth Success","event":[{"listen":"test","script":{"type":"text/javascript","exec":["tests[\"response code is 200\"] = responseCode.code === 200;","tests[\"body contains authenticated\"] = responseBody.has(\"authenticated\");"]}}],"id":"3980ab29-d041-4cf8-b33d-fe99ed9366b2","request":{"auth":{"type":"digest","digest":{"algorithm":"MD5","username":"postman","realm":"{{echo_digest_realm}}","password":"password","nonce":"{{echo_digest_nonce}}","nonceCount":"","clientNonce":"","opaque":"","qop":""}},"method":"GET","header":[{"key":"Authorization","value":"Digest username=\"postman\", realm=\"Users\", nonce=\"ni1LiL0O37PRRhofWdCLmwFsnEtH1lew\", uri=\"/digest-auth\", response=\"254679099562cf07df9b6f5d8d15db44\", opaque=\"\""}],"url":"https://postman-echo.com/digest-auth","description":"This endpoint sends a hashed Digest Authorization header to gain access to a valid `200 Ok` response code. In Postman, it uses the stored [global variables](https://www.getpostman.com/docs/environments#gloval-variables?source=echo-collection-app-onboarding), `echo_digest_realm` and `echo_digest_nonce`, to generate the hashed authorisation header.\n\nWithin Postman, for this request to successfully authenticate, running the previous request \"DigestAuth Request\" stores the relevant information within the global variables."},"response":[{"id":"666a80da-fab4-4d38-8b79-6d52eb239c6f","name":"200","originalRequest":{"auth":{"type":"digest","digest":{"algorithm":"MD5","username":"postman","realm":"{{echo_digest_realm}}","password":"password","nonce":"{{echo_digest_nonce}}","nonceCount":"","clientNonce":"","opaque":"","qop":""}},"method":"GET","header":[{"key":"Authorization","value":"Digest username=\"postman\", realm=\"Users\", nonce=\"ni1LiL0O37PRRhofWdCLmwFsnEtH1lew\", uri=\"/digest-auth\", response=\"254679099562cf07df9b6f5d8d15db44\", opaque=\"\""}],"url":"https://postman-echo.com/digest-auth","description":"This endpoint sends a hashed Digest Authorization header to gain access to a valid `200 Ok` response code. In Postman, it uses the stored [global variables](https://www.getpostman.com/docs/environments#gloval-variables?source=echo-collection-app-onboarding), `echo_digest_realm` and `echo_digest_nonce`, to generate the hashed authorisation header.\n\nWithin Postman, for this request to successfully authenticate, running the previous request \"DigestAuth Request\" stores the relevant information within the global variables."},"status":"OK","code":200,"_postman_previewlanguage":"javascript","header":[{"key":"Access-Control-Allow-Credentials","value":"","name":"Access-Control-Allow-Credentials","description":""},{"key":"Access-Control-Allow-Headers","value":"","name":"Access-Control-Allow-Headers","description":""},{"key":"Access-Control-Allow-Methods","value":"","name":"Access-Control-Allow-Methods","description":""},{"key":"Access-Control-Allow-Origin","value":"","name":"Access-Control-Allow-Origin","description":""},{"key":"Connection","value":"keep-alive","name":"Connection","description":""},{"key":"Content-Encoding","value":"gzip","name":"Content-Encoding","description":""},{"key":"Content-Length","value":"42","name":"Content-Length","description":""},{"key":"Content-Type","value":"application/json; charset=utf-8","name":"Content-Type","description":""},{"key":"Date","value":"Thu, 29 Oct 2015 06:17:51 GMT","name":"Date","description":""},{"key":"Server","value":"nginx/1.6.2","name":"Server","description":""},{"key":"Vary","value":"Accept-Encoding","name":"Vary","description":""},{"key":"X-Powered-By","value":"Sails <sailsjs.org>","name":"X-Powered-By","description":""}],"cookie":[],"body":"{\"authenticated\":true}"}]},{"name":"Hawk Auth","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test(\"response is ok\", function () {","    pm.response.to.have.status(200);","});","","pm.test(\"response body has json saying passed 'status'\", function () {","    pm.response.to.have.jsonBody('status', 'pass');","});"]}}],"id":"4c4f38fd-4524-4344-8471-72097e344ad0","request":{"auth":{"type":"hawk","hawk":{"authId":"dh37fgj492je","authKey":"werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn","algorithm":"sha256","user":"","nonce":"RZKGNz","timestamp":""}},"method":"GET","header":[],"url":"https://postman-echo.com/auth/hawk","description":"This endpoint is a Hawk Authentication protected endpoint. [Hawk authentication](https://github.com/hueniverse/hawk) is a widely used protocol for protecting API endpoints. One of Hawk's main goals is to enable HTTP authentication for services that do not use TLS (although it can be used in conjunction with TLS as well).\n\nIn order to use this endpoint, select the \"Hawk Auth\" helper inside Postman, and set the following values:\n\nHawk Auth ID: `dh37fgj492je`\n\nHawk Auth Key: `werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn`\n\nAlgorithm: `sha256`\n\nThe rest of the values are optional, and can be left blank. Hitting send should give you a response with a status code of 200 OK."},"response":[{"id":"ed5d0100-bf0c-41b8-a673-7d251b7b5db4","name":"Success","originalRequest":{"method":"GET","header":[{"key":"Authorization","type":"text","name":"Authorization","value":"Hawk id=\"dh37fgj492je\", ts=\"1459422734\", nonce=\"XiwiCU\", mac=\"KzMHk67BYCC9zZqRy5hRdWFEFLHX5bNlRWGdmOAWKp0=\""}],"url":"https://echo.getpostman.com/auth/hawk"},"status":"OK","code":200,"_postman_previewlanguage":"javascript","header":[{"key":"Access-Control-Allow-Credentials","value":"","name":"Access-Control-Allow-Credentials","description":""},{"key":"Access-Control-Allow-Headers","value":"","name":"Access-Control-Allow-Headers","description":""},{"key":"Access-Control-Allow-Methods","value":"","name":"Access-Control-Allow-Methods","description":""},{"key":"Access-Control-Allow-Origin","value":"","name":"Access-Control-Allow-Origin","description":""},{"key":"Connection","value":"keep-alive","name":"Connection","description":""},{"key":"Content-Encoding","value":"gzip","name":"Content-Encoding","description":""},{"key":"Content-Type","value":"application/json","name":"Content-Type","description":""},{"key":"Date","value":"Thu, 31 Mar 2016 11:12:16 GMT","name":"Date","description":""},{"key":"Server","value":"nginx/1.6.2","name":"Server","description":""},{"key":"Server-Authorization","value":"Hawk mac=\"vRrUzDdcHu2NaNts/r4zg2xmXMdX8wPiTGTM398BDRg=\", hash=\"qmtflETMybaZiOQ2dLT17yiRunFT5OCIxZRZ0boQaiE=\"","name":"Server-Authorization","description":""},{"key":"Vary","value":"Accept-Encoding","name":"Vary","description":""},{"key":"X-Powered-By","value":"Sails <sailsjs.org>","name":"X-Powered-By","description":""},{"key":"transfer-encoding","value":"chunked","name":"transfer-encoding","description":""}],"cookie":[{"expires":"Fri Apr 15 2016 10:54:28 GMT+0000 (Coordinated Universal Time)","hostOnly":false,"httpOnly":false,"domain":".getpostman.com","path":"/","secure":false,"session":false,"value":"yes","key":"getpostmanlogin"},{"expires":"Fri Apr 15 2016 10:54:28 GMT+0000 (Coordinated Universal Time)","hostOnly":false,"httpOnly":false,"domain":".getpostman.com","path":"/","secure":false,"session":false,"value":"9f887f3b7f14b8c29ac4dc4109381b0b89a76e785c7b34251d6c8025b41b24013d2aa49f40e2deac19cbf0594dd984169455534d91ff98d4d1868d67ac857017629f137926e3a04a616bb83a2fb5ab9e6cbea9579ed5d5c1155d47545d72aad5be99f4abd0a7130805b3807d70cd507171dbe9d950d8e35a853f9ec075f5a767c95df4d57f7d521b66605b3bda3801700e26e651d1129c798b729ee3b91702d43ae64ab226c3f426893753def772c15442a7552dc84a3c773d6099a50b0a6af940b64c8176fedfcecd5fc31ccfc3bbc0124bfdaa0d62e4252d4aafb46a3c10963d12391e1fa97a1c0f19a636f57a3ac8cc35567d1cb6cb53b77f8adde3f6754a765596d7d00bdeb9acb5cc8d115e7c3f50ec3228e34d3e6c7464e9039b01868e03d10e9f87772397602453e9e91205de7b86021fad06eb26e69298e99ff1597a670faeb310f8c092041d544851de84f2bee89a92123da6eea286210524035c85361e2af42166a6","key":"postman.sid"},{"expires":"Invalid Date","hostOnly":true,"httpOnly":true,"domain":"echo.getpostman.com","path":"/","secure":false,"session":true,"value":"s%3AryJV7v-PE4PuTjBK6nH5XOynQ4atuATV.n17KcaLhVmV8TBHNLwdwXgGR7lmqs3i478WPlTbRgZ4","key":"sails.sid"}],"body":"{\"status\":\"pass\",\"message\":\"Hawk Authentication successful\"}"}]},{"name":"OAuth1.0 (verify signature)","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test(\"response is ok\", function () {","    pm.response.to.have.status(200);","});","","pm.test(\"response body has json saying passed 'status'\", function () {","    pm.response.to.have.jsonBody('status', 'pass');","});"]}}],"id":"063e9bc2-a714-4423-b3b1-a56d2fa13d56","request":{"auth":{"type":"oauth1","oauth1":{"consumerKey":"RKCGzna7bv9YD57c","consumerSecret":"D+EdQ-gs$-%@2Nu7","token":"","tokenSecret":"","signatureMethod":"HMAC-SHA1","timestamp":"","nonce":"","version":"","realm":"","addParamsToHeader":true,"addEmptyParamsToSign":false}},"method":"GET","header":[],"url":"https://postman-echo.com/oauth1","description":"OAuth1.0a is a specification that defines a protocol that can be used by one\nservice to access \"protected\" resources (endpoints) on another service. A\nmajor part of OAuth1.0 is HTTP Request Signing. This endpoint allows you to \ncheck whether the request calculation works properly in the client. \n\nThe endpoint supports the HTTP ``Authorization`` header. In case the signature\nverification fails, the endpoint provides the four debug values,\n\n* ``base_uri``\n* ``normalized_param_string``\n* ``base_string``\n* ``signing_key``\n\nFor more details about these parameters, check the [OAuth1.0a Specification](http://oauth.net/core/1.0a/)\n\nIn order to use this endpoint, you can set the following values:\n\n> Consumer Key: ``RKCGzna7bv9YD57c``\n>\n> Consumer Secret: ``D+EdQ-gs$-%@2Nu7``\n\nIf you are using Postman, also check the \"Add params to header\" and \n\"Auto add parameters\" boxes."},"response":[{"id":"f180268b-2a0a-47e9-9363-b860ce225f81","name":"200","originalRequest":{"method":"GET","header":[{"key":"Authorization","name":"Authorization","value":"OAuth oauth_consumer_key=\"RKCGzna7bv9YD57c\",oauth_signature_method=\"HMAC-SHA1\",oauth_timestamp=\"1472121261\",oauth_nonce=\"ki0RQW\",oauth_version=\"1.0\",oauth_signature=\"s0rK92Myxx7ceUBVzlMaxiiXU00%3D\""}],"url":"https://echo.getpostman.com/oauth1"},"status":"OK","code":200,"_postman_previewlanguage":"javascript","header":[{"key":"Access-Control-Allow-Credentials","value":"","name":"Access-Control-Allow-Credentials","description":""},{"key":"Access-Control-Allow-Headers","value":"","name":"Access-Control-Allow-Headers","description":""},{"key":"Access-Control-Allow-Methods","value":"","name":"Access-Control-Allow-Methods","description":""},{"key":"Access-Control-Allow-Origin","value":"","name":"Access-Control-Allow-Origin","description":""},{"key":"Access-Control-Expose-Headers","value":"","name":"Access-Control-Expose-Headers","description":""},{"key":"Connection","value":"keep-alive","name":"Connection","description":""},{"key":"Content-Encoding","value":"gzip","name":"Content-Encoding","description":""},{"key":"Content-Length","value":"95","name":"Content-Length","description":""},{"key":"Content-Type","value":"application/json; charset=utf-8","name":"Content-Type","description":""},{"key":"Date","value":"Thu, 25 Aug 2016 10:34:23 GMT","name":"Date","description":""},{"key":"ETag","value":"W/\"4e-Cq3UhvpVSyl6R6204lPVIA\"","name":"ETag","description":""},{"key":"Server","value":"nginx/1.8.1","name":"Server","description":""},{"key":"Vary","value":"Accept-Encoding","name":"Vary","description":""}],"cookie":[],"body":"{\"status\":\"pass\",\"message\":\"OAuth-1.0a signature verification was successful\"}"},{"id":"ebad824f-15ae-4a20-b0fc-b2a1eb34761c","name":"401","originalRequest":{"method":"GET","header":[{"key":"Authorization","type":"text","name":"Authorization","value":"OAuth oauth_consumer_key=\"RKCGzna7bv9YD57c_wrong\",oauth_signature_method=\"HMAC-SHA1\",oauth_timestamp=\"1472121295\",oauth_nonce=\"8LTsU2\",oauth_version=\"1.0\",oauth_signature=\"tSUexpY%2B7EhSY7cFXiFN5EMx2zw%3D\""}],"url":"https://echo.getpostman.com/oauth1"},"status":"Unauthorized","code":401,"_postman_previewlanguage":"javascript","header":[{"key":"Access-Control-Allow-Credentials","value":"","name":"Access-Control-Allow-Credentials","description":""},{"key":"Access-Control-Allow-Headers","value":"","name":"Access-Control-Allow-Headers","description":""},{"key":"Access-Control-Allow-Methods","value":"","name":"Access-Control-Allow-Methods","description":""},{"key":"Access-Control-Allow-Origin","value":"","name":"Access-Control-Allow-Origin","description":""},{"key":"Access-Control-Expose-Headers","value":"","name":"Access-Control-Expose-Headers","description":""},{"key":"Connection","value":"keep-alive","name":"Connection","description":""},{"key":"Content-Length","value":"536","name":"Content-Length","description":""},{"key":"Content-Type","value":"application/json; charset=utf-8","name":"Content-Type","description":""},{"key":"Date","value":"Thu, 25 Aug 2016 10:34:55 GMT","name":"Date","description":""},{"key":"ETag","value":"W/\"218-SGnurnTsu5qV5cCYWxsJlg\"","name":"ETag","description":""},{"key":"Server","value":"nginx/1.8.1","name":"Server","description":""},{"key":"Vary","value":"Accept-Encoding","name":"Vary","description":""}],"cookie":[],"body":"{\"status\":\"fail\",\"message\":\"HMAC-SHA1 verification failed\",\"base_uri\":\"https://echo.getpostman.com/oauth1\",\"normalized_param_string\":\"oauth_consumer_key=RKCGzna7bv9YD57c_wrong&oauth_nonce=8LTsU2&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1472121295&oauth_version=1.0\",\"base_string\":\"GET&https%3A%2F%2Fecho.getpostman.com%2Foauth1&oauth_consumer_key%3DRKCGzna7bv9YD57c_wrong%26oauth_nonce%3D8LTsU2%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1472121295%26oauth_version%3D1.0\",\"signing_key\":\"D%2BEdQ-gs%24-%25%402Nu7&\"}"}]}],"id":"5d3a983c-d3bf-46db-baf5-6802944603d1"},{"name":"Cookie Manipulation","item":[{"name":"Set Cookies","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('response should be 200 or 302', function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 302]);","});","","pm.test('the \"foo1\" cookie has correct value', function () {","    pm.expect(pm.cookies.toObject()).to.have.property('foo1', 'bar1');","});","","pm.test('the \"foo2\" cookie has correct value', function () {","    pm.expect(pm.cookies.toObject()).to.have.property('foo2', 'bar2');","});","","// response code could be either a 200 or a redirection based on the settings of ","// the http client. hence we need to handle both cases","pm.test('response body should be valid', function () {","    if (pm.response.code === 200) {","        pm.response.to.have.jsonBody('cookies.foo1', 'bar1')","            .and.have.jsonBody('cookies.foo2', 'bar2');","    }","    else {","        pm.response.to.have.body('Found. Redirecting to /cookies');","    }","});"]}}],"id":"a5a4da34-27ac-4082-b84e-92af10ebcacb","request":{"method":"GET","header":[],"url":{"raw":"https://postman-echo.com/cookies/set?foo1=bar1&foo2=bar2","protocol":"https","host":["postman-echo","com"],"path":["cookies","set"],"query":[{"key":"foo1","value":"bar1"},{"key":"foo2","value":"bar2"}]},"description":"The cookie setter endpoint accepts a list of cookies and their values as part of URL parameters of a `GET` request. These cookies are saved and can be subsequently retrieved or deleted. The response of this request returns a JSON with all cookies listed.\n\nTo set your own set of cookies, simply replace the URL parameters \"foo1=bar1&foo2=bar2\" with your own set of key-value pairs."},"response":[{"id":"c33c1ebc-6e43-464e-abda-e3c42a529d0c","name":"Cookies","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://postman-echo.com/cookies/set?foo1=bar1&foo2=bar2","protocol":"https","host":["postman-echo","com"],"path":["cookies","set"],"query":[{"key":"foo1","value":"bar1"},{"key":"foo2","value":"bar2"}]},"description":"The cookie setter endpoint accepts a list of cookies and their values as part of URL parameters of a `GET` request. These cookies are saved and can be subsequently retrieved or deleted. The response of this request returns a JSON with all cookies listed.\n\nTo set your own set of cookies, simply replace the URL parameters \"foo1=bar1&foo2=bar2\" with your own set of key-value pairs."},"status":"OK","code":200,"_postman_previewlanguage":"javascript","header":[{"key":"Access-Control-Allow-Credentials","value":"","name":"Access-Control-Allow-Credentials","description":""},{"key":"Access-Control-Allow-Headers","value":"","name":"Access-Control-Allow-Headers","description":""},{"key":"Access-Control-Allow-Methods","value":"","name":"Access-Control-Allow-Methods","description":""},{"key":"Access-Control-Allow-Origin","value":"","name":"Access-Control-Allow-Origin","description":""},{"key":"Connection","value":"keep-alive","name":"Connection","description":""},{"key":"Content-Encoding","value":"gzip","name":"Content-Encoding","description":""},{"key":"Content-Length","value":"51","name":"Content-Length","description":""},{"key":"Content-Type","value":"application/json; charset=utf-8","name":"Content-Type","description":""},{"key":"Date","value":"Thu, 29 Oct 2015 06:15:28 GMT","name":"Date","description":""},{"key":"Server","value":"nginx/1.6.2","name":"Server","description":""},{"key":"Vary","value":"Accept-Encoding","name":"Vary","description":""},{"key":"X-Powered-By","value":"Sails <sailsjs.org>","name":"X-Powered-By","description":""}],"cookie":[],"body":"{\"cookies\":{\"foo1\":\"bar\",\"foo2\":\"bar\"}}"}]},{"name":"Get Cookies","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test(\"response is ok\", function () {","    pm.response.to.have.status(200);","});","","pm.test('the \"foo1\" cookie has correct value', function () {","    pm.expect(pm.cookies.toObject()).to.have.property('foo1', 'bar1');","});","","pm.test('the \"foo2\" cookie has correct value', function () {","    pm.expect(pm.cookies.toObject()).to.have.property('foo2', 'bar2');","});","","pm.test('response body should be valid', function () {","    pm.response.to.have.jsonBody('cookies.foo1', 'bar1');","    pm.response.to.have.jsonBody('cookies.foo2', 'bar2');","});"]}}],"id":"79feeb0d-0508-4c08-8579-df7f767caedb","request":{"method":"GET","header":[],"url":"https://postman-echo.com/cookies","description":"Use this endpoint to get a list of all cookies that are stored with respect to this domain. Whatever key-value pairs that has been previously set by calling the \"Set Cookies\" endpoint, will be returned as response JSON."},"response":[{"id":"cf0bb84f-940e-4eb6-92ab-0d6a73e35d77","name":"Cookies","originalRequest":{"method":"GET","header":[],"url":"https://postman-echo.com/cookies","description":"Use this endpoint to get a list of all cookies that are stored with respect to this domain. Whatever key-value pairs that has been previously set by calling the \"Set Cookies\" endpoint, will be returned as response JSON."},"status":"OK","code":200,"_postman_previewlanguage":"javascript","header":[{"key":"Access-Control-Allow-Credentials","value":"","name":"Access-Control-Allow-Credentials","description":""},{"key":"Access-Control-Allow-Headers","value":"","name":"Access-Control-Allow-Headers","description":""},{"key":"Access-Control-Allow-Methods","value":"","name":"Access-Control-Allow-Methods","description":""},{"key":"Access-Control-Allow-Origin","value":"","name":"Access-Control-Allow-Origin","description":""},{"key":"Connection","value":"keep-alive","name":"Connection","description":""},{"key":"Content-Encoding","value":"gzip","name":"Content-Encoding","description":""},{"key":"Content-Length","value":"46","name":"Content-Length","description":""},{"key":"Content-Type","value":"application/json; charset=utf-8","name":"Content-Type","description":""},{"key":"Date","value":"Thu, 29 Oct 2015 06:16:29 GMT","name":"Date","description":""},{"key":"Server","value":"nginx/1.6.2","name":"Server","description":""},{"key":"Vary","value":"Accept-Encoding","name":"Vary","description":""},{"key":"X-Powered-By","value":"Sails <sailsjs.org>","name":"X-Powered-By","description":""}],"cookie":[],"body":"{\"cookies\":{\"foo2\":\"bar\"}}"}]},{"name":"Delete Cookies","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('response should be 200 or 302', function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 302]);","});","","pm.test('the \"foo1\" cookie should not be present', function () {","    pm.expect(pm.cookies.toObject()).to.not.have.property('foo1');","});","","pm.test('the \"foo2\" cookie should not be present', function () {","    pm.expect(pm.cookies.toObject()).to.not.have.property('foo2');","});","","// response code could be either a 200 or a redirection based on the settings of ","// the http client. hence we need to handle both cases","pm.test('response body should be valid', function () {","    if (pm.response.code === 200) {","        pm.response.to.not.have.jsonBody('cookies.foo1');","        pm.response.to.not.have.jsonBody('cookies.foo2');","    }","    else {","        pm.response.to.have.body('Found. Redirecting to /cookies');","    }","});"]}}],"id":"daaaad24-8ebf-4447-9a2f-95e03873e49b","request":{"method":"GET","header":[],"url":{"raw":"https://postman-echo.com/cookies/delete?foo1&foo2","protocol":"https","host":["postman-echo","com"],"path":["cookies","delete"],"query":[{"key":"foo1","value":null},{"key":"foo2","value":null}]},"description":"One or more cookies that has been set for this domain can be deleted by providing the cookie names as part of the URL parameter. The response of this request is a JSON containing the list of currently set cookies."},"response":[{"id":"c649b543-7c0c-4df1-8ca3-f42195e64879","name":"Cookies Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://postman-echo.com/cookies/delete?foo1&foo2","protocol":"https","host":["postman-echo","com"],"path":["cookies","delete"],"query":[{"key":"foo1","value":null},{"key":"foo2","value":null}]},"description":"One or more cookies that has been set for this domain can be deleted by providing the cookie names as part of the URL parameter. The response of this request is a JSON containing the list of currently set cookies."},"status":"OK","code":200,"_postman_previewlanguage":"javascript","header":[{"key":"Access-Control-Allow-Credentials","value":"","name":"Access-Control-Allow-Credentials","description":""},{"key":"Access-Control-Allow-Headers","value":"","name":"Access-Control-Allow-Headers","description":""},{"key":"Access-Control-Allow-Methods","value":"","name":"Access-Control-Allow-Methods","description":""},{"key":"Access-Control-Allow-Origin","value":"","name":"Access-Control-Allow-Origin","description":""},{"key":"Connection","value":"keep-alive","name":"Connection","description":""},{"key":"Content-Encoding","value":"gzip","name":"Content-Encoding","description":""},{"key":"Content-Length","value":"46","name":"Content-Length","description":""},{"key":"Content-Type","value":"application/json; charset=utf-8","name":"Content-Type","description":""},{"key":"Date","value":"Thu, 29 Oct 2015 06:16:00 GMT","name":"Date","description":""},{"key":"Server","value":"nginx/1.6.2","name":"Server","description":""},{"key":"Vary","value":"Accept-Encoding","name":"Vary","description":""},{"key":"X-Powered-By","value":"Sails <sailsjs.org>","name":"X-Powered-By","description":""}],"cookie":[],"body":"{\"cookies\":{\"foo2\":\"bar\"}}"}]}],"id":"dc8996c4-bb6e-48f6-9300-d9c761edcb3f","description":"The cookie related endpoints allow one to get, set and delete simple cookies.\n\nCookies are small snippets of information that is stored in the browser and sent back to the server with every subsequent requests in order to store useful information between requests.\nIf you want to know more about cookies, read the [HTTP Cookie](https://en.wikipedia.org/wiki/HTTP_cookie) article on wikipedia."},{"name":"Utilities","item":[{"name":"Response Status Code","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test(\"response is ok\", function () {","    pm.response.to.have.status(200);","});","","pm.test(\"response has valid json body\", function () {","    pm.response.to.have.jsonBody('status');","});","","// additional sanity tests","pm.test(\"status in response body must match the one in request\", function () {","    pm.response.to.have.jsonBody('status', Number(_.get(pm.request, 'url.path[1]')));","});"]}}],"id":"ef9e6a07-6ff3-45fe-af0a-3f18853e9237","request":{"method":"GET","header":[],"url":"https://postman-echo.com/status/200","description":"This endpoint allows one to instruct the server which status code to respond with.\n\nEvery response is accompanied by a status code. The status code provides a summary of the nature of response sent by the server. For example, a status code of `200` means everything is okay with the response and a code of `404` implies that the requested URL does not exist on server. \nA list of all valid HTTP status code can be found at the [List of Status Codes](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes) wikipedia article. When using Postman, the response status code is described for easy reference.\n\nNote that if an invalid status code is requested to be sent, the server returns a status code of `400 Bad Request`."},"response":[{"id":"88e0b5b6-fe39-48af-bfc3-7030f3d84f45","name":"200","originalRequest":{"method":"GET","header":[],"url":"https://echo.getpostman.com/status/200"},"status":"OK","code":200,"_postman_previewlanguage":"javascript","header":[{"key":"Access-Control-Allow-Credentials","value":"","name":"Access-Control-Allow-Credentials","description":""},{"key":"Access-Control-Allow-Headers","value":"","name":"Access-Control-Allow-Headers","description":""},{"key":"Access-Control-Allow-Methods","value":"","name":"Access-Control-Allow-Methods","description":""},{"key":"Access-Control-Allow-Origin","value":"","name":"Access-Control-Allow-Origin","description":""},{"key":"Connection","value":"keep-alive","name":"Connection","description":""},{"key":"Content-Length","value":"14","name":"Content-Length","description":""},{"key":"Content-Type","value":"application/json; charset=utf-8","name":"Content-Type","description":""},{"key":"Date","value":"Thu, 31 Mar 2016 11:58:47 GMT","name":"Date","description":""},{"key":"ETag","value":"W/\"e-1056260003\"","name":"ETag","description":""},{"key":"Server","value":"nginx/1.6.2","name":"Server","description":""},{"key":"Vary","value":"Accept-Encoding","name":"Vary","description":""},{"key":"X-Powered-By","value":"Sails <sailsjs.org>","name":"X-Powered-By","description":""}],"cookie":[{"expires":"Fri Apr 15 2016 11:14:58 GMT+0000 (Coordinated Universal Time)","hostOnly":false,"httpOnly":false,"domain":".getpostman.com","path":"/","secure":false,"session":false,"value":"yes","key":"getpostmanlogin"},{"expires":"Fri Apr 15 2016 11:14:58 GMT+0000 (Coordinated Universal Time)","hostOnly":false,"httpOnly":false,"domain":".getpostman.com","path":"/","secure":false,"session":false,"value":"df0c0256028d7ec4d641f766104a9571a8e249685bbc667d7cee030bbf44d3209495c70c03248e31e678a93812591d5e12187a8e99bf6bc5e80c40903f6ff6226938f24e413c0ffa613a7372064ec44a8594e8d3ede6945e34394f369573feeebc4a73a3e24b8c9ac18a53704addb5fd3f71f1ede488ff551feb059e9c1fb208164814e45e0312c4df8ea6e83c26702f42ae634c6afbe82d57c857bbf5598b5527961c1c28688dc2580070a4389f0cf4ec0a179b5b9c11b2ecbaa5460d374065bf5c7a3add9505df0fa89acb9f227f05ed2d4c6b58c39d6d728bd49f6f323ae67d4a75882aa7682f5d6fc5b981ba411d94aa93970bfaefa1953a73e440d50d012b5f288975c888e2345ee7777e746fb5aed3a7b2dbc087c6456621aa78c24a3c17c5f96cf59844933249a352f631e2008cffac6faf06d0e253dcc01cf0067bf56c1fbc5ed61fec1861b60c5accf35ffc2e56154a113004fa1db9d7171c3af8fc063918554092f5","key":"postman.sid"},{"expires":"Sat Mar 31 2018 11:16:21 GMT+0000 (Coordinated Universal Time)","hostOnly":false,"httpOnly":false,"domain":".echo.getpostman.com","path":"/","secure":false,"session":false,"value":"GA1.3.1703443399.1459422978","key":"_ga"},{"expires":"Invalid Date","hostOnly":true,"httpOnly":true,"domain":"echo.getpostman.com","path":"/","secure":false,"session":true,"value":"s%3AvuHU0EKeDbyNjVrEc7U30dMPzVu8CRaD.GOV1H9olcVzXqrwqP%2BC%2B6MVj2UczXivcN00jgPoDYfs","key":"sails.sid"}],"body":"{\"status\":200}"}]},{"name":"Streamed Response","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test(\"response is ok\", function () {","    pm.response.to.have.status(200);","});","","pm.test(\"response has chunked transfer encoding header\", function () {","    pm.response.to.have.header('transfer-encoding', 'chunked');","});"]}}],"id":"c933f27d-4e14-4d7e-a233-71d92d305f9f","request":{"method":"GET","header":[],"url":"https://postman-echo.com/stream/5","description":"This endpoint allows one to recieve streaming http response using [chunked transfer encoding](https://en.wikipedia.org/wiki/Chunked_transfer_encoding) of a configurable length.\n\nA streaming response does not wait for the entire response to be generated on server before flushing it out. This implies that for a fairly large response, parts of it can be streamed to the requestee as and when it is generated on server. The client can then take actions of processing this partially received data."},"response":[]},{"name":"Delay Response","event":[{"listen":"test","script":{"type":"text/javascript","exec":["var _ = require('lodash');","","pm.test(\"response is ok\", function () {","    pm.response.to.have.status(200);","});","","pm.test(\"response has valid json body\", function () {","    pm.response.to.have.jsonBody('delay');","});","","// additional sanity tests","pm.test(\"request must have a valid delay\", function () {","    pm.expect(Number(_.get(pm.request, 'url.path[1]'))).to.be.above(0).and.below(10);","});","pm.test(\"response should take more time than the delay specified\", function () {","    pm.expect(pm.response.responseTime).to.be.above(Number(_.get(pm.request, 'url.path[1]')));","});"]}}],"id":"5f966b24-c7e8-4744-94ef-0fe7a11406a9","request":{"method":"GET","header":[],"url":"https://postman-echo.com/delay/2","description":"Using this endpoint one can configure how long it takes for the server to come back with a response. Appending a number to the URL defines the time (in seconds) the server will wait before responding.\n\nNote that a maximum delay of 10 seconds is accepted by the server."},"response":[{"id":"24651255-73d6-46a0-a7f2-fe9dc269b398","name":"success-response","originalRequest":{"method":"GET","header":[],"url":"https://echo.getpostman.com/delay/3"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Access-Control-Allow-Credentials","value":"","name":"Access-Control-Allow-Credentials","description":""},{"key":"Access-Control-Allow-Headers","value":"","name":"Access-Control-Allow-Headers","description":""},{"key":"Access-Control-Allow-Methods","value":"","name":"Access-Control-Allow-Methods","description":""},{"key":"Access-Control-Allow-Origin","value":"","name":"Access-Control-Allow-Origin","description":""},{"key":"Access-Control-Expose-Headers","value":"","name":"Access-Control-Expose-Headers","description":""},{"key":"Connection","value":"keep-alive","name":"Connection","description":""},{"key":"Content-Length","value":"13","name":"Content-Length","description":""},{"key":"Content-Type","value":"application/json; charset=utf-8","name":"Content-Type","description":""},{"key":"Date","value":"Mon, 02 Jan 2017 09:19:03 GMT","name":"Date","description":""},{"key":"ETag","value":"W/\"d-t/L/D5c0SDl+MoXtKdSVOg\"","name":"ETag","description":""},{"key":"Server","value":"nginx/1.10.1","name":"Server","description":""},{"key":"Vary","value":"Accept-Encoding","name":"Vary","description":""}],"cookie":[{"expires":"Mon Jan 18 2038 21:44:07 GMT+0000 (Coordinated Universal Time)","httpOnly":true,"domain":"echo.getpostman.com","path":"/","secure":false,"value":"s%3AYjUiFBtGiJVL2a-qzZQZ1DFlAMhgXN9O.WaAjRUV0OteZxwmhbNibuB7VKse068JJIh6PwLQUKmQ","key":"sails.sid"}],"body":"{\"delay\":\"3\"}"}]},{"name":"Get UTF8 Encoded Response","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test(\"response is ok\", function () {","    pm.response.to.have.status(200);","});","","pm.test(\"response has charset in content-type header\", function () {","    pm.response.to.have.header('content-type', 'text/html; charset=utf-8');","});","","pm.test(\"response has chunked transfer encoding header\", function () {","    pm.response.to.have.header('transfer-encoding', 'chunked');","});"]}}],"id":"6383b1af-5ac3-46e0-9c55-0d220cd86dca","request":{"method":"GET","header":[],"url":"https://postman-echo.com/encoding/utf8","description":"If a response of an endpoint requires to send data beyond the basic English / ASCII character set, the `charset` parameter in the `Content-Type` response header defines the character encoding policy.\n\nThis endpoint returns an `UTF8` character encoded response body with text in various languages such as Greek, Latin, East Asian, etc. Postman can interpret the character encoding and use appropriate methods to display the character set in responses."},"response":[]},{"name":"GZip Compressed Response","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test(\"response is ok\", function () {","    pm.response.to.have.status(200);","});","","pm.test(\"response has valid json body\", function () {","    pm.response.to.have.jsonBody('gzipped', true);","});","","pm.test('response headers should indicate valid content encoding', function  () {","    pm.response.to.have.header('content-encoding', 'gzip')","        .and.have.header('content-type', 'application/json');","});","","pm.test('requesting http client should accept compressed response', function () {","    pm.expect(pm.response.json()).to.have.nested.property('headers.accept-encoding')","        .and.to.match(/.*gzip.*/);","});"]}}],"id":"aed82979-60a2-49c5-abc2-90f5c3a6dea2","request":{"method":"GET","header":[],"url":"https://postman-echo.com/gzip","description":"This endpoint returns the response using [gzip compression algoritm](https://en.wikipedia.org/wiki/Gzip).\nThe uncompressed response is a JSON string containing the details of the request sent by the client. For this endpoint to work, one should request with `Accept-encoding` header containing `gzip` as part of its value. Postman supports gzip, deflate and SDCH decoding and automatically sends them as part of the request.\n\nHTTP Compression allows the server to send responses in a compressed format, which is uncompressed by the client before processing. This reduces network bandwidth consumption at the cost of increase in CPU usage.\nTo know more about this, refer the [HTTP Compression](https://en.wikipedia.org/wiki/HTTP_compression) wikipedia article."},"response":[]},{"name":"Deflate Compressed Response","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test(\"response is ok\", function () {","    pm.response.to.have.status(200);","});","","pm.test(\"response has valid json body\", function () {","    pm.response.to.have.jsonBody('deflated', true);","});","","pm.test('response headers should indicate valid content encoding', function  () {","    pm.response.to.have.header('content-encoding', 'deflate')","        .and.have.header('content-type', 'application/json');","});","","pm.test('requesting http client should accept compressed response', function () {","    pm.expect(pm.response.json()).to.have.nested.property('headers.accept-encoding')","        .and.to.match(/.*deflate.*/);","});"]}}],"id":"28e4d7d0-24aa-499a-acf4-661fe48478ff","request":{"method":"GET","header":[],"url":"https://postman-echo.com/deflate","description":"This endpoint returns the response using [deflate compression algoritm](https://en.wikipedia.org/wiki/DEFLATE). \nThe uncompressed response is a JSON string containing the details of the request sent by the client. For this endpoint to work, one should request with `Accept-encoding` header containing `deflate` as part of its value. Postman supports gzip, deflate and SDCH decoding and automatically sends them as part of the request.\n\nHTTP Compression allows the server to send responses in a compressed format, which is uncompressed by the client before processing. This reduces network bandwidth consumption at the cost of increase in CPU usage.\nTo know more about this, refer the [HTTP Compression](https://en.wikipedia.org/wiki/HTTP_compression) wikipedia article."},"response":[]},{"name":"IP address in JSON format","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test(\"response is ok\", function () {","    pm.response.to.have.status(200);","});","","pm.test(\"response has valid json body\", function () {","    pm.response.to.have.jsonBody('ip');","});","","pm.test(\"response must return a valid ip address\", function () {","    pm.expect(pm.response.json().ip).to","        // a really gnarly regular expression to ensure that ip address is in correct format","        .match(/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/);","});"]}}],"id":"dcf42653-a652-48d9-bc8e-43fe57505b24","request":{"method":"GET","header":[],"url":"https://postman-echo.com/ip","description":"A simple `GET` request to return the IP address of the source request in the following `JSON` format:\n\n```json\n{\n  ip: \"request-ip-address\"\n}\n```"},"response":[]}],"id":"9a7d29dc-44fe-4c52-950a-cd4e25af8f1d"},{"name":"Utilities / Date and Time","item":[{"name":"Current UTC time","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test(\"response is ok\", function () {","    pm.response.to.have.status(200);","});","","pm.test(\"response time matches server response 'date' header\", function () {","    pm.expect(pm.response.text()).to.eql(pm.response.headers.get('date'))","});"]}}],"id":"c97aaf33-2bd7-4424-8b49-91fe330b1b2b","request":{"method":"GET","header":[],"url":"https://postman-echo.com/time/now","description":"A simple `GET` request to `/time/now` to return the current timestamp as a UTC string.\n\n```\nFri, 04 Nov 2016 09:00:46 GMT\n```"},"response":[{"id":"0f021f63-d9cf-4212-bee7-20f5fe493e23","name":"time as text","originalRequest":{"method":"GET","header":[],"url":"https://postman-echo.com/time/now"},"status":"OK","code":200,"_postman_previewlanguage":"html","header":[{"key":"Access-Control-Allow-Credentials","value":"","name":"Access-Control-Allow-Credentials","description":""},{"key":"Access-Control-Allow-Headers","value":"","name":"Access-Control-Allow-Headers","description":""},{"key":"Access-Control-Allow-Methods","value":"","name":"Access-Control-Allow-Methods","description":""},{"key":"Access-Control-Allow-Origin","value":"","name":"Access-Control-Allow-Origin","description":""},{"key":"Access-Control-Expose-Headers","value":"","name":"Access-Control-Expose-Headers","description":""},{"key":"Connection","value":"keep-alive","name":"Connection","description":""},{"key":"Content-Encoding","value":"gzip","name":"Content-Encoding","description":""},{"key":"Content-Length","value":"49","name":"Content-Length","description":""},{"key":"Content-Type","value":"text/html; charset=utf-8","name":"Content-Type","description":""},{"key":"Date","value":"Wed, 11 Jan 2017 10:27:12 GMT","name":"Date","description":""},{"key":"ETag","value":"W/\"1d-2jJhkzratfVX9VZ0+raHbw\"","name":"ETag","description":""},{"key":"Server","value":"nginx/1.10.1","name":"Server","description":""},{"key":"Vary","value":"Accept-Encoding","name":"Vary","description":""},{"key":"set-cookie","value":"sails.sid=s%3A2lT3TO7qS1tadeSAp4axl-NcXG9CV6Rf.HGqLY%2FlKEKY4fgCLePaAZs3tCHp%2Bglf7ZOJYlonGeig; Path=/; HttpOnly","name":"set-cookie","description":""}],"cookie":[{"expires":"Mon Jan 18 2038 21:44:07 GMT+0000 (Coordinated Universal Time)","httpOnly":true,"domain":"postman-echo.com","path":"/","secure":false,"value":"s%3A2lT3TO7qS1tadeSAp4axl-NcXG9CV6Rf.HGqLY%2FlKEKY4fgCLePaAZs3tCHp%2Bglf7ZOJYlonGeig","key":"sails.sid"}],"body":"Wed, 11 Jan 2017 10:27:12 GMT"}]},{"name":"Timestamp validity","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test(\"response is ok\", function () {","    pm.response.to.have.status(200);","});","","pm.test(\"response json should say whether request query time is valid\", function () {","    pm.response.to.have.jsonBody('valid', true);","});"]}}],"id":"78a043ce-2460-4932-b981-b77c1d9906f5","request":{"method":"GET","header":[],"url":{"raw":"https://postman-echo.com/time/valid?timestamp=2016-10-10","protocol":"https","host":["postman-echo","com"],"path":["time","valid"],"query":[{"key":"timestamp","value":"2016-10-10"}]},"description":"A simple `GET` request to `/time/valid` to determine the validity of the timestamp, (current by default).\nThis endpoint accepts `timestamp`, `locale`, `format`, and `strict` query parameters to construct the date time instance to check against.\n\nResponses are provided in JSON format, with a valid key to indicate the result. The response code is `200`.\n\n```\n{\n  valid: true/false\n}\n```"},"response":[{"id":"78e7c315-1f25-428c-b19c-7a7a8b51ad10","name":"Invalid Timestamp","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://postman-echo.com/time/valid?timestamp=2016-10-10","protocol":"https","host":["postman-echo","com"],"path":["time","valid"],"query":[{"key":"timestamp","value":"2016-10-10"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Access-Control-Allow-Credentials","value":"","name":"Access-Control-Allow-Credentials","description":""},{"key":"Access-Control-Allow-Headers","value":"","name":"Access-Control-Allow-Headers","description":""},{"key":"Access-Control-Allow-Methods","value":"","name":"Access-Control-Allow-Methods","description":""},{"key":"Access-Control-Allow-Origin","value":"","name":"Access-Control-Allow-Origin","description":""},{"key":"Access-Control-Expose-Headers","value":"","name":"Access-Control-Expose-Headers","description":""},{"key":"Connection","value":"keep-alive","name":"Connection","description":""},{"key":"Content-Length","value":"15","name":"Content-Length","description":""},{"key":"Content-Type","value":"application/json; charset=utf-8","name":"Content-Type","description":""},{"key":"Date","value":"Wed, 11 Jan 2017 10:27:53 GMT","name":"Date","description":""},{"key":"ETag","value":"W/\"f-/i9mO/upK91ZtL0BkKFGtw\"","name":"ETag","description":""},{"key":"Server","value":"nginx/1.10.1","name":"Server","description":""},{"key":"Vary","value":"Accept-Encoding","name":"Vary","description":""},{"key":"set-cookie","value":"sails.sid=s%3ATNJaNxi2QCv4RPBb64sIZxQGN1h6IP3g.9sQVAijlsLsh0r7LgffxXa9k2we6UumPEVv%2Bsk4woLI; Path=/; HttpOnly","name":"set-cookie","description":""}],"cookie":[{"expires":"Mon Jan 18 2038 21:44:07 GMT+0000 (Coordinated Universal Time)","httpOnly":true,"domain":"postman-echo.com","path":"/","secure":false,"value":"s%3ATNJaNxi2QCv4RPBb64sIZxQGN1h6IP3g.9sQVAijlsLsh0r7LgffxXa9k2we6UumPEVv%2Bsk4woLI","key":"sails.sid"}],"body":"{\"valid\":false}"},{"id":"aadf4030-bfab-4888-9b6e-8fd6c745c49f","name":"Valid Timestamp","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://postman-echo.com/time/valid?timestamp=2016-10-10","protocol":"https","host":["postman-echo","com"],"path":["time","valid"],"query":[{"key":"timestamp","value":"2016-10-10"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Access-Control-Allow-Credentials","value":"","name":"Access-Control-Allow-Credentials","description":""},{"key":"Access-Control-Allow-Headers","value":"","name":"Access-Control-Allow-Headers","description":""},{"key":"Access-Control-Allow-Methods","value":"","name":"Access-Control-Allow-Methods","description":""},{"key":"Access-Control-Allow-Origin","value":"","name":"Access-Control-Allow-Origin","description":""},{"key":"Access-Control-Expose-Headers","value":"","name":"Access-Control-Expose-Headers","description":""},{"key":"Connection","value":"keep-alive","name":"Connection","description":""},{"key":"Content-Length","value":"14","name":"Content-Length","description":""},{"key":"Content-Type","value":"application/json; charset=utf-8","name":"Content-Type","description":""},{"key":"Date","value":"Wed, 11 Jan 2017 10:27:33 GMT","name":"Date","description":""},{"key":"ETag","value":"W/\"e-OYN7L87J1Ba9oy5mJE2kcA\"","name":"ETag","description":""},{"key":"Server","value":"nginx/1.10.1","name":"Server","description":""},{"key":"Vary","value":"Accept-Encoding","name":"Vary","description":""},{"key":"set-cookie","value":"sails.sid=s%3AdDGZPe1CZw4mAxGVCHr6RfCADCAwquXa.F5MEm5LJad30JHrSwGGoyWLn2OAAGdvUM7kDtzNfdFI; Path=/; HttpOnly","name":"set-cookie","description":""}],"cookie":[{"expires":"Mon Jan 18 2038 21:44:07 GMT+0000 (Coordinated Universal Time)","httpOnly":true,"domain":"postman-echo.com","path":"/","secure":false,"value":"s%3AdDGZPe1CZw4mAxGVCHr6RfCADCAwquXa.F5MEm5LJad30JHrSwGGoyWLn2OAAGdvUM7kDtzNfdFI","key":"sails.sid"}],"body":"{\"valid\":true}"}]},{"name":"Format timestamp","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test(\"response is ok\", function () {","    pm.response.to.have.status(200);","});","","pm.test(\"response json should say whether request query time is valid\", function () {","    pm.response.to.have.jsonBody('format', '20');","});"]}}],"id":"bccddec0-5cd9-404a-a957-bd22bd845650","request":{"method":"GET","header":[],"url":{"raw":"https://postman-echo.com/time/format?timestamp=2016-10-10&format=mm","protocol":"https","host":["postman-echo","com"],"path":["time","format"],"query":[{"key":"timestamp","value":"2016-10-10"},{"key":"format","value":"mm"}]},"description":"A simple `GET` request to `/time/format` to convert the timestamp to any desired valid format.\n\nThis endpoint accepts `timestamp`, `locale`, `format`, and `strict` query parameters to construct the date time instance to check against.\n\nResponses are provided in JSON format, with a `format` key to indicate the result. The response code is `200` for valid query parameters, and `400` otherwise.\n\n```\n{\n  format: \"formatted-timestamp\"\n}\n```"},"response":[]},{"name":"Extract timestamp unit","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test(\"response is ok\", function () {","    pm.response.to.have.status(200);","});","","pm.test(\"response json should say whether request query unit is valid\", function () {","    pm.response.to.have.jsonBody('unit', 1);","});"]}}],"id":"39cb8621-da62-481e-b59f-f0e7f30b36ac","request":{"method":"GET","header":[],"url":{"raw":"https://postman-echo.com/time/unit?timestamp=2016-10-10&unit=day","protocol":"https","host":["postman-echo","com"],"path":["time","unit"],"query":[{"key":"timestamp","value":"2016-10-10"},{"key":"unit","value":"day"}]},"description":"A simple `GET` request to `/time/unit` to extract the specified timestamp unit (as provided in the `unit` query parameter). The default unit returned is the `year`.\n\nThis endpoint accepts `timestamp`, `locale`, `format`, and `strict` query parameters to construct the date time instance to check against.\n\nResponses are provided in JSON format, with a `unit` key to indicate the result. The response code is `200` for valid query parameters, and `400` otherwise.\n\n```\n{\n  unit: \"extracted-timestamp-unit\"\n}\n```"},"response":[]},{"name":"Time addition","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test(\"response is ok\", function () {","    pm.response.to.have.status(200);","});","","pm.test(\"response json should return the added years\", function () {","    pm.response.to.have.jsonBody('sum', 'Sat Oct 10 2116 00:00:00 GMT+0000');","});"]}}],"id":"e8af385c-9aee-4f5f-9a1d-c52b9645a685","request":{"method":"GET","header":[],"url":{"raw":"https://postman-echo.com/time/add?timestamp=2016-10-10&years=100","protocol":"https","host":["postman-echo","com"],"path":["time","add"],"query":[{"key":"timestamp","value":"2016-10-10"},{"key":"years","value":"100"}]},"description":"A simple `GET` request to `/time/add` to add units of time to the specified / current timestamp (as provided in the `years`, `months`, `days`, `hours`, `minutes`, `seconds`, and `milliseconds` query parameters).\n\nThis endpoint accepts `timestamp`, `locale`, `format`, and `strict` query parameters to construct the date time instance to check against.\n\nResponses are provided in JSON format, with a `sum` key to indicate the result. The response code is `200` for valid query parameters, and `400` otherwise.\n\n```\n{\n  sum: \"sum of (provided / current) and provided timestamps\"\n}\n```"},"response":[]},{"name":"Time subtraction","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test(\"response is ok\", function () {","    pm.response.to.have.status(200);","});","","pm.test(\"response json should return the subtracted years\", function () {","    pm.response.to.have.jsonBody('difference', 'Mon Oct 10 1966 00:00:00 GMT+0000');","});"]}}],"id":"cbe65a5f-acec-4eba-a5df-4511e33322eb","request":{"method":"GET","header":[],"url":{"raw":"https://postman-echo.com/time/subtract?timestamp=2016-10-10&years=50","protocol":"https","host":["postman-echo","com"],"path":["time","subtract"],"query":[{"key":"timestamp","value":"2016-10-10"},{"key":"years","value":"50"}]},"description":"A simple `GET` request to `/time/subtract` to subtract units of time from the specified / current timestamp (as provided in the `years`, `months`, `days`, `hours`, `minutes`, `seconds`, and `milliseconds` query parameters).\n\nThis endpoint accepts `timestamp`, `locale`, `format`, and `strict` query parameters to construct the date time instance to check against.\n\nResponses are provided in JSON format, with a `difference` key to indicate the result. The response code is `200` for valid query parameters, and `400` otherwise.\n\n```\n{\n  difference: \"difference between (provided / current) and provided timestamps\"\n}\n```"},"response":[]},{"name":"Start of time","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test(\"response is ok\", function () {","    pm.response.to.have.status(200);","});","","pm.test(\"response json should return the beginning of month\", function () {","    pm.response.to.have.jsonBody('start', 'Sat Oct 01 2016 00:00:00 GMT+0000');","});"]}}],"id":"8c9568cc-e1bf-4e38-95a3-4fca7ccf239c","request":{"method":"GET","header":[],"url":{"raw":"https://postman-echo.com/time/start?timestamp=2016-10-10&unit=month","protocol":"https","host":["postman-echo","com"],"path":["time","start"],"query":[{"key":"timestamp","value":"2016-10-10"},{"key":"unit","value":"month"}]},"description":"A simple `GET` request to `/time/start` to return a relative timstamp in the past from the specified / current timestamp (as provided in the `unit` query parameter).\n\nFor instance, if the `unit` has been specified as `month`, the returned timestamp would indicate the beginning of the current month. Similar results are returned for other units of time, like: `years`, `months`, `days`, `hours`, `minutes`, `seconds`, and `milliseconds`\n\nThis endpoint accepts `timestamp`, `locale`, `format`, and `strict` query parameters to construct the date time instance to check against.\n\nResponses are provided in JSON format, with a `start` key to indicate the result. The response code is `200` for valid query parameters, and `400` otherwise.\n\n```\n{\n  start: \"A timestamp from the past, depending on the `unit` specified\"\n}\n```"},"response":[]},{"name":"Object representation","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test(\"response is ok\", function () {","    pm.response.to.have.status(200);","});","","pm.test(\"response json should return the date components\", function () {","    pm.expect(pm.response.json()).to.eql({","        \"years\": 2016,","        \"months\": 9,","        \"date\": 10,","        ","        \"hours\": 0,","        \"minutes\": 0,","        \"seconds\": 0,","        \"milliseconds\": 0","    });","});"]}}],"id":"eceed526-127e-4963-b65d-63b33177de69","request":{"method":"GET","header":[],"url":{"raw":"https://postman-echo.com/time/object?timestamp=2016-10-10","protocol":"https","host":["postman-echo","com"],"path":["time","object"],"query":[{"key":"timestamp","value":"2016-10-10"}]},"description":"A simple `GET` request to `/time/object` to return the current / provided timestamp as a JSON object.\n\nFor instance, if the `unit` has been specified as `month`, the returned timestamp would indicate the beginning of the current month. Similar results are returned for other units of time, like: `years`, `months`, `days`, `hours`, `minutes`, `seconds`, and `milliseconds`\n\nThis endpoint accepts `timestamp`, `locale`, `format`, and `strict` query parameters to construct the date time instance to check against.\n\nResponses are provided in JSON format. The response code is `200` for valid query parameters, and `400` otherwise.\n\n```\n{\n  years: 2016,\n  months: 10,\n  days: 10,\n  hours: 23,\n  minutes: 34,\n  seconds: 20,\n  milliseconds: 980\n}\n```"},"response":[]},{"name":"Before comparisons","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test(\"response is ok\", function () {","    pm.response.to.have.status(200);","});","","pm.test(\"response json should say timestamp is before target\", function () {","    pm.response.to.have.jsonBody('before', true);","});"]}}],"id":"5a801611-e246-429d-8fef-708c4040205f","request":{"method":"GET","header":[],"url":{"raw":"https://postman-echo.com/time/before?timestamp=2016-10-10&target=2017-10-10","protocol":"https","host":["postman-echo","com"],"path":["time","before"],"query":[{"key":"timestamp","value":"2016-10-10"},{"key":"target","value":"2017-10-10"}]},"description":"A simple `GET` request to `/time/before` to check if the provided timestamps is before a comparison `target` (query parameter).\n\nThis endpoint accepts `timestamp`, `locale`, `format`, `strict`, and `target` query parameters to construct the date time instance to check against.\n\nResponses are provided in JSON format, with a `before` key to indicate the result. The response code is `200` for valid query parameters, and `400` otherwise.\n\n```\n{\n  before: true/false\n}\n```"},"response":[]},{"name":"After comparisons","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test(\"response is ok\", function () {","    pm.response.to.have.status(200);","});","","pm.test(\"response json should say timestamp is not after target\", function () {","    pm.response.to.have.jsonBody('after', false);","});"]}}],"id":"ca336801-eb43-4338-a2be-3595994dc00e","request":{"method":"GET","header":[],"url":{"raw":"https://postman-echo.com/time/after?timestamp=2016-10-10&target=2017-10-10","protocol":"https","host":["postman-echo","com"],"path":["time","after"],"query":[{"key":"timestamp","value":"2016-10-10"},{"key":"target","value":"2017-10-10"}]},"description":"A simple `GET` request to `/time/after` to check if the provided timestamps is after a comparison `target` (query parameter).\n\nThis endpoint accepts `timestamp`, `locale`, `format`, `strict`, and `target` query parameters to construct the date time instance to check against.\n\nResponses are provided in JSON format, with a `after` key to indicate the result. The response code is `200` for valid query parameters, and `400` otherwise.\n\n```\n{\n  after: true/false\n}\n```"},"response":[]},{"name":"Between timestamps","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test(\"response is ok\", function () {","    pm.response.to.have.status(200);","});","","pm.test(\"response json should say timestamp is not between start and end\", function () {","    pm.response.to.have.jsonBody('between', false);","});"]}}],"id":"537c106a-e840-4345-ad1f-64f5494705a9","request":{"method":"GET","header":[],"url":{"raw":"https://postman-echo.com/time/between?timestamp=2016-10-10&start=2017-10-10&end=2019-10-10","protocol":"https","host":["postman-echo","com"],"path":["time","between"],"query":[{"key":"timestamp","value":"2016-10-10"},{"key":"start","value":"2017-10-10"},{"key":"end","value":"2019-10-10"}]},"description":"A simple `GET` request to `/time/between` to check if the provided timestamp is between a range specified by the `start` and `end` query parameters. A resolution limit can also be specified by the `unit` query parameter.\n\nFor instance, for a resolution `unit` of `month`,\n`2016-10-05` does lie between `2016-11-02` and `2016-09-01`.\n\nThis endpoint also accepts `timestamp`, `locale`, `format`, `strict`, and `target` query parameters to construct the date time instance to check against.\n\nResponses are provided in JSON format, with a `between` key to indicate the result. The response code is `200` for valid query parameters, and `400` otherwise.\n\n```\n{\n  between: true/false\n}\n```"},"response":[]},{"name":"Leap year check","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test(\"response is ok\", function () {","    pm.response.to.have.status(200);","});","","pm.test(\"response json should say timestamp is within leap year\", function () {","    pm.response.to.have.jsonBody('leap', true);","});"]}}],"id":"6d7c46d2-cb05-4b93-8cf8-310073ce7e0d","request":{"method":"GET","header":[],"url":{"raw":"https://postman-echo.com/time/leap?timestamp=2016-10-10","protocol":"https","host":["postman-echo","com"],"path":["time","leap"],"query":[{"key":"timestamp","value":"2016-10-10"}]},"description":"A simple `GET` request to `/time/leap` to check if the provided/current timestamp belongs to a leap year.\n\nThis endpoint also accepts `timestamp`, `locale`, `format`, `strict`, and `target` query parameters to construct the date time instance to check against.\n\nResponses are provided in JSON format, with a `leap` key to indicate the result. The response code is `200` for valid query parameters, and `400` otherwise.\n\n```\n{\n  leap: true/false\n}\n```"},"response":[]}],"id":"cc57c3a3-1a5c-418a-8552-31c74e7f4a11","description":"A set of `/time/*` mounted requests to perform date-time manipulations, among other operations.\n"},{"name":"Auth: Digest","item":[{"name":"DigestAuth Request","event":[{"listen":"test","script":{"type":"text/javascript","exec":["tests[\"response code is 401\"] = responseCode.code === 401;","tests[\"response has WWW-Authenticate header\"] = (postman.getResponseHeader('WWW-Authenticate'));","","var authenticateHeader = postman.getResponseHeader('WWW-Authenticate'),","    realmStart = authenticateHeader.indexOf('\"',authenticateHeader.indexOf(\"realm\")) + 1 ,","    realmEnd = authenticateHeader.indexOf('\"',realmStart),","    realm = authenticateHeader.slice(realmStart,realmEnd),","    nonceStart = authenticateHeader.indexOf('\"',authenticateHeader.indexOf(\"nonce\")) + 1,","    nonceEnd = authenticateHeader.indexOf('\"',nonceStart),","    nonce = authenticateHeader.slice(nonceStart,nonceEnd);","    ","postman.setGlobalVariable('echo_digest_realm', realm);","postman.setGlobalVariable('echo_digest_nonce', nonce);"]}}],"id":"3e1afb81-35a8-4aea-b905-aced73e94216","request":{"method":"GET","header":[],"url":"https://postman-echo.com/digest-auth","description":"Performing a simple `GET` request to this endpoint returns status code `401 Unauthorized` with `WWW-Authenticate` header containing information to successfully authenticate subsequent requests.\nThe `WWW-Authenticate` header must be processed to extract `realm` and `nonce` values to hash subsequent requests.\n\nWhen this request is executed within Postman, the script attached with this request does the hard work of extracting realm and nonce from the header and set it as [global variables](https://www.getpostman.com/docs/environments#global-variables?source=echo-collection-app-onboarding) named `echo_digest_nonce` and `echo_digest_realm`.\nThese variables are re-used in subsequent request for seamless integration of the two requests."},"response":[]}],"id":"b5d0d4ab-010e-4ff2-b3b4-912a6dca6f82","description":"Digest authentication protects an endpoint with a username and password without actually transmitting the password over network.\nOne has to apply a hash function (like MD5, etc) to the username and password before sending them over the network.\n\n> Username: `postman`\n>\n> Password: `password`\n\nUnlike Basic-Auth, authentication happens using two consecutive requests where the first request returns `401 Unauthorised` along with `WWW-Authenticate` header containing information that needs to be used to authenticate subsequent calls.\n\nTo know more about digest authentication, refer to the [Digest Access Authentication](https://en.wikipedia.org/wiki/Digest_access_authentication) wikipedia article.\nThe article on [authentication helpers](https://www.getpostman.com/docs/helpers#digest-auth) elaborates how to use the same within the Postman app."}]}