{"info":{"_postman_id":"a5533aee-e3e2-41ba-a102-49cdf20ba5bd","name":"Smartix API","description":"<html><head></head><body><p>Smartix API functions.</p>\n<p>Yopu will need and API key sto use these functions.</p>\n<p>You can create API Keys in Smartix Studio (<a href=\"https://studio.smartix.uk\">https://studio.smartix.uk</a>)</p>\n<p>You must create pass templates in Smartix Studio before you can create and manage passes.</p>\n<p>Archived templates cannot be used to generate passses (but can be unarchived in Smartix Studio).</p>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[],"owner":"7151620","collectionId":"a5533aee-e3e2-41ba-a102-49cdf20ba5bd","publishedId":"2sB2qWGPWf","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2026-09-02T13:29:38.000Z"},"item":[{"name":"Passes API","item":[{"name":"Make Pass","id":"9c7681f7-d684-4e00-95a4-50eb07e690a8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"},{"key":"x-mode","value":"live","type":"text"}],"body":{"mode":"raw","raw":"{\n\"loyalty.points.balance\" : 99,\n\"loyalty.points.collected\" : 600\n}","options":{"raw":{"language":"json"}}},"url":"{{passes_url}}/makePass/:template_id","description":"<h1 id=\"make-new-pass\">Make new pass</h1>\n<p>This endpoint is used to create pass data for a specific template and pass ID using data supplied in the request body.</p>\n<h4 id=\"returns\">Returns</h4>\n<p>URLs that can be used to install the pass on apple and gogogle devices.</p>\n<p>The Apple and Google URLs are digitally signed, any modification will result in pass installation failure.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: PUT</p>\n</li>\n<li><p>URL: <code>{{passes_url}}/makePass/:template_id/:pass_id</code></p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li><p>x-api-key : Your API key</p>\n</li>\n<li><p>x-mode : Either \"live\" or \"test\". Determines whether a live or test pass wil be created. Default to \"LIVE\" if omitted.</p>\n</li>\n</ul>\n</li>\n<li><p>Path Parameters:</p>\n<ul>\n<li><p><code>template_id</code> (string): The ID of the template. (must match a pre-defined template)</p>\n</li>\n<li><p><code>pass_id</code> (string): The ID of the pass (must be unique withing the specified template_id)</p>\n</li>\n</ul>\n</li>\n<li><p>Body:</p>\n<ul>\n<li><p>JSON formatted data object containing all data referenced from your specific pass template required in order to personalise your pass. Use the sampel data provided in creator as a guide as to the required content of your pass data.</p>\n</li>\n<li><p>In addition, the following fixed values can be used to set specific attributes of your isssued pass.</p>\n<ul>\n<li><p><strong>grouping</strong></p>\n<ul>\n<li><p><strong>id</strong> : (string) [Apple &amp; Google] Several passes can be grouped together within a wallet by using a common grouping ID</p>\n</li>\n<li><p><strong>index</strong> : (integer) [Google Only] You can speficy the order the passes appear on Google devices by using a sequential index value.</p>\n</li>\n</ul>\n</li>\n<li><p><strong>pass_validity</strong> [Apple &amp; Google]</p>\n<ul>\n<li><strong>start</strong> : (ISO datetime string) If specified, your pass will not be shown as valid until this start date. (NOTE: Apple passes do not use this field). </li>\n<li><strong>end</strong> : (ISO datetime string) If specified, your pass will not be shown as valid after this end date. <ul>\n<li><p>NOTE: On Apple devices an expired pass is displayed with the barcode greyed out and with the serial number replaced with the text \"this pass has expired\". It is also moved to the expired passes section.</p>\n</li>\n<li><p>NOTE: On Google devices, the pass is moved to the archived pass section. NOTE: It can take up to 24 hours for a pass to be moved.</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><strong>relevance</strong></p>\n<ul>\n<li><p><strong>beacons</strong> : (array) [Apple Only] An object that represents the identifier of a Bluetooth Low Energy beacon the system uses to show a relevant pass</p>\n<ul>\n<li><p><strong>major</strong> : (integer) The major identifier of a Bluetooth Low Energy location beacon.</p>\n</li>\n<li><p><strong>minor</strong> : (integer) The minor identifier of a Bluetooth Low Energy location beacon.</p>\n</li>\n<li><p><strong>proximityUUID</strong> : (string) (Required) The unique identifier of a Bluetooth Low Energy location beacon.</p>\n</li>\n<li><p><strong>relevantText</strong> : (string) The text to display on the lock screen when the pass is relevant. For example, a description of a nearby location, such as <code>“Store nearby on 1st and Main”</code>.</p>\n</li>\n</ul>\n</li>\n<li><p><strong>locations</strong> : (array) [Apple &amp; Google] An object that represents a location that the system uses to show a relevant pass.</p>\n<ul>\n<li><p><strong>altitude</strong> : (double) [Apple Only] The altitude, in meters, of the location.</p>\n</li>\n<li><p><strong>latitude</strong> : (double) (Required) The latitude, in degrees, of the location.</p>\n</li>\n<li><p><strong>longitude</strong> : (double)(Required) The longitude, in degrees, of the location.</p>\n</li>\n<li><p><strong>relevantText</strong> : (string) [Apple Only] The text to display on the lock screen when the pass is relevant. For example, a description of a nearby location, such as <code>“Store nearby on 1st and Main”</code>.</p>\n</li>\n</ul>\n</li>\n<li><p><strong>relevant_dates</strong> : (array) [Apple Only] An object that represents a date interval that the system uses to show a relevant pass. Either</p>\n<ul>\n<li><p><strong>date</strong> <strong>:</strong> ISO datetime string) The date and time when the pass becomes relevant. eg. \"2025-06-10T10:54:00Z\". Used for a single date.</p>\n</li>\n<li><p>OR (for a date range)</p>\n</li>\n<li><p><strong>start</strong> : (ISO datetime string) The date and time when the pass becomes relevant eg. \"2025-06-10T10:54:00+01:00\"</p>\n</li>\n<li><p><strong>end</strong> : (ISO datetime string) (Required) The date and time for the pass relevancy interval to end eg. \"2025-06-10T11:54:00+01:00\"</p>\n</li>\n<li><p>OR (valid from now until an end date)</p>\n</li>\n<li><p><strong>end</strong> : (SIO datetime string) (Required) The date and time for the pass relevancy interval to endeg. \"2025-06-10T10:54:00-02:00\"</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<p>Example request</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"pass\" : {\n    \"validity\" : {\n      \"start\" : \"2026-01-01T00:00:00Z\",\n      \"end\" : null\n    },\n    \"relevance\" : {},\n    \"grouping\" : {\n      \"id\" : \"my grouping name\",\n      \"index\" : 1\n    }\n  },\n  \"stamp\" : {\n    \"stamps\" : {\n      \"balance\" : 1\n    }\n  }\n}\n\n</code></pre>\n<p>Alternatively, you may use leaf paths instead of expanded JSON:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"validity.start\": \"2026-01-01T00:00:00Z\",\n  \"grouping.id\": \"my grouping name\",\n  \"grouping.index\": 1,\n  \"stamp.stamps.balance\": 1\n}\n\n</code></pre>\n<h5 id=\"response\">Response</h5>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Body</p>\n<ul>\n<li><p><strong>appleUrl</strong> : Url to pass to customer for them to install an Apple version of the pass</p>\n</li>\n<li><p><strong>googleUrl</strong> : Url to pass to customer for them to install an Google version of the pass</p>\n</li>\n<li><p><strong>pass_id</strong> : ID of the pass</p>\n</li>\n</ul>\n</li>\n</ul>\n<p>Exmpale response</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"appleUrl\": \"https://api.smartix.uk/pkpass/\",\n    \"googleUrl\": \"https://pay.google.com/gp/v/save/\",\n    \"mode\": \"live\",\n    \"ok\": true,\n    \"pass_id\": \"39JH-XWF6-CGMU-QXQ4\"\n}\n\n</code></pre>\n","urlObject":{"path":["makePass",":template_id"],"host":["{{passes_url}}"],"query":[],"variable":[{"id":"ef64d437-710a-4fd2-b213-13abcd647106","description":{"content":"<p>Pass Template ID</p>\n","type":"text/plain"},"type":"any","value":"loyalty_EDV_V1W_QNP_JHF_65F","key":"template_id"}]}},"response":[],"_postman_id":"9c7681f7-d684-4e00-95a4-50eb07e690a8"},{"name":"Make Passes","id":"cd104ded-5d19-4f80-9bdb-c1a83716fe96","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>Offline key</p>\n","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"__grouping_id__\":  \"MEM.GROUP2\",\n    \"passes\": [\n        {\n            \"template_id\": \"smartix_membership_EKP_L31_RAB_MPA_BNY\",\n            \"pass_id\": \"MEM-TEST-12\",\n            \"instance_data\": {\n                \"test1\" : 1\n            },\n            \"scanner_instance_data\": {\n                \"test2\": 2\n            }\n        },\n        {\n            \"template_id\": \"smartix_membership_EKP_L31_RAB_MPA_BNY\",\n            \"pass_id\": \"MEM-TEST-13\",\n            \"instance_data\": {\n                \"test3\" : 3\n            }\n        }\n    ]\n}","options":{"raw":{"language":"json"}}},"url":"{{passes_url}}/makePasses","description":"<h1 id=\"make-new-passes-group\">Make new passes (group)</h1>\n<p>This function is used to create a group of passes which will be displayed as a group in the user's wallet. You can supply a grouping id, or allow Smartix to generate one for you. If you specify your own grouping id it can be easier to add futher passes to that group later.</p>\n<h4 id=\"returns\">Returns</h4>\n<p>URLs that can be used to install the pass on apple and gogogle devices.</p>\n<p>The Apple and Google URLs are digitally signed, any modification will result in pass installation failure.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: POST</p>\n</li>\n<li><p>URL: <code>https://api.smartix.uk/passes-0101/makePasses/:template_id/:pass_id</code></p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li><p>x-api-key : Your API key</p>\n</li>\n<li><p>x-mode : Either \"live\" or \"test\". Determines whether a live or test passes wil be created. Default to \"LIVE\" if omitted.</p>\n</li>\n</ul>\n</li>\n<li><p>Path Parameters:</p>\n<ul>\n<li><p><code>template_id</code> (string): The ID of the template. (must match a pre-defined template)</p>\n</li>\n<li><p><code>pass_id</code> (string): The ID of the pass (must be unique withing the specified template_id)</p>\n</li>\n</ul>\n</li>\n</ul>\n<p>Body: An array of pass data. See Make Pass for data format.</p>\n<p>Example request</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"passes\": [\n        {\n            \"template_id\": \"loyalty_GHL_5K8_YAP_DNX_PNT\",\n            \"pass_id\": \"LOYALTY_GROUP_11\",\n            \"data\": {\n                \"grouping\": {\n                    \"id\": \"LOYALTY.GROUP\",\n                    \"index\": 1\n                }\n            }\n        },\n        {\n            \"template_id\": \"loyalty_GHL_5K8_YAP_DNX_PNT\",\n            \"pass_id\": \"LOYALTY_GROUP_12\",\n            \"data\": {\n                \"grouping\": {\n                    \"id\": \"LOYALTY.GROUP\",\n                    \"index\": 2\n                }\n            }\n        }\n    ]\n}\n\n</code></pre>\n<h5 id=\"response\">Response</h5>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Body</p>\n<ul>\n<li><p><strong>appleGroupedUrl</strong> : This link will install the whole group of Apple passes</p>\n</li>\n<li><p><strong>appleUrls</strong> : Individual URLs for each Apple passes</p>\n</li>\n<li><p><strong>googleUrl</strong> : This link will install the whole group of Google passes</p>\n</li>\n</ul>\n</li>\n</ul>\n<p>Example response</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"appleGroupedUrl\": \"https://api.smartix.uk/pkpasses/\",\n    \"appleUrls\": [\n        \"https://api.smartix.uk/pkpass/\",\n        \"https://api.smartix.uk/pkpass/\"\n    ],\n    \"googleUrl\": \"https://pay.google.com/gp/v/save/\",\n    \"ok\": true\n}\n\n</code></pre>\n","urlObject":{"path":["makePasses"],"host":["{{passes_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"cd104ded-5d19-4f80-9bdb-c1a83716fe96"},{"name":"Get Pass","id":"7c0aa15b-cb78-4554-8955-7ca8f29de095","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"url":"{{passes_url}}/getPass/:pass_id","description":"<h1 id=\"get-pass\">Get pass</h1>\n<p>This endpoint is used to retrieve data relating to an issued pass.</p>\n<h4 id=\"returns\">Returns</h4>\n<p>Pass instance data, count of Apple and Google device installations, Apple pass URL, Google pass URL, timestamps)</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: GET</p>\n</li>\n<li><p>URL:<code>{{passes_url}}/:template_id/:pass_id</code></p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n<li><p>Path Parameters:</p>\n<ul>\n<li><p><code>template_id</code> (string): The ID of the template.</p>\n</li>\n<li><p><code>pass_id</code> (string): The ID of the pass.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Body:</p>\n<ul>\n<li><p>pass</p>\n<ul>\n<li><p><strong>client_id : your client ID</strong></p>\n</li>\n<li><p><strong>user_id</strong> : ID of the user/API Key that created this pass</p>\n</li>\n<li><p><strong>template_id</strong> : (string) Pass template ID</p>\n</li>\n<li><p><strong>pass_id</strong> : (string) Pass ID</p>\n</li>\n<li><p><strong>mode</strong> : (string) : Either \"live\" or \"test\"</p>\n</li>\n<li><p><strong>grouping_id</strong> : A unique ID used to group multiple passes together in a wallet</p>\n</li>\n<li><p><strong>grouping_index</strong> : Order of passes in the group (Google only)</p>\n</li>\n<li><p><strong>creation_timestamp</strong> : (ISO datetime string) Date and time pass created</p>\n</li>\n<li><p><strong>last_modified_apple_timestamp</strong> : (ISO datetime string) Date and time Apple version last modified</p>\n</li>\n<li><p><strong>last_modified_google_timestamp</strong> : (ISO datetime string) Date and time Google version last modified</p>\n</li>\n<li><p><strong>expiry_date</strong> : (ISO datetime string) Date and time pass wil expiry (no expiry is null).</p>\n</li>\n<li><p><strong>apple_url</strong> : (string) URL to install Apple pass</p>\n</li>\n<li><p><strong>google_url</strong> : (string) URL to install Google pass</p>\n</li>\n<li><p><strong>apple_installs</strong> : (integer) Number of Apple devices pass is currently installed on</p>\n</li>\n<li><p><strong>google_installs</strong> : (integer) Number of Google devices pass is currently installed on</p>\n</li>\n<li><p><strong>variables</strong> : (object) Your unique pass data</p>\n</li>\n<li><p><strong>scanner_data</strong> : (object) Data managed by Smartix Scan <em>*</em></p>\n</li>\n<li><p><strong>scanner_audit_data</strong> : (array) Record of scans made by Smartix Scan <em>**</em></p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<p>Example response</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"ok\": true,\n    \"pass\": {\n        \"apple_installs\": 0,\n        \"apple_sync_hash\": null,\n        \"apple_url\": \"https://api.smartix.uk/pkpass/\",\n        \"charge_applied\": 1,\n        \"client_id\": 0,\n        \"creation_timestamp\": \"20260528135725\",\n        \"expiry_date\": null,\n        \"google_installs\": 0,\n        \"google_object_sync_hash\": \"3e9d75865d08c2205441ff9d53685aa6e61234dee67b3e375cc148eb31e43cb9\",\n        \"google_url\": \"https://pay.google.com/gp/v/save/\",\n        \"grouping_id\": null,\n        \"grouping_index\": null,\n        \"has_smartix_advert\": 0,\n        \"key_id\": 1,\n        \"key_type\": \"key\",\n        \"last_modified_apple_timestamp\": \"20260528135725\",\n        \"last_modified_google_timestamp\": \"20260528135725\",\n        \"mode\": \"live\",\n        \"pass_id\": \"39JH-XWF6-CGMU-QXQ4\",\n        \"scanner_audit_data_enc\": [],\n        \"template_id\": \"offer\",\n        \"update_counter\": 0,\n        \"variables\": {\n            \"event\": {\n                \"ticket\": {\n                    \"scanned\": false,\n                    \"scanned_datetime\": \"20260101000000\"\n                }\n            },\n            \"pass\": {\n                \"pass_id\": \"39JH-XWF6-CGMU-QXQ4\"\n            },\n            \"scan\": {\n                \"disabled\": false,\n                \"disabled_date\": \"20260101000000\",\n                \"note\": \"no note\"\n            }\n        }\n    }\n}\n\n</code></pre>\n<h6 id=\"-smartix-scan-data\"><em>*</em> Smartix Scan data</h6>\n<p>These fields are only present for managed passes. <strong>scanner_instance_data</strong> contains scan related data, get number of loyalty points, number of scans, goft card balance etc. scanner_audit_data is a record of any changes made to <strong>scanner_instance_data</strong> by Smartix Scan or within Smartix Studio.</p>\n","urlObject":{"path":["getPass",":pass_id"],"host":["{{passes_url}}"],"query":[],"variable":[{"id":"264e7ba2-f28b-496a-92cb-d1252649e3c2","type":"any","value":"ACRC-S6PC-SQHR-2ZJC","key":"pass_id"}]}},"response":[],"_postman_id":"7c0aa15b-cb78-4554-8955-7ca8f29de095"},{"name":"Add loyalty points","id":"ec59ed5a-de47-4383-890b-cab79b352325","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"body":{"mode":"raw","raw":"{\n}","options":{"raw":{"language":"json"}}},"url":"{{passes_url}}/managed/loyalty/add/:pass_id /:num_points","description":"<h1 id=\"add-managed-pass-loyalty-points\">Add managed pass loyalty points</h1>\n<p>This endpoint is used to add points to a managed loyalty card.</p>\n<h4 id=\"returns\">Returns</h4>\n<p>The new points balance.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: PUT</p>\n</li>\n<li><p>URL: <code>{{passes_url}}/managed/loyalty/add/:pass_id/:num_points</code></p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n<li><p>Path Parameters:</p>\n<ul>\n<li><p><code>pass_id</code> (string): The ID of the pass.</p>\n</li>\n<li><p>num_points (integer) : The number of points to add</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Body</p>\n<ul>\n<li><p>ok (boolean) : execution status</p>\n</li>\n<li><p>points (integer) : new points balance</p>\n</li>\n</ul>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"ok\": true,\n    \"points\": 29896\n}\n\n</code></pre>\n","urlObject":{"path":["managed","loyalty","add",":pass_id ",":num_points"],"host":["{{passes_url}}"],"query":[],"variable":[{"id":"5f3424d6-3d97-40a1-bed1-ba5f30f033be","type":"any","value":"RV69-DL9P-PAFM-FAUG","key":"pass_id "},{"id":"0e46967e-b090-476c-b357-e25ab14da3ed","type":"any","value":"12","key":"num_points"}]}},"response":[],"_postman_id":"ec59ed5a-de47-4383-890b-cab79b352325"},{"name":"Remove loyalty points","id":"ee2490a0-e9dd-40dc-89ca-baa35456fa3d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"body":{"mode":"raw","raw":"{\n}","options":{"raw":{"language":"json"}}},"url":"{{passes_url}}/managed/loyalty/remove/:pass_id /:num_points","description":"<h1 id=\"remove-managed-pass-loyalty-points\">Remove managed pass loyalty points</h1>\n<p>This endpoint is used to remove points from a managed loyalty card.</p>\n<p>This should be used for admin purposes. if customer is redeemign points, use <strong>Redeem Loyalty Points</strong> function intsead.</p>\n<h4 id=\"returns\">Returns</h4>\n<p>The new points balance.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: PUT</p>\n</li>\n<li><p>URL: <code>{{passes_url}}/managed/loyalty/remove/:pass_id/:num_points</code></p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n<li><p>Path Parameters:</p>\n<ul>\n<li><p><code>pass_id</code> (string): The ID of the pass.</p>\n</li>\n<li><p>num_points (integer) : The number of points to remove</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Body</p>\n<ul>\n<li><p>ok (boolean) : execution status</p>\n</li>\n<li><p>points (integer) : new points balance</p>\n</li>\n</ul>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"ok\": true,\n    \"points\": 29896\n}\n\n</code></pre>\n","urlObject":{"path":["managed","loyalty","remove",":pass_id ",":num_points"],"host":["{{passes_url}}"],"query":[],"variable":[{"id":"e0862423-5b23-4745-9cc4-ec70e06d674e","type":"any","value":"RV69-DL9P-PAFM-FAUG","key":"pass_id "},{"id":"85aac4ef-fcd7-420d-a490-0a9d571be6c9","type":"any","value":"61","key":"num_points"}]}},"response":[],"_postman_id":"ee2490a0-e9dd-40dc-89ca-baa35456fa3d"},{"name":"Add stampcard stamps","id":"8a9a1f60-140a-4915-b740-265d1020fd55","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"body":{"mode":"raw","raw":"{\n}","options":{"raw":{"language":"json"}}},"url":"{{passes_url}}/managed/stamp/add/:template_id/:pass_id /:num_stamps","description":"<h1 id=\"add-managed-pass-stampcard-stamps\">Add managed pass stampcard stamps</h1>\n<p>This endpoint is used to add stamps to a managed stampcard card.</p>\n<h4 id=\"returns\">Returns</h4>\n<p>The new stamps and full card balances.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: PUT</p>\n</li>\n<li><p>URL: <code>{{passes_url}}/managed/stamp/add/:pass_id/:num_stamps</code></p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n<li><p>Path Parameters:</p>\n<ul>\n<li><p><code>template_id</code> (string): The ID of the template.</p>\n</li>\n<li><p><code>pass_id</code> (string): The ID of the pass.</p>\n</li>\n<li><p>num_stamps (integer) : The number of stamps to add</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Body</p>\n<ul>\n<li><p>ok (boolean) : execution status</p>\n</li>\n<li><p>stamps (integer) : new stamps balance</p>\n</li>\n<li><p>cards (integer) : new full cards balance</p>\n</li>\n</ul>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"cards\": 187,\n    \"ok\": true,\n    \"stamps\": 1872\n}\n\n</code></pre>\n","urlObject":{"path":["managed","stamp","add",":template_id",":pass_id ",":num_stamps"],"host":["{{passes_url}}"],"query":[],"variable":[{"id":"9e3f6ef0-fa03-4360-9f8b-f015e487ab9c","type":"any","value":"stamp_J5W_7PU_QGF_FAB_KX9","key":"template_id"},{"id":"b92d066a-8ce9-4be6-ada6-2fee3ba74773","type":"any","value":"CGW3-TUSE-GUS4-KZKL","key":"pass_id "},{"id":"6dbc738b-63d2-49d1-ad32-922e0a5223eb","type":"any","value":"45","key":"num_stamps"}]}},"response":[],"_postman_id":"8a9a1f60-140a-4915-b740-265d1020fd55"},{"name":"Remove stampcard stamps","id":"5085a702-913c-4ba9-b6d2-ca46fa987ffe","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"body":{"mode":"raw","raw":"{\n}","options":{"raw":{"language":"json"}}},"url":"{{passes_url}}/managed/stamp/remove/:pass_id /:num_stamps","description":"<h1 id=\"remove-managed-pass-stampcard-stamps\">Remove managed pass stampcard stamps</h1>\n<p>This endpoint is used to remove stamps from a managed stampcard card. When redeemign cards, use <strong>Redeem Stampcards</strong> instead. Thsi functions is for removing stamps for other reasons.</p>\n<h4 id=\"returns\">Returns</h4>\n<p>The new stamps and full card balances.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: PUT</p>\n</li>\n<li><p>URL: <code>{{passes_url}}/managed/stamp/remove/:pass_id/:num_stamps</code></p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n<li><p>Path Parameters:</p>\n<ul>\n<li><p><code>pass_id</code> (string): The ID of the pass.</p>\n</li>\n<li><p>num_stamps (integer) : The number of stamps to remove</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Body</p>\n<ul>\n<li><p>ok (boolean) : execution status</p>\n</li>\n<li><p>stamps (integer) : new stamps balance</p>\n</li>\n<li><p>cards (integer) : new full cards balance</p>\n</li>\n</ul>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"cards\": 187,\n    \"ok\": true,\n    \"stamps\": 1872\n}\n\n</code></pre>\n","urlObject":{"path":["managed","stamp","remove",":pass_id ",":num_stamps"],"host":["{{passes_url}}"],"query":[],"variable":[{"id":"64d37b95-1ffb-489e-8408-2477e19d80d5","type":"any","value":"CGW3-TUSE-GUS4-KZKL","key":"pass_id "},{"id":"23405ea1-dcb1-44b0-a8b7-4dc6f1cc14c7","type":"any","value":"61","key":"num_stamps"}]}},"response":[],"_postman_id":"5085a702-913c-4ba9-b6d2-ca46fa987ffe"},{"name":"Redeem stampcards","id":"806389de-93e3-4c2c-88f0-ade64635fbf4","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"body":{"mode":"raw","raw":"{\n}","options":{"raw":{"language":"json"}}},"url":"{{passes_url}}/managed/stamp/redeem/:pass_id /:num_cards","description":"<h1 id=\"redeem-stampcards\">Redeem Stampcards</h1>\n<p>This endpoint is used to redeemfull full managed stampcard cards.</p>\n<h4 id=\"returns\">Returns</h4>\n<p>The new stamps and full card balances.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: PUT</p>\n</li>\n<li><p>URL: <code>{{passes_url}}/managed/stamp/redeem/:pass_id/:num_cards</code></p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n<li><p>Path Parameters:</p>\n<ul>\n<li><p><code>pass_id</code> (string): The ID of the pass.</p>\n</li>\n<li><p><code>num_cards</code> (integer) : The number of cards to redeem</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Body</p>\n<ul>\n<li><p>ok (boolean) : execution status</p>\n</li>\n<li><p>stamps (integer) : new stamps balance</p>\n</li>\n<li><p>cards (integer) : new full cards balance</p>\n</li>\n</ul>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"cards\": 187,\n    \"ok\": true,\n    \"stamps\": 1872\n}\n\n</code></pre>\n","urlObject":{"path":["managed","stamp","redeem",":pass_id ",":num_cards"],"host":["{{passes_url}}"],"query":[],"variable":[{"id":"526c5de8-9c6d-4c60-8f94-e05b5555886c","type":"any","value":"CGW3-TUSE-GUS4-KZKL","key":"pass_id "},{"id":"e6845f4a-22e1-42fa-b23d-04a57513c62b","type":"any","value":"1","key":"num_cards"}]}},"response":[],"_postman_id":"806389de-93e3-4c2c-88f0-ade64635fbf4"},{"name":"Redeem gift card","id":"c99f4b8d-503a-42af-b236-aad9cdd74e6f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"body":{"mode":"raw","raw":"{\n}","options":{"raw":{"language":"json"}}},"url":"{{passes_url}}/managed/gift/redeem/:pass_id /:amount","description":"<h1 id=\"redeem-gift-card\">Redeem Gift card</h1>\n<p>This endpoint is used to debit the balance of a managed gift card.</p>\n<h4 id=\"returns\">Returns</h4>\n<p>The new stamps and full card balances.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: PUT</p>\n</li>\n<li><p>URL: <code>{{passes_url}}/managed/gift/redeem/:pass_id/:amount</code></p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n<li><p>Path Parameters:</p>\n<ul>\n<li><p><code>pass_id</code> (string): The ID of the pass.</p>\n</li>\n<li><p><code>amount</code> (money string) : The amount to debit</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Body</p>\n<ul>\n<li><p>ok (boolean) : execution status</p>\n</li>\n<li><p>balance (money) : new balance</p>\n</li>\n</ul>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"balance\": \"25.00\",\n    \"ok\": true\n}\n\n</code></pre>\n","urlObject":{"path":["managed","gift","redeem",":pass_id ",":amount"],"host":["{{passes_url}}"],"query":[],"variable":[{"id":"26b90530-8f39-4802-bf1d-533a643f5c25","type":"any","value":"FMPW-R3PS-KZLS-4SCC","key":"pass_id "},{"id":"b0d56312-4eb4-4e0e-8f5b-1c1a0d48f135","type":"any","value":"1.50","key":"amount"}]}},"response":[],"_postman_id":"c99f4b8d-503a-42af-b236-aad9cdd74e6f"},{"name":"Refund gift card","id":"8f2c840e-04a9-4942-96e2-c668ffd0a8c5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"body":{"mode":"raw","raw":"{\n}","options":{"raw":{"language":"json"}}},"url":"{{passes_url}}/managed/gift/refund/:pass_id /:amount","description":"<h1 id=\"refund-gift-card\">Refund Gift card</h1>\n<p>This endpoint is used to refund to the balance of a managed gift card.</p>\n<h4 id=\"returns\">Returns</h4>\n<p>The new stamps and full card balances.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: PUT</p>\n</li>\n<li><p>URL: <code>{{passes_url}}/managed/stamp/add/:pass_id/:amount</code></p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n<li><p>Path Parameters:</p>\n<ul>\n<li><p><code>pass_id</code> (string): The ID of the pass.</p>\n</li>\n<li><p><code>amount</code> (money string) : The amount to refund</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Body</p>\n<ul>\n<li><p>ok (boolean) : execution status</p>\n</li>\n<li><p>balance (money) : new balance</p>\n</li>\n</ul>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"balance\": \"25.00\",\n    \"ok\": true\n}\n\n</code></pre>\n","urlObject":{"path":["managed","gift","refund",":pass_id ",":amount"],"host":["{{passes_url}}"],"query":[],"variable":[{"id":"16ae02b7-70ff-47e4-bcda-b90a6a619528","type":"any","value":"FMPW-R3PS-KZLS-4SCC","key":"pass_id "},{"id":"9df1c991-ca3f-4010-82cd-38f9b89b249c","type":"any","value":"12.57","key":"amount"}]}},"response":[],"_postman_id":"8f2c840e-04a9-4942-96e2-c668ffd0a8c5"},{"name":"Redeem loyalty points","id":"a66d8f40-70f9-4fb1-a2f2-d7e9902bc87e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"body":{"mode":"raw","raw":"{\n}","options":{"raw":{"language":"json"}}},"url":"{{passes_url}}/managed/loyalty/redeem/:pass_id /:num_points","description":"<h1 id=\"redeem-managed-pass-loyalty-points\">Redeem managed pass loyalty points</h1>\n<p>This endpoint is used to remove points from a managed loyalty card.</p>\n<p>This should be used when customer is redeemign points. If you wish to remove points for another reaosn, pelase use <strong>Removel Lotalty Points</strong> funciton instead.</p>\n<h4 id=\"returns\">Returns</h4>\n<p>The new points balance.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: PUT</p>\n</li>\n<li><p>URL: <code>{{passes_url}}/managed/loyalty/redeem/:pass_id/:num_points</code></p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n<li><p>Path Parameters:</p>\n<ul>\n<li><p><code>pass_id</code> (string): The ID of the pass.</p>\n</li>\n<li><p>num_points (integer) : The number of points to remove</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Body</p>\n<ul>\n<li><p>ok (boolean) : execution status</p>\n</li>\n<li><p>points (integer) : new points balance</p>\n</li>\n</ul>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"ok\": true,\n    \"points\": 29896\n}\n\n</code></pre>\n","urlObject":{"path":["managed","loyalty","redeem",":pass_id ",":num_points"],"host":["{{passes_url}}"],"query":[],"variable":[{"id":"046ef846-4bc7-4345-a3a8-a9ad5eff28f7","type":"any","value":"RV69-DL9P-PAFM-FAUG","key":"pass_id "},{"id":"dc4c2003-e91e-43be-8ddd-183f68742607","type":"any","value":"12","key":"num_points"}]}},"response":[],"_postman_id":"a66d8f40-70f9-4fb1-a2f2-d7e9902bc87e"},{"name":"Set managed pass status","id":"4be6b92c-214d-4d1b-812d-ade77617e967","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"note\" : \"A test note\"\n}","options":{"raw":{"language":"json"}}},"url":"{{passes_url}}/managed/status/:pass_id/:enabled","description":"<h1 id=\"set-managed-pass-enabled-status\">Set managed pass (enabled) status</h1>\n<p>This endpoint is used to disable/enable a managed pass.</p>\n<h4 id=\"returns\">Returns</h4>\n<p>The new status</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: PUT</p>\n</li>\n<li><p>URL: <code>{{passes_url}}/managed/status/:template_id/:pass_id/:enabled</code></p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n<li><p>Path Parameters:</p>\n<ul>\n<li><p><code>pass_id</code> (string): The ID of the pass.</p>\n</li>\n<li><p>enabled (boolean) : enable the card? (false = disable)</p>\n</li>\n</ul>\n</li>\n<li><p>Body</p>\n<ul>\n<li>note (string) : the note to add to the pass</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Body</p>\n<ul>\n<li><p>ok (boolean) : execution status</p>\n</li>\n<li><p>status (string) : new status (enabled or disabled)</p>\n</li>\n</ul>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"ok\": true,\n    \"status\": \"disabled\"\n}\n\n</code></pre>\n","urlObject":{"path":["managed","status",":pass_id",":enabled"],"host":["{{passes_url}}"],"query":[],"variable":[{"id":"988e981e-5fd2-4040-87dd-f1b06d4dfe39","type":"any","value":"8P2-QPD-6V5","key":"pass_id"},{"id":"94586abc-cf5b-44a1-abca-9ca13dd62896","type":"any","value":"false","key":"enabled"}]}},"response":[],"_postman_id":"4be6b92c-214d-4d1b-812d-ade77617e967"},{"name":"Set managed pass note","id":"80bc12a0-7acf-4258-a5a2-e58d06b026f4","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"note\" : \"A new note\"\n}","options":{"raw":{"language":"json"}}},"url":"{{passes_url}}/managed/note/:pass_id ","description":"<h1 id=\"set-managed-pass-note\">Set managed pass note</h1>\n<p>This endpoint is used to add a note to a managed pass.</p>\n<p>Notes are visible in Smartix Scan.</p>\n<h4 id=\"returns\">Returns</h4>\n<p>The new status</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: PUT</p>\n</li>\n<li><p>URL: <code>{{passes_url}}/managed/status/:pass_id</code></p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n<li><p>Path Parameters:</p>\n<ul>\n<li><code>pass_id</code> (string): The ID of the pass.</li>\n</ul>\n</li>\n<li><p>Body :</p>\n<ul>\n<li>note (string) : the not to attched to the pass</li>\n</ul>\n</li>\n</ul>\n<p>Example request</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"note\" : \"A new note\"\n}\n\n</code></pre>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Body</p>\n<ul>\n<li><p>ok (boolean) : execution status</p>\n</li>\n<li><p>status (string) : new status (enabled or disabled)</p>\n</li>\n</ul>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"ok\": true,\n    \"status\": \"disabled\"\n}\n\n</code></pre>\n","urlObject":{"path":["managed","note",":pass_id "],"host":["{{passes_url}}"],"query":[],"variable":[{"id":"5c8b7d85-06af-47cd-a9cf-8c67a04c8c3b","type":"any","value":"8P2-QPD-6V5","key":"pass_id "}]}},"response":[],"_postman_id":"80bc12a0-7acf-4258-a5a2-e58d06b026f4"},{"name":"get Managed loyalty card data","id":"1e4bb6da-aeff-4faa-9fcf-301d522d9351","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"url":"{{passes_url}}/managed/loyalty/data/:pass_id ","description":"<h1 id=\"get-managed-loyalty-card-data\">Get managed loyalty card data</h1>\n<p>This endpoint is used to retrive the loyalty data for a pass. This differs from <strong>getPass</strong> in that only the data associated with the loyalty account is returned, rather than all pass data.</p>\n<h4 id=\"returns\">Returns</h4>\n<p>The loyalty, scan and history data.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: GET</p>\n</li>\n<li><p>URL: <code>{{passes_url}}/managed/loyalty/data/:pass_id</code></p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n<li><p>Path Parameters:</p>\n<ul>\n<li><code>pass_id</code> (string): The ID of the pass.</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Body</p>\n<ul>\n<li><p>ok (boolean) : execution status</p>\n</li>\n<li><p>loyalty (object) :</p>\n<ul>\n<li><p>history (object) :</p>\n<ul>\n<li><p>collection (array) :</p>\n</li>\n<li><p>redemption (array) :</p>\n</li>\n<li><p>other (array) :</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p>points (object) :</p>\n<ul>\n<li><p>balance (integer) : current points balance</p>\n</li>\n<li><p>collected (integer) : total number of points collected</p>\n</li>\n<li><p>redeemed (integer) : number of points redeemed.</p>\n</li>\n</ul>\n</li>\n<li><p>scan (object) :</p>\n<ul>\n<li><p>disabled (boolean) : indicates if pass has been disabled</p>\n</li>\n<li><p>disabled_date (ISO datetime string) : if disabled, contains the date /time it was disabled</p>\n</li>\n<li><p>note (string) : Note attached to pass</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<p>Example response</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"loyalty\": {\n        \"history\": {\n            \"collection\": [\n                {\n                    \"action\": \"collect\",\n                    \"key_id\": 3,\n                    \"points_added\": 12,\n                    \"reference\": \"ABC16\",\n                    \"timestamp\": \"20260427104716\",\n                    \"username\": \"shop loyalty cards\"\n                },\n                {\n                    \"action\": \"collect\",\n                    \"key_id\": 3,\n                    \"points_added\": 12,\n                    \"reference\": \"ABC15\",\n                    \"timestamp\": \"20260421124322\",\n                    \"username\": \"shop loyalty cards\"\n                }\n            ],\n            \"other\": [],\n            \"redemption\": [\n                {\n                    \"action\": \"redeem\",\n                    \"key_id\": 3,\n                    \"points_redeemed\": 12,\n                    \"reference\": \"ABC11\",\n                    \"timestamp\": \"20260420163708\",\n                    \"username\": \"shop loyalty cards\"\n                },\n                {\n                    \"action\": \"redeem\",\n                    \"key_id\": 3,\n                    \"points_redeemed\": 12,\n                    \"reference\": \"ABC10\",\n                    \"timestamp\": \"20260420162424\",\n                    \"username\": \"shop loyalty cards\"\n                }\n            ]\n        },\n        \"points\": {\n            \"balance\": 36,\n            \"collected\": 36,\n            \"redeemed\": 0\n        },\n        \"scan\": {\n            \"disabled\": true,\n            \"disabled_date\": \"20260528163004\",\n            \"note\": \"A new note\"\n        }\n    },\n    \"ok\": true\n}\n\n</code></pre>\n","urlObject":{"path":["managed","loyalty","data",":pass_id "],"host":["{{passes_url}}"],"query":[],"variable":[{"id":"40865a49-e5c0-4d37-b319-6da0ff556709","type":"any","value":"8P2-QPD-6V5","key":"pass_id "}]}},"response":[],"_postman_id":"1e4bb6da-aeff-4faa-9fcf-301d522d9351"},{"name":"get Managed stampcard data","id":"04a82978-8649-4749-bac3-0d13b6c6eed7","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"url":"{{passes_url}}/managed/stamp/data/:pass_id ","description":"<h1 id=\"get-managed-stamp-card-data\">Get managed stamp card data</h1>\n<p>This endpoint is used to retrive the stampcard data for a pass. This differs from <strong>getPass</strong> in that only the data associated with the stampcard account is returned, rather than all pass data.</p>\n<h4 id=\"returns\">Returns</h4>\n<p>The stamps, cards, scan and history data.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: GET</p>\n</li>\n<li><p>URL: <code>{{passes_url}}/managed/stamp/data/:pass_id</code></p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n<li><p>Path Parameters:</p>\n<ul>\n<li><code>pass_id</code> (string): The ID of the pass.</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Body</p>\n<ul>\n<li><p>ok (boolean) : execution status</p>\n</li>\n<li><p>stamp (object) :</p>\n<ul>\n<li><p>history (object) :</p>\n<ul>\n<li><p>collection (array) :</p>\n</li>\n<li><p>redemption (array) :</p>\n</li>\n<li><p>other (array) :</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p>stamps (object) :</p>\n<ul>\n<li><p>balance (integer) : current points balance</p>\n</li>\n<li><p>collected (integer) : total number of points collected</p>\n</li>\n</ul>\n</li>\n<li><p>caerds (object) :</p>\n<ul>\n<li><p>balance (integer) : current full cards balance</p>\n</li>\n<li><p>collected (integer) : total cards filled</p>\n</li>\n<li><p>redeemed (integer) : number of full cards redeemed</p>\n</li>\n</ul>\n</li>\n<li><p>scan (object) :</p>\n<ul>\n<li><p>disabled (boolean) : indicates if pass has been disabled</p>\n</li>\n<li><p>disabled_date (ISO datetime string) : if disabled, contains the date /time it was disabled</p>\n</li>\n<li><p>note (string) : Note attached to pass</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<p>Example response</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"ok\": true,\n    \"stamp\": {\n        \"cards\": {\n            \"balance\": 187,\n            \"collected\": 6,\n            \"redeemed\": 15\n        },\n        \"history\": {\n            \"collection\": [\n                {\n                    \"action\": \"collect\",\n                    \"key_id\": 3,\n                    \"position\": null,\n                    \"reference\": null,\n                    \"stamps\": 45,\n                    \"timestamp\": \"20260528141732\",\n                    \"user_id\": null,\n                    \"username\": \"shop loyalty cards\"\n                },\n                {\n                    \"action\": \"collect\",\n                    \"key_id\": 1,\n                    \"position\": null,\n                    \"reference\": null,\n                    \"stamps\": 10,\n                    \"timestamp\": \"20260527103816\",\n                    \"user_id\": 1,\n                    \"username\": \"ian (bale)\"\n                }\n            ],\n            \"redemption\":[],\n            \"other\" : []\n        },\n        \"scan\": {\n            \"disabled\": false,\n            \"disabledDate\": null,\n            \"note\": null\n        },\n        \"stamps\": {\n            \"balance\": 2,\n            \"collected\": 2302\n        }\n    }\n}\n\n</code></pre>\n","urlObject":{"path":["managed","stamp","data",":pass_id "],"host":["{{passes_url}}"],"query":[],"variable":[{"id":"75460d00-0e5b-4732-bafc-984727086524","type":"any","value":"CGW3-TUSE-GUS4-KZKL","key":"pass_id "}]}},"response":[],"_postman_id":"04a82978-8649-4749-bac3-0d13b6c6eed7"},{"name":"get Managed gift card data","id":"3812fd0e-24e0-4c73-8604-54e556932d87","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"url":"{{passes_url}}/managed/gift/data/:pass_id ","description":"<h1 id=\"get-managed-gift-card-data\">Get managed gift card data</h1>\n<p>This endpoint is used to retrive the stampcard data for a pass. This differs from <strong>getPass</strong> in that only the data associated with the gift card is returned, rather than all pass data.</p>\n<h4 id=\"returns\">Returns</h4>\n<p>The gift, scan and history data.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: GET</p>\n</li>\n<li><p>URL: <code>{{passes_url}}/managed/gift/data/:pass_id</code></p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n<li><p>Path Parameters:</p>\n<ul>\n<li><code>pass_id</code> (string): The ID of the pass.</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Body</p>\n<ul>\n<li><p>ok (boolean) : execution status</p>\n</li>\n<li><p>stamp (object) :</p>\n<ul>\n<li><p>history (object) :</p>\n<ul>\n<li><p>collection (array) :</p>\n</li>\n<li><p>redemption (array) :</p>\n</li>\n<li><p>other (array) :</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p>gift (object) :</p>\n<ul>\n<li><p>balance (integer) : current points balance</p>\n</li>\n<li><p>collected (integer) : total number of points collected</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<p>Example response</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"gift\": {\n        \"balance\": \"26.07\",\n        \"card_number\": \"5344-8931-3418-3266\",\n        \"gifted_amount\": 25,\n        \"history\": {\n            \"redemption\": [\n                {\n                    \"action\": \"debit\",\n                    \"amount_debited\": \"1.50\",\n                    \"key_id\": 3,\n                    \"position\": null,\n                    \"reference\": null,\n                    \"timestamp\": \"20260601101026\",\n                    \"user_id\": null,\n                    \"username\": \"shop loyalty cards\"\n                },\n                {\n                    \"action\": \"refund\",\n                    \"amount_credited\": \"12.57\",\n                    \"key_id\": 3,\n                    \"position\": null,\n                    \"reference\": null,\n                    \"timestamp\": \"20260601101006\",\n                    \"user_id\": null,\n                    \"username\": \"shop loyalty cards\"\n                }\n            ]\n        }\n    },\n    \"ok\": true,\n    \"scan\": {\n        \"disabled\": false,\n        \"disabled_date\": null,\n        \"note\": null\n    }\n}\n\n</code></pre>\n","urlObject":{"path":["managed","gift","data",":pass_id "],"host":["{{passes_url}}"],"query":[],"variable":[{"id":"daa149c6-cf0b-4960-990c-0534981839fd","type":"any","value":"FMPW-R3PS-KZLS-4SCC","key":"pass_id "}]}},"response":[],"_postman_id":"3812fd0e-24e0-4c73-8604-54e556932d87"},{"name":"get Managed membership card data","id":"5ccdc1eb-6532-4d5c-9e7e-be165424e257","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"url":"{{passes_url}}/managed/membership/data/:pass_id ","description":"<h1 id=\"get-managed-membership-card-data\">Get managed membership card data</h1>\n<p>This endpoint is used to retrive the membership data for a pass. This differs from <strong>getPass</strong> in that only the data associated with the membership is returned, rather than all pass data.</p>\n<h4 id=\"returns\">Returns</h4>\n<p>The event, scan and history data.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: GET</p>\n</li>\n<li><p>URL: <code>{{passes_url}}/managed/membership/data/:pass_id</code></p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n<li><p>Path Parameters:</p>\n<ul>\n<li><code>pass_id</code> (string): The ID of the pass.</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Body</p>\n<ul>\n<li><p>ok (boolean) : execution status</p>\n</li>\n<li><p>stamp (object) :</p>\n<ul>\n<li><p>history (object) :</p>\n<ul>\n<li><p>collection (array) :</p>\n</li>\n<li><p>redemption (array) :</p>\n</li>\n<li><p>other (array) :</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p>membership (object) :</p>\n<ul>\n<li><p>expiry_date (ISO datetime string) : date of membershiip expiry (or null)</p>\n</li>\n<li><p>member_name (string) : member's name (optiona)</p>\n</li>\n<li><p>membership_number (string) : member's membership number (optional)</p>\n</li>\n<li><p>tier (string) : membership tier (optional)</p>\n</li>\n<li><p>discount _percentage (number) : discount given to member (optional)</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<p>Example response</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"membership\": {\n        \"expiry_date\": \"20250606000000\",\n        \"member_name\": \"Jake Dumphries\",\n        \"membership_number\": \"JD56123\",\n        \"tier\": \"White\"\n    },\n    \"ok\": true,\n    \"scan\": {\n        \"disabled\": false,\n        \"disabled_date\": null,\n        \"note\": \"\"\n    }\n}\n\n</code></pre>\n","urlObject":{"path":["managed","membership","data",":pass_id "],"host":["{{passes_url}}"],"query":[],"variable":[{"id":"42a681b2-abba-4284-92c8-5a2aa17cf039","type":"any","value":"TP8U-EHVJ-RCME","key":"pass_id "}]}},"response":[],"_postman_id":"5ccdc1eb-6532-4d5c-9e7e-be165424e257"},{"name":"get installed pass report","id":"a880b464-bbcc-4c5c-b223-ec4c06fa0168","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"url":"{{passes_url}}/getTemplatePassInstallReport/:template_id","description":"<h1 id=\"get-installed-pass-report\">Get installed pass report</h1>\n<p>This endpoint is used to rretrieve a report of installations of passes for a given template onto user's devices.</p>\n<h4 id=\"returns\">Returns</h4>\n<p>A signed S3 URL from where the generated JSON export can be downloaded. The link is valid for 7 days.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: GET</p>\n</li>\n<li><p>URL: <code>{{passes_url}}/</code>getTemplatePassInstallReport<code>/:</code>template_id</p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n<li><p>Path Parameters:</p>\n<ul>\n<li>template_id (string): The ID of the template.</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Body</p>\n<ul>\n<li><p>ok (boolean) : execution status</p>\n</li>\n<li><p>pass_type_id (string) : Pass type</p>\n</li>\n<li><p>rowCount (intenger) : number of passes present in the export</p>\n</li>\n<li><p>s3_bucket (string) : S3 bucket name</p>\n</li>\n<li><p>s3_key (string) : S3 file key</p>\n</li>\n<li><p>template_id (string) : template ID of the exported data</p>\n</li>\n</ul>\n</li>\n</ul>\n<p>Example response</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"download_url\": \"https://s3.eu-west-1.amazonaws.com/exports.smartix.uk/template-pass-install-reports/2/smartix_loyalty_N1B_E5M_D2B_2GD_DBT/20260814105308-0f0e291a-8cbf-4a93-add1-f44f84334250.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&amp;X-Amz-Credential=/20260814/eu-west-1/s3/aws4_request&amp;X-Amz-Date=20260814T095308Z&amp;X-Amz-Expires=604800&amp;X-Amz-Signature=3bbe17d2dec69d62b5b9ad4886ef57e799e645b265deee22630b7970c454bdf8&amp;X-Amz-SignedHeaders=host&amp;x-amz-checksum-mode=ENABLED&amp;x-id=GetObject\",\n    \"export_timestamp\": \"20260814105308\",\n    \"ok\": true,\n    \"rowCount\": 18,\n    \"s3_bucket\": \"exports.smartix.uk\",\n    \"s3_key\": \"template-pass-install-reports/2/smartix_loyalty_N1B_E5M_D2B_2GD_DBT/20260814105308-0f0e291a-8cbf-4a93-add1-f44f84334250.json\",\n    \"template_id\": \"smartix_loyalty_N1B_E5M_D2B_2GD_DBT\"\n}\n\n</code></pre>\n","urlObject":{"path":["getTemplatePassInstallReport",":template_id"],"host":["{{passes_url}}"],"query":[],"variable":[{"id":"9ef13458-fc5a-46cf-8c62-6fc71ded65b0","type":"any","value":"smartix_loyalty_N1B_E5M_D2B_2GD_DBT","key":"template_id"}]}},"response":[],"_postman_id":"a880b464-bbcc-4c5c-b223-ec4c06fa0168"},{"name":"get Managed Pass Data report","id":"b84e7845-030e-40eb-b79d-71426f8148a6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"url":"{{passes_url}}/managed/data-export/:template_id","description":"<h1 id=\"get-managed-pass-data\">Get managed pass data</h1>\n<p>This endpoint is used to retrive the managed pass data for all passes for a given template. This is a bulk export, so you are limited to one call per hour per template.</p>\n<p>eg. For a gift card, we will export the current balance, gifted amount and audit history.</p>\n<h4 id=\"returns\">Returns</h4>\n<p>A signed S3 URL from where the generated JSON export can be downloaded. The link is valid for 7 days.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: GET</p>\n</li>\n<li><p>URL: <code>{{passes_url}}/managed/export-data/:template_id</code></p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n<li><p>Path Parameters:</p>\n<ul>\n<li><code>template_id</code> (string): The ID of the template.</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Body</p>\n<ul>\n<li><p>ok (boolean) : execution status</p>\n</li>\n<li><p>pass_type_id (string) : Pass type</p>\n</li>\n<li><p>rowCount (intenger) : number of passes present in the export</p>\n</li>\n<li><p>s3_bucket (string) : S3 bucket name</p>\n</li>\n<li><p>s3_key (string) : S3 file key</p>\n</li>\n<li><p>template_id (string) : template ID of the exported data</p>\n</li>\n</ul>\n</li>\n</ul>\n<p>Example response</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"download_url\": \"https://s3.eu-west-1.amazonaws.com/exports.smartix.uk/managed-pass-exports/2/smartix_loyalty_N1B_E5M_D2B_2GD_DBT/20260814104348-86190166-c106-4739-b532-2d7e33748d3e.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&amp;X-Amz-Credential=/20260814/eu-west-1/s3/aws4_request&amp;X-Amz-Date=20260814T094350Z&amp;X-Amz-Expires=604800&amp;X-Amz-Signature=7a7e4d579c57732a1e70445f31a7959f5036e6efb17e8c6220a0bdd2ac79101d&amp;X-Amz-SignedHeaders=host&amp;x-amz-checksum-mode=ENABLED&amp;x-id=GetObject\",\n    \"ok\": true,\n    \"pass_type_id\": \"managed_loyalty\",\n    \"rowCount\": 18,\n    \"s3_bucket\": \"exports.smartix.uk\",\n    \"s3_key\": \"managed-pass-exports/2/smartix_loyalty_N1B_E5M_D2B_2GD_DBT/20260814104348-86190166-c106-4739-b532-2d7e33748d3e.json\",\n    \"template_id\": \"smartix_loyalty_N1B_E5M_D2B_2GD_DBT\"\n}\n\n</code></pre>\n","urlObject":{"path":["managed","data-export",":template_id"],"host":["{{passes_url}}"],"query":[],"variable":[{"id":"6da73489-60d8-49b3-a551-204e9c18fbec","type":"any","value":"smartix_loyalty_N1B_E5M_D2B_2GD_DBT","key":"template_id"}]}},"response":[],"_postman_id":"b84e7845-030e-40eb-b79d-71426f8148a6"},{"name":"Get Template Variables","id":"8c7140db-9b45-41dd-8226-e0c76adeea6a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"url":"{{passes_url}}/getTemplateVariables/:template_id","description":"<h1 id=\"get-template-variables\">Get template variables</h1>\n<p>This endpoint is used to retrieve template (default pass) variables</p>\n<h4 id=\"returns\">Returns</h4>\n<p>A variables object</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: GET</p>\n</li>\n<li><p>URL:<code>{passes_url}/getTemplateVariables/:template_id</code></p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n<li><p>URL parameters</p>\n<ul>\n<li>template_id (string) : Template ID</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Body:</p>\n<ul>\n<li><p>variables (object) : Typical content:</p>\n<ul>\n<li><p>barcode (object) :</p>\n<ul>\n<li><p>format (string) : Barcode format (QR_CODE, AZTEC, PDF_417 or CODE_128)</p>\n</li>\n<li><p>payload (string) : Barcode payload</p>\n</li>\n<li><p>text (string) : Text that sites below barcode. Often pass_id.</p>\n</li>\n</ul>\n</li>\n<li><p>colours (object) :</p>\n<ul>\n<li><p>background (hex colour) :</p>\n</li>\n<li><p>foreground (hex colour) :</p>\n</li>\n<li><p>label (hex colour) :</p>\n</li>\n<li><p>strip (hex colour) :</p>\n</li>\n</ul>\n</li>\n<li><p>images (object) :</p>\n<ul>\n<li><p>apple (object) :</p>\n<ul>\n<li><p>icon (string) : URL of Apple icon image (required)</p>\n</li>\n<li><p>logo (string) : URL of Apple logo image (required)</p>\n</li>\n<li><p>thumbnail (string): URL of Apple thumbnail image (optional)</p>\n</li>\n<li><p>strip (string): URL of Apple strip image (optional)</p>\n</li>\n<li><p>backgriund (string): URL of Apple background image (optional)</p>\n</li>\n</ul>\n</li>\n<li><p>google (object) :</p>\n<ul>\n<li><p>logo (string) : URL of Google logo image (required)</p>\n</li>\n<li><p>wide_logo (string) : URL of Google wide_logo image (optional)</p>\n</li>\n<li><p>hero (string) : URL of Google hero image (optional)</p>\n</li>\n</ul>\n</li>\n<li><p>pass (object) :</p>\n<ul>\n<li><p>pass_id (string) : Pass unique ID (required - readonly)</p>\n</li>\n<li><p>header (string) : header text</p>\n</li>\n<li><p>subheader (string) : subheader text (optional)</p>\n</li>\n<li><p>issuer_name (string) : pass issuer</p>\n</li>\n<li><p>title (string) : pass title text</p>\n</li>\n<li><p>grouping (object) :</p>\n<ul>\n<li><p>id (string) : grouoing identifier</p>\n</li>\n<li><p>index (integer) : grouping order</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p>scan (object) : (required for managed passes)</p>\n<ul>\n<li><p>disabled (boolean) : indicated if pass has been disabled</p>\n</li>\n<li><p>disabled_date_time (ISO datetime string) : if disabled, the date/time it was disabled</p>\n</li>\n<li><p>note (string) : Note attached to the pass</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<p><strong>NOTE</strong>: variables can reference other variables using {{var name}} syntax. eg. in the example below, barcode.text = {{pass.pass_id}} which means use the value from pass.pass_id as the barcode text.</p>\n<p>Example response</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"ok\": true,\n    \"variables\": {\n        \"barcode\": {\n            \"format\": \"QR_CODE\",\n            \"payload\": \"1.A.000-000-000-000\",\n            \"text\": \"{{pass.pass_id}}\"\n        },\n        \"colours\": {\n            \"background\": \"#ffffff\",\n            \"foreground\": \"#000000\",\n            \"label\": \"#3d3d3d\",\n            \"strip\": \"#ffffff\"\n        },\n        \"images\": {\n            \"apple\": {\n                \"icon\": \"https://s3.eu-west-1.amazonaws.com/images.smartix.uk/2/apple/icon/C-20260209120645-20260210091007.png\",\n                \"logo\": \"https://s3.eu-west-1.amazonaws.com/images.smartix.uk/2/apple/logo/C-20260209120645-20260210090954.png\",\n                \"thumbnail\": \"https://s3.eu-west-1.amazonaws.com/images.smartix.uk/2/apple/thumbnail/membership-apple-thumbnail-20250924134410.png\"\n            },\n            \"google\": {\n                \"hero\": \"https://s3.eu-west-1.amazonaws.com/images.smartix.uk/2/google/hero/bwclub-an-other-20260210095327.png\",\n                \"logo\": \"https://s3.eu-west-1.amazonaws.com/images.smartix.uk/2/google/logo/C-20260209120645-20260210091017.png\"\n            }\n        },\n        \"membership\": {\n            \"discount_percentage\": 10,\n            \"expiry_date\": \"20270213\",\n            \"history\": {\n                \"scans\": \"\"\n            },\n            \"member_name\": \"Bob\",\n            \"membership_number\": \"M123123\",\n            \"tier\": \"VIP\"\n        },\n        \"pass\": {\n            \"description\": \"\",\n            \"grouping\": {\n                \"id\": \"smartix-demo\",\n                \"index\": null\n            },\n            \"header\": \"{{membership.member_name}}\",\n            \"issuer_name\": \"Smartix.Demos\",\n            \"pass_id\": \"000-000-000\",\n            \"subheader\": \"MEMBER\",\n            \"title\": \"Black &amp; White Club\"\n        },\n        \"scan\": {\n            \"disabled\": false,\n            \"disabled_date\": null,\n            \"note\": null\n        }\n    }\n}\n\n</code></pre>\n","urlObject":{"path":["getTemplateVariables",":template_id"],"host":["{{passes_url}}"],"query":[],"variable":[{"id":"5279aaa9-8b7d-4358-8571-2311bdfb366e","type":"any","value":"smartix_membership_EKP_L31_RAB_MPA_BNY","key":"template_id"}]}},"response":[],"_postman_id":"8c7140db-9b45-41dd-8226-e0c76adeea6a"},{"name":"Check template sync state","id":"17532045-e97d-4ad9-bd77-b56ade150c27","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"url":"{{passes_url}}/checkSyncState/:template_id","description":"<h1 id=\"get-template-sync-state\">Get template sync state</h1>\n<p>This endpoint is used to determine whether any passes required synchronising. When template variables or pass design is changed, issued passes do not automatically pick up those changes. You must perform a sync to do so.</p>\n<p>This function is used to determine whether a sync is required and if so, how many passes need to be synced and what the credit cost will be.</p>\n<p>Not all passes wil change because of a templaet variable change. Some may use the template variable as a default, but have theor own value. In which case, only those without their own value woudl need to be updated.</p>\n<p>If content changes for a pass, then all google passes must have the new content sent to Google server. However, for Apple, only those passes currently installed on Apple devices must be synced. Hence, typically you wil find that the apple_count is lower than the goolge_count.</p>\n<p>NOTE: The sync check runs asynchronously. The result of this function will either be the result, or it will be a</p>\n<h4 id=\"returns\">Returns</h4>\n<p>A variables object</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: GET</p>\n</li>\n<li><p>URL:<code>{passes_url}/checkSyncState/:template_id</code></p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n<li><p>URL parameters</p>\n<ul>\n<li>template_id (string) : Template ID</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Body:</p>\n<ul>\n<li><p>apple_count : (integer) number of apple passes that must be synced</p>\n</li>\n<li><p>google_count : (integer) number of google passes that must be synced</p>\n</li>\n<li><p>total_count : (integer) : total number of passes to be synced. This is the total number of unique passes. So if a pass is represented in both apple_count and google_count it wil be counted only once. Hence, total_count will usually be less than the sum of apple_count + google_count.</p>\n</li>\n<li><p>credit_costs : (integer) The number of credits which will be consumed by a sync</p>\n</li>\n<li><p>sync_initiated_ts : {ISO datetime string) date and time sync was initiated</p>\n</li>\n<li><p>sync_completed_ts : (ISO datetime string) date and time sync was completed</p>\n</li>\n<li><p>template_id : {string) The template ID for which the sync reports relates.</p>\n</li>\n</ul>\n</li>\n</ul>\n<p>Example response</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"apple_count\": 0,\n    \"credit_cost\": 0,\n    \"google_count\": 0,\n    \"ok\": true,\n    \"sync_completed_ts\": null,\n    \"sync_initiated_ts\": null,\n    \"template_id\": \"smartix_membership_EKP_L31_RAB_MPA_BNY\",\n    \"total_count\": 0\n}\n\n</code></pre>\n<h4 id=\"response-not-complete\">Response (not complete)</h4>\n<ul>\n<li><p>Status: 303</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Location: URL to redirtect to. Will be a GET request.</p>\n</li>\n<li><p>X-redirect-reason: \"Not yet ready\"</p>\n</li>\n<li><p>Retry-After: Tiem to wait before redirecting</p>\n</li>\n<li><p>Client-Request-Id: Your [optional] request ID</p>\n</li>\n<li><p>awsRequestId : AWS request ID</p>\n</li>\n<li><p>Processing-Started: Date and time processign started or \"Not yet started\"</p>\n</li>\n</ul>\n</li>\n</ul>\n","urlObject":{"path":["checkSyncState",":template_id"],"host":["{{passes_url}}"],"query":[],"variable":[{"id":"0b064871-6ff4-492e-8b1a-57b48874291b","type":"any","value":"smartix_membership_EKP_L31_RAB_MPA_BNY","key":"template_id"}]}},"response":[],"_postman_id":"17532045-e97d-4ad9-bd77-b56ade150c27"},{"name":"Run a template sync check","id":"ea17d309-8d51-469c-beb8-436c9e171c2e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"url":"{{passes_url}}/syncCheck/:template_id","description":"<h1 id=\"get-template-sync-state\">Get template sync state</h1>\n<p>This endpoint is used to determine whether any passes required synchronising. When template variables or pass design is changed, issued passes do not automatically pick up those changes. You must perform a sync to do so.</p>\n<p>This function is used to determine whether a sync is required and if so, how many passes need to be synced and what the credit cost will be.</p>\n<p>Not all passes wil change because of a templaet variable change. Some may use the template variable as a default, but have theor own value. In which case, only those without their own value woudl need to be updated.</p>\n<p>If content changes for a pass, then all google passes must have the new content sent to Google server. However, for Apple, only those passes currently installed on Apple devices must be synced. Hence, typically you wil find that the apple_count is lower than the goolge_count.</p>\n<p>NOTE: The sync check runs asynchronously. The result of this function will either be the result, or it will be a</p>\n<h4 id=\"returns\">Returns</h4>\n<p>A variables object</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: GET</p>\n</li>\n<li><p>URL:<code>{passes_url}/checkSyncState/:template_id</code></p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n<li><p>URL parameters</p>\n<ul>\n<li>template_id (string) : Template ID</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Body:</p>\n<ul>\n<li><p>apple_count : (integer) number of apple passes that must be synced</p>\n</li>\n<li><p>google_count : (integer) number of google passes that must be synced</p>\n</li>\n<li><p>total_count : (integer) : total number of passes to be synced. This is the total number of unique passes. So if a pass is represented in both apple_count and google_count it wil be counted only once. Hence, total_count will usually be less than the sum of apple_count + google_count.</p>\n</li>\n<li><p>credit_costs : (integer) The number of credits which will be consumed by a sync</p>\n</li>\n<li><p>sync_initiated_ts : {ISO datetime string) date and time sync was initiated</p>\n</li>\n<li><p>template_id : {string) The template ID for which the sync reports relates.</p>\n</li>\n</ul>\n</li>\n</ul>\n<p>Example response</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"apple_count\": 0,\n    \"credit_cost\": 0,\n    \"google_count\": 0,\n    \"ok\": true,\n    \"template_id\": \"smartix_membership_EKP_L31_RAB_MPA_BNY\",\n    \"total_count\": 0\n}\n\n</code></pre>\n<h4 id=\"response-not-complete\">Response (not complete)</h4>\n<ul>\n<li><p>Status: 303</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Location: URL to redirtect to. Will be a GET request.</p>\n</li>\n<li><p>X-redirect-reason: \"Not yet ready\"</p>\n</li>\n<li><p>Retry-After: Tiem to wait before redirecting</p>\n</li>\n<li><p>Client-Request-Id: Your [optional] request ID</p>\n</li>\n<li><p>awsRequestId : AWS request ID</p>\n</li>\n<li><p>Processing-Started: Date and time processign started or \"Not yet started\"</p>\n</li>\n</ul>\n</li>\n</ul>\n","urlObject":{"path":["syncCheck",":template_id"],"host":["{{passes_url}}"],"query":[],"variable":[{"id":"74f6ee1b-c7d6-4074-8442-a36efe6f60ee","type":"any","value":"smartix_membership_EKP_L31_RAB_MPA_BNY","key":"template_id"}]}},"response":[],"_postman_id":"ea17d309-8d51-469c-beb8-436c9e171c2e"},{"name":"Run template sync","id":"fa795b86-f222-4ce0-8932-9e1afc14dc36","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"url":"{{passes_url}}/initiateSync/:template_id","description":"<h1 id=\"get-template-sync-state\">Get template sync state</h1>\n<p>This endpoint is used to determine whether any passes required synchronising. When template variables or pass design is changed, issued passes do not automatically pick up those changes. You must perform a sync to do so.</p>\n<p>This function is used to determine whether a sync is required and if so, how many passes need to be synced and what the credit cost will be.</p>\n<p>Not all passes wil change because of a templaet variable change. Some may use the template variable as a default, but have theor own value. In which case, only those without their own value woudl need to be updated.</p>\n<p>If content changes for a pass, then all google passes must have the new content sent to Google server. However, for Apple, only those passes currently installed on Apple devices must be synced. Hence, typically you wil find that the apple_count is lower than the goolge_count.</p>\n<p>NOTE: The sync check runs asynchronously. The result of this function will either be the result, or it will be a</p>\n<h4 id=\"returns\">Returns</h4>\n<p>A variables object</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: GET</p>\n</li>\n<li><p>URL:<code>{passes_url}/checkSyncState/:template_id</code></p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n<li><p>URL parameters</p>\n<ul>\n<li>template_id (string) : Template ID</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Body:</p>\n<ul>\n<li><p>apple_count : (integer) number of apple passes that must be synced</p>\n</li>\n<li><p>google_count : (integer) number of google passes that must be synced</p>\n</li>\n<li><p>total_count : (integer) : total number of passes to be synced. This is the total number of unique passes. So if a pass is represented in both apple_count and google_count it wil be counted only once. Hence, total_count will usually be less than the sum of apple_count + google_count.</p>\n</li>\n<li><p>credit_costs : (integer) The number of credits which will be consumed by a sync</p>\n</li>\n<li><p>sync_initiated_ts : (ISO datetime string) date and time sync was initiated</p>\n</li>\n<li><p>template_id : {string) The template ID for which the sync reports relates.</p>\n</li>\n</ul>\n</li>\n</ul>\n<p>Example response</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"apple_count\": 0,\n    \"credit_cost\": 0,\n    \"google_count\": 0,\n    \"ok\": true,\n    \"template_id\": \"smartix_membership_EKP_L31_RAB_MPA_BNY\",\n    \"total_count\": 0\n}\n\n</code></pre>\n<h4 id=\"response-not-complete\">Response (not complete)</h4>\n<ul>\n<li><p>Status: 303</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Location: URL to redirtect to. Will be a GET request.</p>\n</li>\n<li><p>X-redirect-reason: \"Not yet ready\"</p>\n</li>\n<li><p>Retry-After: Tiem to wait before redirecting</p>\n</li>\n<li><p>Client-Request-Id: Your [optional] request ID</p>\n</li>\n<li><p>awsRequestId : AWS request ID</p>\n</li>\n<li><p>Processing-Started: Date and time processign started or \"Not yet started\"</p>\n</li>\n</ul>\n</li>\n</ul>\n","urlObject":{"path":["initiateSync",":template_id"],"host":["{{passes_url}}"],"query":[],"variable":[{"id":"9ae3d961-ef0a-4436-883a-f1e8613b729e","type":"any","value":"smartix_membership_EKP_L31_RAB_MPA_BNY","key":"template_id"}]}},"response":[],"_postman_id":"fa795b86-f222-4ce0-8932-9e1afc14dc36"},{"name":"Get Passes","id":"80f76d46-8a0c-4111-b48b-8a2fc35dbf3f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"passes\" : [\n        \"39JH-XWF6-CGMU-QXQ4\",\n        \"DXPQ-MFBF-6AG4-UGQK\"\n    ]\n}","options":{"raw":{"language":"json"}}},"url":"{{passes_url}}/getPasses","description":"<h1 id=\"get-passes\">Get passes</h1>\n<p>This endpoint is used to retrieve data relating to a list of issued passes.</p>\n<p>It is essentially the same as <strong>getPass</strong>, but allows you to retieve data about several passes in a single request,</p>\n<h4 id=\"returns\">Returns</h4>\n<p>An array of pass data (see <strong>getPass</strong>)</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: POST</p>\n</li>\n<li><p>URL:<code>{passes_url}/getPasses:template_id</code></p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n<li><p>Body</p>\n</li>\n</ul>\n<p>Example Requests</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"passes\" : [\n        \"39JH-XWF6-CGMU-QXQ4\",\n        \"DXPQ-MFBF-6AG4-UGQK\"\n    ]\n}\n\n</code></pre>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Body:</p>\n<ul>\n<li><strong>passes</strong> : (array) of pass IDs</li>\n</ul>\n</li>\n</ul>\n<p>Example response</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"ok\": true,\n    \"passes\": [\n        {\n            \"apple_installs\": 0,\n            \"apple_sync_hash\": null,\n            \"apple_url\": \"https://api.smartix.uk/pkpass/\",\n            \"charge_applied\": 1,\n            \"client_id\": 0,\n            \"creation_timestamp\": \"20260528135725\",\n            \"expiry_date\": null,\n            \"google_installs\": 0,\n            \"google_object_sync_hash\": \"3e9d75865d08c2205441ff9d53685aa6e61234dee67b3e375cc148eb31e43cb9\",\n            \"google_url\": \"https://pay.google.com/gp/v/save/\",\n            \"grouping_id\": null,\n            \"grouping_index\": null,\n            \"has_smartix_advert\": 0,\n            \"key_id\": 1,\n            \"key_type\": \"key\",\n            \"last_modified_apple_timestamp\": \"20260528135725\",\n            \"last_modified_google_timestamp\": \"20260528135725\",\n            \"mode\": \"live\",\n            \"pass_id\": \"39JH-XWF6-CGMU-QXQ4\",\n            \"scanner_audit_data_enc\": [],\n            \"template_id\": \"offer\",\n            \"update_counter\": 0,\n            \"variables\": {\n                \"event\": {\n                    \"ticket\": {\n                        \"scanned\": false,\n                        \"scanned_datetime\": \"20260101000000\"\n                    }\n                },\n                \"pass\": {\n                    \"pass_id\": \"39JH-XWF6-CGMU-QXQ4\"\n                },\n                \"scan\": {\n                    \"disabled\": false,\n                    \"disabled_date\": \"20260101000000\",\n                    \"note\": \"no note\"\n                }\n            }\n        },\n        {\n            \"apple_installs\": 0,\n            \"apple_sync_hash\": null,\n            \"apple_url\": \"https://api.smartix.uk/pkpass/\",\n            \"charge_applied\": 1,\n            \"client_id\": 0,\n            \"creation_timestamp\": \"20260528140103\",\n            \"expiry_date\": null,\n            \"google_installs\": 0,\n            \"google_object_sync_hash\": \"f112510517a29b89a9051b117803b09af814972c2ce47aeabce8020cfb72ff51\",\n            \"google_url\": \"https://pay.google.com/gp/v/save/\",\n            \"grouping_id\": null,\n            \"grouping_index\": null,\n            \"has_smartix_advert\": 0,\n            \"key_id\": 1,\n            \"key_type\": \"key\",\n            \"last_modified_apple_timestamp\": \"20260528140103\",\n            \"last_modified_google_timestamp\": \"20260528140103\",\n            \"mode\": \"live\",\n            \"pass_id\": \"DXPQ-MFBF-6AG4-UGQK\",\n            \"scanner_audit_data_enc\": [],\n            \"template_id\": \"offer\",\n            \"update_counter\": 0,\n            \"variables\": {\n                \"event\": {\n                    \"ticket\": {\n                        \"scanned\": false,\n                        \"scanned_datetime\": \"20260101000000\"\n                    }\n                },\n                \"pass\": {\n                    \"pass_id\": \"DXPQ-MFBF-6AG4-UGQK\"\n                },\n                \"scan\": {\n                    \"disabled\": false,\n                    \"disabled_date\": \"20260101000000\",\n                    \"note\": \"no note\"\n                }\n            }\n        }\n    ]\n}\n\n</code></pre>\n","urlObject":{"path":["getPasses"],"host":["{{passes_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"80f76d46-8a0c-4111-b48b-8a2fc35dbf3f"},{"name":"Get Pass Notifications","id":"95fc8c1d-04c5-4dcf-b86f-3614ed018bf5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"url":"{{passes_url}}/getPassNotifications/:pass_id","description":"<h1 id=\"get-pass-notifications\">Get pass notifications</h1>\n<p>This endpoint is used to retrieve notifications sent to a pass.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: GET</p>\n</li>\n<li><p>URL: <code>{{passes_url}}/getPassNotifications/:template_id/:pass_id</code></p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n<li><p>Path Parameters:</p>\n<ul>\n<li><code>pass_id</code> (string): The ID of the pass.</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Body:</p>\n<ul>\n<li><p><strong>notifications</strong> : (array) Array of notifications</p>\n<ul>\n<li><p><strong>ts</strong> : (ISO datetime string) : Notification timestamp</p>\n</li>\n<li><p><strong>message</strong> : (string) Notification message</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"notifications\": [\n        {\n            \"message\": \"Your renewal is due\",\n            \"ts\": \"202511051333\"\n        },\n        {\n            \"message\": \"Your policy has been renewed\",\n            \"ts\": \"202512011200\"\n        }\n}\n\n</code></pre>\n","urlObject":{"path":["getPassNotifications",":pass_id"],"host":["{{passes_url}}"],"query":[],"variable":[{"id":"8f524ec7-b9c2-43aa-8b7c-dde9da5b0af9","type":"any","value":"39JH-XWF6-CGMU-QXQ4","key":"pass_id"}]}},"response":[],"_postman_id":"95fc8c1d-04c5-4dcf-b86f-3614ed018bf5"},{"name":"Get Active Pass Count","id":"678938bd-5d96-4320-968d-60cc1605250c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"url":"{{passes_url}}/getActivePassesCount","description":"<h1 id=\"get-active-pass-count\">Get active pass count</h1>\n<p>This endpoint is used to retrieve a count of your current number of active passes.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: GET</p>\n</li>\n<li><p>URL: <code>{{passes_url}}/getActivePassesCount</code></p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Body:</p>\n<ul>\n<li><p><strong>templates</strong> : (array) One item per template</p>\n<ul>\n<li><p><strong>template_id</strong> : (string) Template ID</p>\n</li>\n<li><p><strong>name</strong> : (string) Template name</p>\n</li>\n<li><p><strong>active_count</strong> : (integer) Number of active (live and not expired) passes associated with this template</p>\n</li>\n<li><p>expired_count : (integer) Number of live, but expired passes associated with this template</p>\n</li>\n<li><p>apple_install_count : (integer) Numebr of passes installed on Apple devices</p>\n</li>\n<li><p>google_install_count : (integer) Numebr of passes installed on Android devices</p>\n</li>\n</ul>\n</li>\n<li><p><strong>total</strong> : (integer) Total number of active passes</p>\n</li>\n</ul>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"ok\": true,\n    \"templates\": [\n        {\n            \"active_count\": 18,\n            \"apple_install_count\": 2,\n            \"expired_count\": 0,\n            \"google_install_count\": 2,\n            \"name\": \"Alice Loves Crafting Loyalty\",\n            \"template_id\": \"smartix_loyalty_N1B_E5M_D2B_2GD_DBT\"\n        },\n        {\n            \"active_count\": 3,\n            \"apple_install_count\": 6,\n            \"expired_count\": 0,\n            \"google_install_count\": 3,\n            \"name\": \"Aston Martin\",\n            \"template_id\": \"other_s_VJC_9L8_C9A_5Y7_Q5M\"\n        },\n    ],\n    \"total\": 1\n}\n\n</code></pre>\n","urlObject":{"path":["getActivePassesCount"],"host":["{{passes_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"678938bd-5d96-4320-968d-60cc1605250c"},{"name":"Delete Pass","id":"3ef18e9a-6aa9-4184-ab8d-6a8878b0dc55","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"url":"{{passes_url}}/deletePass/:pass_id","description":"<h1 id=\"delete-pass\">Delete pass</h1>\n<p>This endpoint is used to delete a pass</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: DELETE</p>\n</li>\n<li><p>URL: <code>{{passes_url}}/deletePass/:pass_id</code></p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n<li><p>Path Parameters:</p>\n<ul>\n<li><code>pass_id</code> (string): The ID of the pass.</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n</ul>\n<p>NOTE: No warning is given if the requested pass does not exist / has already been deleted.</p>\n","urlObject":{"path":["deletePass",":pass_id"],"host":["{{passes_url}}"],"query":[],"variable":[{"id":"4ab9d95b-15e2-4f30-90df-5486374c2fe8","type":"any","value":"DXPQ-MFBF-6AG4-UGQK","key":"pass_id"}]}},"response":[],"_postman_id":"3ef18e9a-6aa9-4184-ab8d-6a8878b0dc55"},{"name":"Delete Passes","id":"046a0778-79ca-4379-aa19-25e402128790","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"passes\" : [\n        \"LOYALTY_GROUP_9\",\n        \"LOYALTY_GROUP_10\"\n    ]\n}","options":{"raw":{"language":"json"}}},"url":"{{passes_url}}/deletePasses","description":"<h1 id=\"delete-passes\">Delete passes</h1>\n<p>This endpoint is used to delete a list of passes.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: GET</p>\n</li>\n<li><p>URL: <code>{{passes_url}}/deletePasses</code></p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n<li><p>Body:</p>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Body:</p>\n</li>\n<li><p>passes (array) : array of pass_id</p>\n</li>\n</ul>\n<p>Returns</p>\n<ul>\n<li>num_passes_deleted : (string) A conformation of the number of passes deleted</li>\n</ul>\n<p>NOTE: No warning is given if any of the requestes passes do not exist / have already been deleted.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"num_passes_deleted\": 0,\n    \"ok\": true\n}\n\n</code></pre>\n","urlObject":{"path":["deletePasses"],"host":["{{passes_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"046a0778-79ca-4379-aa19-25e402128790"},{"name":"Patch Pass","id":"37be7bd3-a723-4a4b-ac6a-ba9882fe4ea6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"policy\": {\n        \"policy_number\": \"X98765\"\n    },\n    \"policy.vehicle\": \"Ford Puma\",\n    \"pass.validity.end\": null,\n    \"relevance\": {}\n}","options":{"raw":{"language":"json"}}},"url":"{{passes_url}}/patchPass/:pass_id","description":"<h1 id=\"patch-pass\">Patch Pass</h1>\n<p>This endpoint is used to update an existing pass.</p>\n<p>Only the supplied fields are modified. All other fields will retain their existing value. To remove a field send a null value.</p>\n<p>See <em><strong>makePass</strong></em> function for details of the request data content.</p>\n<p>if you are replacing the entire pass content, please use the <strong>updatePass</strong> method instead.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: PATCH</p>\n</li>\n<li><p>URL: <code>{{passes_url}}/patchPass/:pass_id</code></p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n<li><p>Path Parameters:</p>\n<ul>\n<li><code>pass_id</code> (string): The ID of the pass.</li>\n</ul>\n</li>\n<li><p>Body</p>\n<ul>\n<li>JSON pass data (only fields that are to be updated)</li>\n</ul>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n   \"event_date\": \"20261101120000\"\n}\n\n</code></pre>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Body : {ok:true} if successful</p>\n</li>\n</ul>\n","urlObject":{"path":["patchPass",":pass_id"],"host":["{{passes_url}}"],"query":[],"variable":[{"id":"29886fc8-4020-43fc-8a11-dbfceecfe8d8","type":"any","value":"EVHB-3LUV-R3KT","key":"pass_id"}]}},"response":[],"_postman_id":"37be7bd3-a723-4a4b-ac6a-ba9882fe4ea6"},{"name":"Patch Template Variables","id":"eff315c9-854e-4b24-b677-4362fe985a74","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"membership\": {\n        \"tier\": \"Standard\"\n    }\n}","options":{"raw":{"language":"json"}}},"url":"{{passes_url}}/patchTemplateVariables/:template_id/:sync_mode","description":"<h1 id=\"patch-template-variables\">Patch template variables</h1>\n<p>This endpoint is used to patch template (default pass) variables</p>\n<p>Variables provided are merged with the existing variables with new values overwriting old values.</p>\n<p>After merge an optional sync check / sync is initiated. If using check_only, you must also use the <strong>checkSyncState</strong> function to get the result.</p>\n<p>Any passes where content changes as a result of the new template values will be updated.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: PATCH</p>\n</li>\n<li><p>URL:<code>{passes_url}/patchTemplateVariables/:template_id/:sync_mode</code></p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n<li><p>URL parameters</p>\n<ul>\n<li><p><strong>template_id</strong> (string) : Template ID</p>\n</li>\n<li><p><strong>sync_mode</strong> (string) : none [default] = do not perform a sync check, check_only=initiate a sync check after updating variables, auto_if_needed=perform a sycn check and initiate the sync if needed.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Body:</p>\n<ul>\n<li>ok (boolean) : true if request suceeded</li>\n</ul>\n</li>\n</ul>\n","urlObject":{"path":["patchTemplateVariables",":template_id",":sync_mode"],"host":["{{passes_url}}"],"query":[],"variable":[{"id":"718467f1-306e-44b1-b2e3-464035c4e946","type":"any","value":"smartix_membership_EKP_L31_RAB_MPA_BNY","key":"template_id"},{"id":"b60ca811-bae5-43db-8353-84ede8967dfc","description":{"content":"<p>none=do not do a sync check, check_only=perform a check aftet update, auto_if_needed=check and initiate sync if needed</p>\n","type":"text/plain"},"type":"any","value":"none","key":"sync_mode"}]}},"response":[],"_postman_id":"eff315c9-854e-4b24-b677-4362fe985a74"},{"name":"Patch Passes","id":"d0198121-1ecd-4118-ac5b-bcddd3f667e2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"url":"{{passes_url}}/patchPasses/:template_id","description":"<h1 id=\"patch-passes\">Patch Passes</h1>\n<p>This endpoint is used to update common instance data for a supplied list of passes</p>\n<p>Only the supplied fields are modified. All other fields will retain their existing value. To remove a field send a null value.</p>\n<p>Be aware that the data values you supply will be applied to all of the listed passes. So use this function only for updating data that applies to all of those passes.</p>\n<p>You cannot use this function to patch different values to a range of passes. To do that use <strong>patchPass</strong> for each pass you wish to update.</p>\n<p>See <em><strong>makePass</strong></em> function for details of the request data content.</p>\n<p>if you are repreplacing the entire pass content, please use the update_<strong>Pass</strong>_ method instead.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: PATCH</p>\n</li>\n<li><p>URL: <code>{{passes_url}}/patchPass/:template_id</code></p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n<li><p>Path Parameters:</p>\n<ul>\n<li><p><code>template_id</code> (string): The ID of the template.</p>\n</li>\n<li><p><code>pass_id</code> (string): The ID of the pass.</p>\n</li>\n</ul>\n</li>\n<li><p>Body</p>\n<ul>\n<li>JSON pass data (only fields that are to be updated)</li>\n</ul>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n   \"event_date\": \"20261101120000\"\n}\n\n</code></pre>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Body (See <strong>getPass</strong>. THis function returns the same full pass data)</p>\n</li>\n</ul>\n","urlObject":{"path":["patchPasses",":template_id"],"host":["{{passes_url}}"],"query":[],"variable":[{"id":"0a146007-a10e-4cbe-ba83-b429df813b59","type":"any","value":"insurance_demo","key":"template_id"}]}},"response":[],"_postman_id":"d0198121-1ecd-4118-ac5b-bcddd3f667e2"},{"name":"Patch All Passes","id":"806d7544-8dea-4806-89aa-3b55ec17d63a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"policy.vehicle\": \"BMW i5\",\n    \"relevance\": {}\n}","options":{"raw":{"language":"json"}}},"url":"{{passes_url}}/patchAllPasses/:template_id","description":"<h1 id=\"patch-all-passes\">Patch All Passes</h1>\n<p>This endpoint is used to update common instance data for all passes</p>\n<p>Only the supplied fields are modified. All other fields will retain their existing value. To remove a field send a null value.</p>\n<p>Be aware that the data values you supply will be applied to ALL passes. So use this function only for updating data that applies to all passes.</p>\n<p>You cannot use this function to patch different values to a range of passes. To do that use <strong>patchPass</strong> for each pass you wish to update.</p>\n<p>See <em><strong>makePass</strong></em> function for details of the request data content.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: PATCH</p>\n</li>\n<li><p>URL: <code>{{passes_url}}/patchPass/:template_id</code></p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n<li><p>Path Parameters:</p>\n<ul>\n<li><p><code>template_id</code> (string): The ID of the template.</p>\n</li>\n<li><p><code>pass_id</code> (string): The ID of the pass.</p>\n</li>\n</ul>\n</li>\n<li><p>Body</p>\n<ul>\n<li>JSON pass data (only fields that are to be updated)</li>\n</ul>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n   \"event_date\": \"20261101120000\"\n}\n\n</code></pre>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Body (See <strong>getPass</strong>. This function returns the same full pass data)</p>\n</li>\n</ul>\n","urlObject":{"path":["patchAllPasses",":template_id"],"host":["{{passes_url}}"],"query":[],"variable":[{"id":"97183c9f-25f5-4b66-bf03-6c4f90c4292a","type":"any","value":"insurance_demo","key":"template_id"}]}},"response":[],"_postman_id":"806d7544-8dea-4806-89aa-3b55ec17d63a"},{"name":"Notify pass","id":"5f3509ae-6b32-4001-9bfd-0aa9d27b7aa5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>Offline key</p>\n","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"notification\" : \"Hello\"\n}","options":{"raw":{"language":"json"}}},"url":"{{passes_url}}/notifyPass/:pass_id","description":"<h1 id=\"notify-pass\">Notify Pass</h1>\n<p>This endpoint is used to send a notifiation to a pass.</p>\n<p>The handling of Apple and Google is slightly different:</p>\n<h5 id=\"apple\">Apple</h5>\n<p>A lock screen alert is displayed showing the content of the new notification.</p>\n<p>Two extra fields are included in the details section of Apple passes: notification and messages.</p>\n<p>The new notification is displayed in the notification field. Any prior notifications are lsted in the messages field.</p>\n<h5 id=\"google\">Google</h5>\n<p>A lock screen notification indicates that a notification has been received for a pass (text is fixed by Google).</p>\n<p>All notifications (new one, plus any prior ones) are displayed in a messages field in the opass details section.</p>\n<h4 id=\"fair-use-policy\">Fair use policy</h4>\n<p>We expect you to use this feature in a reasonable manner. DO NOT send unsolicited notifications. Frequent notificsations to large numbers of passes will be reviewed an if considered to be ouside of reasonable and fair use then a warning will be give. Repeat offence coudl lead to your account being suspended.</p>\n<p><code>For details see</code><a href=\"https://docs.smartix.uk/terms/fair-use-policy\">https://docs.smartix.uk/terms/fair-use-policy</a></p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: POST</p>\n</li>\n<li><p>URL: {{passes_url}}/notifyPass/:pass_id</p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n<li><p>Path Parameters:</p>\n<ul>\n<li><code>pass_id</code> (string): The ID of the pass.</li>\n</ul>\n</li>\n<li><p>Body</p>\n<ul>\n<li><p><strong>title</strong> : (string) Notification title</p>\n</li>\n<li><p><strong>body</strong> (string) Notification body content</p>\n</li>\n</ul>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"title\" : \"New itinerary\",\n    \"body\" : \"We have calculated a new itinerary for your journey. See ticket details.\"\n}\n\n</code></pre>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Body</p>\n<ul>\n<li><p><strong>notifications</strong> : (array) - array of prior and new notifications</p>\n<ul>\n<li><p><strong>title</strong> : (string) Notification title</p>\n</li>\n<li><p><strong>body</strong> : (string) Notification body conents</p>\n</li>\n<li><p><strong>timestamp</strong> : (ISO datetime string) Timestamp of notification.</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"notifications\": [\n        {\n            \"body\": \"We have calculated a new itinerary for your journey. See ticket details.\",\n            \"timestamp\": \"202505161436\",\n            \"title\": \"New itinerary\"\n        }\n    ]\n}\n\n</code></pre>\n","urlObject":{"path":["notifyPass",":pass_id"],"host":["{{passes_url}}"],"query":[],"variable":[{"id":"6e98be24-aaf2-45ad-9eab-fed57fae568d","type":"any","value":"39JH-XWF6-CGMU-QXQ4","key":"pass_id"}]}},"response":[],"_postman_id":"5f3509ae-6b32-4001-9bfd-0aa9d27b7aa5"},{"name":"Notify passes","id":"4b0939bb-999b-4f1a-b860-0e7bd0c6156a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>Offline key</p>\n","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"pass_ids\": [\n        \"39JH-XWF6-CGMU-QXQ4\"\n    ],\n    \"notification\": \"Hello World\"\n}","options":{"raw":{"language":"json"}}},"url":"{{passes_url}}/notifyPasses/:template_id","description":"<h1 id=\"notify-passes\">Notify Passes</h1>\n<p>This endpoint is used to send a notifiation to a list of passes</p>\n<p>See <strong>notifyPass</strong> for details.</p>\n<p>Where <strong>notifyPass</strong> send notifications immediately, <strong>notifyPasses</strong> add notifications to a queue. That queue is processed in order so that notifications are delivered as quickly as possible. If delivery fails, then a notification remains in the queue and is processed again.</p>\n<p>If you need to notify multiple passes this function is more efficient that <strong>notifyPass</strong> and should be used in preference.</p>\n<p>If you need to notify all issued passes then use <strong>notifyAllPasses</strong> function.</p>\n<h4 id=\"fair-use-policy\">Fair use policy</h4>\n<p>We expect you to use this feature in a reasonable manner. DO NOT send unsolicited notifications. Frequent notificsations to large numbers of passes will be reviewed an if considered to be ouside of reasonable and fair use then a warning will be give. Repeat offence coudl lead to your account being suspended.</p>\n<p><code>For details see</code><a href=\"https://docs.smartix.uk/terms/fair-use-policy\">https://docs.smartix.uk/terms/fair-use-policy</a></p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: POST</p>\n</li>\n<li><p>URL: <code>{{passes_url}}/notifyPasses/:template_id</code></p>\n</li>\n<li><p>Headers:</p>\n</li>\n<li><p>x-api-key : Your API key</p>\n</li>\n<li><p>Path Parameters:</p>\n<ul>\n<li><code>template_id</code> (string): The ID of the template.</li>\n</ul>\n</li>\n<li><p>Body</p>\n<ul>\n<li><p><strong>pass_ids</strong> : (array) Array of pss IDs</p>\n</li>\n<li><p><strong>notification</strong> (string) The notification message</p>\n</li>\n</ul>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"pass_ids\": [\n        \"LOYALTY_GROUP_7\",\n        \"LOYALTY_GROUP_8\"\n    ],\n    \"notification\": \"Hello World\"\n}\n\n</code></pre>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Body</p>\n<ul>\n<li>queued : (integer) A confirmation of the number of notifications queued for delivery to passes.</li>\n</ul>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"ok\": true,\n    \"queued\": 2\n}\n\n</code></pre>\n","urlObject":{"path":["notifyPasses",":template_id"],"host":["{{passes_url}}"],"query":[],"variable":[{"id":"7121342d-3d97-477d-a3cc-0affe7463515","type":"any","value":"offer","key":"template_id"}]}},"response":[],"_postman_id":"4b0939bb-999b-4f1a-b860-0e7bd0c6156a"},{"name":"Notify all passes","id":"e2b28aa7-722c-477c-9705-d31142e4923c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>Offline key</p>\n","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"notification\" : \"Testing notify stamps 5\"\n}","options":{"raw":{"language":"json"}}},"url":"{{passes_url}}/notifyAll/:template_id","description":"<h1 id=\"notify-all-passes\">Notify all passes</h1>\n<p>This end point send a notification to all issued passes for a given template.</p>\n<p>Notifications are queued and will be delivered as quicly as possible.</p>\n<p>If you do not need a notification to go to <strong>all</strong> passes consider <strong>notifyPasses</strong> or <strong>notifyPass</strong> instead.</p>\n<h4 id=\"fair-use-policy\">Fair use policy</h4>\n<p>We expect you to use this feature in a reasonable manner. DO NOT send unsolicited notifications. Frequent notificsations to large numbers of passes will be reviewed an if considered to be ouside of reasonable and fair use then a warning will be give. Repeat offence coudl lead to your account being suspended.</p>\n<p><code>For details see</code><a href=\"https://docs.smartix.uk/terms/fair-use-policy\">https://docs.smartix.uk/terms/fair-use-policy</a></p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: PUT</p>\n</li>\n<li><p>URL: <code>{{passes_url}}/notifyAll/:template_id/</code></p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n<li><p>Path Parameters:</p>\n<ul>\n<li><code>template_id</code> (string): The ID of the template.</li>\n</ul>\n</li>\n<li><p>Body</p>\n<ul>\n<li><p><strong>title</strong> : (string) Notification title</p>\n</li>\n<li><p><strong>body</strong> (string) Notification body content</p>\n</li>\n</ul>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"notification\" : \"Testing notify all\"\n}\n\n</code></pre>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Body</p>\n<ul>\n<li><p><strong>notifications</strong> : (array) - array of prior and new notifications</p>\n<ul>\n<li><p><strong>class_result</strong> : (object)</p>\n<ul>\n<li><p><strong>google_result</strong> : (boolean) confirms that update sent to google API</p>\n</li>\n<li><p><strong>message_id</strong> :(string) ID assigned by google</p>\n</li>\n<li><p><strong>template_id</strong> : (string) Confirmation of the template notification sent to</p>\n</li>\n</ul>\n</li>\n<li><p><strong>queued</strong> : (integer) Number of [installed] apple passes queued for notification.</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"class_result\": {\n        \"google_result\": true,\n        \"message_id\": \"Q735UYD47YBB\",\n        \"template_id\": \"loyalty_GHL_5K8_YAP_DNX_PNT\"\n    },\n    \"ok\": true,\n    \"queued\": 13\n}\n\n</code></pre>\n","urlObject":{"path":["notifyAll",":template_id"],"host":["{{passes_url}}"],"query":[],"variable":[{"id":"d668c317-3f00-44b5-b24e-c13233ee6a51","type":"any","value":"offer","key":"template_id"}]}},"response":[],"_postman_id":"e2b28aa7-722c-477c-9705-d31142e4923c"}],"id":"47fc6504-dda0-4ee0-9adb-0aba51357bf4","description":"<p>Functions relating to creating, updating, deleting and quering passes.</p>\n<p>Also funciton for sending notifications.</p>\n","_postman_id":"47fc6504-dda0-4ee0-9adb-0aba51357bf4"},{"name":"Client API","item":[{"name":"get Users","id":"37e4f0fe-ef5a-4d20-9f41-1621706c2848","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n"}],"url":"{{clients_url}}/getUsers","description":"<h1 id=\"get-users\">Get users</h1>\n<p>This endpoint is used to retrieve a list of users associated with your account.</p>\n<p><strong>NOTE</strong>: You need an API key with client admin permission enabled to use this function.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: GET</p>\n</li>\n<li><p>URL: <code>{{clients_url}}/getUsers</code></p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Body:</p>\n<ul>\n<li><p><strong>users</strong> : (array)</p>\n<ul>\n<li><p><strong>client_admin_enabled</strong> : (boolean) 1= user is authorised to mange client data</p>\n</li>\n<li><p><strong>email</strong> : (string) Email address</p>\n</li>\n<li><p><strong>scanner_enabled</strong> : (boolean) 1= user is authorised to use Smartix Scan App</p>\n</li>\n<li><p><strong>studio_enabled</strong> : (boolean) 1 = user is authorised to use Smartix Studio</p>\n</li>\n<li><p><strong>user_enabled</strong> : (boolean) 0 = user disabled, All access is restricted</p>\n</li>\n<li><p><strong>user_id</strong> : (integer) User ID</p>\n</li>\n<li><p><strong>username</strong> : (string) Username</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"ok\": true,\n    \"users\": [\n        {\n            \"client_admin_enabled\": 1,\n            \"email\": \"user1@null.com\",\n            \"scanner_enabled\": 1,\n            \"studio_enabled\": 1,\n            \"user_enabled\": 1,\n            \"user_id\": 1,\n            \"username\": \"User 1\"\n        },\n        {\n            \"client_admin_enabled\": 0,\n            \"email\": \"user2@null.com\",\n            \"scanner_enabled\": 1,\n            \"studio_enabled\": 0,\n            \"user_enabled\": 1,\n            \"user_id\": 38,\n            \"username\": \"User 2\"\n        }\n    ]\n}\n\n</code></pre>\n","urlObject":{"path":["getUsers"],"host":["{{clients_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"37e4f0fe-ef5a-4d20-9f41-1621706c2848"},{"name":"Statistic = get pass activity (scans) (specified template)","id":"b334e8df-570e-4598-81d2-f6a3f4200275","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n"}],"url":"{{clients_url}}/getClientStatisticsScans/:template_id/:period_days","description":"<h1 id=\"get-pass-activity-statistics\">Get pass activity (statistics)</h1>\n<p>This endpoint is used to retrieve the data used in the studio Pass Activity chart</p>\n<p><strong>NOTE</strong>: You need an API key with client admin permission enabled to use this function.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: GET</p>\n</li>\n<li><p>URL: <code>{{clients_url}}/</code>getClientStatisticsScans/:template_id/:period_days</p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n<li><p>Path Parameters:</p>\n<ul>\n<li><p><code>template_id</code> (string): The ID of the template to report on.</p>\n</li>\n<li><p>period_days (integer): The number of days to include in the report.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"extraTotals\": {\n        \"credit\": 0,\n        \"debit\": 0,\n        \"scan\": 2,\n        \"scanner\": 2,\n        \"scans\": 2,\n        \"shopify\": 0\n    },\n    \"ok\": true,\n    \"scanTrend\": [\n        {\n            \"action\": \"scan\",\n            \"bucket_action_label\": \"16 Aug · scan\",\n            \"bucket_label\": \"16 Aug\",\n            \"bucket_sort\": \"2026-08-16\",\n            \"scanner\": 1,\n            \"shopify\": 0\n        },\n        {\n            \"action\": \"scan\",\n            \"bucket_action_label\": \"17 Aug · scan\",\n            \"bucket_label\": \"17 Aug\",\n            \"bucket_sort\": \"2026-08-17\",\n            \"scanner\": 1,\n            \"shopify\": 0\n        }\n    ],\n    \"scanTrendSeries\": [\n        {\n            \"key\": \"scanner\",\n            \"label\": \"Scanner\",\n            \"source\": \"scanner\"\n        },\n        {\n            \"key\": \"shopify\",\n            \"label\": \"Shopify\",\n            \"source\": \"shopify\"\n        }\n    ]\n}\n\n</code></pre>\n","urlObject":{"path":["getClientStatisticsScans",":template_id",":period_days"],"host":["{{clients_url}}"],"query":[],"variable":[{"description":{"content":"<p>template ID</p>\n","type":"text/plain"},"type":"any","value":"smartix_membership_EKP_L31_RAB_MPA_BNY","key":"template_id"},{"description":{"content":"<p>choice of 1,7,31,92,183,365 - number of days to include in report</p>\n","type":"text/plain"},"type":"any","value":"7","key":"period_days"}]}},"response":[],"_postman_id":"b334e8df-570e-4598-81d2-f6a3f4200275"},{"name":"Statistic = get pass types (in use)","id":"21346741-cbaf-457c-9182-cfcb54dc1d99","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"url":"{{clients_url}}/getClientStatisticsPassTypes","description":"<h1 id=\"get-pass-types-statistics\">Get pass types (statistics)</h1>\n<p>This endpoint is used to retrieve the data used in the studio Pass Types chart</p>\n<p><strong>NOTE</strong>: You need an API key with client admin permission enabled to use this function.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: GET</p>\n</li>\n<li><p>URL: <code>{{clients_url}}/</code>getClientStatisticsPassTypes</p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"ok\": true,\n    \"passTypeMix\": [\n        {\n            \"issued\": 70,\n            \"pass_type_name\": \"Loyalty Card\",\n            \"template_count\": 2\n        },\n        {\n            \"issued\": 21,\n            \"pass_type_name\": \"Stamp Card\",\n            \"template_count\": 1\n        },\n        {\n            \"issued\": 9,\n            \"pass_type_name\": \"Other (storecard)\",\n            \"template_count\": 5\n        },\n        {\n            \"issued\": 8,\n            \"pass_type_name\": \"Gift Card\",\n            \"template_count\": 3\n        },\n        {\n            \"issued\": 5,\n            \"pass_type_name\": \"Event Ticket\",\n            \"template_count\": 6\n        },\n        {\n            \"issued\": 1,\n            \"pass_type_name\": \"Membership Card (ID \",\n            \"template_count\": 1\n        },\n        {\n            \"issued\": 1,\n            \"pass_type_name\": \"Other (event)\",\n            \"template_count\": 2\n        },\n        {\n            \"issued\": 0,\n            \"pass_type_name\": \"Membership Card\",\n            \"template_count\": 1\n        },\n        {\n            \"issued\": 0,\n            \"pass_type_name\": \"Offer\",\n            \"template_count\": 2\n        },\n        {\n            \"issued\": 0,\n            \"pass_type_name\": \"Other (generic)\",\n            \"template_count\": 1\n        }\n    ]\n}\n\n</code></pre>\n","urlObject":{"path":["getClientStatisticsPassTypes"],"host":["{{clients_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"21346741-cbaf-457c-9182-cfcb54dc1d99"},{"name":"Statistic = get pass template updates  (specified template)","id":"70c1be35-3fb4-4e0c-b040-bebd3b0867d6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"url":"{{clients_url}}/getClientStatisticsTemplateChanges/:template_id/:period_days","description":"<h1 id=\"get-template-updates-statistics\">Get template updates (statistics)</h1>\n<p>This endpoint is used to retrieve the data used in the studio Template Updates chart</p>\n<p><strong>NOTE</strong>: You need an API key with client admin permission enabled to use this function.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: GET</p>\n</li>\n<li><p>URL: <code>{{clients_url}}/</code>getClientStatisticsTemplateChanges/:template_id/:period_days</p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n<li><p>Path Parameters:</p>\n<ul>\n<li><p><code>template_id</code> (string): The ID of the template to report on.</p>\n</li>\n<li><p>period_days (integer): The number of days to include in the report.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"extraTotals\": {\n        \"templateUpdates\": 1,\n        \"templatesCreated\": 0\n    },\n    \"ok\": true,\n    \"templateLifecycle\": [\n        {\n            \"bucket_label\": \"May 2026\",\n            \"bucket_sort\": \"2026-05-01\",\n            \"created\": 0,\n            \"updated\": 1\n        }\n    ]\n}\n\n</code></pre>\n","urlObject":{"path":["getClientStatisticsTemplateChanges",":template_id",":period_days"],"host":["{{clients_url}}"],"query":[],"variable":[{"id":"85b7c563-38da-4db4-8868-12c2c4ea68db","description":{"content":"<p>template ID</p>\n","type":"text/plain"},"type":"any","value":"smartix_membership_EKP_L31_RAB_MPA_BNY","key":"template_id"},{"id":"b49475bd-c602-4518-b936-cdf48dc4cb0b","description":{"content":"<p>1,7,31,92,183,365 - number of days to include in report</p>\n","type":"text/plain"},"type":"any","value":"365","key":"period_days"}]}},"response":[],"_postman_id":"70c1be35-3fb4-4e0c-b040-bebd3b0867d6"},{"name":"Statistic = get pass template updates  (all templates)","id":"63b82ed8-443d-4351-8095-b016cbf7f3d2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"url":"{{clients_url}}/getClientStatisticsTemplateChanges/:period_days","description":"<h1 id=\"get-template-updates-statistics\">Get template updates (statistics)</h1>\n<p>This endpoint is used to retrieve the data used in the studio Template Updates chart</p>\n<p><strong>NOTE</strong>: You need an API key with client admin permission enabled to use this function.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: GET</p>\n</li>\n<li><p>URL: <code>{{clients_url}}/</code>getClientStatisticsTemplateChanges/:period_days</p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n<li><p>Path Parameters:</p>\n<ul>\n<li>period_days (integer): The number of days to include in the report.</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"extraTotals\": {\n        \"templateUpdates\": 25,\n        \"templatesCreated\": 0\n    },\n    \"ok\": true,\n    \"templateLifecycle\": [\n        {\n            \"bucket_label\": \"Dec 2025\",\n            \"bucket_sort\": \"2025-12-01\",\n            \"created\": 0,\n            \"updated\": 2\n        },\n        {\n            \"bucket_label\": \"Apr 2026\",\n            \"bucket_sort\": \"2026-04-01\",\n            \"created\": 0,\n            \"updated\": 7\n        },\n        {\n            \"bucket_label\": \"May 2026\",\n            \"bucket_sort\": \"2026-05-01\",\n            \"created\": 0,\n            \"updated\": 5\n        },\n        {\n            \"bucket_label\": \"Jul 2026\",\n            \"bucket_sort\": \"2026-07-01\",\n            \"created\": 0,\n            \"updated\": 2\n        },\n        {\n            \"bucket_label\": \"Aug 2026\",\n            \"bucket_sort\": \"2026-08-01\",\n            \"created\": 0,\n            \"updated\": 9\n        }\n    ]\n}\n\n</code></pre>\n","urlObject":{"path":["getClientStatisticsTemplateChanges",":period_days"],"host":["{{clients_url}}"],"query":[],"variable":[{"id":"f3ae3a4c-ebfc-4a1e-83bc-eae1cc9d23d2","description":{"content":"<p>1,7,31,92,183,365 - number of days to include in report</p>\n","type":"text/plain"},"type":"any","value":"365","key":"period_days"}]}},"response":[],"_postman_id":"63b82ed8-443d-4351-8095-b016cbf7f3d2"},{"name":"Statistic = get pass installs (specified template)","id":"b2717877-273e-4d5a-8c3f-bf8d61174886","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"url":"{{clients_url}}/getClientStatisticsInstalls/:template_id/:period_days","description":"<h1 id=\"get-pass-installs-statistics\">Get pass installs (statistics)</h1>\n<p>This endpoint is used to retrieve the data used in the studio Pass Installs chart</p>\n<p><strong>NOTE</strong>: You need an API key with client admin permission enabled to use this function.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: GET</p>\n</li>\n<li><p>URL: <code>{{clients_url}}/</code>getClientStatisticsInstalls/:template_id/:period_days</p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n<li><p>Path Parameters:</p>\n<ul>\n<li><p><code>template_id</code> (string): The ID of the template to report on.</p>\n</li>\n<li><p>period_days (integer): The number of days to include in the report.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"extraTotals\": {\n        \"appleInstalls\": 2,\n        \"googleInstalls\": 3\n    },\n    \"installTrend\": [\n        {\n            \"apple_installs\": 0,\n            \"bucket_label\": \"May 2026\",\n            \"bucket_sort\": \"2026-05-01\",\n            \"google_installs\": 1\n        },\n        {\n            \"apple_installs\": 2,\n            \"bucket_label\": \"Jun 2026\",\n            \"bucket_sort\": \"2026-06-01\",\n            \"google_installs\": 0\n        },\n        {\n            \"apple_installs\": 0,\n            \"bucket_label\": \"Jul 2026\",\n            \"bucket_sort\": \"2026-07-01\",\n            \"google_installs\": 2\n        }\n    ],\n    \"ok\": true\n}\n\n</code></pre>\n","urlObject":{"path":["getClientStatisticsInstalls",":template_id",":period_days"],"host":["{{clients_url}}"],"query":[],"variable":[{"id":"88c325c4-c04c-4a1b-91cc-94a4f2fa40cf","description":{"content":"<p>template ID</p>\n","type":"text/plain"},"type":"any","value":"smartix_membership_EKP_L31_RAB_MPA_BNY","key":"template_id"},{"id":"be5d06a8-938b-46a4-93ff-86e60d3dfb10","description":{"content":"<p>1,7,31,92,183,365 - number of days to include in report</p>\n","type":"text/plain"},"type":"any","value":"365","key":"period_days"}]}},"response":[],"_postman_id":"b2717877-273e-4d5a-8c3f-bf8d61174886"},{"name":"Statistic = get pass installs (all templates)","id":"04e2c58b-7219-48f9-b790-ca42ea8fa44c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"url":"{{clients_url}}/getClientStatisticsInstalls/:period_days","description":"<h1 id=\"get-pass-installs-statistics\">Get pass installs (statistics)</h1>\n<p>This endpoint is used to retrieve the data used in the studio Pass Installs chart</p>\n<p><strong>NOTE</strong>: You need an API key with client admin permission enabled to use this function.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: GET</p>\n</li>\n<li><p>URL: <code>{{clients_url}}/</code>getClientStatisticsInstalls/:period_days</p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n<li><p>Path Parameters:</p>\n<ul>\n<li>period_days (integer): The number of days to include in the report.</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"extraTotals\": {\n        \"appleInstalls\": 31,\n        \"googleInstalls\": 15\n    },\n    \"installTrend\": [\n        {\n            \"apple_installs\": 4,\n            \"bucket_label\": \"Dec 2025\",\n            \"bucket_sort\": \"2025-12-01\",\n            \"google_installs\": 0\n        },\n        {\n            \"apple_installs\": 9,\n            \"bucket_label\": \"Mar 2026\",\n            \"bucket_sort\": \"2026-03-01\",\n            \"google_installs\": 0\n        },\n        {\n            \"apple_installs\": 2,\n            \"bucket_label\": \"Apr 2026\",\n            \"bucket_sort\": \"2026-04-01\",\n            \"google_installs\": 1\n        },\n        {\n            \"apple_installs\": 14,\n            \"bucket_label\": \"May 2026\",\n            \"bucket_sort\": \"2026-05-01\",\n            \"google_installs\": 12\n        },\n        {\n            \"apple_installs\": 2,\n            \"bucket_label\": \"Jun 2026\",\n            \"bucket_sort\": \"2026-06-01\",\n            \"google_installs\": 0\n        },\n        {\n            \"apple_installs\": 0,\n            \"bucket_label\": \"Jul 2026\",\n            \"bucket_sort\": \"2026-07-01\",\n            \"google_installs\": 2\n        }\n    ],\n    \"ok\": true\n}\n\n</code></pre>\n","urlObject":{"path":["getClientStatisticsInstalls",":period_days"],"host":["{{clients_url}}"],"query":[],"variable":[{"id":"26d77f1f-c7b6-4c7f-9071-23aa0f97899f","description":{"content":"<p>1,7,31,92,183,365 - number of days to include in report</p>\n","type":"text/plain"},"type":"any","value":"365","key":"period_days"}]}},"response":[],"_postman_id":"04e2c58b-7219-48f9-b790-ca42ea8fa44c"},{"name":"Statistic = get pass adoption (specified template)","id":"e718309a-6e35-491d-89de-821db9997a02","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"url":"{{clients_url}}/getClientStatisticsAdoption/:template_id","description":"<h1 id=\"get-pass-adoption-statistics\">Get pass adoption (statistics)</h1>\n<p>This endpoint is used to retrieve the data used in the studio Template Adoption chart</p>\n<p><strong>NOTE</strong>: You need an API key with client admin permission enabled to use this function.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: GET</p>\n</li>\n<li><p>URL: <code>{{clients_url}}/</code>getClientStatisticsAdoption/:template_id/:period_days</p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n<li><p>Path Parameters:</p>\n<ul>\n<li><p><code>template_id</code> (string): The ID of the template to report on.</p>\n</li>\n<li><p>period_days (integer): The number of days to include in the report.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"adoption\": [\n        {\n            \"active_passes\": 4,\n            \"apple_installs\": 2,\n            \"expired_passes\": 0,\n            \"google_installs\": 3,\n            \"issued\": 1,\n            \"template_id\": \"smartix_membership_EKP_L31_RAB_MPA_BNY\",\n            \"template_name\": \"Black &amp; White Club\"\n        }\n    ],\n    \"extraTotals\": {\n        \"activePasses\": 4,\n        \"appleInstalls\": 2,\n        \"expiredPasses\": 0,\n        \"googleInstalls\": 3\n    },\n    \"ok\": true\n}\n\n</code></pre>\n","urlObject":{"path":["getClientStatisticsAdoption",":template_id"],"host":["{{clients_url}}"],"query":[],"variable":[{"id":"8c27dc1e-91a4-45b0-95bb-8e994b95f26d","description":{"content":"<p>template ID</p>\n","type":"text/plain"},"type":"any","value":"smartix_membership_EKP_L31_RAB_MPA_BNY","key":"template_id"}]}},"response":[],"_postman_id":"e718309a-6e35-491d-89de-821db9997a02"},{"name":"Statistic = get pass adoption (all templates)","id":"17d39889-7acd-463e-b528-72a272265664","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"url":"{{clients_url}}/getClientStatisticsAdoption","description":"<h1 id=\"get-pass-adoption-statistics\">Get pass adoption (statistics)</h1>\n<p>This endpoint is used to retrieve the data used in the studio Template Adoption chart</p>\n<p><strong>NOTE</strong>: You need an API key with client admin permission enabled to use this function.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: GET</p>\n</li>\n<li><p>URL: <code>{{clients_url}}/</code>getClientStatisticsAdoption/:period_days</p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n<li><p>Path Parameters:</p>\n<ul>\n<li>period_days (integer): The number of days to include in the report.</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"adoption\": [\n        {\n            \"active_passes\": 18,\n            \"apple_installs\": 2,\n            \"expired_passes\": 0,\n            \"google_installs\": 3,\n            \"issued\": 70,\n            \"template_id\": \"smartix_loyalty_N1B_E5M_D2B_2GD_DBT\",\n            \"template_name\": \"Alice Loves Crafting Loyalty\"\n        },\n        {\n            \"active_passes\": 3,\n            \"apple_installs\": 12,\n            \"expired_passes\": 0,\n            \"google_installs\": 3,\n            \"issued\": 4,\n            \"template_id\": \"other_s_VJC_9L8_C9A_5Y7_Q5M\",\n            \"template_name\": \"Aston Martin\"\n        },\n        {\n            \"active_passes\": 1,\n            \"apple_installs\": 0,\n            \"expired_passes\": 0,\n            \"google_installs\": 0,\n            \"issued\": 0,\n            \"template_id\": \"generic_A0G_0B7_770_FMJ_QNB\",\n            \"template_name\": \"Auto Rescue\"\n        },\n        {\n            \"active_passes\": 4,\n            \"apple_installs\": 2,\n            \"expired_passes\": 0,\n            \"google_installs\": 3,\n            \"issued\": 1,\n            \"template_id\": \"smartix_membership_EKP_L31_RAB_MPA_BNY\",\n            \"template_name\": \"Black &amp; White Club\"\n        }\n    ],\n    \"extraTotals\": {\n        \"activePasses\": 38,\n        \"appleInstalls\": 31,\n        \"expiredPasses\": 0,\n        \"googleInstalls\": 15\n    },\n    \"ok\": true\n}\n\n</code></pre>\n","urlObject":{"path":["getClientStatisticsAdoption"],"host":["{{clients_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"17d39889-7acd-463e-b528-72a272265664"},{"name":"Statistic = get pass activity (all templates)","id":"708ed60a-81bf-4ab7-954b-56afcd835edd","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"url":"{{clients_url}}/getClientStatisticsScans/:period_days","description":"<h1 id=\"get-users\">Get users</h1>\n<p>This endpoint is used to retrieve a list of users associated with your account.</p>\n<p><strong>NOTE</strong>: You need an API key with client admin permission enabled to use thos function.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: GET</p>\n</li>\n<li><p>URL: <code>{{clients_url}}/getUsers</code></p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Body:</p>\n<ul>\n<li><p><strong>users</strong> : (array)</p>\n<ul>\n<li><p><strong>client_admin_enabled</strong> : (boolean) 1= user is authorised to mange client data</p>\n</li>\n<li><p><strong>email</strong> : (string) Email address</p>\n</li>\n<li><p><strong>scanner_enabled</strong> : (boolean) 1= user is authorised to use Smartix Scan App</p>\n</li>\n<li><p><strong>studio_enabled</strong> : (boolean) 1 = user is authorised to use Smartix Studio</p>\n</li>\n<li><p><strong>user_enabled</strong> : (boolean) 0 = user disabled, All access is restricted</p>\n</li>\n<li><p><strong>user_id</strong> : (integer) User ID</p>\n</li>\n<li><p><strong>username</strong> : (string) Username</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"ok\": true,\n    \"users\": [\n        {\n            \"client_admin_enabled\": 1,\n            \"email\": \"user1@null.com\",\n            \"scanner_enabled\": 1,\n            \"studio_enabled\": 1,\n            \"user_enabled\": 1,\n            \"user_id\": 1,\n            \"username\": \"User 1\"\n        },\n        {\n            \"client_admin_enabled\": 0,\n            \"email\": \"user2@null.com\",\n            \"scanner_enabled\": 1,\n            \"studio_enabled\": 0,\n            \"user_enabled\": 1,\n            \"user_id\": 38,\n            \"username\": \"User 2\"\n        }\n    ]\n}\n\n</code></pre>\n","urlObject":{"path":["getClientStatisticsScans",":period_days"],"host":["{{clients_url}}"],"query":[],"variable":[{"id":"882d9d32-d9f3-416b-b697-8d6364ac5273","description":{"content":"<p>1,7,31,92,183,365 - number of days to include in report</p>\n","type":"text/plain"},"type":"any","value":"7","key":"period_days"}]}},"response":[],"_postman_id":"708ed60a-81bf-4ab7-954b-56afcd835edd"},{"name":"Add User","id":"ee2c8b19-9b0e-4165-a44f-86def026b4ad","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"username\" : \"testuser\",\n    \"email\" : \"test@null.com\",\n    \"studio_enabled\" : 1\n}","options":{"raw":{"language":"json"}}},"url":"{{clients_url}}/addUser","description":"<h1 id=\"add-user\">Add user</h1>\n<p>This endpoint is used to add a new user to your account</p>\n<p>The user wil recieve an email inviting them to follow a link to complete the creation of their account.</p>\n<p><strong>NOTE</strong>: You need an API key with client admin permission enabled to use thos function.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: PUT</p>\n</li>\n<li><p>URL: <code>{{clients_url}}/addUser</code></p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n<li><p>Body</p>\n<ul>\n<li><p><strong>username</strong> : (string) account name for user *Required</p>\n</li>\n<li><p><strong>email</strong> : (string) email address of used *Required</p>\n</li>\n<li><p><strong>studio_enabled</strong> : (boolean) 1= User will have permission to access Smartix Studio *Default=0</p>\n</li>\n<li><p><strong>scanner_enabled</strong> : (boolean) 1= User will have permission to access Smartix Scan App *Default=0</p>\n</li>\n<li><p><strong>client_admin_enabled</strong> : (boolean) 1= User will have permission to administer your account (manage users, gets, invoices etc.) *Default=0</p>\n</li>\n</ul>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n    \"username\" : \"testuser\",\n    \"email\" : \"test@null.com\",\n    \"studio_enabled\" : 1\n}\n\n</code></pre><h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Body:</p>\n<ul>\n<li>user_id : (string) ID of the newly created user</li>\n</ul>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"ok\": true,\n    \"user_id\": 63\n}\n\n</code></pre>\n","urlObject":{"path":["addUser"],"host":["{{clients_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"ee2c8b19-9b0e-4165-a44f-86def026b4ad"},{"name":"Update User","id":"76400fdd-688d-49ae-9ec4-54cdd4da4206","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"user\" : {\n        \"username\" : \"bob\"\n    }\n}","options":{"raw":{"language":"json"}}},"url":"{{clients_url}}/saveUser/:user_id","description":"<h1 id=\"update-user\">Update user</h1>\n<p>This endpoint is used to update a user record</p>\n<p><strong>NOTE</strong>: You need an API key with client admin permission enabled to use this function.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: PATCH</p>\n</li>\n<li><p>URL: <code>{{client_url}}/saveUser/:user_id</code></p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n<li><p>Path Parameters:</p>\n<ul>\n<li>user_id (string): The ID of the user.</li>\n</ul>\n</li>\n<li><p>Body</p>\n<ul>\n<li><p>user</p>\n<ul>\n<li><p><strong>username</strong> : (string) new username</p>\n</li>\n<li><p><strong>email</strong>: (string) new email</p>\n</li>\n<li><p><strong>user_enabled</strong> : (boolean) 1= Enabled, 0=Disabled</p>\n</li>\n<li><p><strong>client_admin_enabled</strong>: (boolean) 1= Enabled, 0=Disabled</p>\n</li>\n<li><p><strong>studio_enabled</strong>: (boolean) 1= Enabled, 0=Disabled</p>\n</li>\n<li><p><strong>scanner_enabled</strong>: (boolean) 1= Enabled, 0=Disabled</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<p>All items are optional. Just specify the items you wish to change. All other items will remain unchanged</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n    \"user\" : {\n        \"username\" : \"bob\",\n        \"scanner_enabled\" : 1\n    }\n}\n\n</code></pre><h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"ok\": true\n}\n\n</code></pre>\n","urlObject":{"path":["saveUser",":user_id"],"host":["{{clients_url}}"],"query":[],"variable":[{"id":"2949d2ff-d089-4084-a548-95a3dd2886c5","type":"any","value":"62","key":"user_id"}]}},"response":[],"_postman_id":"76400fdd-688d-49ae-9ec4-54cdd4da4206"},{"name":"Toggle API Key Admin Access","id":"dfbe456c-217c-41c7-81a4-69d6df1a4abd","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"user\" : {\n        \"username\" : \"bob\"\n    }\n}","options":{"raw":{"language":"json"}}},"url":"{{clients_url}}/toggleApiKeyAdminAccess/:key_id","description":"<h1 id=\"toggle-api-key-admin-access\">Toggle API Key admin access</h1>\n<p>This endpoint is used to update an API Key to enable / disable access to admin functions</p>\n<p><strong>NOTE</strong>: You need an API key with client admin permission enabled to use this function.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: PATCH</p>\n</li>\n<li><p>URL: <code>{{client_url}}/</code>toggleApiKeyAdminAccess<code>/:key_id</code></p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n<li><p>Path Parameters:</p>\n<ul>\n<li><code>key_id</code> (string): The ID of the API key.</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"ok\": true\n}\n\n</code></pre>\n","urlObject":{"path":["toggleApiKeyAdminAccess",":key_id"],"host":["{{clients_url}}"],"query":[],"variable":[{"id":"e0387c83-934c-4a16-9cec-0c9763c41d46","type":"any","value":"62","key":"key_id"}]}},"response":[],"_postman_id":"dfbe456c-217c-41c7-81a4-69d6df1a4abd"},{"name":"Delete User","id":"43f957d2-7faf-466d-b4f8-571485ec7816","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"username\" : \"testuser\",\n    \"email\" : \"test@null.com\",\n    \"studio_enabled\" : 1\n}","options":{"raw":{"language":"json"}}},"url":"{{clients_url}}/deleteUser/:user_id","description":"<h1 id=\"delete-user\">Delete user</h1>\n<p>This endpoint is used to delete a user forom your account</p>\n<p><strong>NOTE</strong>: You need an API key with client admin permission enabled to use thos function.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: DELETE</p>\n</li>\n<li><p>URL: <code>{{clients_url}}/deleteUser/:user_id</code></p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n<li><p>Path Parameters:</p>\n<ul>\n<li><code>user_id</code> (string): The ID of the user to be deleted.</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n    \"ok\": true\n}\n\n</code></pre>","urlObject":{"path":["deleteUser",":user_id"],"host":["{{clients_url}}"],"query":[],"variable":[{"id":"a7583322-6722-450e-94ea-9ac6c3fbe140","type":"any","value":"63","key":"user_id"}]}},"response":[],"_postman_id":"43f957d2-7faf-466d-b4f8-571485ec7816"},{"name":"get API Keys","id":"be21712e-cbbe-45aa-8774-3fc737d5bc84","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"url":"{{clients_url}}/getApiKeys","description":"<h1 id=\"get-api-keys\">Get API Keys</h1>\n<p>This endpoint is used to retrieve a list of API keys</p>\n<p><strong>NOTE</strong>: You need an API key with client admin permission enabled to use this function.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: GET</p>\n</li>\n<li><p>URL:<code>{{clients_url}}/getApiKeys</code></p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Body:</p>\n<ul>\n<li><p><strong>custom_api_access_enabled</strong> : (boolean) Indicates if you have custmer API access enabled. Contact support if disabled and you require it.</p>\n</li>\n<li><p><strong>keys</strong> : (array)</p>\n<ul>\n<li><p><strong>key_id</strong> : (integer) Key ID</p>\n</li>\n<li><p><strong>key_name</strong> : (string) : Your choice of name for this key</p>\n</li>\n<li><p><strong>key_enabled</strong> : (boolean) 0 = Key disabled</p>\n</li>\n<li><p><strong>key_usage</strong> : (string) Key usage (custom, shopify or zapier)</p>\n</li>\n<li><p><strong>key</strong> : (string) The API key</p>\n</li>\n<li><p><strong>ip_allow_list</strong> : (array) Array of CIDR ranges your API key is limited to (optional)</p>\n</li>\n<li><p><strong>allow_access_to_client_functions</strong> : (boolean) 1=Key can be used to acess clients api.</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"custom_api_access_enabled\": true,\n    \"keys\": [\n         {\n            \"allow_access_to_client_functions\": 1,\n            \"ip_allow_list\": [\n                \"123.124.125.126/16\"\n            ],\n            \"key\": \"{{API KEY STRING}}\",\n            \"key_enabled\": 1,\n            \"key_id\": 4,\n            \"key_name\": \"my custom app\",\n            \"key_usage\": \"custom\"\n        },\n        {\n            \"allow_access_to_client_functions\": 1,\n            \"ip_allow_list\": [],\n            \"key\": \"{{API KEY STRING}}\",\n            \"key_enabled\": 1,\n            \"key_id\": 12,\n            \"key_name\": \"shopify store 1\",\n            \"key_usage\": \"shopify\"\n        },\n        {\n            \"allow_access_to_client_functions\": 0,\n            \"ip_allow_list\": [],\n            \"key\": \"{{API KEY STRING}}\",\n            \"key_enabled\": 1,\n            \"key_id\": 16,\n            \"key_name\": \"zapier integration\",\n            \"key_usage\": \"zapier\"\n        }\n    ],\n    \"ok\": true\n}\n\n</code></pre>\n","urlObject":{"path":["getApiKeys"],"host":["{{clients_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"be21712e-cbbe-45aa-8774-3fc737d5bc84"},{"name":"Add API Key","id":"08cdf77b-2702-452e-a87e-8cc59ffbfd37","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"key_name\": \"my new custom key\",\n  \"key_usage\": \"custom\",\n  \"ip_allow_list\": [\n    \"203.0.113.10\",\n    \"198.51.100.0/24\"\n  ],\n  \"allow_access_to_client_functions\": 0\n}","options":{"raw":{"language":"json"}}},"url":"{{clients_url}}/addApiKey","description":"<h1 id=\"add-api-key\">Add API key</h1>\n<p>This endpoint is used to create a new API key</p>\n<p><strong>NOTE</strong>: You need an API key with client admin permission enabled to use this function.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: PUT</p>\n</li>\n<li><p>URL:<code>{{clients_url}/addApiKey</code></p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n<li><p>Body</p>\n<ul>\n<li><p><strong>key_name</strong> : (string) a name for this API key</p>\n</li>\n<li><p><strong>key_usage</strong> : (string) <strong>shopify</strong> (key for shopify integration), <strong>zapier</strong> (key for zapier integration), <strong>custom</strong> (key for anythign else)</p>\n</li>\n<li><p><strong>allow_access_to_client_functions</strong> : (boolean) 1=Key can be used to manage client data (users, keys etc.) (Only applicable if key_sage is \"custom\")</p>\n</li>\n<li><p><strong>ip_allow_list</strong> : (array) of CIDR ranges. (Only applicable is key_usage is \"custom\")</p>\n</li>\n</ul>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"key_name\": \"my new custom API key\",\n  \"key_usage\": \"custom\",\n  \"ip_allow_list\": [\n    \"203.0.113.10\",\n    \"198.51.100.0/24\"\n  ],\n  \"allow_access_to_client_functions\": 0\n}\n\n</code></pre>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Body</p>\n<ul>\n<li>key_id : (integer) ID of the new key pair</li>\n</ul>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"key_id\": 64,\n    \"ok\": true\n}\n\n</code></pre>\n","urlObject":{"path":["addApiKey"],"host":["{{clients_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"08cdf77b-2702-452e-a87e-8cc59ffbfd37"},{"name":"Set API Key Status","id":"e5ab25d2-d7ee-41fe-b7c3-fdcbf68d6764","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"url":"{{clients_url}}/setApiKeyStatus/:key_id/:status/:allow_access_to_client_functions","description":"<h1 id=\"set-api-key-status\">Set API key status</h1>\n<p>This endpoint is used to enabled/disable an API key</p>\n<p><strong>NOTE</strong>: You need an API key with client admin permission enabled to use this function.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: PATCH</p>\n</li>\n<li><p>URL: <code>{{client_url}}/setApiKeyStatus.:key_id/:status/:admin_status</code></p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n<li><p>Path Parameters:</p>\n<ul>\n<li><p><code>key_id</code> (string): The ID of the key.</p>\n</li>\n<li><p><code>status</code> (string): status - \"enabled\" or \"disabled\"</p>\n</li>\n<li><p><strong>allow_access_to_client_functions</strong> (string): status - \"enabled\" or \"disabled\"</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"ok\": true\n}\n\n</code></pre>\n","urlObject":{"path":["setApiKeyStatus",":key_id",":status",":allow_access_to_client_functions"],"host":["{{clients_url}}"],"query":[],"variable":[{"id":"0f587cec-4250-4738-ada0-4e56ed30fa26","description":{"content":"<p>API Key ID</p>\n","type":"text/plain"},"type":"any","value":"60","key":"key_id"},{"id":"e943f4e3-ad24-437c-899a-50cfeac97a31","description":{"content":"<p>enabled | disabled</p>\n","type":"text/plain"},"type":"any","value":"enabled","key":"status"},{"id":"93ef61e4-decf-47c2-92ae-5d852b999e03","description":{"content":"<p>enabled | disabled</p>\n","type":"text/plain"},"type":"any","value":"enabled","key":"allow_access_to_client_functions"}]}},"response":[],"_postman_id":"e5ab25d2-d7ee-41fe-b7c3-fdcbf68d6764"},{"name":"Delete API Key","id":"3d34476d-db28-43c4-842c-2b6db9879252","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[{"key":"x-api-key","value":"{{api_key}}","type":"text"}],"url":"{{clients_url}}/deleteApiKey/:key_id","description":"<h1 id=\"delete-api-key\">Delete API key</h1>\n<p>This endpoint is used to delete an API key</p>\n<p><strong>NOTE</strong>: You need an API key with client admin permission enabled to use thos function.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: DELETE</p>\n</li>\n<li><p>URL: <code>{{clients_url}}/deleteApiKey/:key_id</code></p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n<li><p>Path Parameters:</p>\n<ul>\n<li>key_id (string): The ID of the key to be deleted.</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"ok\": true\n}\n\n</code></pre>\n","urlObject":{"path":["deleteApiKey",":key_id"],"host":["{{clients_url}}"],"query":[],"variable":[{"id":"8c575353-3ecd-41a5-bd75-6ae8fd198531","type":"any","value":"65","key":"key_id"}]}},"response":[],"_postman_id":"3d34476d-db28-43c4-842c-2b6db9879252"},{"name":"get Client Data","id":"eac57fe9-337a-49c7-9620-6d9fea0dc09d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"url":"{{clients_url}}/getClientDetails","description":"<h1 id=\"get-client-data\">Get Client Data</h1>\n<p>This endpoint is used to retrieve data relating to your client account</p>\n<p><strong>NOTE</strong>: You need an API key with client admin permission enabled to use this function.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: GET</p>\n</li>\n<li><p>URL: <code>{{clients_url}}/getClientData</code></p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Body:</p>\n<ul>\n<li>client : (object)</li>\n</ul>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n    \"client\": {\n        \"address\": \"Your street\\nYour town\\nPostcode\",\n        \"billing_day_of_month\": 15,\n        \"billing_email\": \"user1@null.com\",\n        \"billing_mode\": \"prepay\",\n        \"billing_period\": 4,\n        \"client_enabled\": 1,\n        \"client_id\": 2,\n        \"company_number\": \"123\",\n        \"creation_date\": \"20251020\",\n        \"deletion_date\": null,\n        \"main_contact_email\": \"user2@null.com\",\n        \"main_contact_name\": \"User Two\",\n        \"main_contact_phone\": \"01234567890\",\n        \"max_active_passes\": 75,\n        \"name\": \"Your client name\",\n        \"next_tariff_tier\": null,\n        \"tariff_name\": \"Standard\",\n        \"tariff_tier\": \"FREE\",\n        \"vat_number\": null\n    },\n    \"ok\": true\n}\n\n</code></pre>","urlObject":{"path":["getClientDetails"],"host":["{{clients_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"eac57fe9-337a-49c7-9620-6d9fea0dc09d"},{"name":"get Invoices","id":"b6f71075-e163-4c7d-a2f4-e09145a48dee","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-api-key","value":"{{api_key}}","description":"<p>API access key</p>\n","type":"text"}],"url":"{{clients_url}}/getInvoices/:start_date","description":"<h1 id=\"get-invoices\">Get invoices</h1>\n<p>This endpoint is used to retrieve data your past invoices.</p>\n<p>Payment for invoices is normally taken automatically either by payment card or direct debit.</p>\n<p><strong>NOTE</strong>: You need an API key with client admin permission enabled to use this function.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: GET</p>\n</li>\n<li><p>URL: <code>{{clients_url}}/getInvoices</code></p>\n</li>\n<li><p>Headers:</p>\n<ul>\n<li>x-api-key : Your API key</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Body:</p>\n<ul>\n<li><p>invoices : (array)</p>\n<ul>\n<li><p><strong>client_id</strong> : (integer) Your client ID</p>\n</li>\n<li><p><strong>accounts_client_id</strong> : (integer) Your alternative client ID in our accounts system</p>\n</li>\n<li><p><strong>clientName</strong> : (string) your name</p>\n</li>\n<li><p><strong>clientAddress</strong> : (string) your address</p>\n</li>\n<li><p><strong>invoice_date</strong> : (ISOdate) :date invoice raised</p>\n</li>\n<li><p><strong>date_due</strong> : (satestring) : date payment due</p>\n</li>\n<li><p><strong>amount</strong> : (numeric) Total amount (ex VAT)</p>\n</li>\n<li><p><strong>vat</strong> : (numeric) VAT amount</p>\n</li>\n<li><p><strong>total</strong> : (numeric) VAT inclusive total (amount due)</p>\n</li>\n<li><p><strong>payment_error</strong> : (string) If a payment failes this will contain erro rinformation</p>\n</li>\n<li><p><strong>details</strong> : (array)</p>\n<ul>\n<li><p><strong>details</strong> : (string) Item being charged for</p>\n</li>\n<li><p><strong>id</strong> : (interger) IS in our accounts system</p>\n</li>\n<li><p><strong>amount</strong> : (numeric) amount (ex VAT)</p>\n</li>\n<li><p><strong>vat</strong> : (numeric) VAT amount</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p>variables : (object) Our bank details etc.</p>\n</li>\n</ul>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n    \"invoices\": [\n        {\n            \"accounts_client_id\": 4,\n            \"amount\": 12,\n            \"clientAddress\": \"Your address\\nYour town\\nPosrtcode\",\n            \"clientName\": \"Your client name\",\n            \"client_id\": 20,\n            \"date_paid\": \"20250923\",\n            \"details\": [\n                {\n                    \"amount\": 6,\n                    \"details\": \"4000 active passes [1-4000] @ £0.0015\",\n                    \"id\": 51,\n                    \"vat\": 1.2\n                },\n                {\n                    \"amount\": 6,\n                    \"details\": \"6000 active passes [4000-10000] @ £0.001\",\n                    \"id\": 50,\n                    \"vat\": 1.2\n                }\n            ],\n            \"due_date\": \"20250922\",\n            \"invoice_date\": \"2025-09-15\",\n            \"invoice_id\": 21,\n            \"invoicenumber\": \"M250900000021\",\n            \"payment_error\": null,\n            \"total\": 14.4,\n            \"vat\": 2.4\n        }\n    ],\n    \"ok\": true,\n    \"variables\": {\n        \"bankAccountName\": \"Smartix Ltd\",\n        \"companyAddress\": \"93 Guillemot Road\\nPortishead\\nBristol\\nBS20 7PG\",\n        \"companyEmail\": \"admin@smartix.uk\",\n        \"companyName\": \"Smartix Ltd\",\n        \"companyNumber\": \"15903189\",\n        \"invoiceAccountNumber\": \"40494912\",\n        \"invoiceSortCode\": \"60-83-71\",\n        \"invoiceTerms\": \"Payment within 14 days of invoice date\",\n        \"remittanceAddress\": \"At the above address\",\n        \"vatNumber\": \"awaiting registration\"\n    }\n}\n\n</code></pre>","urlObject":{"path":["getInvoices",":start_date"],"host":["{{clients_url}}"],"query":[],"variable":[{"id":"6fd88e04-1f87-4648-9221-a4f65f8cf775","type":"any","value":"20250901","key":"start_date"}]}},"response":[],"_postman_id":"b6f71075-e163-4c7d-a2f4-e09145a48dee"}],"id":"70f670d7-d04c-4e29-9836-32472f1a3355","description":"<p>Functions relating to managing users and API keys</p>\n","_postman_id":"70f670d7-d04c-4e29-9836-32472f1a3355"},{"name":"Device API","item":[{"name":"Get apple pass","id":"4ed36c6c-921a-42b8-bb9f-bf181f7a608c","protocolProfileBehavior":{"disabledSystemHeaders":{"accept":true},"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"GET","header":[{"key":"Accept","value":"vnd.apple.pkpass","type":"text"}],"url":"{{devices_url}}/pkpass/:jwttoken","description":"<h1 id=\"get-apple-pass\">Get Apple pass</h1>\n<p>When you create a pass you receive an apple_url in the response. That url points at this endpoint.</p>\n<p>This endpoint is documente dfor completeness. You should not use this directly to obtain the pk pass to pass onto your users, you shoudl supply them with the url so they can install direfly onto their devices.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: GET</p>\n</li>\n<li><p><code>URL: {{devices_url}}/pkpass/:jwttoken</code></p>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/pkpass</p>\n</li>\n<li><p>Body : Apple PK Pass data</p>\n</li>\n</ul>\n","urlObject":{"path":["pkpass",":jwttoken"],"host":["{{devices_url}}"],"query":[],"variable":[{"id":"9fc40565-1d43-4051-b1ad-aeebd1d4faf0","type":"any","value":"","key":"jwttoken"}]}},"response":[],"_postman_id":"4ed36c6c-921a-42b8-bb9f-bf181f7a608c"},{"name":"Get apple passes","id":"4670d9a9-c5e8-476c-80b1-c55ccd191332","protocolProfileBehavior":{"disabledSystemHeaders":{"accept":true}},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"GET","header":[{"key":"Accept","value":"vnd.apple.pkpasses"}],"url":"{{devices_url}}/pkpasses/:jwttoken","description":"<h1 id=\"get-apple-passes\">Get Apple passes</h1>\n<p>When you create a group of passes (makePasses) you receive an apple_url in the response. That url points at this endpoint.</p>\n<p>This endpoint is documente dfor completeness. You should not use this directly to obtain the pk pass to pass onto your users, you shoudl supply them with the url so they can install direfly onto their devices.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: GET</p>\n</li>\n<li><p><code>URL: {{devices_url}}/pkpasses/:jwttoken</code></p>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>Status: 200</p>\n</li>\n<li><p>Content-Type: application/pkpasses</p>\n</li>\n<li><p>Body : Apple PK Pass data bundle</p>\n</li>\n</ul>\n","urlObject":{"path":["pkpasses",":jwttoken"],"host":["{{devices_url}}"],"query":[],"variable":[{"type":"any","value":"","key":"jwttoken"}]}},"response":[],"_postman_id":"4670d9a9-c5e8-476c-80b1-c55ccd191332"}],"id":"225ee2e4-01c0-4ad9-aa2b-a835890a912c","description":"<p>End points for installing Apple passes</p>\n","_postman_id":"225ee2e4-01c0-4ad9-aa2b-a835890a912c"}],"event":[{"listen":"prerequest","script":{"id":"074992d9-be98-462b-8ea7-8acb999096c6","type":"text/javascript","packages":{},"requests":{},"exec":[""]}},{"listen":"test","script":{"id":"a84e0f22-ee2e-466e-9a9b-a404e7575254","type":"text/javascript","packages":{},"requests":{},"exec":[""]}}]}