{"info":{"_postman_id":"48f878b7-4e4c-6323-e768-364e9521906b","name":"Ector Partners API","description":"<html><head></head><body><h1 id=\"goal\">Goal</h1>\n<p>This API is designed to provide our distributors with an efficient way to query our prices, create, pay and cancel a booking.</p>\n<h1 id=\"endpoint\">Endpoint</h1>\n<p>The {{ baseUrl }} of this API is <code>api.ectorparking.com</code> if not instructed otherwise.</p>\n<h1 id=\"authentication\">Authentication</h1>\n<p>The API is secured with an API Key you can get from Ector's team. The API Key should be inserted in the request in the header \"X-ECTOR-AUTHENTICATION\". This API Key can be renewed regularly and implementation process should take this requirement into account.</p>\n<h1 id=\"integration-production\">Integration / Production</h1>\n<p>The header \"X-ECTOR-ENVIRONMENT\" must be present in every call and contain the value \"production\" (case-insensitive) all the time no matter if you're hitting production or sandbox.</p>\n<p>If you want to target the sandbox environment, which should be the case if you're working on the integration, you should replace the {{ baseUrl }} value by <a href=\"http://api-next.ectorparking.com/\"><code>api-next.ectorparking.com</code></a></p>\n<p><strong>Sandbox's database will be erased every night.</strong> Implementations and tests processes should not depend on any data being present in the database.</p>\n<p>Example :</p>\n<p>If you want to hit production, your configuration should be :</p>\n<p>baseUrl : api.ectorparking.com<br>X-ECTOR-ENVIRONMENT : production</p>\n<p>If you want to hit sandbox, your configuration should be :</p>\n<p>baseUrl: api-next.ectorparking.com<br>X-ECTOR-ENVIRONMENT : production</p>\n<h1 id=\"formats\">Formats</h1>\n<h2 id=\"errors\">Errors</h2>\n<p>Here is the JSON Schema of an error :</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"type\": \"object\",\n    \"additionalItems\": false,\n    \"properties\": {\n        \"status_code\": {\n            \"type\": \"number\"\n        },\n        \"error_code\": {\n            \"type\": \"string\"\n        },\n        \"message\": {\n            \"type\": \"string\"\n        },\n        \"errors\": {\n            \"type\": \"array\",\n            \"optional\": true,\n            \"additionalItems\": false,\n            \"items\": {\n                \"type\": \"string\",\n            }\n        }\n    }\n}\n\n</code></pre>\n<h2 id=\"phone-number\">Phone number</h2>\n<p>Phone number must be provided in E.164 format (<a href=\"https://en.wikipedia.org/wiki/E.164\">https://en.wikipedia.org/wiki/E.164</a>). Incorrectly formatted phone numbers will be converted to E.164 with Google Libphone (<a href=\"https://github.com/googlei18n/libphonenumber\">https://github.com/googlei18n/libphonenumber</a>) and we will assume country is France.<br>They also must be valid for Google Libphone (<a href=\"https://github.com/googlei18n/libphonenumber\">https://github.com/googlei18n/libphonenumber</a>). Invalid phone number will be rejected.</p>\n<h2 id=\"date-time\">Date time</h2>\n<p>Date time must be sent in ISO8601 format (<a href=\"https://en.wikipedia.org/wiki/ISO_8601\">https://en.wikipedia.org/wiki/ISO_8601</a>).</p>\n<ul>\n<li>From September 2019 :<br>  All datetime must be sent in Airport or Station timezone. For instance, if you book at Paris Airport the date you send will be interpreted as 'Europe/Paris' timezone.<br>  For instance both below datetimes will be interpreted as 6:05pm in Paris.<br>  <code>\"start_at\" : \"2019-07-23T18:05:00+02:00\"</code><br>  <code>\"start_at\" : \"2019-07-23T16:05:00Z\"</code><br>  <code>2019-07-23T16:05:00Z</code> means 4:05pm UTC Time, which is 6:05pm, Paris Time.</li>\n</ul>\n<p>This is a breaking change that will be applied from September 2019.</p>\n<h1 id=\"workflow\">Workflow</h1>\n<h2 id=\"make-a-reservation\">Make a reservation</h2>\n<p>Here is a classic use case of our API :</p>\n<ul>\n<li><p>GET /v3/zones : get all zones available, this call should be cached and updated once a day</p>\n</li>\n<li><p>GET /v3/quotes : this is used to get price and availability for a booking request.</p>\n</li>\n<li><p>POST /v3/bookings : create a booking with car and contact informations for the customer.</p>\n</li>\n<li><p>POST /v3/bookings/{{id}}/pay : to indicate that a booking has been paid and should be consider valid.</p>\n</li>\n</ul>\n<p>As a result of the POST /v3/bookings you will get a \"contact_id\" and a \"car_id\" for the customer and his car. Thoses id might be used directly in the POST /v3/bookings when the same customer make another booking.</p>\n<h2 id=\"expiration\">Expiration</h2>\n<p>A booking can not be paid later than 60 minutes after its creation (POST /bookings).</p>\n<h2 id=\"cancellation\">Cancellation</h2>\n<p>** Only bookings with the <strong>cancellation_insurance</strong> service might be cancelled**</p>\n<h2 id=\"covered-parking\">Covered parking</h2>\n<p>Covered parking does not work the way you might be used to. Instead of having a separate zone for covered and uncovered parking, we treat them as an optional service.</p>\n<p>You will find in <code>/v3/zones</code> endpoint the area that support this service and their price in <code>available_services</code> with the code <code>covered_parking</code>. This information will also be provided whenever you ask for a quote via <code>/v3/quotes</code>.</p>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[{"content":"Goal","slug":"goal"},{"content":"Endpoint","slug":"endpoint"},{"content":"Authentication","slug":"authentication"},{"content":"Integration / Production","slug":"integration-production"},{"content":"Formats","slug":"formats"},{"content":"Workflow","slug":"workflow"}],"owner":"1731464","collectionId":"48f878b7-4e4c-6323-e768-364e9521906b","publishedId":"7TQ89u1","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"EF5B25"},"publishDate":"2018-02-16T12:41:59.000Z"},"item":[{"name":"Zones","item":[{"name":"/v3/zones","event":[{"listen":"test","script":{"id":"b2a958e6-0588-41d2-bf95-b705ee040023","exec":["var zoneSchema = pm.environment.get('zoneSchema');","","pm.test(\"Status code is 200\", function () {","    pm.response.to.have.status(200);","});","","pm.test('Schema is valid', function() {","  pm.expect(tv4.validate(pm.response.json(), zoneSchema)).to.be.true;","});",""],"type":"text/javascript"}}],"id":"c5a837d6-1b6b-6ce8-e1f1-b0225649e05a","request":{"method":"GET","header":[{"key":"X-ECTOR-AUTHENTICATION","value":"{{apiKey}}"},{"key":"Content-Type","value":"application/json"},{"key":"X-ECTOR-ENVIRONMENT","value":"production"}],"body":{"mode":"formdata","formdata":[]},"url":"{{baseUrl}}/v3/zones","auth":{"type":"bearer","bearer":{"basicConfig":[]},"isInherited":true,"source":{"_postman_id":"48f878b7-4e4c-6323-e768-364e9521906b","id":"48f878b7-4e4c-6323-e768-364e9521906b","name":"Ector Partners API","type":"collection"}},"urlObject":{"path":["v3","zones"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"1b79bfc6-c0d4-6161-111c-ee32c4543c77","name":"/v3/zones","originalRequest":{"method":"GET","header":[{"key":"X-ECTOR-AUTHENTICATION","value":"{{apiKey}}","description":"header of partner ector"},{"key":"Content-Type","value":"application/json"}],"url":"{{baseUrl}}/v3/zones"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":"0","body":"[\n  {\n    \"id\": 1,\n    \"id_v1\": 1,\n    \"name\": \"ROISSY AÉROPORT\",\n    \"code\": \"CDG\",\n    \"spots\": [\n      {\n        \"id\": 1,\n        \"id_v1\": 10,\n        \"name\": \"Roissy CDG T1\",\n        \"code\": \"CDG1\",\n        \"type\": \"airport\",\n        \"place\": \"dépose-minute CDG T1\",\n        \"latitude\": \"49.014193\",\n        \"longitude\": \"2.543239\",\n        \"visible\": true,\n        \"city\": {\n          \"code\": \"paris\",\n          \"label_fr\": \"Paris\",\n          \"label_en\": \"Paris\"\n        }\n      },\n      {\n        \"id\": 2,\n        \"id_v1\": 20,\n        \"name\": \"Roissy CDG T2A\",\n        \"code\": \"CDG2A\",\n        \"type\": \"airport\",\n        \"place\": \"dépose-minute CDG T2A\",\n        \"latitude\": \"49.003160\",\n        \"longitude\": \"2.561125\",\n        \"visible\": true,\n        \"city\": {\n          \"code\": \"paris\",\n          \"label_fr\": \"Paris\",\n          \"label_en\": \"Paris\"\n        }\n      }\n    ],\n    \"latitude\": \"49.0096906\",\n    \"longitude\": \"2.547924500000022\",\n    \"welcome_code\": {\n      \"code\": \"WELCOMECDG\",\n      \"amount\": 5,\n      \"rate\": null\n    },\n    \"landing_url\": \"voiturier/aeroport-roissy-charles-de-gaulle\",\n    \"opening_time\": \"2017-01-01 04:00:00\",\n    \"closing_time\": \"2017-01-01 23:59:00\",\n    \"available_services\": [\n      {\n        \"code\": \"covered_parking\",\n        \"name_en\": \"Parking couvert (H<1,90m)\",\n        \"name_fr\": \"Parking couvert (H<1,90m)\",\n        \"price\": 9\n      },\n      {\n        \"code\": \"maintenance_air_conditioning\",\n        \"name_en\": \"Entretien climatisation\",\n        \"name_fr\": \"Entretien climatisation\",\n        \"price\": 89\n      },\n      {\n        \"code\": \"overall_maintenance\",\n        \"name_en\": \"Révision\",\n        \"name_fr\": \"Révision\",\n        \"price\": 299\n      },\n      {\n        \"code\": \"cancellation_insurance\",\n        \"name_en\": \"Protection annulation\",\n        \"name_fr\": \"Protection annulation\",\n        \"price\": 5\n      },\n      {\n        \"code\": \"refueling\",\n        \"name_en\": \"Plein d'essence\",\n        \"name_fr\": \"Plein d'essence\",\n        \"price\": 14\n      }\n    ]\n  }\n]"}],"_postman_id":"c5a837d6-1b6b-6ce8-e1f1-b0225649e05a"}],"id":"64e2159f-1f3b-a562-de5e-df30f54c2738","description":"<h1 id=\"representation\">Representation</h1>\n<p>Ector operates in more than 20 zones in France. One zone is a group of spot geographicaly related. For instance a zone can be \"Orly Airport\" and contains two spots \"Orly Sud\" and \"Orly Ouest\".</p>\n<h1 id=\"json-schema\">JSON Schema</h1>\n<p>Here is the JSON schema for a zone object</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"array\",\n  \"additionalItems\": false,\n  \"definitions\": {},\n  \"items\": {\n    \"type\": \"object\",\n    \"additionalItems\": false,\n    \"properties\": {\n      \"name\": {\n        \"type\": \"string\",\n      },\n      \"code\": {\n        \"type\": \"string\",\n      },\n      \"spots\": {\n        \"type\": \"array\",\n        \"additionalItems\": false,\n        \"items\": {\n          \"type\": \"object\",\n          \"additionalItems\": false,\n          \"properties\": {\n            \"city\": {\n              \"type\": \"object\",\n              \"additionalItems\": false,\n              \"properties\": {\n                \"code\": {\n                  \"type\": \"string\"\n                },\n                \"label_fr\": {\n                  \"type\": \"string\"\n                },\n                \"label_en\": {\n                  \"type\": \"string\"\n                }\n              }\n            },\n            \"name\": {\n              \"type\": \"string\"\n            },\n            \"code\": {\n              \"type\": \"string\"\n            },\n            \"type\": {\n              \"type\": \"string\"\n            },\n            \"place\": {\n              \"type\": \"string\"\n            },\n            \"latitude\": {\n              \"type\": \"string\"\n            },\n            \"longitude\": {\n              \"type\": \"string\"\n            }\n          }\n        }\n      },\n      \"open_at\": {\n        \"type\": [\"string\", \"null\"]\n      },\n      \"is_open\": {\n          \"type\": \"boolean\"\n      },\n      \"latitude\": {\n        \"type\": \"string\"\n      },\n      \"longitude\": {\n        \"type\": \"string\"\n      },\n      \"welcome_code\": {\n        \"type\": \"object\",\n        \"additionalItems\": false,\n        \"properties\": {\n          \"code\": {\n            \"type\": \"string\"\n          },\n          \"amount\": {\n            \"type\": [\"number\", \"null\"]\n          },\n          \"rate\": {\n            \"type\": [\"number\", \"null\"]\n          }\n        }\n      },\n      \"opening_time\": {\n        \"type\": \"string\"\n      },\n      \"closing_time\": {\n        \"type\": \"string\"\n      },\n    }\n  }\n};\n</code></pre>\n","event":[{"listen":"prerequest","script":{"id":"f00935ed-7aa5-4556-939a-89829200cc26","type":"text/javascript","exec":[""]}},{"listen":"test","script":{"id":"3b08ddfd-8ff7-4468-962f-df333f28de20","type":"text/javascript","exec":[""]}}],"_postman_id":"64e2159f-1f3b-a562-de5e-df30f54c2738","auth":{"type":"bearer","bearer":{"basicConfig":[]},"isInherited":true,"source":{"_postman_id":"48f878b7-4e4c-6323-e768-364e9521906b","id":"48f878b7-4e4c-6323-e768-364e9521906b","name":"Ector Partners API","type":"collection"}}},{"name":"Bookings","item":[{"name":"/v3/quotes","event":[{"listen":"test","script":{"id":"ecabd9ef-1fcf-42b1-8806-2cf1bef25a47","exec":["var quoteSchema = pm.environment.get('quoteSchema');","console.log(quoteSchema);","","pm.test(\"Status code is 200\", function () {","    pm.response.to.have.status(200);","});","","pm.test('Schema is valid', function() {","    var validation = tv4.validateMultiple(pm.response.json(), quoteSchema);","    console.log(validation);","    pm.expect(validation.valid).to.be.true;","});",""],"type":"text/javascript"}}],"id":"80423650-399b-c6ee-3f72-3cc519dede5a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"X-ECTOR-AUTHENTICATION","value":"{{apiKey}}"},{"key":"X-ECTOR-ENVIRONMENT","value":"production"}],"url":"{{baseUrl}}/v3/quotes?startAt=2021-10-01T14:12:12Z&endAt=2021-10-28T14:15:15Z&fromSpot=CDG1&toSpot=CDG1","description":"<p>Get a quote, whether the booking is allowed and the available services.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[]},"isInherited":true,"source":{"_postman_id":"48f878b7-4e4c-6323-e768-364e9521906b","id":"48f878b7-4e4c-6323-e768-364e9521906b","name":"Ector Partners API","type":"collection"}},"urlObject":{"path":["v3","quotes"],"host":["{{baseUrl}}"],"query":[{"key":"startAt","value":"2021-10-01T14:12:12Z"},{"key":"endAt","value":"2021-10-28T14:15:15Z"},{"key":"fromSpot","value":"CDG1"},{"key":"toSpot","value":"CDG1"}],"variable":[]}},"response":[{"id":"bc62a910-e975-bc42-08ae-6cef4608e63a","name":"GET - /v3/quotes ","originalRequest":{"method":"GET","header":[{"key":"X-ECTOR-AUTHENTICATION","value":"{{apiKey}}"},{"key":"X-ECTOR-ENVIRONMENT","value":"production"}],"body":{"mode":"raw","raw":""},"url":{"raw":"/v3/quotes?start_at=2018-01-25T14:00:00.000+0000&end_at=2018-02-01T14:00:00.000+0000&to_spot=CDG1&from_spot=CDG2","path":["v3","quotes"],"query":[{"key":"start_at","value":"2018-01-25T14:00:00.000+0000"},{"key":"end_at","value":"2018-02-01T14:00:00.000+0000"},{"key":"to_spot","value":"CDG1"},{"key":"from_spot","value":"CDG2"}]}},"code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":"0","body":"{\n    \"start_at\": \"2018-02-25T14:00:00+0000\",\n    \"end_at\": \"2018-02-28T14:00:00+0000\",\n    \"from_spot\": \"CDG1\",\n    \"to_spot\": \"CDG2\",\n    \"price\": 150,\n    \"available_services\": [\n        {\n            \"code\": \"cancellation_insurance\",\n            \"name_fr\": \"Assurance annulation\",\n            \"name_en\": \"Cancellation Insurance\",\n            \"price\": 5\n        },\n        {\n            \"code\": \"interior_wash\",\n            \"name_fr\": \"Lavage intérieur\",\n            \"name_en\": \"Interior wash\",\n            \"price\": 29\n        }\n    ],\n    \"allowed\": true\n}"}],"_postman_id":"80423650-399b-c6ee-3f72-3cc519dede5a"},{"name":"/v3/bookings","event":[{"listen":"test","script":{"id":"e1c8fd1b-996c-440f-870a-bae697a4f69e","exec":["var bookingSchema = pm.environment.get('bookingSchema');","","pm.test(\"Status code is 200\", function () {","    pm.response.to.have.status(200);","});","","pm.test('Schema is valid', function() {","    var validation = tv4.validateMultiple(pm.response.json(), bookingSchema);","    console.log(validation);","    pm.expect(validation.valid).to.be.true;","});","","pm.globals.set(\"bookingId\", pm.response.json().id);"],"type":"text/javascript"}}],"id":"fab7a8a5-33c4-7e90-85a5-ca50f041b671","request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-ECTOR-AUTHENTICATION","value":"{{apiKey}}"},{"key":"X-ECTOR-ENVIRONMENT","value":"production"}],"body":{"mode":"raw","raw":""},"url":"{{baseUrl}}/v3/bookings","description":"<p>Create a booking </p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[]},"isInherited":true,"source":{"_postman_id":"48f878b7-4e4c-6323-e768-364e9521906b","id":"48f878b7-4e4c-6323-e768-364e9521906b","name":"Ector Partners API","type":"collection"}},"urlObject":{"path":["v3","bookings"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"19c56abf-50ad-d259-b799-81f529476f69","name":"POST /v3/bookings - with contact id & car id","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-ECTOR-AUTHENTICATION","value":"{{apiKey}}"},{"key":"X-ECTOR-ENVIRONMENT","value":"production"}],"body":{"mode":"raw","raw":"{\n    \"start_at\": \"2018-02-25T14:00:00Z\",\n    \"end_at\": \"2018-03-01T14:00:00Z\",\n\t\"from_spot\": \"CDG1\",\n\t\"to_spot\": \"CDG1\",\n\t\"contact_id\": \"EAR43FEA3\",\n\t\"car_id\": \"74328DEUZD93\",\n\t\"services\": [\"cancellation_insurance\"],\n    \"traveling_number_from\": \"from\",\n    \"traveling_number_to\": \"to\",\n    \"external_reference\": \"CDG13435\"\n}"},"url":"{{baseUrl}}/v3/bookings"},"status":"OK","code":200,"_postman_previewlanguage":"","header":[],"cookie":[],"responseTime":"0","body":"{\n    \"id\": \"ANFJEN12-ernvtigbf-sdnjv\",\n    \"short_id\": \"ANFJEN12\",\n    \"start_at\": \"2018-02-25T14:00:00+0000\",\n    \"end_at\": \"2018-02-28T14:00:00+0000\",\n    \"from_spot\": \"CDG1\",\n    \"to_spot\": \"CDG2\",\n    \"available_services\": [\n        {\n            \"code\": \"cancellation_insurance\",\n            \"name_fr\": \"Assurance annulation\",\n            \"name_en\": \"Cancellation Insurance\",\n            \"price\": 5\n        },\n        {\n            \"code\": \"interior_wash\",\n            \"name_fr\": \"Lavage intérieur\",\n            \"name_en\": \"Interior wash\",\n            \"price\": 29\n        }\n    ],\n    \"contact\": {\n        \"id\": \"ABSJF23\",\n        \"short_id\": null,\n        \"first_name\": \"John\",\n        \"last_name\": \"Doe\",\n        \"gender\": \"male\",\n        \"email\": \"john.doe@ector.io\",\n        \"phone\": \"+33683762714\"\n    },\n    \"car\": {\n        \"id\": \"123AFG\",\n        \"name\": \"Renault Clio\",\n        \"color\": \"Bleu très foncé\",\n        \"plate\": \"AE-123-ME\"\n    },\n    \"services\": [\n        {\n            \"code\": \"cancellation_insurance\",\n            \"name_fr\": \"Assurance annulation\",\n            \"name_en\": \"Cancellation Insurance\",\n            \"price\": 5\n        }\n    ],\n    \"allowed\": true,\n    \"price\": 120,\n    \"original_price\": 150,\n    \"discount\": {\n        \"amount\": 30,\n        \"rate\": null,\n        \"code\": \"MyDiscountCode\"\n    },\n    \"paid_at\": null,\n    \"is_paid\": false,\n    \"cancelled_at\": null,\n    \"is_cancelled\": false,\n    \"refunded_at\": null,\n    \"is_refunded\": false,\n    \"traveling_number_from\": \"from\",\n    \"traveling_number_to\": \"to\",\n    \"external_reference\": \"CDG19384\"\n}"},{"id":"e1b95ccf-c134-27bf-dbe3-b2b58f4b0679","name":"POST /v3/bookings - with discount code","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-ECTOR-AUTHENTICATION","value":"{{apiKey}}"},{"key":"X-ECTOR-ENVIRONMENT","value":"{{environment}}"}],"body":{"mode":"raw","raw":"{\n    \"start_at\": \"2018-02-25T14:00:00+0000\",\n    \"end_at\": \"2018-02-28T14:00:00+0000\",\n\t\"from_spot\": \"CDG1\",\n\t\"to_spot\": \"CDG2\",\n\t\"first_name\": \"John\",\n\t\"last_name\": \"Doe\",\n\t\"gender\": \"male\",\n\t\"email\": \"john.doe@ector.io\",\n\t\"phone\": \"+33683762714\",\n\t\"car_name\": \"Renault Clio\",\n\t\"car_plate\": \"AB-123-ME\",\n\t\"car_color\": \"Bleu\",\n\t\"services\": [\"cancellation_insurance\"],\n\t\"discount_code\": \"MyDiscountCode\",\n    \"traveling_number_from\": \"from\",\n    \"traveling_number_to\": \"to\",\n    \"external_reference\": \"CDG13435\"\n}"},"url":"{{baseUrl}}/v3/bookings"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":"0","body":"{\n    \"id\": \"ANFJEN12-ernvtigbf-sdnjv\",\n    \"short_id\": \"ANFJEN12\",\n    \"start_at\": \"2018-02-25T14:00:00+0000\",\n    \"end_at\": \"2018-02-28T14:00:00+0000\",\n    \"from_spot\": \"CDG1\",\n    \"to_spot\": \"CDG2\",\n    \"available_services\": [\n        {\n            \"code\": \"cancellation_insurance\",\n            \"name_fr\": \"Assurance annulation\",\n            \"name_en\": \"Cancellation Insurance\",\n            \"price\": 5\n        },\n        {\n            \"code\": \"interior_wash\",\n            \"name_fr\": \"Lavage intérieur\",\n            \"name_en\": \"Interior wash\",\n            \"price\": 29\n        }\n    ],\n    \"contact\": {\n        \"id\": \"ABSJF23\",\n        \"short_id\": null,\n        \"first_name\": \"John\",\n        \"last_name\": \"Doe\",\n        \"gender\": \"male\",\n        \"email\": \"john.doe@ector.io\",\n        \"phone\": \"+33683762714\"\n    },\n    \"car\": {\n        \"id\": \"123AFG\",\n        \"name\": \"Renault Clio\",\n        \"color\": \"Bleu très foncé\",\n        \"plate\": \"AE-123-ME\"\n    },\n    \"services\": [\n        {\n            \"code\": \"cancellation_insurance\",\n            \"name_fr\": \"Assurance annulation\",\n            \"name_en\": \"Cancellation Insurance\",\n            \"price\": 5\n        }\n    ],\n    \"allowed\": true,\n    \"price\": 120,\n    \"original_price\": 150,\n    \"discount\": {\n        \"amount\": 30,\n        \"rate\": null,\n        \"code\": \"MyDiscountCode\"\n    },\n    \"paid_at\": null,\n    \"is_paid\": false,\n    \"cancelled_at\": null,\n    \"is_cancelled\": false,\n    \"refunded_at\": null,\n    \"is_refunded\": false,\n    \"traveling_number_from\": \"from\",\n    \"traveling_number_to\": \"to\",\n    \"external_reference\": \"CDG13435\"\n}"}],"_postman_id":"fab7a8a5-33c4-7e90-85a5-ca50f041b671"},{"name":"/v3/bookings/{{bookingId}}","event":[{"listen":"test","script":{"id":"37bf2b84-70bc-405e-a12e-08a43c32ef2c","exec":["var bookingSchema = pm.environment.get('bookingSchema');","","pm.test(\"Status code is 200\", function () {","    pm.response.to.have.status(200);","});","","pm.test('Schema is valid', function() {","    var validation = tv4.validateMultiple(pm.response.json(), bookingSchema);","    console.log(validation);","    pm.expect(validation.valid).to.be.true;","});","","pm.test(\"Response time is less than 500ms\", function () {","    pm.expect(pm.response.responseTime).to.be.below(500);","});"],"type":"text/javascript"}}],"id":"14410493-e134-d1a7-8399-8d45b3c0e8d4","request":{"method":"GET","header":[{"key":"X-ECTOR-AUTHENTICATION","value":"{{apiKey}}"},{"key":"X-ECTOR-ENVIRONMENT","value":"production"}],"body":{"mode":"raw","raw":""},"url":"{{baseUrl}}/v3/bookings/{{bookingId}}","description":"<p>Get a booking</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[]},"isInherited":true,"source":{"_postman_id":"48f878b7-4e4c-6323-e768-364e9521906b","id":"48f878b7-4e4c-6323-e768-364e9521906b","name":"Ector Partners API","type":"collection"}},"urlObject":{"path":["v3","bookings","{{bookingId}}"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"ea16fcb0-45e9-0a2a-9d26-4128e63c0d02","name":"Default","originalRequest":{"method":"GET","header":[{"key":"X-ECTOR-AUTHENTICATION","value":"{{apiKey}}"},{"key":"X-ECTOR-ENVIRONMENT","value":"{{environment}}"}],"body":{"mode":"raw","raw":""},"url":"/v3/bookings/{{bookingId}}"},"code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":"0","body":"{\n    \"id\": \"ANFJEN12-ernvtigbf-sdnjv\",\n    \"short_id\": \"ANFJEN12\",\n    \"start_at\": \"2018-02-25T14:00:00+0000\",\n    \"end_at\": \"2018-02-28T14:00:00+0000\",\n    \"from_spot\": \"CDG1\",\n    \"to_spot\": \"CDG2\",\n    \"available_services\": [\n        {\n            \"code\": \"cancellation_insurance\",\n            \"name_fr\": \"Assurance annulation\",\n            \"name_en\": \"Cancellation Insurance\",\n            \"price\": 5\n        },\n        {\n            \"code\": \"interior_wash\",\n            \"name_fr\": \"Lavage intérieur\",\n            \"name_en\": \"Interior wash\",\n            \"price\": 29\n        }\n    ],\n    \"contact\": {\n        \"id\": \"ABSJF23\",\n        \"short_id\": null,\n        \"first_name\": \"John\",\n        \"last_name\": \"Doe\",\n        \"gender\": \"male\",\n        \"email\": \"john.doe@ector.io\",\n        \"phone\": \"+33683762714\"\n    },\n    \"car\": {\n        \"id\": \"123AFG\",\n        \"name\": \"Renault Clio\",\n        \"color\": \"Bleu très foncé\",\n        \"plate\": \"AE-123-ME\"\n    },\n    \"services\": [\n        {\n            \"code\": \"cancellation_insurance\",\n            \"name_fr\": \"Assurance annulation\",\n            \"name_en\": \"Cancellation Insurance\",\n            \"price\": 5\n        }\n    ],\n    \"allowed\": true,\n    \"price\": 120,\n    \"original_price\": 150,\n    \"discount\": {\n        \"amount\": 30,\n        \"rate\": null,\n        \"code\": \"MyDiscountCode\"\n    },\n    \"paid_at\": null,\n    \"is_paid\": false,\n    \"cancelled_at\": null,\n    \"is_cancelled\": false,\n    \"refunded_at\": null,\n    \"is_refunded\": false\n}"}],"_postman_id":"14410493-e134-d1a7-8399-8d45b3c0e8d4"},{"name":"/v3/bookings/{{bookingId}}","event":[{"listen":"test","script":{"id":"4c36ff99-0942-4e66-ae38-f4f3a3b1c14d","exec":["var bookingSchema = pm.environment.get('bookingSchema');","","pm.test(\"Status code is 200\", function () {","    pm.response.to.have.status(200);","});","","pm.test('Schema is valid', function() {","    var validation = tv4.validateMultiple(pm.response.json(), bookingSchema);","    console.log(validation);","    pm.expect(validation.valid).to.be.true;","});"],"type":"text/javascript"}}],"id":"c398d521-8f7f-db39-c880-24238c994b47","request":{"method":"PUT","header":[{"key":"X-ECTOR-ENVIRONMENT","value":"production"},{"key":"X-ECTOR-AUTHENTICATION","value":"{{apiKey}}"},{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":""},"url":"{{baseUrl}}/v3/bookings/{{bookingId}}","description":"<p>Modify a booking</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[]},"isInherited":true,"source":{"_postman_id":"48f878b7-4e4c-6323-e768-364e9521906b","id":"48f878b7-4e4c-6323-e768-364e9521906b","name":"Ector Partners API","type":"collection"}},"urlObject":{"path":["v3","bookings","{{bookingId}}"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"a97b08fb-8842-c89b-9791-d16fda931211","name":"PUT /v3/bookings/{{id}} - remove discount code","originalRequest":{"method":"PUT","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-ECTOR-AUTHENTICATION","value":"{{apiKey}}"},{"key":"X-ECTOR-ENVIRONMENT","value":"{{environment}}"}],"body":{"mode":"raw","raw":"{\n    \"discount_code\": null\n}"},"url":"/v3/bookings/{{bookingId}}"},"code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":"0","body":"{\n    \"id\": \"ANFJEN12-ernvtigbf-sdnjv\",\n    \"short_id\": \"ANFJEN12\",\n    \"start_at\": \"2018-02-25T14:00:00+0000\",\n    \"end_at\": \"2018-02-28T14:00:00+0000\",\n    \"from_spot\": \"CDG1\",\n    \"to_spot\": \"CDG2\",\n    \"available_services\": [\n        {\n            \"code\": \"cancellation_insurance\",\n            \"name_fr\": \"Assurance annulation\",\n            \"name_en\": \"Cancellation Insurance\",\n            \"price\": 5\n        },\n        {\n            \"code\": \"interior_wash\",\n            \"name_fr\": \"Lavage intérieur\",\n            \"name_en\": \"Interior wash\",\n            \"price\": 29\n        }\n    ],\n    \"contact\": {\n        \"id\": \"ABSJF23\",\n        \"short_id\": null,\n        \"first_name\": \"John\",\n        \"last_name\": \"Doe\",\n        \"gender\": \"male\",\n        \"email\": \"john.doe@ector.io\",\n        \"phone\": \"+33683762714\"\n    },\n    \"car\": {\n        \"id\": \"123AFG\",\n        \"name\": \"Renault Clio\",\n        \"color\": \"Bleu très foncé\",\n        \"plate\": \"AE-123-ME\"\n    },\n    \"services\": [\n        {\n            \"code\": \"cancellation_insurance\",\n            \"name_fr\": \"Assurance annulation\",\n            \"name_en\": \"Cancellation Insurance\",\n            \"price\": 5\n        }\n    ],\n    \"allowed\": true,\n    \"price\": 120,\n    \"original_price\": 150,\n    \"discount\": {\n        \"amount\": 30,\n        \"rate\": null,\n        \"code\": \"MyDiscountCode\"\n    },\n    \"paid_at\": null,\n    \"is_paid\": false,\n    \"cancelled_at\": null,\n    \"is_cancelled\": false,\n    \"refunded_at\": null,\n    \"is_refunded\": false,\n    \"traveling_number_from\": \"from\",\n    \"traveling_number_to\": \"to\"\n}"}],"_postman_id":"c398d521-8f7f-db39-c880-24238c994b47"},{"name":"/v3/bookings/{{bookingId}}/pay","event":[{"listen":"test","script":{"id":"943b56a2-f885-4b5f-9faf-31d5e2c02d4f","exec":["var bookingSchema = pm.environment.get('bookingSchema');","","pm.test(\"Status code is 200\", function () {","    pm.response.to.have.status(200);","});","","pm.test('Schema is valid', function() {","    var validation = tv4.validateMultiple(pm.response.json(), bookingSchema);","    console.log(validation);","    pm.expect(validation.valid).to.be.true;","});",""],"type":"text/javascript"}}],"id":"ed4d7fb4-33e4-e420-6443-4e7ada970f5f","request":{"method":"POST","header":[{"key":"X-ECTOR-AUTHENTICATION","value":"{{apiKey}}"},{"key":"X-ECTOR-ENVIRONMENT","value":"production"},{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":""},"url":"{{baseUrl}}/v3/bookings/{{bookingId}}/pay","description":"<p>Pay booking.  </p>\n<p>You must use the latest price gave by any previous call to the bookings API to make sure you validate the booking under the right configuration.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[]},"isInherited":true,"source":{"_postman_id":"48f878b7-4e4c-6323-e768-364e9521906b","id":"48f878b7-4e4c-6323-e768-364e9521906b","name":"Ector Partners API","type":"collection"}},"urlObject":{"path":["v3","bookings","{{bookingId}}","pay"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"4e224e25-0619-4b4d-826e-8d0018bb0e12","name":"/v3/bookings/{{bookingId}}/pay - With external payment","originalRequest":{"method":"POST","header":[{"key":"X-ECTOR-AUTHENTICATION","value":"{{apiKey}}"},{"key":"X-ECTOR-ENVIRONMENT","value":"sandbox"},{"key":"Content-Type","name":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n\t\"price\": 120,\n\t\"partner_payment\": true\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/v3/bookings/{{bookingId}}/pay"},"status":"OK","code":200,"_postman_previewlanguage":"","header":[],"cookie":[],"responseTime":null,"body":""},{"id":"1f19fbf3-3d08-1b95-d188-28e0ba6e836d","name":"POST /v3/bookings/{{id}}/pay - with PaymentMethodId","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-ECTOR-AUTHENTICATION","value":"{{apiKey}}"},{"key":"X-ECTOR-ENVIRONMENT","value":"sandbox"}],"body":{"mode":"raw","raw":"{\n\t\"method_id\": \"28293-923JDNJDND-839NJ2-28992022\",\n\t\"price\": 120\n}"},"url":"{{v3PartnerBaseURL}}/v3/bookings/{{bookingId}}/pay"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":"0","body":"{\n    \"id\": \"ANFJEN12-ernvtigbf-sdnjv\",\n    \"short_id\": \"ANFJEN12\",\n    \"start_at\": \"2018-02-25T14:00:00+0000\",\n    \"end_at\": \"2018-02-28T14:00:00+0000\",\n    \"from_spot\": \"CDG1\",\n    \"to_spot\": \"CDG2\",\n    \"available_services\": [\n        {\n            \"code\": \"cancellation_insurance\",\n            \"name_fr\": \"Assurance annulation\",\n            \"name_en\": \"Cancellation Insurance\",\n            \"price\": 5\n        },\n        {\n            \"code\": \"interior_wash\",\n            \"name_fr\": \"Lavage intérieur\",\n            \"name_en\": \"Interior wash\",\n            \"price\": 29\n        }\n    ],\n    \"contact\": {\n        \"id\": \"ABSJF23\",\n        \"short_id\": null,\n        \"first_name\": \"John\",\n        \"last_name\": \"Doe\",\n        \"gender\": \"male\",\n        \"email\": \"john.doe@ector.io\",\n        \"phone\": \"+33683762714\"\n    },\n    \"car\": {\n        \"id\": \"123AFG\",\n        \"name\": \"Renault Clio\",\n        \"color\": \"Bleu très foncé\",\n        \"plate\": \"AE-123-ME\"\n    },\n    \"services\": [\n        {\n            \"code\": \"cancellation_insurance\",\n            \"name_fr\": \"Assurance annulation\",\n            \"name_en\": \"Cancellation Insurance\",\n            \"price\": 5\n        }\n    ],\n    \"allowed\": true,\n    \"price\": 120,\n    \"original_price\": 150,\n    \"discount\": {\n        \"amount\": 30,\n        \"rate\": null,\n        \"code\": \"MyDiscountCode\"\n    },\n    \"paid_at\": null,\n    \"is_paid\": false,\n    \"cancelled_at\": null,\n    \"is_cancelled\": false,\n    \"refunded_at\": null,\n    \"is_refunded\": false\n}"},{"id":"8c418dad-ebe9-4ebd-bb38-be32d2353085","name":"POST /v3/bookings/{{bookingId}}/pay - need 3D Secure","originalRequest":{"method":"POST","header":[{"key":"X-ECTOR-AUTHENTICATION","value":"{{apiKey}}"},{"key":"X-ECTOR-ENVIRONMENT","value":"sandbox"},{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n\t\"stripe_payment_method\": \"pm_123456\",\n\t\"price\": 120\n}"},"url":"{{baseUrl}}/v3/bookings/{{bookingId}}/pay"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":null,"cookie":[],"responseTime":null,"body":"{\n    \"status_code\": 400,\n    \"error_code\": \"requires_source_action\",\n    \"message\": \"Payment intent has failed\",\n    \"error_data\": {\n        \"id\": \"pi_123454321\",\n        \"status\": \"requires_source_action\",\n        \"client_secret\": \"pi_123454321_secret_abcdef\"\n    }\n}"},{"id":"8f3ccd69-1447-4aa7-8c3c-89b3527b1f0c","name":"POST /v3/bookings/{{bookingId}}/pay - after 3D Secure","originalRequest":{"method":"POST","header":[{"key":"X-ECTOR-AUTHENTICATION","value":"{{apiKey}}"},{"key":"X-ECTOR-ENVIRONMENT","value":"sandbox"},{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n\t\"stripe_payment_method\": \"pm_123456\",\n\t\"payment_intent_id\": \"pi_123454321\",\n\t\"price\": 120\n}"},"url":"{{baseUrl}}/v3/bookings/{{bookingId}}/pay"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":null,"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"ANFJEN12-ernvtigbf-sdnjv\",\n    \"short_id\": \"ANFJEN12\",\n    \"start_at\": \"2018-02-25T14:00:00+0000\",\n    \"end_at\": \"2018-02-28T14:00:00+0000\",\n    \"from_spot\": \"CDG1\",\n    \"to_spot\": \"CDG2\",\n    \"available_services\": [\n        {\n            \"code\": \"cancellation_insurance\",\n            \"name_fr\": \"Assurance annulation\",\n            \"name_en\": \"Cancellation Insurance\",\n            \"price\": 5\n        },\n        {\n            \"code\": \"interior_wash\",\n            \"name_fr\": \"Lavage intérieur\",\n            \"name_en\": \"Interior wash\",\n            \"price\": 29\n        }\n    ],\n    \"contact\": {\n        \"id\": \"ABSJF23\",\n        \"short_id\": null,\n        \"first_name\": \"John\",\n        \"last_name\": \"Doe\",\n        \"gender\": \"male\",\n        \"email\": \"john.doe@ector.io\",\n        \"phone\": \"+33683762714\"\n    },\n    \"car\": {\n        \"id\": \"123AFG\",\n        \"name\": \"Renault Clio\",\n        \"color\": \"Bleu très foncé\",\n        \"plate\": \"AE-123-ME\"\n    },\n    \"services\": [\n        {\n            \"code\": \"cancellation_insurance\",\n            \"name_fr\": \"Assurance annulation\",\n            \"name_en\": \"Cancellation Insurance\",\n            \"price\": 5\n        }\n    ],\n    \"allowed\": true,\n    \"price\": 120,\n    \"original_price\": 150,\n    \"discount\": {\n        \"amount\": 30,\n        \"rate\": null,\n        \"code\": \"MyDiscountCode\"\n    },\n    \"paid_at\": null,\n    \"is_paid\": false,\n    \"cancelled_at\": null,\n    \"is_cancelled\": false,\n    \"refunded_at\": null,\n    \"is_refunded\": false\n}"},{"id":"9cc1246c-36e2-4e4c-8de5-67683e7cab47","name":"POST /v3/bookings/{{bookingId}}/pay (recommended)","originalRequest":{"method":"POST","header":[{"key":"X-ECTOR-AUTHENTICATION","value":"{{apiKey}}"},{"key":"X-ECTOR-ENVIRONMENT","value":"sandbox"},{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n\t\"stripe_payment_method\": \"pm_123456\",\n\t\"price\": 120\n}"},"url":"{{baseUrl}}/v3/bookings/{{bookingId}}/pay"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":null,"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"ANFJEN12-ernvtigbf-sdnjv\",\n    \"short_id\": \"ANFJEN12\",\n    \"start_at\": \"2018-02-25T14:00:00+0000\",\n    \"end_at\": \"2018-02-28T14:00:00+0000\",\n    \"from_spot\": \"CDG1\",\n    \"to_spot\": \"CDG2\",\n    \"available_services\": [\n        {\n            \"code\": \"cancellation_insurance\",\n            \"name_fr\": \"Assurance annulation\",\n            \"name_en\": \"Cancellation Insurance\",\n            \"price\": 5\n        },\n        {\n            \"code\": \"interior_wash\",\n            \"name_fr\": \"Lavage intérieur\",\n            \"name_en\": \"Interior wash\",\n            \"price\": 29\n        }\n    ],\n    \"contact\": {\n        \"id\": \"ABSJF23\",\n        \"short_id\": null,\n        \"first_name\": \"John\",\n        \"last_name\": \"Doe\",\n        \"gender\": \"male\",\n        \"email\": \"john.doe@ector.io\",\n        \"phone\": \"+33683762714\"\n    },\n    \"car\": {\n        \"id\": \"123AFG\",\n        \"name\": \"Renault Clio\",\n        \"color\": \"Bleu très foncé\",\n        \"plate\": \"AE-123-ME\"\n    },\n    \"services\": [\n        {\n            \"code\": \"cancellation_insurance\",\n            \"name_fr\": \"Assurance annulation\",\n            \"name_en\": \"Cancellation Insurance\",\n            \"price\": 5\n        }\n    ],\n    \"allowed\": true,\n    \"price\": 120,\n    \"original_price\": 150,\n    \"discount\": {\n        \"amount\": 30,\n        \"rate\": null,\n        \"code\": \"MyDiscountCode\"\n    },\n    \"paid_at\": null,\n    \"is_paid\": false,\n    \"cancelled_at\": null,\n    \"is_cancelled\": false,\n    \"refunded_at\": null,\n    \"is_refunded\": false\n}"},{"id":"d35f13bd-b0d2-3737-df4a-3882460f16cc","name":"POST /v3/bookings/{{id}}/pay -  with stripe token","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-ECTOR-AUTHENTICATION","value":"{{apiKey}}"},{"key":"X-ECTOR-ENVIRONMENT","value":"sandbox"}],"body":{"mode":"raw","raw":"{\n\t\"stripe_token\": \"__token8383BJBGDFJD\",\n\t\"save_card\": true,\n\t\"price\": 120\n}"},"url":"{{v3PartnerBaseURL}}/v3/bookings/{{bookingId}}/pay"},"code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":"0","body":"{\n    \"id\": \"ANFJEN12-ernvtigbf-sdnjv\",\n    \"short_id\": \"ANFJEN12\",\n    \"start_at\": \"2018-02-25T14:00:00+0000\",\n    \"end_at\": \"2018-02-28T14:00:00+0000\",\n    \"from_spot\": \"CDG1\",\n    \"to_spot\": \"CDG2\",\n    \"available_services\": [\n        {\n            \"code\": \"cancellation_insurance\",\n            \"name_fr\": \"Assurance annulation\",\n            \"name_en\": \"Cancellation Insurance\",\n            \"price\": 5\n        },\n        {\n            \"code\": \"interior_wash\",\n            \"name_fr\": \"Lavage intérieur\",\n            \"name_en\": \"Interior wash\",\n            \"price\": 29\n        }\n    ],\n    \"contact\": {\n        \"id\": \"ABSJF23\",\n        \"short_id\": null,\n        \"first_name\": \"John\",\n        \"last_name\": \"Doe\",\n        \"gender\": \"male\",\n        \"email\": \"john.doe@ector.io\",\n        \"phone\": \"+33683762714\"\n    },\n    \"car\": {\n        \"id\": \"123AFG\",\n        \"name\": \"Renault Clio\",\n        \"color\": \"Bleu très foncé\",\n        \"plate\": \"AE-123-ME\"\n    },\n    \"services\": [\n        {\n            \"code\": \"cancellation_insurance\",\n            \"name_fr\": \"Assurance annulation\",\n            \"name_en\": \"Cancellation Insurance\",\n            \"price\": 5\n        }\n    ],\n    \"allowed\": true,\n    \"price\": 120,\n    \"original_price\": 150,\n    \"discount\": {\n        \"amount\": 30,\n        \"rate\": null,\n        \"code\": \"MyDiscountCode\"\n    },\n    \"paid_at\": null,\n    \"is_paid\": false,\n    \"cancelled_at\": null,\n    \"is_cancelled\": false,\n    \"refunded_at\": null,\n    \"is_refunded\": false\n}"}],"_postman_id":"ed4d7fb4-33e4-e420-6443-4e7ada970f5f"},{"name":"/v3/bookings/{{bookingId}}/cancel","event":[{"listen":"test","script":{"id":"588cb584-64ce-4d2a-b696-416c85da1032","exec":["var schema = {","  \"type\": \"object\",","  \"definitions\": {},","  \"properties\": {","    \"id\": {","      \"type\": \"string\",","    },","    \"startAt\": {","      \"type\": \"string\",","    },","    \"endAt\": {","      \"type\": \"string\",","    },","    \"fromSpot\": {","      \"type\": \"string\",","    },","    \"toSpot\": {","      \"type\": \"string\",","    },","    \"firstName\": {","      \"type\": \"string\",","    },","    \"lastName\": {","      \"type\": \"string\",","    },","    \"gender\": {","      \"type\": \"string\",","    },","    \"email\": {","      \"type\": \"string\",","    },","    \"phone\": {","      \"type\": \"string\",","    },","    \"allowed\": {","      \"type\": \"boolean\",","    },","    \"price\": {","      \"type\": \"integer\",","    },","    \"availableServices\": {","      \"type\": \"array\",","      \"items\": {","        \"type\": \"object\",","        \"properties\": {","          \"code\": {","            \"type\": \"string\",","          },","          \"nameFr\": {","            \"type\": \"string\",","          },","          \"nameEn\": {","            \"type\": \"string\",","          },","          \"price\": {","            \"type\": \"integer\",","          }","        }","      }","    },","    \"paidAt\": {","      \"type\": [\"string\", \"null\"],","    },","    \"isPaid\": {","      \"type\": \"boolean\",","    },","    \"cancelledAt\": {","      \"type\": [\"string\", \"null\"],","    },","    \"isCancelled\": {","      \"type\": \"boolean\",","    },","    \"refundedAt\": {","      \"type\": [\"string\", \"null\"],","    },","    \"isRefunded\": {","      \"type\": \"boolean\",","    }","  }","}","","pm.test(\"Status code is 200\", function () {","    pm.response.to.have.status(200);","});","","pm.test('Schema is valid', function() {","  pm.expect(tv4.validate(pm.response.json(), schema)).to.be.true;","});"],"type":"text/javascript"}}],"id":"de86d660-b385-4b29-5b2f-61a31a587995","request":{"method":"POST","header":[{"key":"X-ECTOR-ENVIRONMENT","value":"production"},{"key":"X-ECTOR-AUTHENTICATION","value":"{{apiKey}}"},{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":""},"url":"{{baseUrl}}/v3/bookings/{{bookingId}}/cancel","description":"<p>Cancel a booking, cancelled_reason_code must be one of the following:</p>\n<ul>\n<li>no_show_valet</li>\n<li>no_show_customer</li>\n<li>wrong_car_restit</li>\n<li>late_valet_in</li>\n<li>late_valet_out</li>\n<li>car_incident</li>\n<li>from_customer</li>\n<li>canceled_flight_train</li>\n<li>missed_flight_train</li>\n<li>valet_unavailable</li>\n<li>duplication</li>\n<li>test</li>\n</ul>\n<p>cancelled_reason is free text</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[]},"isInherited":true,"source":{"_postman_id":"48f878b7-4e4c-6323-e768-364e9521906b","id":"48f878b7-4e4c-6323-e768-364e9521906b","name":"Ector Partners API","type":"collection"}},"urlObject":{"path":["v3","bookings","{{bookingId}}","cancel"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"23eadfcd-a326-2d04-0493-082723482941","name":"/v3/bookings/{{bookingId}}/cancel - default","originalRequest":{"method":"POST","header":[{"key":"X-ECTOR-ENVIRONMENT","value":"sandbox"},{"key":"X-ECTOR-AUTHENTICATION","value":"{{apiKey}}"},{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n\t\n}"},"url":"{{baseUrl}}/v3/bookings/{{bookingId}}/cancel"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":"0","body":"{\n    \"id\": \"ANFJEN12-ernvtigbf-sdnjv\",\n    \"short_id\": \"ANFJEN12\",\n    \"start_at\": \"2018-02-25T14:00:00+0000\",\n    \"end_at\": \"2018-02-28T14:00:00+0000\",\n    \"from_spot\": \"CDG1\",\n    \"to_spot\": \"CDG2\",\n    \"available_services\": [\n        {\n            \"code\": \"cancellation_insurance\",\n            \"name_fr\": \"Assurance annulation\",\n            \"name_en\": \"Cancellation Insurance\",\n            \"price\": 5\n        },\n        {\n            \"code\": \"interior_wash\",\n            \"name_fr\": \"Lavage intérieur\",\n            \"name_en\": \"Interior wash\",\n            \"price\": 29\n        }\n    ],\n    \"contact\": {\n        \"id\": \"ABSJF23\",\n        \"short_id\": null,\n        \"first_name\": \"John\",\n        \"last_name\": \"Doe\",\n        \"gender\": \"male\",\n        \"email\": \"john.doe@ector.io\",\n        \"phone\": \"+33683762714\"\n    },\n    \"car\": {\n        \"id\": \"123AFG\",\n        \"name\": \"Renault Clio\",\n        \"color\": \"Bleu très foncé\",\n        \"plate\": \"AE-123-ME\"\n    },\n    \"services\": [\n        {\n            \"code\": \"cancellation_insurance\",\n            \"name_fr\": \"Assurance annulation\",\n            \"name_en\": \"Cancellation Insurance\",\n            \"price\": 5\n        }\n    ],\n    \"allowed\": true,\n    \"price\": 120,\n    \"original_price\": 150,\n    \"discount\": {\n        \"amount\": 30,\n        \"rate\": null,\n        \"code\": \"MyDiscountCode\"\n    },\n    \"paid_at\": \"2018-01-01T14:00:00.000Z\",\n    \"is_paid\": true,\n    \"cancelled_at\": \"2018-01-02T14:00:00.000Z\",\n    \"is_cancelled\": true,\n    \"refunded_at\": null,\n    \"is_refunded\": false\n}"},{"id":"e2936255-05d7-5db7-a5b6-e9686cb3d529","name":"/v3/bookings/cancel - with reason","originalRequest":{"method":"POST","header":[{"key":"X-ECTOR-AUTHENTICATION","value":"{{apiKey}}","description":"header of partner ector"},{"key":"X-ECTOR-ENVIRONMENT","value":"sandbox"},{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n\t\"cancelled_reason\": \"This is a test\",\n\t\"cancelled_reason_code\": \"test\"\n}"},"url":"/v3/bookings/{{bookingId}}/cancel"},"code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":"0","body":"{\n    \"id\": \"ANFJEN12-ernvtigbf-sdnjv\",\n    \"short_id\": \"ANFJEN12\",\n    \"start_at\": \"2018-02-25T14:00:00+0000\",\n    \"end_at\": \"2018-02-28T14:00:00+0000\",\n    \"from_spot\": \"CDG1\",\n    \"to_spot\": \"CDG2\",\n    \"available_services\": [\n        {\n            \"code\": \"cancellation_insurance\",\n            \"name_fr\": \"Assurance annulation\",\n            \"name_en\": \"Cancellation Insurance\",\n            \"price\": 5\n        },\n        {\n            \"code\": \"interior_wash\",\n            \"name_fr\": \"Lavage intérieur\",\n            \"name_en\": \"Interior wash\",\n            \"price\": 29\n        }\n    ],\n    \"contact\": {\n        \"id\": \"ABSJF23\",\n        \"short_id\": null,\n        \"first_name\": \"John\",\n        \"last_name\": \"Doe\",\n        \"gender\": \"male\",\n        \"email\": \"john.doe@ector.io\",\n        \"phone\": \"+33683762714\"\n    },\n    \"car\": {\n        \"id\": \"123AFG\",\n        \"name\": \"Renault Clio\",\n        \"color\": \"Bleu très foncé\",\n        \"plate\": \"AE-123-ME\"\n    },\n    \"services\": [\n        {\n            \"code\": \"cancellation_insurance\",\n            \"name_fr\": \"Assurance annulation\",\n            \"name_en\": \"Cancellation Insurance\",\n            \"price\": 5\n        }\n    ],\n    \"allowed\": true,\n    \"price\": 120,\n    \"original_price\": 150,\n    \"discount\": {\n        \"amount\": 30,\n        \"rate\": null,\n        \"code\": \"MyDiscountCode\"\n    },\n    \"paid_at\": \"2018-01-01T14:00:00.000Z\",\n    \"is_paid\": true,\n    \"cancelled_at\": \"2018-01-02T14:00:00.000Z\",\n    \"is_cancelled\": true,\n    \"refunded_at\": null,\n    \"is_refunded\": false\n}"}],"_postman_id":"de86d660-b385-4b29-5b2f-61a31a587995"},{"name":"/v3/bookings?email='xxxx@gmail.com'","event":[{"listen":"test","script":{"id":"3f05be1e-d1d4-45b2-b5f2-de35dd388f2a","exec":[""],"type":"text/javascript"}}],"id":"8ccfccca-7f19-992a-a8ff-b4c6e2207aa8","request":{"method":"GET","header":[{"key":"X-ECTOR-ENVIRONMENT","value":"production"},{"key":"X-ECTOR-AUTHENTICATION","value":"{{apiKey}}"}],"url":"{{baseUrl}}/v3/bookings?email='xxxx@gmail.com'","description":"<p>Search bookings of an email - [In development]</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[]},"isInherited":true,"source":{"_postman_id":"48f878b7-4e4c-6323-e768-364e9521906b","id":"48f878b7-4e4c-6323-e768-364e9521906b","name":"Ector Partners API","type":"collection"}},"urlObject":{"path":["v3","bookings"],"host":["{{baseUrl}}"],"query":[{"key":"email","value":"'xxxx@gmail.com'"}],"variable":[]}},"response":[],"_postman_id":"8ccfccca-7f19-992a-a8ff-b4c6e2207aa8"},{"name":"/v3/bookings","event":[{"listen":"test","script":{"id":"bdf6c3b7-7848-4ea0-adfd-b73928f45970","exec":[""],"type":"text/javascript"}}],"id":"4b95ccc8-7292-479a-893d-5855ecb16130","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"X-ECTOR-AUTHENTICATION","value":"{{apiKey}}"},{"key":"X-ECTOR-ENVIRONMENT","value":"production"}],"url":"{{baseUrl}}/v3/bookings?from=2021-08-01T00:00:00Z&to=2021-09-01T00:00:00Z&limit=10&includeCancelled=false","description":"<p>Search bookings within a period</p>\n<p>Limit cannot be higher than 100 and defaults to 50.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[]},"isInherited":true,"source":{"_postman_id":"48f878b7-4e4c-6323-e768-364e9521906b","id":"48f878b7-4e4c-6323-e768-364e9521906b","name":"Ector Partners API","type":"collection"}},"urlObject":{"path":["v3","bookings"],"host":["{{baseUrl}}"],"query":[{"key":"from","value":"2021-08-01T00:00:00Z"},{"key":"to","value":"2021-09-01T00:00:00Z"},{"key":"limit","value":"10"},{"key":"includeCancelled","value":"false"}],"variable":[]}},"response":[],"_postman_id":"4b95ccc8-7292-479a-893d-5855ecb16130"},{"name":"/v3/email/thomas@ectorparking.com/bookings?count=1","id":"7b148ae5-d868-4dbd-8764-fbd1d84b0c46","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"X-ECTOR-AUTHENTICATION","value":"{{apiKey}}"},{"key":"X-ECTOR-ENVIRONMENT","value":"production"},{"key":"cache-control","value":"no-cache"}],"body":{"mode":"formdata","formdata":[]},"url":"{{baseUrl}}/v3/email/xxxx@gmail.com/bookings?count=1","auth":{"type":"bearer","bearer":{"basicConfig":[]},"isInherited":true,"source":{"_postman_id":"48f878b7-4e4c-6323-e768-364e9521906b","id":"48f878b7-4e4c-6323-e768-364e9521906b","name":"Ector Partners API","type":"collection"}},"urlObject":{"path":["v3","email","xxxx@gmail.com","bookings"],"host":["{{baseUrl}}"],"query":[{"key":"count","value":"1"}],"variable":[]}},"response":[],"_postman_id":"7b148ae5-d868-4dbd-8764-fbd1d84b0c46"}],"id":"25c947c4-b5bb-40b3-2d9b-0e9a4a8890bc","description":"<h1 id=\"representation\">Representation</h1>\n<p>Bookings are the main entities in our application. At its core there are two dates (begining and end) and two spots (begining and end).</p>\n<h1 id=\"json-schema\">JSON Schema</h1>\n<p>Here is the JSON Schema of a booking : </p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"type\": \"object\",\n    \"additionalItems\": false,\n    \"properties\": {\n        \"start_at\": {\n            \"type\": \"string\"\n        },\n        \"end_at\": {\n            \"type\": \"string\"\n        },\n        \"from_spot\": {\n            \"type\": \"string\"\n        },\n        \"to_spot\": {\n            \"type\": \"string\"\n        },\n        \"available_services\": {\n            \"type\": \"array\",\n            \"additionalItems\": false,\n            \"items\": {\n                \"type\": \"object\",\n                \"properties\": {\n                    \"code\": {\n                        \"type\": \"string\"\n                    },\n                    \"name_fr\": {\n                        \"type\": \"string\"\n                    },\n                    \"name_en\": {\n                        \"type\": \"string\"\n                    },\n                    \"price\": {\n                        \"type\": \"number\"\n                    }\n                }\n            }\n        },\n        \"contact\": {\n            \"type\": \"object\",\n            \"properties\": {\n                $ref: \"contactSchema\"\n            }\n        },\n        \"car\": {\n            \"type\": \"object\",\n            \"properties\": {\n                $ref: \"carSchema\"\n            }\n        },\n        \"services\": {\n            \"type\": \"array\",\n            \"additionalItems\": false,\n            \"items\": {\n                \"type\": \"object\",\n                \"properties\": {\n                    \"code\": {\n                        \"type\": \"string\"\n                    },\n                    \"name_fr\": {\n                        \"type\": \"string\"\n                    },\n                    \"name_en\": {\n                        \"type\": \"string\"\n                    },\n                    \"price\": {\n                        \"type\": \"number\"\n                    }\n                }\n            }\n        },\n        \"allowed\": {\n            \"type\": \"boolean\"\n        },\n        \"price\": {\n            \"type\": \"number\"\n        },\n        \"original_price\": {\n            \"type\": \"number\"\n        },\n        \"discount\": {\n            \"type\": \"object\",\n            \"properties\": {\n                \"amount\": {\n                    \"type\": [\"number\" , \"null\"]\n                },\n                \"rate\": {\n                    \"type\": [\"number\" , \"null\"]\n                },\n                \"code\": {\n                    \"type\": \"string\"\n                }\n            }\n        },\n        \"paid_at\": {\n            \"type\": [\"string\", \"null\"]\n        },\n        \"is_paid\": {\n            \"type\": \"boolean\"\n        },\n        \"cancelled_at\": {\n            \"type\": [\"string\", \"null\"]\n        },\n        \"is_cancelled\": {\n            \"type\": \"boolean\"\n        },\n        \"refunded_at\": {\n            \"type\": [\"string\", \"null\"]\n        },\n        \"is_refunded\": {\n            \"type\": \"boolean\"\n        }\n    }\n}\n</code></pre>\n","event":[{"listen":"prerequest","script":{"id":"1fc5e033-7605-4e06-b8ed-788d4b994089","type":"text/javascript","exec":[""]}},{"listen":"test","script":{"id":"a78c1a4e-3501-459c-b65b-65c889c8cc66","type":"text/javascript","exec":[""]}}],"_postman_id":"25c947c4-b5bb-40b3-2d9b-0e9a4a8890bc","auth":{"type":"bearer","bearer":{"basicConfig":[]},"isInherited":true,"source":{"_postman_id":"48f878b7-4e4c-6323-e768-364e9521906b","id":"48f878b7-4e4c-6323-e768-364e9521906b","name":"Ector Partners API","type":"collection"}}},{"name":"Contacts","item":[{"name":"/v3/contacts","event":[{"listen":"test","script":{"id":"e4fc18b0-6709-4478-8b2a-c059ba9955a3","exec":["var contactSchema = pm.environment.get('contactSchema');","","pm.test(\"Status code is 200\", function () {","    pm.response.to.have.status(200);","});","","pm.test('Schema is valid', function() {","    var validation = tv4.validateMultiple(pm.response.json(), contactSchema);","    console.log(validation);","    pm.expect(validation.valid).to.be.true;","});","","pm.test(\"Response time is less than 500ms\", function () {","    pm.expect(pm.response.responseTime).to.be.below(500);","});","","pm.globals.set(\"contactId\", pm.response.json().id);"],"type":"text/javascript"}}],"id":"76952571-6e24-7a13-248b-8409de18a5fd","request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-ECTOR-ENVIRONMENT","value":"production"},{"key":"X-ECTOR-AUTHENTICATION","value":"{{apiKey}}"}],"body":{"mode":"raw","raw":""},"url":"{{baseUrl}}/v3/contacts","description":"<p>Create a contact</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[]},"isInherited":true,"source":{"_postman_id":"48f878b7-4e4c-6323-e768-364e9521906b","id":"48f878b7-4e4c-6323-e768-364e9521906b","name":"Ector Partners API","type":"collection"}},"urlObject":{"path":["v3","contacts"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"cb08b8c2-8ab8-00ad-1d39-1ec202dc64ef","name":"POST /v3/contacts - create a contact","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-ECTOR-AUTHENTICATION","value":"{{apiKey}}"},{"key":"X-ECTOR-ENVIRONMENT","value":"production"}],"body":{"mode":"raw","raw":"{\n\t\"gender\": \"male\",\n\t\"firstName\": \"Jhon\",\n\t\"lastName\": \"Doe\",\n\t\"phone\": \"+33612345678\",\n\t\"email\": \"jhon.doe@yopmail.com\",\n\t\"postcode\": \"75009\"\n}"},"url":"/v3/contacts"},"code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":"0","body":"{\n    \"id\": \"834E3F\",\n    \"short_id\": null,\n    \"gender\": \"male\",\n    \"first_name\": \"Jhon\",\n    \"last_name\": \"Doe\",\n    \"phone\": \"+33612345678\",\n    \"email\": \"jhon.doe@yopmail.com\",\n    \"postcode\": \"75009\"\n}"}],"_postman_id":"76952571-6e24-7a13-248b-8409de18a5fd"},{"name":"/v3/contacts/{{contactId}}","event":[{"listen":"test","script":{"id":"b1fe1de1-82d2-4385-86cf-de873001eb24","exec":["var contactSchema = pm.environment.get('contactSchema');","","pm.test(\"Status code is 200\", function () {","    pm.response.to.have.status(200);","});","","pm.test('Schema is valid', function() {","    var validation = tv4.validateMultiple(pm.response.json(), contactSchema);","    console.log(validation);","    pm.expect(validation.valid).to.be.true;","});","","pm.test(\"Response time is less than 500ms\", function () {","    pm.expect(pm.response.responseTime).to.be.below(500);","});"],"type":"text/javascript"}}],"id":"1e8fabda-17ce-391a-50f1-f579b7261e94","request":{"method":"GET","header":[{"key":"X-ECTOR-ENVIRONMENT","value":"production"},{"key":"X-ECTOR-AUTHENTICATION","value":"{{apiKey}}"}],"body":{"mode":"raw","raw":""},"url":"{{baseUrl}}/v3/contacts/{{contactId}}","description":"<p>Get a contact</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[]},"isInherited":true,"source":{"_postman_id":"48f878b7-4e4c-6323-e768-364e9521906b","id":"48f878b7-4e4c-6323-e768-364e9521906b","name":"Ector Partners API","type":"collection"}},"urlObject":{"path":["v3","contacts","{{contactId}}"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"47fd1cce-8c37-6d34-29c6-9f2e9a0f5ca0","name":"GET /v3/contacts/{{id}} - get a contact from id","originalRequest":{"method":"GET","header":[{"key":"X-ECTOR-AUTHENTICATION","value":"{{apiKey}}"},{"key":"X-ECTOR-ENVIRONMENT","value":"production"}],"body":{"mode":"raw","raw":""},"url":"/v3/contacts/{{contactId}}"},"code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":"0","body":"{\n    \"id\": \"834E3F\",\n    \"short_id\": null,\n    \"gender\": \"male\",\n    \"firstName\": \"Jhon\",\n    \"lastName\": \"Doe\",\n    \"phone\": \"+33612345678\",\n    \"email\": \"jhon.doe@yopmail.com\",\n    \"postcode\": \"75009\"\n}"}],"_postman_id":"1e8fabda-17ce-391a-50f1-f579b7261e94"},{"name":"/v3/contacts/{{contactId}}","event":[{"listen":"test","script":{"id":"d7040d49-f132-4043-b8a0-a94437994cc5","exec":["var contactSchema = pm.environment.get('contactSchema');","","pm.test(\"Status code is 200\", function () {","    pm.response.to.have.status(200);","});","","pm.test('Schema is valid', function() {","    var validation = tv4.validateMultiple(pm.response.json(), contactSchema);","    console.log(validation);","    pm.expect(validation.valid).to.be.true;","});","","pm.test(\"Response time is less than 500ms\", function () {","    pm.expect(pm.response.responseTime).to.be.below(500);","});"],"type":"text/javascript"}}],"id":"a0cfcbb0-a3f0-a89b-c06c-307c6eb3546e","request":{"method":"PUT","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-ECTOR-ENVIRONMENT","value":"production"},{"key":"X-ECTOR-AUTHENTICATION","value":"{{apiKey}}"}],"body":{"mode":"raw","raw":""},"url":"{{baseUrl}}/v3/contacts/{{contactId}}","description":"<p>Modify a contact</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[]},"isInherited":true,"source":{"_postman_id":"48f878b7-4e4c-6323-e768-364e9521906b","id":"48f878b7-4e4c-6323-e768-364e9521906b","name":"Ector Partners API","type":"collection"}},"urlObject":{"path":["v3","contacts","{{contactId}}"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"45d33cde-98cb-7ce5-a40f-0949bf27b598","name":"PUT /v3/contacts/{{id}}","originalRequest":{"method":"PUT","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-ECTOR-AUTHENTICATION","value":"{{apiKey}}"},{"key":"X-ECTOR-ENVIRONMENT","value":"production"}],"body":{"mode":"raw","raw":"{\n    \"firstName\": \"John\",\n    \"lastName\": \"Doe\",\n    \"email\": \"jhon.doe@yopmail.com\"\n}"},"url":"/v3/contacts/{{contactId}}"},"code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":"0","body":"{\n    \"id\": \"834E3F\",\n    \"short_id\": null,\n    \"gender\": \"male\",\n    \"firstName\": \"Jhon\",\n    \"lastName\": \"Doe\",\n    \"phone\": \"+33612345678\",\n    \"email\": \"jhon.doe@yopmail.com\",\n    \"postcode\": \"75009\"\n}"}],"_postman_id":"a0cfcbb0-a3f0-a89b-c06c-307c6eb3546e"},{"name":"/v3/contacts/{{contactId}}/bookings","event":[{"listen":"test","script":{"id":"c2e20b56-e78b-4edf-910b-e937f1e71b0f","exec":["var schema = {","  \"type\": \"array\",","  \"additionalItems\": false,","  \"items\": {","    \"$ref\": \"bookingSchema\"","  }","};","","pm.test(\"Status code is 200\", function () {","    pm.response.to.have.status(200);","});","","pm.test('Schema is valid', function() {","  pm.expect(tv4.validate(pm.response.json(), schema)).to.be.true;","});",""],"type":"text/javascript"}}],"id":"2a34c51f-a500-0c3d-a873-5269e0a9da10","request":{"method":"GET","header":[{"key":"X-ECTOR-AUTHENTICATION","value":"{{apiKey}}"},{"key":"X-ECTOR-ENVIRONMENT","value":"production"}],"body":{"mode":"raw","raw":""},"url":"{{baseUrl}}/v3/contacts/{{contactId}}/bookings","description":"<p>Get all booking of a contact - [In development]</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[]},"isInherited":true,"source":{"_postman_id":"48f878b7-4e4c-6323-e768-364e9521906b","id":"48f878b7-4e4c-6323-e768-364e9521906b","name":"Ector Partners API","type":"collection"}},"urlObject":{"path":["v3","contacts","{{contactId}}","bookings"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"f5580dc7-d092-1e9f-5429-246f90aa9678","name":"GET - /v3/contacts/{{id}}/bookings - get bookings from a contact id","originalRequest":{"method":"GET","header":[],"body":{"mode":"raw","raw":""},"url":"/v3/contacts/{{contactId}}/bookings"},"code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":"0","body":"[\n    {\n        \"id\": \"ANFJEN12\",\n        \"start_at\": \"2018-01-25T14:00:00.000Z\",\n        \"end_at\": \"2018-02-01T14:00:00.000Z\",\n        \"from_spot\": \"CDG1\",\n        \"to_spot\": \"CDG2\",\n        \"available_services\": [\n            {\n                \"code\": \"cancellation_insurance\",\n                \"name_fr\": \"Assurance annulation\",\n                \"name_en\": \"Cancellation Insurance\",\n                \"price\": 5\n            },\n            {\n                \"code\": \"interior_wash\",\n                \"name_fr\": \"Lavage intérieur\",\n                \"name_en\": \"Interior wash\",\n                \"price\": 29\n            }\n        ],\n        \"contact\": {\n            \"id\": \"ABSJF23\",\n            \"first_name\": \"John\",\n            \"last_name\": \"Doe\",\n            \"gender\": \"male\",\n            \"email\": \"john.doe@ector.io\",\n            \"phone\": \"+33683762714\"\n        },\n        \"car\": {\n            \"id\": \"123AFG\",\n            \"name\": \"Renault Clio\",\n            \"color\": \"Bleu très foncé\",\n            \"plate\": \"AE-123-ME\"\n        },\n        \"services\": [\n            {\n                \"code\": \"cancellation_insurance\",\n                \"name_fr\": \"Assurance annulation\",\n                \"name_en\": \"Cancellation Insurance\",\n                \"price\": 5\n            }\n        ],\n        \"allowed\": true,\n        \"price\": 120,\n        \"discount\": {\n            \"amount\": 30,\n            \"rate\": null,\n            \"code\": \"MyDiscountCode\",\n            \"original_price\": 150\n        },\n        \"paid_at\": null,\n        \"is_paid\": false,\n        \"cancelled_at\": null,\n        \"is_cancelled\": false,\n        \"refunded_at\": null,\n        \"is_refunded\": false\n    },\n    {\n        \"id\": \"ANFZN12\",\n        \"start_at\": \"2018-02-12T14:00:00.000Z\",\n        \"end_at\": \"2018-03-01T23:30:00.000Z\",\n        \"from_spot\": \"ORYS\",\n        \"to_spot\": \"ORYS\",\n        \"available_services\": [\n            {\n                \"code\": \"cancellation_insurance\",\n                \"name_fr\": \"Assurance annulation\",\n                \"name_en\": \"Cancellation Insurance\",\n                \"price\": 5\n            },\n            {\n                \"code\": \"interior_wash\",\n                \"name_fr\": \"Lavage intérieur\",\n                \"name_en\": \"Interior wash\",\n                \"price\": 29\n            }\n        ],\n        \"contact\": {\n            \"id\": \"ABSJF23\",\n            \"first_name\": \"John\",\n            \"last_name\": \"Doe\",\n            \"gender\": \"male\",\n            \"email\": \"john.doe@ector.io\",\n            \"phone\": \"+33683762714\"\n        },\n        \"car\": {\n            \"id\": \"123AFG\",\n            \"name\": \"Renault Clio\",\n            \"color\": \"Bleu\",\n            \"plate\": \"AE-123-ME\"\n        },\n        \"services\": [\n            {\n                \"code\": \"cancellation_insurance\",\n                \"name_fr\": \"Assurance annulation\",\n                \"name_en\": \"Cancellation Insurance\",\n                \"price\": 5\n            }\n        ],\n        \"allowed\": true,\n        \"price\": 125,\n        \"discount\": {\n            \"amount\": 5,\n            \"rate\": null,\n            \"code\": \"MyDiscountCode\",\n            \"original_price\": 130\n        },\n        \"paid_at\": null,\n        \"is_paid\": false,\n        \"cancelled_at\": null,\n        \"is_cancelled\": false,\n        \"refunded_at\": null,\n        \"is_refunded\": false\n    }\n]"}],"_postman_id":"2a34c51f-a500-0c3d-a873-5269e0a9da10"}],"id":"16ffb15c-f25a-33a5-4f16-28b9659c1cab","_postman_id":"16ffb15c-f25a-33a5-4f16-28b9659c1cab","description":"","auth":{"type":"bearer","bearer":{"basicConfig":[]},"isInherited":true,"source":{"_postman_id":"48f878b7-4e4c-6323-e768-364e9521906b","id":"48f878b7-4e4c-6323-e768-364e9521906b","name":"Ector Partners API","type":"collection"}}},{"name":"Cars","item":[{"name":"/v3/cars","event":[{"listen":"test","script":{"id":"a6091950-0c9c-4e8e-b413-c7d37f01e515","exec":["var carSchema = pm.environment.get('carSchema');","","pm.test(\"Status code is 200\", function () {","    pm.response.to.have.status(200);","});","","pm.test('Schema is valid', function() {","    var validation = tv4.validateMultiple(pm.response.json(), carSchema);","    console.log(validation);","    pm.expect(validation.valid).to.be.true;","});","","pm.test(\"Response time is less than 500ms\", function () {","    pm.expect(pm.response.responseTime).to.be.below(500);","});","","pm.globals.set(\"carId\", pm.response.json().id);"],"type":"text/javascript"}}],"id":"7d346645-3715-14da-2b96-e5ae954a441d","request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-ECTOR-ENVIRONMENT","value":"production"},{"key":"X-ECTOR-AUTHENTICATION","value":"{{apiKey}}"}],"body":{"mode":"raw","raw":""},"url":"{{baseUrl}}/v3/cars","auth":{"type":"bearer","bearer":{"basicConfig":[]},"isInherited":true,"source":{"_postman_id":"48f878b7-4e4c-6323-e768-364e9521906b","id":"48f878b7-4e4c-6323-e768-364e9521906b","name":"Ector Partners API","type":"collection"}},"urlObject":{"path":["v3","cars"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"49ee41c3-cebf-6e22-e784-ed1137c910d8","name":"POST /v3/cars - create a car","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-ECTOR-AUTHENTICATION","value":"{{apiKey}}"},{"key":"X-ECTOR-ENVIRONMENT","value":"sandbox"}],"body":{"mode":"raw","raw":"{\n\t\"plate\": \"FO-234-KF\",\n\t\"name\": \"Renault Clio\",\n\t\"color\": \"Bleu\"\n}"},"url":"{{v3PartnerBaseURL}}/v3/cars"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":"0","body":"{\n  \"id\": \"8YE82H\",\n  \"plate\": \"FO-234-KF\",\n  \"name\": \"Renault Clio\",\n  \"color\": \"Bleu\"\n}"}],"_postman_id":"7d346645-3715-14da-2b96-e5ae954a441d"},{"name":"/v3/cars/{{carId}}","event":[{"listen":"test","script":{"id":"2c8dbf9d-8990-461c-94b8-42f431ad18a8","exec":["var carSchema = pm.environment.get('carSchema');","","pm.test(\"Status code is 200\", function () {","    pm.response.to.have.status(200);","});","","pm.test('Schema is valid', function() {","    var validation = tv4.validateMultiple(pm.response.json(), carSchema);","    console.log(validation);","    pm.expect(validation.valid).to.be.true;","});","","pm.test(\"Response time is less than 500ms\", function () {","    pm.expect(pm.response.responseTime).to.be.below(500);","});"],"type":"text/javascript"}}],"id":"efcad19a-107c-b90f-fe4a-0466a8201944","request":{"method":"GET","header":[{"key":"X-ECTOR-AUTHENTICATION","value":"{{apiKey}}"},{"key":"X-ECTOR-ENVIRONMENT","value":"production"}],"body":{"mode":"formdata","formdata":[]},"url":"{{baseUrl}}/v3/cars/{{carId}}","auth":{"type":"bearer","bearer":{"basicConfig":[]},"isInherited":true,"source":{"_postman_id":"48f878b7-4e4c-6323-e768-364e9521906b","id":"48f878b7-4e4c-6323-e768-364e9521906b","name":"Ector Partners API","type":"collection"}},"urlObject":{"path":["v3","cars","{{carId}}"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"b9d79386-ef00-dffb-199f-220687740e26","name":"GET /v3/cars/{{id}} - get a car from id","originalRequest":{"method":"GET","header":[{"key":"X-ECTOR-AUTHENTICATION","value":"{{apiKey}}"},{"key":"X-ECTOR-ENVIRONMENT","value":"sandbox"}],"body":{"mode":"formdata","formdata":[]},"url":"{{v3PartnerBaseURL}}/v3/cars/{{carId}}"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":"0","body":"{\n    \"id\": \"8YE82H\",\n    \"plate\": \"FO-234-KF\",\n    \"name\": \"Renault Clio\",\n    \"color\": \"Bleu\"\n}"}],"_postman_id":"efcad19a-107c-b90f-fe4a-0466a8201944"},{"name":"/v3/cars/{{carId}}","event":[{"listen":"test","script":{"id":"8e9244d0-9436-4e30-a0a9-32ef8a565d6b","exec":["var carSchema = pm.environment.get('carSchema');","","pm.test(\"Status code is 200\", function () {","    pm.response.to.have.status(200);","});","","pm.test('Schema is valid', function() {","    var validation = tv4.validateMultiple(pm.response.json(), carSchema);","    console.log(validation);","    pm.expect(validation.valid).to.be.true;","});","","pm.test(\"Response time is less than 500ms\", function () {","    pm.expect(pm.response.responseTime).to.be.below(500);","});"],"type":"text/javascript"}}],"id":"fc9c37e3-d91f-3402-90fd-f65cc5b44b27","request":{"method":"PUT","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-ECTOR-ENVIRONMENT","value":"production"},{"key":"X-ECTOR-AUTHENTICATION","value":"{{apiKey}}"}],"body":{"mode":"raw","raw":""},"url":"{{baseUrl}}/v3/cars/1d0fd06a-0671-11e8-b5d5-0242ac120002","auth":{"type":"bearer","bearer":{"basicConfig":[]},"isInherited":true,"source":{"_postman_id":"48f878b7-4e4c-6323-e768-364e9521906b","id":"48f878b7-4e4c-6323-e768-364e9521906b","name":"Ector Partners API","type":"collection"}},"urlObject":{"path":["v3","cars","1d0fd06a-0671-11e8-b5d5-0242ac120002"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"b574072a-655a-fe96-0e0c-b49532c7f606","name":"PUT /v3/cars/{{id}} - modify a car","originalRequest":{"method":"PUT","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-ECTOR-AUTHENTICATION","value":"{{apiKey}}"},{"key":"X-ECTOR-ENVIRONMENT","value":"sandbox"}],"body":{"mode":"raw","raw":"{\n\t\"plate\": \"FO-234-KF\",\n\t\"name\": \"Renault Espace\"\n}"},"url":"{{v3PartnerBaseURL}}/v3/cars/{{carId}}"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":"0","body":"{\n    \"id\": \"8YE82H\",\n    \"plate\": \"FO-234-KF\",\n    \"name\": \"Renault Espace\",\n    \"color\": \"Bleu\"\n}"}],"_postman_id":"fc9c37e3-d91f-3402-90fd-f65cc5b44b27"}],"id":"2b4d68df-2ebd-0f88-966e-9910107442fd","_postman_id":"2b4d68df-2ebd-0f88-966e-9910107442fd","description":"","auth":{"type":"bearer","bearer":{"basicConfig":[]},"isInherited":true,"source":{"_postman_id":"48f878b7-4e4c-6323-e768-364e9521906b","id":"48f878b7-4e4c-6323-e768-364e9521906b","name":"Ector Partners API","type":"collection"}}},{"name":"Stripe Publishable Key","id":"031ae865-6333-4d6b-b328-d645631c286f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"X-ECTOR-AUTHENTICATION","value":"MY_API_KEY","type":"text"},{"key":"X-ECTOR-ENVIRONMENT","value":"production","type":"text"}],"url":"{{baseUrl}}/payments/publishable-key","description":"<p>Get Ector's publishable key to generate tokens</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[]},"isInherited":true,"source":{"_postman_id":"48f878b7-4e4c-6323-e768-364e9521906b","id":"48f878b7-4e4c-6323-e768-364e9521906b","name":"Ector Partners API","type":"collection"}},"urlObject":{"path":["payments","publishable-key"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"031ae865-6333-4d6b-b328-d645631c286f"}],"auth":{"type":"bearer","bearer":{"basicConfig":[]}},"event":[{"listen":"prerequest","script":{"id":"b9fe30e5-cdb7-4f7a-8137-3fa7f1e953a5","type":"text/javascript","exec":[""]}},{"listen":"test","script":{"id":"a76e6d80-fa05-40c2-ae69-9f67d2136023","type":"text/javascript","exec":["var zoneSchema = {","  \"type\": \"array\",","  \"additionalItems\": false,","  \"definitions\": {},","  \"items\": {","    \"type\": \"object\",","    \"additionalItems\": false,","    \"properties\": {","      \"name\": {","        \"type\": \"string\",","      },","      \"code\": {","        \"type\": \"string\",","      },","      \"spots\": {","        \"type\": \"array\",","        \"additionalItems\": false,","        \"items\": {","          \"type\": \"object\",","          \"additionalItems\": false,","          \"properties\": {","            \"city\": {","              \"type\": \"object\",","              \"additionalItems\": false,","              \"properties\": {","                \"code\": {","                  \"type\": \"string\"","                },","                \"label_fr\": {","                  \"type\": \"string\"","                },","                \"label_en\": {","                  \"type\": \"string\"","                }","              }","            },","            \"name\": {","              \"type\": \"string\"","            },","            \"code\": {","              \"type\": \"string\"","            },","            \"type\": {","              \"type\": \"string\"","            },","            \"place\": {","              \"type\": \"string\"","            },","            \"latitude\": {","              \"type\": \"string\"","            },","            \"longitude\": {","              \"type\": \"string\"","            }","          }","        }","      },","      \"open_at\": {","        \"type\": [\"string\", \"null\"]","      },","      \"is_open\": {","          \"type\": \"boolean\"","      },","      \"latitude\": {","        \"type\": \"string\"","      },","      \"longitude\": {","        \"type\": \"string\"","      },","      \"welcome_code\": {","        \"type\": \"object\",","        \"additionalItems\": false,","        \"properties\": {","          \"code\": {","            \"type\": \"string\"","          },","          \"amount\": {","            \"type\": [\"number\", \"null\"]","          },","          \"rate\": {","            \"type\": [\"number\", \"null\"]","          }","        }","      },","      \"opening_time\": {","        \"type\": \"string\"","      },","      \"closing_time\": {","        \"type\": \"string\"","      },","    }","  }","};","","var contactSchema = {","    \"type\": \"object\",","    \"definitions\": {},","    \"additionalProperties\": false,","    \"id\": 'schema://contact.schema#',","    \"properties\": {","        \"id\": {","            \"type\": \"string\"","        },","        \"short_id\": {","            \"type\": [\"string\", \"null\"]","        },","        \"gender\": {","            \"type\": \"string\"","        },","        \"first_name\": {","            \"type\": \"string\"","        },","        \"last_name\": {","            \"type\": \"string\"","        },","        \"phone\": {","            \"type\": \"string\"","        },","        \"email\": {","            \"type\": \"string\"","        },","        \"postcode\": {","            \"type\": [\"string\", \"null\"]","        }","    }","};","","var carSchema = {","    \"type\": \"object\",","    \"additionalProperties\": false,","    \"id\": 'schema://car.schema#',","    \"properties\": {","        \"id\": {","            \"type\": \"string\"","        },","        \"plate\": {","            \"type\": \"string\"","        },","        \"name\": {","            \"type\": \"string\"","        },","        \"color\": {","            \"type\": [\"string\", \"null\"]","        }","    }","};","","var bookingSchema = {","    \"type\": \"object\",","    \"additionalItems\": false,","    \"properties\": {","        \"start_at\": {","            \"type\": \"string\"","        },","        \"end_at\": {","            \"type\": \"string\"","        },","        \"from_spot\": {","            \"type\": \"string\"","        },","        \"to_spot\": {","            \"type\": \"string\"","        },","        \"available_services\": {","            \"type\": \"array\",","            \"additionalItems\": false,","            \"items\": {","                \"type\": \"object\",","                \"properties\": {","                    \"code\": {","                        \"type\": \"string\"","                    },","                    \"name_fr\": {","                        \"type\": \"string\"","                    },","                    \"name_en\": {","                        \"type\": \"string\"","                    },","                    \"price\": {","                        \"type\": \"number\"","                    }","                }","            }","        },","        \"contact\": {","            \"type\": \"object\",","            \"properties\": {","                $ref: \"contactSchema\"","            }","        },","        \"car\": {","            \"type\": \"object\",","            \"properties\": {","                $ref: \"carSchema\"","            }","        },","        \"services\": {","            \"type\": \"array\",","            \"additionalItems\": false,","            \"items\": {","                \"type\": \"object\",","                \"properties\": {","                    \"code\": {","                        \"type\": \"string\"","                    },","                    \"name_fr\": {","                        \"type\": \"string\"","                    },","                    \"name_en\": {","                        \"type\": \"string\"","                    },","                    \"price\": {","                        \"type\": \"number\"","                    }","                }","            }","        },","        \"allowed\": {","            \"type\": \"boolean\"","        },","        \"price\": {","            \"type\": \"number\"","        },","        \"original_price\": {","            \"type\": \"number\"","        },","        \"discount\": {","            \"type\": \"object\",","            \"properties\": {","                \"amount\": {","                    \"type\": [\"number\" , \"null\"]","                },","                \"rate\": {","                    \"type\": [\"number\" , \"null\"]","                },","                \"code\": {","                    \"type\": \"string\"","                }","            }","        },","        \"paid_at\": {","            \"type\": [\"string\", \"null\"]","        },","        \"is_paid\": {","            \"type\": \"boolean\"","        },","        \"cancelled_at\": {","            \"type\": [\"string\", \"null\"]","        },","        \"cancelled_reason\": {","            \"type\": [\"string\", \"null\"]","        },","        \"cancelled_reason_code\": {","            \"type\": [\"string\", \"null\"]","        },","        \"is_cancelled\": {","            \"type\": \"boolean\"","        },","        \"refunded_at\": {","            \"type\": [\"string\", \"null\"]","        },","        \"is_refunded\": {","            \"type\": \"boolean\"","        }","    }","};","","var spotSchema = {","    \"type\": \"object\",","    \"definitions\": {},","    \"$schema\": \"http://json-schema.org/draft-06/schema#\",","    \"properties\": {","        \"city\": {","            \"type\": \"object\",","            \"properties\": {","                \"code\": {","                    \"type\": \"string\"","                },","                \"label_fr\": {","                    \"type\": \"string\"","                },","                \"label_en\": {","                    \"type\": \"string\"","                }","            }","        },","        \"id\": {","            \"type\": \"integer\"","        },","        \"id_v1\": {","            \"type\": \"integer\"","        },","        \"name\": {","            \"type\": \"string\"","        },","        \"code\": {","            \"type\": \"string\"","        },","        \"type\": {","            \"type\": \"string\"","        },","        \"zone\": {","            \"type\": \"object\",","            \"properties\": {","                \"availableServices\": {","                    \"type\": \"array\",","                    \"items\": {","                        \"type\": \"object\",","                        \"properties\": {","                            \"id_v1\": {","                                \"type\": \"integer\"","                            },","                            \"code\": {","                                \"type\": \"string\"","                            },","                            \"weight\": {","                                \"type\": \"integer\"","                            },","                            \"name\": {","                                \"type\": \"string\"","                            },","                            \"description\": {","                                \"type\": \"string\"","                            },","                            \"price\": {","                                \"type\": \"number\"","                            },","                            \"category\": {","                                \"type\": \"string\"","                            },","                            \"label\": {","                                \"type\": [\"string\", \"null\"]","                            },","                            \"picture\": {","                                \"type\": \"string\"","                            }","                        }","                    }","                },","                \"id\": {","                    \"type\": \"integer\"","                },","                \"id_v1\": {","                    \"type\": \"integer\"","                },","                \"name\": {","                    \"type\": \"string\"","                },","                \"code\": {","                    \"type\": \"string\"","                },","                \"open_at\": {","                    \"type\": [\"string\", \"null\"]","                },","                \"latitude\": {","                    \"type\": \"string\"","                },","                \"longitude\": {","                    \"type\": \"string\"","                },","                \"welcome_code\": {","                    \"type\": \"object\",","                    \"properties\": {","                        \"code\": {","                            \"type\": \"string\"","                        },","                        \"amount\": {","                            \"type\": [\"number\", \"null\"]","                        },","                        \"rate\": {","                            \"type\": [\"number\", \"null\"]","                        }","                    }","                },","                \"ride_rate\": {","                    \"type\": \"integer\"","                },","                \"landing_url\": {","                    \"type\": \"string\"","                },","                \"opening_time\": {","                    \"type\": \"string\"","                },","                \"closing_time\": {","                    \"type\": \"string\"","                },","                \"start_time_freeze\": {","                    \"type\": \"string\"","                },","                \"planning_time\": {","                    \"type\": \"string\"","                }","            }","        },","        \"place\": {","            \"type\": \"string\"","        },","        \"latitude\": {","            \"type\": \"string\"","        },","        \"longitude\": {","            \"type\": \"string\"","        },","        \"visible\": {","            \"type\": \"boolean\"","        }","    }","}","","var quoteSchema = {","    \"type\": \"object\",","    \"additionalItems\": false,","    \"properties\": {","        \"start_at\": {","            \"type\": \"string\"","        },","        \"end_at\": {","            \"type\": \"string\"","        },","        \"from_spot\": {","            \"type\": \"string\"","        },","        \"to_spot\": {","            \"type\": \"string\"","        },","        \"available_services\": {","            \"type\": \"array\",","            \"additionalItems\": false,","            \"items\": {","                \"type\": \"object\",","                \"properties\": {","                    \"code\": {","                        \"type\": \"string\"","                    },","                    \"name_fr\": {","                        \"type\": \"string\"","                    },","                    \"name_en\": {","                        \"type\": \"string\"","                    },","                    \"price\": {","                        \"type\": \"number\"","                    }","                }","            }","        },","        \"allowed\": {","            \"type\": \"boolean\"","        },","        \"price\": {","            \"type\": \"integer\"","        }","    }","};","","pm.environment.set(\"contactSchema\", contactSchema);","pm.environment.set(\"carSchema\", carSchema);","pm.environment.set(\"bookingSchema\", bookingSchema);","pm.environment.set(\"spotSchema\", spotSchema);","pm.environment.set(\"zoneSchema\", zoneSchema);","pm.environment.set(\"quoteSchema\", quoteSchema);","","","tv4.addSchema('contactSchema', contactSchema);","tv4.addSchema('carSchema', carSchema);","tv4.addSchema('spotSchema', spotSchema);","tv4.addSchema('bookingSchema', bookingSchema);","tv4.addSchema('zoneSchema', zoneSchema);","tv4.addSchema('quoteSchema', quoteSchema);","","tv4.setErrorReporter(function(error, data, schema) {","    console.log('error', error);","    console.log('data', data);","    console.log('schema', schema);","    return \"Error code : \" + error.code;","});",""]}}],"variable":[{"key":"ApiKey","value":"MY_API_KEY"}]}