{"info":{"_postman_id":"db338f38-6a0c-427f-b977-be5732ef6f84","name":"Foxtag.io Public Api","description":"<html><head></head><body><p>The Foxtag API provides access to your organization’s data within the Foxtag platform, allowing integration with other software on the customer’s side.</p>\n<p>This REST API utilizes resource-oriented URLs and standard HTTP response codes to indicate errors. All API responses are in JSON format, and all data sent to the API should also be in JSON format.</p>\n<blockquote>\n<p><strong>NOTE:</strong> For testing with this tool, it’s advised to generate a dedicated API key. Be sure to delete the testing key once it is no longer needed. </p>\n</blockquote>\n<p>Our production API Endpoint: <code>api.foxtag.io/api/v1/public</code> ( https only )</p>\n<hr>\n<h1 id=\"authentication\">Authentication</h1>\n<p>Foxtag provides access to its Public API endpoints using long-lived API keys. As these keys do <strong>not</strong> automatically expire, we highly recommend the following security practices:</p>\n<ul>\n<li><p>Regularly rotate API keys</p>\n</li>\n<li><p>Remove any API keys that are no longer in use or have been compromised</p>\n</li>\n</ul>\n<h2 id=\"anatomie-of-api-keys\">Anatomie of API keys</h2>\n<p>Each API key has a public and private part, separated by a dot. The public part allows identification of the API key in use and supports debugging efforts. The private part is securely stored as a hash, ensuring that only the API key creator has access to its original value.</p>\n<p>Example API key:</p>\n<p><code>9d819a.4aD3CkTdp-PiDoBLFAi9gzRUsS83cIo5xwKgfA85lRE</code></p>\n<h2 id=\"api-key-usage\">API key usage</h2>\n<p>Include the API key in the header of each request to a Public API endpoint in this format:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>Authorization:Bearer &lt;your-api-key&gt;\n\n</code></pre><p>Curl Request Example</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-bash\">curl -X GET \"https://api.foxtag.com/endpoint\" \\\n     -H \"Authorization: Bearer &lt;your-api-key&gt;\"\n\n</code></pre>\n<h2 id=\"create-and-manage-api-keys\">Create and manage API keys</h2>\n<p>API key creation and management are handled in the administration section of <a href=\"https://www.foxtag.io/organizations/settings\">foxtag.io</a>, accessible only to accounts with administrative privileges.</p>\n<p>When a new API key is created, relevant access rights must be selected (see image below). Assigning only the permissions necessary for the intended use case is highly suggested.</p>\n<img src=\"https://content.pstmn.io/ac85a6a2-586a-4c7b-919b-2ec8505c4f42/YXBpX2tleV9hY2Nlc3NfcmlnaHRzLnBuZw==\">\n\n<p>Ensure that the API key is copied immediately upon creation. Foxtag stores the API key as an encrypted hash, making it impossible to retrieve the key at a later time.</p>\n<img src=\"https://content.pstmn.io/2ff17534-cc88-44d8-a5f1-30f1ac5a19f4/YXBpX2tleV9hZnRlcl9jcmVhdGlvbi5wbmc=\">\n\n<p>Creating an API key for foxtag.io is a simple process. It is recommended to delete any unused API keys or those that cannot be fully trusted to remain confidential.</p>\n<hr>\n<h1 id=\"api-endpoint-basics\"><strong>API Endpoint-Basics</strong></h1>\n<h2 id=\"accept-headers\">Accept Headers</h2>\n<p>The Foxtag Public API returns data in JSON format. Ensure that the correct <code>Accept</code> header is included with every request.</p>\n<ul>\n<li><p>Either accept json content type.<br>  Accept: application/json</p>\n</li>\n<li><p>Or at least accept all content types.<br>  Accept: */*</p>\n</li>\n<li><p>In case the correct header cannot be sent, append a <code>.json</code> suffix to the URL to make the request clear and unambiguous.<br>  <code>GET /users.json</code></p>\n</li>\n</ul>\n<p>Problems with accepting content types result in <code>HTTP 406 Not Acceptable</code></p>\n<h2 id=\"routes\">Routes</h2>\n<p>The Foxtag public API may offer up to four different endpoints for a given resource, utilizing the GET, POST, or DELETE methods. Availability varies, so not all resources support every endpoint type.</p>\n<h4 id=\"get--resource-index-\">GET ( Resource Index )</h4>\n<p>Fetches a paginated list of record. Including the query paramter <code>page</code> determines which page is returned. Some endpoints offer the usage of additional query parameters for further filtering.</p>\n<p>Example: <code>GET /users?page=1</code></p>\n<h4 id=\"get--specific-record-\">GET ( Specific record )</h4>\n<p>Retrieves detailed information about a specific record, offering more in-depth data compared to index routes. The record is identified by either its UUID or number attribute and placed as a path attribute.</p>\n<p>Example: <code>GET /users/:customer_id_or_number</code></p>\n<h4 id=\"post--createupsert-records-\">POST ( Create/Upsert records )</h4>\n<p>Records can be created or updated using an endpoint that following either just create or upsert behavior. The request body should contain a list of record data. If the data includes an <code>id</code> field (UUID), the system will update the existing record with the matching <code>id</code> (provided the endpoint supports upsert behavior). If the <code>id</code> field is omitted, the system will create a new record with the provided data.</p>\n<blockquote>\n<p><strong>NOTE</strong>: While records can be identified by their <code>number</code> attribute in <strong>GET</strong> requests, updating records strictly requires the <code>id</code> (UUID) of the record. </p>\n</blockquote>\n<blockquote>\n<p><strong>NOTE</strong>: Ensure the request body is sent in JSON format with the <code>Content-Type: application/json</code> header. </p>\n</blockquote>\n<p>To maintain efficient request processing, the creation or updating of records is limited to 100 objects per request. Requests exceeding this limit will result in an HTTP 422 error with the message \"Too many elements in a single request.\"</p>\n<p><strong>SEE SECTION UPSERT RESPONSE FOR FURTHER INFORMATION OF THE RESPONSE</strong></p>\n<h4 id=\"delete--delete-record-\">DELETE ( Delete record )</h4>\n<p>Certain resources can be deleted using an HTTP DELETE request. Like the POST request, the <code>id</code> (UUID) of the record must be included as a path attribute.<br>Example: <code>DELETE /users/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</code></p>\n<blockquote>\n<p><strong>NOTE</strong>: Be aware that deleting an <strong>Installation</strong> records will also remove all related data, such as inventory (things/components), check events and reports. </p>\n</blockquote>\n<hr>\n<h1 id=\"pagination-and-sorting\">Pagination and sorting</h1>\n<h3 id=\"pagination\">Pagination</h3>\n<p>Requests that retrieve lists of records are paginated, with a maximum of 500 records per page in most cases. The response includes a <code>meta</code> section, where the current page and the total number of pages are indicated, making it easy to navigate through large datasets.</p>\n<p>If no page is specified, the default page (page 1) is returned. To access additional pages, simply append a <code>page</code> query parameter to the URL, as demonstrated in this example to retrieve page 3:</p>\n<p><code>GET /users?page=3</code></p>\n<p>This allows for easy navigation through paginated records without additional configuration.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">// Example meta info of a paginated response\n{ \n  // ... resource data here ...\n  \"meta\": {\n    \"current_page\": 1,\n    \"total_pages\": 3,\n    \"total_count\": 1063\n  }\n}\n\n</code></pre>\n<h3 id=\"sorting\">Sorting</h3>\n<p>Records in the list are sorted by the <code>updated_at</code> field, with the latest updates appearing last. For new records, the <code>updated_at</code> value is initialized to the creation timestamp.</p>\n<hr>\n<h1 id=\"upsert-response\">Upsert Response</h1>\n<h3 id=\"attributes\">Attributes</h3>\n<p>Many endpoints support the creation or updating of multiple records by submitting a list of objects in a <strong>POST</strong> request.<br>When upsert behavior is supported by the endpoint, the response to such a request includes the following details:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>ATTRIBUTE</strong></th>\n<th><strong>TYPE</strong></th>\n<th><strong>DESCRIPTION</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>status</td>\n<td>string</td>\n<td>Has value <code>success</code> or <code>with_errors</code></td>\n</tr>\n<tr>\n<td>errors_count</td>\n<td>int</td>\n<td>Error count. <code>0</code> if no errors</td>\n</tr>\n<tr>\n<td>results</td>\n<td>array</td>\n<td>List of results</td>\n</tr>\n<tr>\n<td>results objects .id</td>\n<td>uuid or null</td>\n<td>ID of the record if available. <code>null</code> if not available</td>\n</tr>\n<tr>\n<td>results objects .success</td>\n<td>boolean</td>\n<td>Record has been saved</td>\n</tr>\n<tr>\n<td>results objects .message</td>\n<td>string or null</td>\n<td>Error message. <code>null</code> if succesfull</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"request-response-without-errors\">Request response without errors</h3>\n<p>Upon success, the response includes a list of IDs corresponding to the newly inserted or updated records.<br>Requests that do not encounter any errors will have the status marked as <code>success</code> and an <code>errors_count</code> of <code>0</code>.</p>\n<p>Example response:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">// Example Response with 2 successful updates (HTTP 200)\n{\n  \"status\": \"success\",\n  \"errors_count\": 0,\n  \"results\": [\n    {\n      \"id\": \"88e08d4b-b410-4afb-be50-6b980926ed70\",\n      \"success\": true,\n      \"message\": null\n    },\n    {\n      \"id\": \"428d87f7-99a4-40b5-b337-7775b958c022\",\n      \"success\": true,\n      \"message\": null\n    }\n  ]\n}\n\n</code></pre>\n<h3 id=\"request-response-with-errors\">Request response with errors</h3>\n<p>In case some or all records fail to save, the response will include a mixed list, with records marked as <code>success: false</code>.<br>Requests that contain errors will have the status <code>with_errors</code> and an <code>errors_count</code> greater than <code>0</code>.</p>\n<blockquote>\n<p><strong>NOTE</strong>: Repsonses with errors respond with HTTP status 200, not with a HTTP error code </p>\n</blockquote>\n<p>Example response:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">// Example Response with errors (HTTP 200)\n{\n  \"status\": \"with_errors\",\n  \"errors_count\": 2,\n  \"results\": [\n    // not created record\n    {\n      \"id\": null,\n      \"success\": false,\n      \"message\": \"Customer no. is taken\"\n    },\n    // not updated record\n    {\n      \"id\": \"88e08d4b-b410-4afb-be50-6b980926ed70\",\n      \"success\": false,\n      \"message\": \"Customer no. is taken\"\n    },\n    // created record\n    {\n      \"id\": \"4071d49e-bb5b-4647-85cd-2635fca6b00b\",\n      \"success\": true,\n      \"message\": null\n    }\n  ]\n}\n\n</code></pre>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[{"content":"Authentication","slug":"authentication"},{"content":"API Endpoint-Basics","slug":"api-endpoint-basics"},{"content":"Pagination and sorting","slug":"pagination-and-sorting"},{"content":"Upsert Response","slug":"upsert-response"}],"owner":"28130234","collectionId":"db338f38-6a0c-427f-b977-be5732ef6f84","publishedId":"2sAYX5MNuP","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2025-02-04T15:09:10.000Z"},"item":[{"name":"Articles","item":[{"name":"List articles","id":"987a00db-552d-4b7c-8012-708dac34f652","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://api.foxtag.io/api/v1/public/articles","description":"<h3 id=\"description\">Description</h3>\n<p>This request retrieves all available article objects, with pagination applied if there are more than 500 articles.</p>\n<p>The response contains an array of article objects along with metadata for the current page, total pages, and total record count. You can use an optional \"page\" argument in the request body to specify which page of records to retrieve. For instance, \"page\": 1 returns records 1–500, \"page\": 2 returns records 501–1000, and so on. If the page argument is omitted, it defaults to 1.</p>\n<h3 id=\"request\">Request</h3>\n<ul>\n<li><p>Method: <code>GET</code></p>\n</li>\n<li><p>URL: <code>http://api.foxtag.io/api/v1/public/articles</code></p>\n</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<ul>\n<li><p>Content-Type: <code>application/json</code></p>\n</li>\n<li><p>Retrieved data of a single record:</p>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", // string &lt;uuid&gt;\n  \"number\": \"Art-1\", // string\n  \"name\": \"Article-1\", // string\n  \"group\": \"Group-1\", // string or null\n  \"unit\": \"Stk.\", // string   \n  \"position\": 1, // integer or null\n  \"active\": true, // boolean\n  \"updated_at\": \"2023-01-01T06:50:52.552Z\" // string &lt;Date-Time&gt;\n}\n\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"db338f38-6a0c-427f-b977-be5732ef6f84","id":"db338f38-6a0c-427f-b977-be5732ef6f84","name":"Foxtag.io Public Api","type":"collection"}},"urlObject":{"protocol":"https","path":["api","v1","public","articles"],"host":["api","foxtag","io"],"query":[{"disabled":true,"description":{"content":"<p>Defaults to \"1\" if ommited</p>\n","type":"text/plain"},"key":"page","value":"Integer"}],"variable":[]}},"response":[{"id":"99e889c4-1222-4177-8208-51e0c2057024","name":"List articles","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"url":{"raw":"https://api.foxtag.io/api/v1/public/articles?page=1","protocol":"https","host":["api","foxtag","io"],"path":["api","v1","public","articles"],"query":[{"key":"page","value":"1"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"articles\": [\n        {\n            \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n            \"number\": \"Art-1\",\n            \"name\": \"Article-1\",\n            \"group\": \"Group-1\",\n            \"unit\": \"Stk.\",\n            \"position\": 1,\n            \"active\": true,\n            \"updated_at\": \"2023-01-01T06:50:52.552Z\"\n        },\n        {\n            \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n            \"number\": \"Art-2\",\n            \"name\": \"Article-2\",\n            \"group\": \"Group-2\",\n            \"unit\": \"Stk.\",\n            \"position\": 2,\n            \"active\": true,\n            \"updated_at\": \"2023-01-02T06:50:52.552Z\"\n        }\n    ],\n    \"meta\": {\n        \"current_page\": 1,\n        \"total_pages\": 1,\n        \"total_count\": 2\n    }\n}"}],"_postman_id":"987a00db-552d-4b7c-8012-708dac34f652"},{"name":"Show article","id":"f1fd2da8-5eac-4b1d-90ac-78c529928fbf","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://api.foxtag.io/api/v1/public/articles/:article_id_or_number","description":"<h3 id=\"description\">Description</h3>\n<p>This endpoint retrieves details for a specific article, using either its unique ID (UUID) or article number as an identifier.</p>\n<p>The article number is optional and can be assigned through the web administration frontend or the public API endpoint (refer to: <a href=\"https://foxtag.postman.co/workspace/64af8236-6f93-4154-8228-2534da0ecd07/request/28130234-e34793c9-b4ff-4e35-9747-fc713a7f74b0?action=share&amp;source=copy-link&amp;creator=28130234&amp;ctx=documentation\">Create/Update articles</a>).</p>\n<h3 id=\"request\">Request</h3>\n<ul>\n<li><p>Method: <code>GET</code></p>\n</li>\n<li><p>URL: <code>http://api.foxtag.io/api/v1/public/articles/:article_id_or_number</code></p>\n</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<ul>\n<li><p>Content-Type: <code>application/json</code></p>\n</li>\n<li><p>Retrieved data of the record:</p>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", // string &lt;uuid&gt;\n  \"number\": \"Art-1\", // string\n  \"name\": \"Article-1\", // string\n  \"group\": \"Group-1\", // string\n  \"unit\": \"Stk.\", // string\n  \"position\": 1, // integer\n  \"active\": true, // boolean\n  \"updated_at\": \"2023-01-01T06:50:52.552Z\" // string &lt;Date-Time&gt;\n}\n\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"db338f38-6a0c-427f-b977-be5732ef6f84","id":"db338f38-6a0c-427f-b977-be5732ef6f84","name":"Foxtag.io Public Api","type":"collection"}},"urlObject":{"protocol":"https","path":["api","v1","public","articles",":article_id_or_number"],"host":["api","foxtag","io"],"query":[],"variable":[{"description":{"content":"<p>records uuid | records number</p>\n","type":"text/plain"},"type":"any","value":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | Art-1","key":"article_id_or_number"}]}},"response":[{"id":"61f8630b-3cc9-42cf-b2c1-c25a21bdc78d","name":"Show article","originalRequest":{"method":"GET","header":[],"url":"https://api.foxtag.io/api/v1/public/articles/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"article\": {\n        \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n        \"number\": \"Art-1\",\n        \"name\": \"Article-1\",\n        \"group\": \"Group-1\",\n        \"unit\": \"Stk.\",\n        \"position\": 1,\n        \"active\": true,\n        \"updated_at\": \"2023-01-01T06:50:52.552Z\"\n    }\n}"}],"_postman_id":"f1fd2da8-5eac-4b1d-90ac-78c529928fbf"},{"name":"Create/Update articles","event":[{"listen":"test","script":{"id":"a0b5f047-6211-42af-ac76-9330a9110ca7","exec":["var template = `","<style type=\"text/css\">","    .tftable {font-size:14px;color:#333333;width:100%;border-width: 1px;border-color: #87ceeb;border-collapse: collapse;}","    .tftable th {font-size:18px;background-color:#87ceeb;border-width: 1px;padding: 8px;border-style: solid;border-color: #87ceeb;text-align:left;}","    .tftable tr {background-color:#ffffff;}","    .tftable td {font-size:14px;border-width: 1px;padding: 8px;border-style: solid;border-color: #87ceeb;}","    .tftable tr:hover {background-color:#e0ffff;}","</style>","","<table class=\"tftable\" border=\"1\">","    <tr>","        <th>ID</th>","        <th>Number</th>","        <th>Name</th>","        <th>Group</th>","        <th>Unit</th>","        <th>Position</th>","        <th>Active</th>","        <th>Updated At</th>","    </tr>","    ","    {{#each response.articles}}","        <tr>","            <td>{{id}}</td>","            <td>{{number}}</td>","            <td>{{name}}</td>","            <td>{{group}}</td>","            <td>{{unit}}</td>","            <td>{{position}}</td>","            <td>{{active}}</td>","            <td>{{updated_at}}</td>","        </tr>","    {{/each}}","</table>","`;","","function constructVisualizerPayload() {","    var res = pm.response.json();","    ","    return { response: res }","}","","pm.visualizer.set(template, constructVisualizerPayload());",""],"type":"text/javascript","packages":{}}},{"listen":"prerequest","script":{"id":"1fe98143-ea82-4f07-8cc0-e452c5daf2b4","exec":[""],"type":"text/javascript","packages":{}}}],"id":"e34793c9-b4ff-4e35-9747-fc713a7f74b0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"articles\": [\n    {\n      \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n      \"number\": \"Art-1\",\n      \"name\": \"Article-1\",\n      \"group\": \"Group-1\",\n      \"unit\": \"Stk.\"\n    },\n    {\n      \"number\": \"Art-2\",\n      \"name\": \"Article-2\",\n      \"group\": \"Group-2\",\n      \"unit\": \"Stk.\"\n    }\n  ]\n}\n","options":{"raw":{"language":"json"}}},"url":"https://api.foxtag.io/api/v1/public/articles","description":"<h3 id=\"description\">Description</h3>\n<p>This endpoint creates or updates multiple articles in a single call (upsert behavior) by submitting a list of article objects.</p>\n<p>To create new articles, leave the <code>id</code> field blank. Include an <code>id</code> to update an existing article record.</p>\n<p>This endpoint processes up to 100 records per request. Requests with more than 100 records will return a 422 error.</p>\n<h3 id=\"request\">Request</h3>\n<ul>\n<li><p>Method: <code>POST</code></p>\n</li>\n<li><p>URL: <code>http://api.foxtag.io/api/v1/public/articles</code></p>\n</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<ul>\n<li>Content-Type: <code>application/json</code></li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"db338f38-6a0c-427f-b977-be5732ef6f84","id":"db338f38-6a0c-427f-b977-be5732ef6f84","name":"Foxtag.io Public Api","type":"collection"}},"urlObject":{"protocol":"https","path":["api","v1","public","articles"],"host":["api","foxtag","io"],"query":[],"variable":[]}},"response":[{"id":"04561c4d-d53b-43c3-a826-0db6329d5b33","name":"Create/Update articles","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"articles\": [\n    {\n      \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n      \"number\": \"Art-1\",\n      \"name\": \"Article-1\",\n      \"group\": \"Group-1\",\n      \"unit\": \"Stk.\"\n    },\n    {\n      \"number\": \"Art-2\",\n      \"name\": \"Article-2\",\n      \"group\": \"Group-2\",\n      \"unit\": \"Stk.\"\n    }\n  ]\n}\n","options":{"raw":{"language":"json"}}},"url":"https://api.foxtag.io/api/v1/public/articles"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": \"success\",\n    \"errors_count\": 0,\n    \"results\": [\n        {\n            \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n            \"success\": true,\n            \"message\": null\n        },\n        {\n            \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n            \"success\": true,\n            \"message\": null\n        }\n    ]\n}"}],"_postman_id":"e34793c9-b4ff-4e35-9747-fc713a7f74b0"}],"id":"5f0722f2-9e10-4dbd-9311-e7eb6baf4a31","_postman_id":"5f0722f2-9e10-4dbd-9311-e7eb6baf4a31","description":"","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"db338f38-6a0c-427f-b977-be5732ef6f84","id":"db338f38-6a0c-427f-b977-be5732ef6f84","name":"Foxtag.io Public Api","type":"collection"}}},{"name":"Customers","item":[{"name":"List customers","id":"9dedd5ea-a319-496b-aef6-2d7104045713","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://api.foxtag.io/api/v1/public/customers","description":"<h3 id=\"description\">Description</h3>\n<p>This request retrieves all available customer records, with pagination applied if there are more than 500 customer records available.</p>\n<p>The response contains an array of customer records along with metadata for the current page, total pages, and total record count. You can use an optional \"page\" argument in the request body to specify which page of records to retrieve. For instance, \"page\": 1 returns records 1–500, \"page\": 2 returns records 501–1000, and so on. If the page argument is omitted, it defaults to 1.</p>\n<p>Each customer’s information contains the data of the associated address record, provided as a nested object within the customer details.</p>\n<h3 id=\"request\">Request</h3>\n<ul>\n<li><p>Method: <code>GET</code></p>\n</li>\n<li><p>URL: <code>http://api.foxtag.io/api/v1/public/customers/</code></p>\n</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<ul>\n<li><p>Content-Type: <code>application/json</code></p>\n</li>\n<li><p>Retrieved data of a single record:</p>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", // string &lt;uuid&gt;\n  \"number\": \"C-1\", // string\n  \"customer_no\": \"C-1\", // string\n  \"name\": \"Customer-1\", // string\n  \"updated_at\": \"2023-01-01T06:50:52.552Z\", // string &lt;date-time&gt;\n  \"address\": {\n    \"line1\": \"Adress-line-1\", // string or null\n    \"line2\": null, // string or null\n    \"zip\": \"12345\", // string\n    \"city\": \"City\", // string\n    \"country\": \"DE\" // string: ISO country code\n  }\n}\n\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"db338f38-6a0c-427f-b977-be5732ef6f84","id":"db338f38-6a0c-427f-b977-be5732ef6f84","name":"Foxtag.io Public Api","type":"collection"}},"urlObject":{"protocol":"https","path":["api","v1","public","customers"],"host":["api","foxtag","io"],"query":[{"disabled":true,"description":{"content":"<p>Defaults to \"1\" if ommited</p>\n","type":"text/plain"},"key":"page","value":"Integer"}],"variable":[]}},"response":[{"id":"8ecde768-45e4-42eb-8159-6a5865dc1a9b","name":"List customers","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://api.foxtag.io/api/v1/public/customers?page=1","protocol":"https","host":["api","foxtag","io"],"path":["api","v1","public","customers"],"query":[{"key":"page","value":"1"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"customers\": [\n        {\n            \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n            \"number\": \"C-1\",\n            \"customer_no\": \"C-1\",\n            \"name\": \"Customer-1\",\n            \"updated_at\": \"2023-01-01T06:50:52.552Z\",\n            \"address\": {\n                \"line1\": \"Adress-line-1\",\n                \"line2\": null,\n                \"line3\": null,\n                \"zip\": \"12345\",\n                \"city\": \"City\",\n                \"country\": \"DE\"\n            }\n        },\n        {\n            \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n            \"number\": \"C-2\",\n            \"customer_no\": \"C-2\",\n            \"name\": \"Customer-2\",\n            \"updated_at\": \"2023-01-01T06:50:52.552Z\",\n            \"address\": {\n                \"line1\": \"Adress-line-1\",\n                \"line2\": null,\n                \"line3\": null,\n                \"zip\": \"12345\",\n                \"city\": \"City\",\n                \"country\": \"DE\"\n            }\n        }\n    ],\n    \"meta\": {\n        \"current_page\": 1,\n        \"total_pages\": 1,\n        \"total_count\": 2\n    }\n}"}],"_postman_id":"9dedd5ea-a319-496b-aef6-2d7104045713"},{"name":"Show customer","id":"ac33b59b-2530-4f17-a749-4b7041bb181d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://api.foxtag.io/api/v1/public/customers/:customer_id_or_number","description":"<h3 id=\"description\">Description</h3>\n<p>This endpoint retrieves details for a specific customer, using either its unique ID (UUID) or customer number as an identifier.</p>\n<p>The customer number is optional and can be assigned through the web management frontend or the public API endpoint (refer to: <a href=\"https://foxtag.postman.co/workspace/64af8236-6f93-4154-8228-2534da0ecd07/request/28130234-d1d414d0-bf06-4114-99e4-e09458f973fc?action=share&amp;source=copy-link&amp;creator=28130234&amp;ctx=documentation\">Create/Update customer</a>).</p>\n<p>The customer’s information contains the data of the associated address record, provided as a nested object within the customer details.</p>\n<h3 id=\"request\">Request</h3>\n<ul>\n<li><p>Method: <code>GET</code></p>\n</li>\n<li><p>URL: <code>http://api.foxtag.io/api/v1/public/customers/:customer_id_or_number</code></p>\n</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<ul>\n<li><p>Content-Type: <code>application/json</code></p>\n</li>\n<li><p>Retrieved data of the record:</p>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", // string &lt;uuid&gt;\n  \"number\": \"C-1\", // string\n  \"customer_no\": \"C-1\", // string\n  \"name\": \"Customer-1\", // string\n  \"updated_at\": \"2023-01-01T06:50:52.552Z\", // string &lt;date-time&gt;\n  \"address\": {\n    \"line1\": \"Adress-line-1\", // string or null\n    \"line2\": null, // string or null\n    \"zip\": \"12345\", // string\n    \"city\": \"City\", // string\n    \"country\": \"DE\" // string: ISO country code\n  }\n}\n\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"db338f38-6a0c-427f-b977-be5732ef6f84","id":"db338f38-6a0c-427f-b977-be5732ef6f84","name":"Foxtag.io Public Api","type":"collection"}},"urlObject":{"protocol":"https","path":["api","v1","public","customers",":customer_id_or_number"],"host":["api","foxtag","io"],"query":[],"variable":[{"description":{"content":"<p>records uuid | records number</p>\n","type":"text/plain"},"type":"any","value":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | C-1","key":"customer_id_or_number"}]}},"response":[{"id":"2b22a0c4-4635-4a1a-82a2-6dba708f9acc","name":"Show customer","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://api.foxtag.io/api/v1/public/customers/:customer_id_or_number","protocol":"https","host":["api","foxtag","io"],"path":["api","v1","public","customers",":customer_id_or_number"],"variable":[{"key":"customer_id_or_number","value":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{    \n    \"customer\": {\n        \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n        \"number\": \"C-1\",\n        \"customer_no\": \"C-1\",\n        \"name\": \"Customer-1\",\n        \"updated_at\": \"2023-01-01T06:50:52.552Z\",\n        \"address\": {\n            \"line1\": \"Adress-line-1\",\n            \"line2\": null,\n            \"line3\": null,\n            \"zip\": \"12345\",\n            \"city\": \"City\",\n            \"country\": \"DE\"\n        }\n    }\n}"}],"_postman_id":"ac33b59b-2530-4f17-a749-4b7041bb181d"},{"name":"Create/Update customers","id":"d1d414d0-bf06-4114-99e4-e09458f973fc","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"customers\": [\n    {\n      \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n      \"number\": \"C-1\",\n      \"customer_no\": \"C-1\",\n      \"name\": \"Customer-1\",\n      \"label_ids\": [\n          \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n          \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"\n        ],\n      \"contact_ids\": [\n          \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n          \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"\n        ],\n      \"address\": {\n        \"line1\": \"Adress-line-1\",\n        \"line2\": null,\n        \"zip\": \"12345\",\n        \"city\": \"City\",\n        \"country\": \"DE\"\n      }\n    }\n  ]\n}","options":{"raw":{"language":"json"}}},"url":"https://api.foxtag.io/api/v1/public/customers","description":"<h3 id=\"description\">Description</h3>\n<p>This endpoint allows creating or updating multiple customers in a single request (upsert behavior) by providing a list of customer objects.</p>\n<p>To create a new customer, omit the <code>id</code> field. To update an existing customer, include an <code>id</code> for each record.</p>\n<p>A maximum of 100 records can be processed per request. Requests exceeding this limit will result in a 422 error.</p>\n<h3 id=\"request\">Request</h3>\n<ul>\n<li><p>Method: <code>POST</code></p>\n</li>\n<li><p>URL: <code>http://api.foxtag.io/api/v1/public/customers</code></p>\n</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<ul>\n<li>Content-Type: <code>application/json</code></li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"db338f38-6a0c-427f-b977-be5732ef6f84","id":"db338f38-6a0c-427f-b977-be5732ef6f84","name":"Foxtag.io Public Api","type":"collection"}},"urlObject":{"protocol":"https","path":["api","v1","public","customers"],"host":["api","foxtag","io"],"query":[],"variable":[]}},"response":[{"id":"4a6ea185-9237-4d1a-ab79-bd3b21dedca3","name":"Create/Update customers","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"customers\": [\n    {\n      \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n      \"number\": \"C-1\",\n      \"customer_no\": \"C-1\",\n      \"name\": \"Customer-1\",\n      \"label_ids\": [\n          \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n          \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"\n        ],\n      \"contact_ids\": [\n          \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n          \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"\n        ],\n      \"address\": {\n        \"line1\": \"Adress-line-1\",\n        \"line2\": null,\n        \"line3\": null,\n        \"zip\": \"12345\",\n        \"city\": \"City\",\n        \"country\": \"DE\"\n      }\n    }\n  ]\n}\n","options":{"raw":{"language":"json"}}},"url":"https://api.foxtag.io/api/v1/public/customers"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n  \"status\": \"success\",\n  \"errors_count\": 0,\n  \"results\": [\n    {\n      \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n      \"success\": true,\n      \"message\": null\n    }\n  ]\n}\n"}],"_postman_id":"d1d414d0-bf06-4114-99e4-e09458f973fc"},{"name":"Delete customer","id":"578f17f7-8d70-479a-8c06-ba31f7f929ca","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"https://api.foxtag.io/api/v1/public/customers/:customer_id","description":"<h3 id=\"description\">Description</h3>\n<p>This endpoint deletes a customer record identified by its unique ID (UUID)</p>\n<h3 id=\"request\">Request</h3>\n<ul>\n<li><p>Method: <code>DELETE</code></p>\n</li>\n<li><p>URL: <code>http://api.foxtag.io/api/v1/public/customers/:customer_id</code></p>\n</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<ul>\n<li>Content-Type: <code>application/json</code></li>\n</ul>\n<p>Response body example:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"message\": \"deleted\"\n}\n\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"db338f38-6a0c-427f-b977-be5732ef6f84","id":"db338f38-6a0c-427f-b977-be5732ef6f84","name":"Foxtag.io Public Api","type":"collection"}},"urlObject":{"protocol":"https","path":["api","v1","public","customers",":customer_id"],"host":["api","foxtag","io"],"query":[],"variable":[{"description":{"content":"<p>records uuid</p>\n","type":"text/plain"},"type":"any","value":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx","key":"customer_id"}]}},"response":[{"id":"92ce991d-8cd4-4642-adf2-857b09e2cdd3","name":"Delete customer","originalRequest":{"method":"DELETE","header":[],"url":{"raw":"https://api.foxtag.io/api/v1/public/customers/:customer_id","protocol":"https","host":["api","foxtag","io"],"path":["api","v1","public","customers",":customer_id"],"variable":[{"key":"customer_id","value":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"message\": \"deleted\"\n}"}],"_postman_id":"578f17f7-8d70-479a-8c06-ba31f7f929ca"}],"id":"483eda74-521b-4741-b885-df48a821bcb1","_postman_id":"483eda74-521b-4741-b885-df48a821bcb1","description":"","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"db338f38-6a0c-427f-b977-be5732ef6f84","id":"db338f38-6a0c-427f-b977-be5732ef6f84","name":"Foxtag.io Public Api","type":"collection"}}},{"name":"Installation Types","item":[{"name":"List installation types","id":"fb8d5f09-81d2-407b-8239-8cb5c9e575d1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://api.foxtag.io/api/v1/public/installation_types","description":"<h3 id=\"description\">Description</h3>\n<p>This request retrieves all available installation type records, with pagination applied if there are more than 500 installation type records available.</p>\n<p>The response contains an array of installation type records along with metadata for the current page, total pages, and total record count. An optional \"page\" argument in the request body specifies the page of records to retrieve. For instance, \"page\": 1 returns records 1–500, \"page\": 2 returns records 501–1000, and so forth. If the page argument is omitted, it defaults to 1.</p>\n<p>Each installation type’s information contains the data of the associated job type records, provided as a nested array within the installation type´s details.</p>\n<h3 id=\"request\">Request</h3>\n<ul>\n<li><p>Method: <code>GET</code></p>\n</li>\n<li><p>URL: <code>http://api.foxtag.io/api/v1/public/installation_types</code></p>\n</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<ul>\n<li><p>Content-Type: <code>application/json</code></p>\n</li>\n<li><p>Retrieved data of a single record:</p>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", // string &lt;uuid&gt;\n  \"number\": \"IT-1\", // string or null\n  \"name\": \"Installation Type 1\", // string\n  \"job_types\": [\n    {\n      \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", // string &lt;uuid&gt;\n      \"number\": \"JT-1.1\", // string or null\n      \"name\": \"Wartungstermin\" // string\n    },\n    {\n      \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", // string &lt;uuid&gt;\n      \"number\": \"JT-1.2\", // string or null\n      \"name\": \"Installationstermin\" // string\n    }\n  ],\n  \"updated_at\": \"2023-01-01T06:50:52.552Z\" // string &lt;date-time&gt;\n}\n\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"db338f38-6a0c-427f-b977-be5732ef6f84","id":"db338f38-6a0c-427f-b977-be5732ef6f84","name":"Foxtag.io Public Api","type":"collection"}},"urlObject":{"protocol":"https","path":["api","v1","public","installation_types"],"host":["api","foxtag","io"],"query":[{"disabled":true,"description":{"content":"<p>Defaults to \"1\" if ommited</p>\n","type":"text/plain"},"key":"page","value":"Integer"}],"variable":[]}},"response":[{"id":"fbea9acd-2f6e-4ea5-b9ed-b9f0a5f3d27a","name":"List installation types","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://api.foxtag.io/api/v1/public/installation_types?page=1","protocol":"https","host":["api","foxtag","io"],"path":["api","v1","public","installation_types"],"query":[{"key":"page","value":"1"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n  \"installation_types\": [\n    {\n      \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n      \"number\": \"IT-1\",\n      \"name\": \"Installation Type 1\",\n      \"job_types\": [\n        {\n          \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n          \"number\": \"JT-1.1\",\n          \"name\": \"Wartungstermin\"\n        },\n        {\n          \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n          \"number\": \"JT-1.2\",\n          \"name\": \"Installationstermin\"\n        }\n      ],\n      \"updated_at\": \"2023-01-01T06:50:52.552Z\"\n    }\n  ],\n  \"meta\": {\n    \"current_page\": 1,\n    \"total_pages\": 1,\n    \"total_count\": 1\n  }\n}"}],"_postman_id":"fb8d5f09-81d2-407b-8239-8cb5c9e575d1"},{"name":"Show installation type","id":"17e191bf-c75f-41b7-a77f-5661eb6915ba","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://api.foxtag.io/api/v1/public/installation_types/:Installation_type_id_or_number","description":"<h3 id=\"description\">Description</h3>\n<p>This endpoint retrieves details for a specific installation type, using either its unique ID (UUID) or installation type number as an identifier.</p>\n<p>The installation type number is optional and can be assigned through the web administration frontend.</p>\n<p>The response also includes related job type data, provided as a nested array within the installation type´s information.</p>\n<h3 id=\"request\">Request</h3>\n<ul>\n<li><p>Method: <code>GET</code></p>\n</li>\n<li><p>URL: <code>http://api.foxtag.io/api/v1/public/installation_types/:installation_type_id_or_number</code></p>\n</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<ul>\n<li><p>Content-Type: <code>application/json</code></p>\n</li>\n<li><p>Retrieved data of the record:</p>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"installation_type\": {\n    \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", // string &lt;uuid&gt;\n    \"number\": \"IT-1\", // string or null\n    \"name\": \"Installation Type 1\", // string\n    \"job_types\": [\n      {\n        \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", // string &lt;uuid&gt;\n        \"number\": \"JT-1.1\", // string or null\n        \"name\": \"Wartungstermin\" // string\n      },\n      {\n        \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", // string &lt;uuid&gt;\n        \"number\": \"JT-1.2\", // string or null\n        \"name\": \"Installationstermin\" // string\n      }\n    ],\n    \"updated_at\": \"2023-01-01T06:50:52.552Z\" // string &lt;date-time&gt;\n  }\n}\n\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"db338f38-6a0c-427f-b977-be5732ef6f84","id":"db338f38-6a0c-427f-b977-be5732ef6f84","name":"Foxtag.io Public Api","type":"collection"}},"urlObject":{"protocol":"https","path":["api","v1","public","installation_types",":Installation_type_id_or_number"],"host":["api","foxtag","io"],"query":[],"variable":[{"description":{"content":"<p>records uuid | records number</p>\n","type":"text/plain"},"type":"any","value":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | IT-1","key":"Installation_type_id_or_number"}]}},"response":[{"id":"81c693b0-476a-4303-8118-c9297b993b0a","name":"Show installation type","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://api.foxtag.io/api/v1/public/installation_types/:Installation_type_id_or_number","protocol":"https","host":["api","foxtag","io"],"path":["api","v1","public","installation_types",":Installation_type_id_or_number"],"variable":[{"key":"Installation_type_id_or_number","value":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"}]}},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n  \"installation_type\": {\n    \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n    \"number\": \"IT-1\",\n    \"name\": \"Installation Type 1\",\n    \"job_types\": [\n      {\n        \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n        \"number\": \"JT-1.1\",\n        \"name\": \"Wartungstermin\"\n      },\n      {\n        \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n        \"number\": \"JT-1.2\",\n        \"name\": \"Installationstermin\"\n      }\n    ],\n    \"updated_at\": \"2023-01-01T06:50:52.552Z\"\n  }\n}"}],"_postman_id":"17e191bf-c75f-41b7-a77f-5661eb6915ba"}],"id":"3330f3cc-3e4e-40db-a29e-1dde601d99c9","_postman_id":"3330f3cc-3e4e-40db-a29e-1dde601d99c9","description":"","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"db338f38-6a0c-427f-b977-be5732ef6f84","id":"db338f38-6a0c-427f-b977-be5732ef6f84","name":"Foxtag.io Public Api","type":"collection"}}},{"name":"Installations","item":[{"name":"List installations","id":"8cc6fb2c-6ab1-42c8-91f2-f46cf60e1a37","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":"https://api.foxtag.io/api/v1/public/installations","description":"<h3 id=\"description\">Description</h3>\n<p>This endpoint retrieves a list of installation records, paginated if more than 500 records are available.</p>\n<p>The response contains an array of installation records along with metadata for the current page, total pages, and total record count.</p>\n<p>An optional \"page\" argument in the request body specifies the page of records to retrieve. For instance, \"page\": 1 returns records 1–500, \"page\": 2 returns records 501–1000, and so forth. If the page argument is omitted, it defaults to 1.</p>\n<h3 id=\"request\">Request</h3>\n<ul>\n<li><p>Method: <code>GET</code></p>\n</li>\n<li><p>URL: <code>http://api.foxtag.io/api/v1/public/installations/</code></p>\n</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<ul>\n<li><p>Content-Type: <code>application/json</code></p>\n</li>\n<li><p>Retrieved data for a single record:</p>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", // string &lt;uuid&gt;\n  \"number\": \"I-1\", // string\n  \"name\": \"Installation 1\", // string\n  \"location_id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", // string &lt;uuid&gt;\n  \"installation_type_id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", // string &lt;uuid&gt;\n  \"installation_type_name\": \"Installation Type 1\", // string\n  \"updated_at\": \"2023-01-01T06:50:52.552Z\", // string &lt;date-time&gt;\n  \"passive\": \"true\" // string &lt;boolean&gt;\n  \"labels\": [\n    {\n      \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", // string &lt;uuid&gt;\n      \"name\": \"Label-1\" // string\n    },\n    {\n      \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", // string &lt;uuid&gt;\n      \"name\": \"Label-2\" // string\n    }\n  ]\n}\n\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"db338f38-6a0c-427f-b977-be5732ef6f84","id":"db338f38-6a0c-427f-b977-be5732ef6f84","name":"Foxtag.io Public Api","type":"collection"}},"urlObject":{"protocol":"https","path":["api","v1","public","installations"],"host":["api","foxtag","io"],"query":[{"disabled":true,"description":{"content":"<p>Defaults to \"1\" if ommited</p>\n","type":"text/plain"},"key":"page","value":"Integer"}],"variable":[]}},"response":[{"id":"70377a18-0e16-467d-b555-e5088798d859","name":"List installations","originalRequest":{"method":"GET","header":[],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":{"raw":"https://api.foxtag.io/api/v1/public/installations?page=1","protocol":"https","host":["api","foxtag","io"],"path":["api","v1","public","installations"],"query":[{"key":"page","value":"1"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"installations\": [\n        {\n            \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n            \"number\": \"I-1\",\n            \"name\": \"Installation-1\",\n            \"location_id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n            \"installation_type_id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n            \"installation_type_name\": \"Installation Type 1\",\n            \"updated_at\": \"2023-01-01T06:50:52.552Z\",\n            \"passive\": \"true\",\n            \"labels\": [\n                {\n                    \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n                    \"name\": \"Label-1\"\n                },\n                {\n                    \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n                    \"name\": \"Label-2\"\n                }\n            ]\n        }\n    ],\n    \"meta\": {\n        \"current_page\": 1,\n        \"total_pages\": 1,\n        \"total_count\": 1\n    }\n}"}],"_postman_id":"8cc6fb2c-6ab1-42c8-91f2-f46cf60e1a37"},{"name":"Show installation","id":"3e8c1b27-8a67-4b79-830c-9bbcc25cb9df","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":"https://api.foxtag.io/api/v1/public/installations/:installation_id_or_number","description":"<h3 id=\"description\">Description</h3>\n<p>This endpoint retrieves details for a specific installation, using either its unique ID (UUID) or installation number as an identifier.</p>\n<p>The installation number is optional and can be assigned through the web management frontend or the public API endpoint (refer to: <a href=\"https://foxtag.postman.co/workspace/64af8236-6f93-4154-8228-2534da0ecd07/request/28130234-1cf9a0df-2639-4510-9136-74478f9ef714?action=share&amp;source=copy-link&amp;creator=28130234&amp;ctx=documentation\">Create/Update installation</a>).</p>\n<p>The response also includes the related labels data, provided as a nested array of hashes within the installation information.</p>\n<h3 id=\"request\">Request</h3>\n<ul>\n<li><p>Method: <code>GET</code></p>\n</li>\n<li><p>URL: <code>http://api.foxtag.io/api/v1/public/installations/:locations_id_or_number</code></p>\n</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<ul>\n<li><p>Content-Type: <code>application/json</code></p>\n</li>\n<li><p>Retrieved data of a single record:</p>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", // string &lt;uuid&gt;\n  \"number\": \"I-1\", // string\n  \"name\": \"Installation 1\", // string\n  \"location_id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", // string &lt;uuid&gt;\n  \"installation_type_id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", // string &lt;uuid&gt;\n  \"installation_type_name\": \"Installation Type 1\", // string\n  \"updated_at\": \"2023-01-01T06:50:52.552Z\", // string &lt;date-time&gt;\n  \"passive\": \"true\", // string &lt;boolean&gt;\n  \"labels\": [\n    {\n      \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", // string &lt;uuid&gt;\n      \"name\": \"Label-1\" // string\n    },\n    {\n      \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", // string &lt;uuid&gt;\n      \"name\": \"Label-2\" // string\n    }\n  ]\n}\n\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"db338f38-6a0c-427f-b977-be5732ef6f84","id":"db338f38-6a0c-427f-b977-be5732ef6f84","name":"Foxtag.io Public Api","type":"collection"}},"urlObject":{"protocol":"https","path":["api","v1","public","installations",":installation_id_or_number"],"host":["api","foxtag","io"],"query":[],"variable":[{"description":{"content":"<p>records uuid | records number</p>\n","type":"text/plain"},"type":"any","value":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | I-1","key":"installation_id_or_number"}]}},"response":[{"id":"db01996f-8c31-4199-a23b-6e29e7782f44","name":"Show installation","originalRequest":{"method":"GET","header":[],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":{"raw":"https://api.foxtag.io/api/v1/public/installations/:installation_id_or_number","protocol":"https","host":["api","foxtag","io"],"path":["api","v1","public","installations",":installation_id_or_number"],"variable":[{"key":"installation_id_or_number","value":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"installation\": { \n        \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n        \"number\": \"I-1\",\n        \"name\": \"Installation 1\",\n        \"location_id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n        \"installation_type_id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n        \"installation_type_name\": \"Installation Type 1\",\n        \"updated_at\": \"2023-01-01T06:50:52.552Z\",\n        \"passive\": \"true\",\n        \"labels\": [\n            {\n                \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n                \"name\": \"Label-1\"\n            },\n            {\n                \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n                \"name\": \"Label-2\"\n            }\n        ]\n    }\n}\n"}],"_postman_id":"3e8c1b27-8a67-4b79-830c-9bbcc25cb9df"},{"name":"Create/Update installations","id":"1cf9a0df-2639-4510-9136-74478f9ef714","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"installations\": [\n    {\n      \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n      \"number\": \"I-1\", \n      \"name\": \"Installation 1\",\n      \"location_id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n      \"installation_type_id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n      \"label_ids\": [\n        \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n        \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"\n      ],\n      \"contact_ids\": [\n        \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n        \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"\n      ],\n      \"report_recipient_ids\": [\n        \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n        \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"\n      ]\n    }\n  ]\n}\n","options":{"raw":{"language":"json"}}},"url":"https://api.foxtag.io/api/v1/public/installations","description":"<h3 id=\"description\">Description</h3>\n<p>This endpoint allows creating or updating multiple installations in a single request (upsert behavior) by submitting a list of installation objects.</p>\n<p>To create new installations, omit the <code>id</code> attribute. To update an existing installation, include the <code>id</code> for each record.</p>\n<p>A maximum of 100 records can be processed per request. Requests exceeding this limit will result in a 422 error.</p>\n<h3 id=\"request\">Request</h3>\n<ul>\n<li><p>Method: <code>POST</code></p>\n</li>\n<li><p>URL: <code>http://api.foxtag.io/api/v1/public/installations</code></p>\n</li>\n</ul>\n<p>Request body example:</p>\n<h3 id=\"response\">Response</h3>\n<ul>\n<li>Content-Type: <code>application/json</code></li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"db338f38-6a0c-427f-b977-be5732ef6f84","id":"db338f38-6a0c-427f-b977-be5732ef6f84","name":"Foxtag.io Public Api","type":"collection"}},"urlObject":{"protocol":"https","path":["api","v1","public","installations"],"host":["api","foxtag","io"],"query":[],"variable":[]}},"response":[{"id":"018aa9e3-e703-4051-9109-2d5735e33009","name":"Create/Update installations","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"installations\": [\n    {\n      \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n      \"number\": \"I-1\", \n      \"name\": \"Installation 1\",\n      \"location_id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n      \"installation_type_id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n      \"label_ids\": [\n        \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n        \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"\n      ],\n      \"contact_ids\": [\n        \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n        \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"\n      ],\n      \"report_recipient_ids\": [\n        \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n        \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"\n      ]\n    }\n  ]\n}\n","options":{"raw":{"language":"json"}}},"url":"https://api.foxtag.io/api/v1/public/installations"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n  \"status\": \"success\",\n  \"errors_count\": 0,\n  \"results\": [\n    {\n      \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n      \"success\": true,\n      \"message\": null \n    }\n  ]\n}\n"}],"_postman_id":"1cf9a0df-2639-4510-9136-74478f9ef714"},{"name":"Delete installation","id":"91786092-be90-4c0c-937c-0b831d4a86c5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"https://api.foxtag.io/api/v1/public/installations/:installation_id","description":"<h3 id=\"description\">Description</h3>\n<p>This endpoint deletes a installation record identified by its unique installation ID (UUID)</p>\n<p>Note that the installation is scheduled for deletion. It may take a while until the installation and all contents are deleted.</p>\n<h3 id=\"request\">Request</h3>\n<ul>\n<li><p>Method: <code>DELETE</code></p>\n</li>\n<li><p>URL: <code>http://api.foxtag.io/api/v1/public/installations/:installation_id</code></p>\n</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<ul>\n<li>Content-Type: <code>application/json</code></li>\n</ul>\n<p>Response body example:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"message\": \"scheduled for deletion\"\n}\n\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"db338f38-6a0c-427f-b977-be5732ef6f84","id":"db338f38-6a0c-427f-b977-be5732ef6f84","name":"Foxtag.io Public Api","type":"collection"}},"urlObject":{"protocol":"https","path":["api","v1","public","installations",":installation_id"],"host":["api","foxtag","io"],"query":[],"variable":[{"description":{"content":"<p>record uuid</p>\n","type":"text/plain"},"type":"any","value":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx","key":"installation_id"}]}},"response":[{"id":"8f5cb00b-0159-48d1-85fd-0f645f77cbe6","name":"Delete installation","originalRequest":{"method":"DELETE","header":[],"url":{"raw":"https://api.foxtag.io/api/v1/public/installations/:installation_id","protocol":"https","host":["api","foxtag","io"],"path":["api","v1","public","installations",":installation_id"],"variable":[{"key":"installation_id","value":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx","description":"records id"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"message\": \"scheduled for deletion\"\n}"}],"_postman_id":"91786092-be90-4c0c-937c-0b831d4a86c5"}],"id":"4c1b0a37-4eed-44ed-8c8c-890b3820e715","_postman_id":"4c1b0a37-4eed-44ed-8c8c-890b3820e715","description":"","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"db338f38-6a0c-427f-b977-be5732ef6f84","id":"db338f38-6a0c-427f-b977-be5732ef6f84","name":"Foxtag.io Public Api","type":"collection"}}},{"name":"Job Types","item":[{"name":"List job types","id":"c41af2d2-1dc5-42e7-abf6-8269fcfe52d4","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://api.foxtag.io/api/v1/public/job_types","description":"<h3 id=\"description\">Description</h3>\n<p>This endpoint retrieves a list of job type records, with pagination if there are more than 500 records available.</p>\n<p>Optionally, the list of job type records can be filtered by their related installation type by including the <code>installation_type_number</code> argument in the request body.</p>\n<p>The response includes an array of job type objects, along with metadata for the current page, total pages, and total record count. An optional \"page\" argument in the request body specifies the page of records to retrieve. For instance, \"page\": 1 returns records 1–500, \"page\": 2 returns records 501–1000, and so forth. If the page argument is omitted, it defaults to 1.</p>\n<h3 id=\"request\">Request</h3>\n<ul>\n<li><p>Method: <code>GET</code></p>\n</li>\n<li><p>URL: <code>http://api.foxtag.io/api/v1/public/job_types/</code></p>\n</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<ul>\n<li><p>Content-Type: <code>application/json</code></p>\n</li>\n<li><p>Retrieved data for a single record:</p>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", // string &lt;uuid&gt;\n  \"number\": \"JT-1\", // string\n  \"name\": \"JobType1\", // string\n  \"active\": true, // boolean\n  \"updated_at\": \"2023-01-01T06:50:52.552Z\", // string &lt;Date-Time&gt;\n  \"installation_type\": {\n    \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", // string &lt;uuid&gt;\n    \"number\": \"IT-1\", // string\n    \"name\": \"InstallationType1\" // string\n  }\n}\n\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"db338f38-6a0c-427f-b977-be5732ef6f84","id":"db338f38-6a0c-427f-b977-be5732ef6f84","name":"Foxtag.io Public Api","type":"collection"}},"urlObject":{"protocol":"https","path":["api","v1","public","job_types"],"host":["api","foxtag","io"],"query":[{"disabled":true,"description":{"content":"<p>installation type number</p>\n","type":"text/plain"},"key":"installation_type_number","value":"IT-1"},{"disabled":true,"description":{"content":"<p>Defaults to \"1\" if ommited</p>\n","type":"text/plain"},"key":"page","value":"Integer"}],"variable":[]}},"response":[{"id":"ef1d3616-03c1-4285-a68c-d623c187bb3c","name":"List job types","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://api.foxtag.io/api/v1/public/job_types?installation_type_number=I-1&page=1","protocol":"https","host":["api","foxtag","io"],"path":["api","v1","public","job_types"],"query":[{"key":"installation_type_number","value":"I-1"},{"key":"page","value":"1"}]}},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"job_types\": [\n        {\n            \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n            \"number\": \"JT-1\",\n            \"name\": \"JobType1\",\n            \"active\": true,\n            \"updated_at\": \"2023-01-01T06:50:52.552Z\",\n            \"installation_type\": {\n                \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n                \"number\": \"IT-1\",\n                \"name\": \"InstallationType1\"\n            }\n        }\n    ],\n    \"meta\": {\n        \"current_page\": 1,\n        \"total_pages\": 1,\n        \"total_count\": 1\n    }\n}"}],"_postman_id":"c41af2d2-1dc5-42e7-abf6-8269fcfe52d4"}],"id":"499e9dc5-9a3d-4803-92ca-b2bddcd04ebe","_postman_id":"499e9dc5-9a3d-4803-92ca-b2bddcd04ebe","description":"","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"db338f38-6a0c-427f-b977-be5732ef6f84","id":"db338f38-6a0c-427f-b977-be5732ef6f84","name":"Foxtag.io Public Api","type":"collection"}}},{"name":"Jobs","item":[{"name":"List jobs","id":"5082575a-b2ed-4481-bc4e-1dc76f0cbfe6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://api.foxtag.io/api/v1/public/jobs","description":"<h1 id=\"list-jobs\">List Jobs</h1>\n<p>This endpoint retrieves a list of job records, with pagination if there are more than 500 records available.</p>\n<p>The response body consists of an array of job records, along with metadata for the current page, total pages, and total record count. The response does not contain deailed information to the job records. For more specific data retrieve a single job using its UUID or job number</p>\n<p>An optional \"page\" argument in the request body specifies the page of records to retrieve. For instance, \"page\": 1 returns records 1–500, \"page\": 2 returns records 501–1000, and so forth. If the page argument is omitted, it defaults to 1.</p>\n<h2 id=\"request\">Request</h2>\n<ul>\n<li><p>Method: <code>GET</code></p>\n</li>\n<li><p>URL: <code>http://api.foxtag.io/api/v1/public/jobs/</code></p>\n</li>\n</ul>\n<h2 id=\"response\">Response</h2>\n<ul>\n<li><p>Content-Type: application/json</p>\n</li>\n<li><p>Retrieved data for a single record:</p>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", // string &lt;uuid&gt;\n  \"number\": \"J-1\", // string\n  \"status\": \"planned\", // string\n  \"startdate\": \"2023-02-01T06:50:52.552Z\", // string &lt;date-time&gt;\n  \"job_type_id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", // string &lt;uuid&gt;\n  \"installation_id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", // string &lt;uuid&gt;\n  \"updated_at\": \"2023-01-01T06:50:52.552Z\" // string &lt;date-time&gt;\n}\n\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"db338f38-6a0c-427f-b977-be5732ef6f84","id":"db338f38-6a0c-427f-b977-be5732ef6f84","name":"Foxtag.io Public Api","type":"collection"}},"urlObject":{"protocol":"https","path":["api","v1","public","jobs"],"host":["api","foxtag","io"],"query":[{"disabled":true,"description":{"content":"<p>only retrieve jobs with given status</p>\n","type":"text/plain"},"key":"status","value":"unplanned | planned | cancelled | closed | active | invoiced"},{"disabled":true,"description":{"content":"<p>only retrieve jobs that have been updated on and after provided date</p>\n","type":"text/plain"},"key":"updated_after","value":"YYYY-MM-DD"},{"disabled":true,"description":{"content":"<p>Defaults to \"1\" if ommited</p>\n","type":"text/plain"},"key":"page","value":"Integer"}],"variable":[]}},"response":[{"id":"d9607ac2-4ac1-41bc-9f89-bbdbfe8d8ac1","name":"List jobs","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://api.foxtag.io/api/v1/public/jobs?status=unplanned&updated_after=2025-02-28&page=1","protocol":"https","host":["api","foxtag","io"],"path":["api","v1","public","jobs"],"query":[{"key":"status","value":"unplanned"},{"key":"updated_after","value":"2025-02-28"},{"key":"page","value":"1"}]}},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"jobs\": [\n        {\n            \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n            \"number\": \"J-1\",\n            \"status\": \"planned\",\n            \"startdate\": \"2023-02-01T06:50:52.552Z\",\n            \"job_type_id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n            \"installation_id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n            \"updated_at\": \"2023-01-01T06:50:52.552Z\"\n        }\n    ],\n    \"meta\": {\n        \"current_page\": 1,\n        \"total_pages\": 1,\n        \"total_count\": 1\n    }\n}"}],"_postman_id":"5082575a-b2ed-4481-bc4e-1dc76f0cbfe6"},{"name":"Show job","id":"19a04cc4-3ac4-41e9-9044-adf194a6b7f7","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://api.foxtag.io/api/v1/public/jobs/:job_id_or_number","description":"<h3 id=\"description\">Description</h3>\n<p>This endpoint retrieves information for a specific job identified by its unique ID or job number. The response body includes information of the job and its asocciated records such as job type, installation, assigned user, job articles, and job attachments.</p>\n<h3 id=\"request\">Request</h3>\n<ul>\n<li><p>Method: <code>GET</code></p>\n</li>\n<li><p>URL: <code>http://api.foxtag.io/api/v1/public/jobs/:job_id_or_number</code></p>\n</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<ul>\n<li><p>Content-Type: <code>application/json</code></p>\n</li>\n<li><p>Retrieved data for the record:</p>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", // string &lt;uuid&gt;\n  \"number\": \"J-1\", // string\n  \"status\": \"planned\", // string\n  \"startdate\": \"2023-01-01T06:50:52.552Z\", // string &lt;date-time&gt;\n  \"enddate\": \"2023-01-01T06:50:52.552Z\", // string &lt;date-time&gt;\n  \"all_day\": true, // boolean\n  \"instructions\": \"Job Instructions\", // string\n  \"job_type\": {\n    \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", // string &lt;uuid&gt;\n    \"number\": \"JT-1\", // string\n    \"name\": \"JobType1\" // string\n  },\n  \"installation\": {\n    \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", // string &lt;uuid&gt;\n    \"number\": \"I-1\" // string\n  },\n  \"assigned_users\": [\n    {\n      \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", // string &lt;uuid&gt;\n      \"number\": \"U-1\", // string\n      \"name\": \"User1\" // string\n    }\n  ],\n  \"job_articles\": [\n    {\n      \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", // string &lt;uuid&gt;\n      \"quantity\": 1, // integer\n      \"comment\": \"Job Article comment\", // string\n      \"article\": {\n        \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", // string &lt;uuid&gt;\n        \"number\": \"Art-1\", // string\n        \"name\": \"Article-1\", // string\n        \"group\": \"Group-1\" // string\n      }\n    }\n  ],\n  \"job_attachments\": [\n    {\n      \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", // string &lt;uuid&gt;\n      \"type\": \"report\", // string\n      \"file_name\": \"Job report\", // string\n      \"expiring_url\": \"http://example.com\" // string\n    }\n  ],\n  \"updated_at\": \"2023-01-01T06:50:52.552Z\" // string &lt;date-time&gt;\n}\n\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"db338f38-6a0c-427f-b977-be5732ef6f84","id":"db338f38-6a0c-427f-b977-be5732ef6f84","name":"Foxtag.io Public Api","type":"collection"}},"urlObject":{"protocol":"https","path":["api","v1","public","jobs",":job_id_or_number"],"host":["api","foxtag","io"],"query":[],"variable":[{"description":{"content":"<p>records uuid | records number</p>\n","type":"text/plain"},"type":"any","value":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | J-1","key":"job_id_or_number"}]}},"response":[{"id":"dfb32926-c1fc-4cbc-8170-8f1c1becef18","name":"Show job","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://api.foxtag.io/api/v1/public/jobs/:job_id_or_number","protocol":"https","host":["api","foxtag","io"],"path":["api","v1","public","jobs",":job_id_or_number"],"variable":[{"key":"job_id_or_number","value":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | J-1","description":"records uuid | records number"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n  \"job\": {\n    \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", \n    \"number\": \"J-1\", \n    \"status\": \"planned\",\n    \"startdate\": \"2023-01-01T06:50:52.552Z\", \n    \"enddate\": \"2023-01-01T06:50:52.552Z\", \n    \"all_day\": true, \n    \"instructions\": \"Job Instructions\",\n    \"job_type\": {\n      \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", \n      \"number\": \"JT-1\", \n      \"name\": \"JobType1\" \n    },\n    \"installation\": {\n      \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", \n      \"number\": \"I-1\" \n    },\n    \"assigned_users\": [\n      {\n        \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", \n        \"number\": \"U-1\",\n        \"name\": \"User1\" \n      }\n    ],\n    \"job_articles\": [\n      {\n        \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n        \"quantity\": 1, \n        \"comment\": \"Job Article comment\", \n        \"article\": {\n          \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", \n          \"number\": \"Art-1\",\n          \"name\": \"Article-1\",\n          \"unit\": \"Stk.\",\n          \"group\": \"Group-1\" \n        }\n      }\n    ],\n    \"job_attachments\": [\n      {\n        \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", \n        \"type\": \"report\",\n        \"file_name\": \"Job report\",\n        \"expiring_url\": \"http://example.com\"\n      }\n    ],\n    \"updated_at\": \"2023-01-01T06:50:52.552Z\"\n  }\n}"}],"_postman_id":"19a04cc4-3ac4-41e9-9044-adf194a6b7f7"},{"name":"Create job","id":"de24af67-774e-46f9-93d3-f7754fa9bc25","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"jobs\": [\n    {\n      \"number\": \"Job-1\",\n      \"installation_number\": \"I-1\", \n      \"startdate\": \"2023-01-01T06:50:52.552Z\",\n      \"enddate\": \"2023-01-01T06:50:52.552Z\",\n      \"all_day\": true,\n      \"job_type_number\": \"JT-1\",\n      \"assigned_user_numbers\": [\n        \"Tech-1\",\n        \"Tech-2\"\n      ],\n      \"label_ids\": [\n        \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n        \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"\n      ], \n      \"announcement_contact_ids\": [\n        \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n        \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"\n      ]\n    }\n  ]\n}\n","options":{"raw":{"language":"json"}}},"url":"https://api.foxtag.io/api/v1/public/jobs","description":"<h3 id=\"description\">Description</h3>\n<p>This endpoint creates multiple jobs in a single call by submitting a list of job data.<br />Note that this endpoint does not support update behavior.</p>\n<p>The following fields can be set through the API:<br /><code>number</code>, <code>installation_number</code>, <code>startdate</code>, <code>enddate</code>, <code>all_day</code>, <code>job_type_number</code> and <code>assigned_user_numbers</code></p>\n<p>The status of the created jobs will always be <code>planned</code>, and the jobs will be synced to the smartphones of the technicians, as specified by the <code>assigned_user_number</code> data.</p>\n<h3 id=\"request\">Request</h3>\n<ul>\n<li><p>Method: <code>POST</code></p>\n</li>\n<li><p>URL: <code>http://api.foxtag.io/api/v1/public/jobs</code></p>\n</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<ul>\n<li>Content-Type: <code>application/json</code></li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"db338f38-6a0c-427f-b977-be5732ef6f84","id":"db338f38-6a0c-427f-b977-be5732ef6f84","name":"Foxtag.io Public Api","type":"collection"}},"urlObject":{"protocol":"https","path":["api","v1","public","jobs"],"host":["api","foxtag","io"],"query":[],"variable":[]}},"response":[{"id":"a5e1a697-a8eb-479d-b57a-1f185f106c4f","name":"Create job","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"jobs\": [\n    {\n      \"number\": \"Job-1\",\n      \"installation_number\": \"I-1\", \n      \"startdate\": \"2023-01-01T06:50:52.552Z\",\n      \"enddate\": \"2023-01-01T06:50:52.552Z\",\n      \"all_day\": true,\n      \"job_type_number\": \"JT-1\",\n      \"assigned_user_numbers\": [\n        \"Tech-1\",\n        \"Tech-2\"\n      ],\n      \"label_ids\": [\n        \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n        \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"\n      ], \n      \"announcement_contact_ids\": [\n        \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n        \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"\n      ]\n    }\n  ]\n}\n","options":{"raw":{"language":"json"}}},"url":"https://api.foxtag.io/api/v1/public/jobs"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n  \"status\": \"success\",\n  \"errors_count\": 0,\n  \"results\": [\n    {\n      \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n      \"success\": true,\n      \"message\": null\n    }\n  ]\n}\n"}],"_postman_id":"de24af67-774e-46f9-93d3-f7754fa9bc25"}],"id":"152ade1d-5085-4cd6-9428-bed231ebd3ea","_postman_id":"152ade1d-5085-4cd6-9428-bed231ebd3ea","description":"","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"db338f38-6a0c-427f-b977-be5732ef6f84","id":"db338f38-6a0c-427f-b977-be5732ef6f84","name":"Foxtag.io Public Api","type":"collection"}}},{"name":"Labels","item":[{"name":"List labels","id":"977b04ff-076a-4c94-9979-3725fb1dbaca","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://api.foxtag.io/api/v1/public/labels","description":"<h3 id=\"description\">Description</h3>\n<p>This request retrieves all available labels paginated in batches of 500 records per page.</p>\n<p>The response contains an array of label records along with metadata for the current page, total pages, and total record count.</p>\n<p>An optional <code>page</code> argument in the request body specifies the page of records to retrieve. For instance, \"page\": 1 returns records 1–500, \"page\": 2 returns records 501–1000, and so forth. If the page argument is omitted, it defaults to 1.</p>\n<h2 id=\"request\">Request</h2>\n<ul>\n<li><p>Method: <code>GET</code></p>\n</li>\n<li><p>URL: <code>http://api.foxtag.io/api/v1/public/labels/</code></p>\n</li>\n</ul>\n<h2 id=\"response\">Response</h2>\n<ul>\n<li><p>Content-Type: <code>application/json</code></p>\n</li>\n<li><p>Retrieved data for a single record:</p>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", // string &lt;uuid&gt;\n  \"name\": \"Label-1\", // string\n  \"description\": \"Label Description Text\", // string\n  \"bg_color\": \"#2c556e\", // string &lt;hex-color-code&gt;\n  \"text_color\": \"#ffffff\", // string &lt;hex-color-code&gt;\n  \"label_type\": \"installation\", // string\n  \"updated_at\": \"2023-01-01T06:50:52.552Z\" // string &lt;date-time&gt;\n}\n\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"db338f38-6a0c-427f-b977-be5732ef6f84","id":"db338f38-6a0c-427f-b977-be5732ef6f84","name":"Foxtag.io Public Api","type":"collection"}},"urlObject":{"protocol":"https","path":["api","v1","public","labels"],"host":["api","foxtag","io"],"query":[{"disabled":true,"description":{"content":"<p>Defaults to \"1\" if ommited</p>\n","type":"text/plain"},"key":"page","value":"Integer"}],"variable":[]}},"response":[{"id":"70428a67-0df3-4ac4-b44e-8df10e164ddd","name":"List labels","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://api.foxtag.io/api/v1/public/labels?page=1","protocol":"https","host":["api","foxtag","io"],"path":["api","v1","public","labels"],"query":[{"key":"page","value":"1","type":"text"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"labels\": [\n        {\n            \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n            \"name\": \"Label-1\",\n            \"description\": \"Label Description Text\",\n            \"bg_color\": \"#2c556e\",\n            \"text_color\": \"#ffffff\",\n            \"label_type\": \"installation\",\n            \"updated_at\": \"2023-01-01T06:50:52.552Z\"\n        }\n    ],\n    \"meta\": {\n        \"current_page\": 1,\n        \"total_pages\": 1,\n        \"total_count\": 1\n    }\n}"}],"_postman_id":"977b04ff-076a-4c94-9979-3725fb1dbaca"},{"name":"Delete label","id":"411133d2-e870-49fc-b20d-72b77829530e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"https://api.foxtag.io/api/v1/public/labels/:label_id","description":"<h3 id=\"description\">Description</h3>\n<p>This endpoint deletes a label record identified by its unique label ID (UUID)</p>\n<h2 id=\"request\">Request</h2>\n<ul>\n<li><p>Method: <code>DELETE</code></p>\n</li>\n<li><p>URL: <code>http://api.foxtag.io/api/v1/public/labels/:label_id</code></p>\n</li>\n</ul>\n<h2 id=\"response\">Response</h2>\n<ul>\n<li>Content-Type: <code>application/json</code></li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"db338f38-6a0c-427f-b977-be5732ef6f84","id":"db338f38-6a0c-427f-b977-be5732ef6f84","name":"Foxtag.io Public Api","type":"collection"}},"urlObject":{"protocol":"https","path":["api","v1","public","labels",":label_id"],"host":["api","foxtag","io"],"query":[],"variable":[{"description":{"content":"<p>records uuid</p>\n","type":"text/plain"},"type":"any","value":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx","key":"label_id"}]}},"response":[{"id":"a9c5a9a8-b22f-4e58-a8fe-3f64ebd577e6","name":"Delete label","originalRequest":{"method":"DELETE","header":[],"url":{"raw":"https://api.foxtag.io/api/v1/public/labels/:label_id","protocol":"https","host":["api","foxtag","io"],"path":["api","v1","public","labels",":label_id"],"variable":[{"key":"label_id","value":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"message\": \"deleted\"\n}"}],"_postman_id":"411133d2-e870-49fc-b20d-72b77829530e"},{"name":"Create/Update label","id":"1c2d18be-d6bf-460a-bdeb-759655ddbc0d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"labels\": [\n    {\n     \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n     \"name\": \"Label1\",\n     \"description\": \"installation label\",\n     \"bg_color\": \"#2c556e\",\n     \"text_color\": \"#ffffff\",\n     \"label_type\": \"installation\"\n    },\n    {\n     \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n     \"name\": \"Label2\",\n     \"description\": \"customer label\",\n     \"bg_color\": \"#2c556e\",\n     \"text_color\": \"#ffffff\",\n     \"label_type\": \"customer\"\n    }\n  ]\n}\n","options":{"raw":{"language":"json"}}},"url":"https://api.foxtag.io/api/v1/public/labels","description":"<h3 id=\"description\">Description</h3>\n<p>This endpoint allows creating or updating multiple labels in a single request (upsert behavior) by submitting a list of label objects.</p>\n<p>To create a new label, omit the <code>id</code> attribute. To update an existing label, include the <code>id</code> of the label record.</p>\n<p>While on creation of a new label record the label type (installation, job, incident, customer) can be specified. On update (i.e with provided id) it will result in an error for that record.</p>\n<p>A maximum of 100 records can be processed per request. Requests exceeding this limit will result in a 422 error.</p>\n<h3 id=\"request\">Request</h3>\n<ul>\n<li><p>Method: <code>POST</code></p>\n</li>\n<li><p>URL: <code>http://api.foxtag.io/api/v1/public/labels</code></p>\n</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<ul>\n<li>Content-Type: <code>application/json</code></li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"db338f38-6a0c-427f-b977-be5732ef6f84","id":"db338f38-6a0c-427f-b977-be5732ef6f84","name":"Foxtag.io Public Api","type":"collection"}},"urlObject":{"protocol":"https","path":["api","v1","public","labels"],"host":["api","foxtag","io"],"query":[],"variable":[]}},"response":[{"id":"3c273c1d-ef4a-4fa2-b298-24744bf6192b","name":"Create/Update label","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"labels\": [\n    {\n     \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n     \"name\": \"Label1\",\n     \"description\": \"installation label\",\n     \"bg_color\": \"#2c556e\",\n     \"text_color\": \"#ffffff\",\n     \"label_type\": \"installation\"\n    },\n    {\n     \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n     \"name\": \"Label2\",\n     \"description\": \"customer label\",\n     \"bg_color\": \"#2c556e\",\n     \"text_color\": \"#ffffff\",\n     \"label_type\": \"customer\"\n    }\n  ]\n}\n","options":{"raw":{"language":"json"}}},"url":"https://api.foxtag.io/api/v1/public/labels"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": \"success\",\n    \"errors_count\": 0,\n    \"results\":[\n        {\n            \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n            \"success\": true,\n            \"message\": null\n        },\n        {\n            \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n            \"success\": true,\n            \"message\": null\n        }\n    ]\n}"}],"_postman_id":"1c2d18be-d6bf-460a-bdeb-759655ddbc0d"}],"id":"0fd00ec5-a4a7-4028-81fc-319a8c565a46","_postman_id":"0fd00ec5-a4a7-4028-81fc-319a8c565a46","description":"","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"db338f38-6a0c-427f-b977-be5732ef6f84","id":"db338f38-6a0c-427f-b977-be5732ef6f84","name":"Foxtag.io Public Api","type":"collection"}}},{"name":"Locations","item":[{"name":"List locations","id":"868bcf48-522f-4a4f-aa03-1488cd3817bd","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://api.foxtag.io/api/v1/public/locations","description":"<h3 id=\"description\">Description</h3>\n<p>This request retrieves all available locations paginated in batches of 500 records per page.</p>\n<p>The response contains an array of location records along with metadata for the current page, total pages, and total record count.</p>\n<p>An optional <code>page</code> argument in the request body specifies the page of records to retrieve. For instance, \"page\": 1 returns records 1–500, \"page\": 2 returns records 501–1000, and so forth. If the page argument is omitted, it defaults to 1.</p>\n<p>The data for each location contains the associated active address record, presented as a nested object within the location data.</p>\n<h3 id=\"request\">Request</h3>\n<ul>\n<li><p>Method: <code>GET</code></p>\n</li>\n<li><p>URL: <code>http://api.foxtag.io/api/v1/public/locations/</code></p>\n</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<ul>\n<li><p>Content-Type: <code>application/json</code></p>\n</li>\n<li><p>Retrieved data for a single record:</p>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", // string &lt;uuid&gt;\n  \"number\": \"L-1\", // string\n  \"name\": \"Location1\", // string\n  \"active_name\": \"Location1\", // string\n  \"customer_id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", // string &lt;uuid&gt;\n  \"shares_customer_address\": false, // boolean\n  \"updated_at\": \"2023-01-01T06:50:52.552Z\", // string &lt;date-time&gt;\n  \"active_address\": {\n    \"line1\": \"AddressLine1\", // string\n    \"line2\": \"AddressLine2\", // string\n    \"line3\": \"AddressLine3\", // string\n    \"zip\": \"12345\", // string\n    \"city\": \"CityName\", // string\n    \"country\": \"DE\" // string\n  }\n}\n\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"db338f38-6a0c-427f-b977-be5732ef6f84","id":"db338f38-6a0c-427f-b977-be5732ef6f84","name":"Foxtag.io Public Api","type":"collection"}},"urlObject":{"protocol":"https","path":["api","v1","public","locations"],"host":["api","foxtag","io"],"query":[{"disabled":true,"description":{"content":"<p>Defaults to \"1\" if ommited</p>\n","type":"text/plain"},"key":"page","value":"Integer"}],"variable":[]}},"response":[{"id":"36c6e5fd-ba6b-4673-b914-a829539f9c8c","name":"List locations","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://api.foxtag.io/api/v1/public/locations?page=1","protocol":"https","host":["api","foxtag","io"],"path":["api","v1","public","locations"],"query":[{"key":"page","value":"1","type":"text"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"locations\": [\n        {\n            \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n            \"number\": \"L-1\",\n            \"name\": \"Location1\",\n            \"active_name\": \"Location1\",\n            \"customer_id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n            \"shares_customer_address\": false,\n            \"updated_at\": \"2023-01-01T06:50:52.552Z\",\n            \"active_address\": {\n                \"line1\": \"AddressLine1\",\n                \"line2\": \"AddressLine2\",\n                \"line3\": \"AddressLine3\",\n                \"zip\": \"12345\",\n                \"city\": \"CityName\",\n                \"country\": \"DE\"\n            }\n        }\n    ],\n    \"meta\": {\n        \"current_page\": 1,\n        \"total_pages\": 1,\n        \"total_count\": 1\n    }\n}"}],"_postman_id":"868bcf48-522f-4a4f-aa03-1488cd3817bd"},{"name":"Show location","id":"cb68b8f8-c36d-4341-9ae1-8c2877e7426b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://api.foxtag.io/api/v1/public/locations/:location_id_or_number","description":"<h3 id=\"description\">Description</h3>\n<p>This endpoint retrieves details for a specific location, using either its unique ID (UUID) or location number as an identifier.</p>\n<p>The location number is optional and can be assigned through the web management frontend or the public API endpoint ( refer to: <a href=\"https://foxtag.postman.co/workspace/64af8236-6f93-4154-8228-2534da0ecd07/request/28130234-f00c44d1-4622-4fae-8f8f-14613aa0feef?action=share&amp;source=copy-link&amp;creator=28130234&amp;ctx=documentation\">Create/Update locations </a> ).</p>\n<p>The location data contains the data of the current active address record, presented as a nested object within the location data.</p>\n<h2 id=\"request\">Request</h2>\n<ul>\n<li><p>Method: <code>GET</code></p>\n</li>\n<li><p>URL: <code>http://api.foxtag.io/api/v1/public/locations/:locations_id_or_number</code></p>\n</li>\n</ul>\n<h2 id=\"response\">Response</h2>\n<ul>\n<li><p>Content-Type: <code>application/json</code></p>\n</li>\n<li><p>Retrieved data of the record:</p>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", // string &lt;uuid&gt;\n  \"number\": \"L-1\", // string\n  \"name\": \"Location1\", // string\n  \"active_name\": \"Location1\", // string\n  \"customer_id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", // string &lt;uuid&gt;\n  \"shares_customer_address\": false, // boolean\n  \"updated_at\": \"2023-01-01T06:50:52.552Z\", // string &lt;date-time&gt;\n  \"active_address\": {\n    \"line1\": \"AddressLine1\", // string\n    \"line2\": \"AddressLine2\", // string\n    \"line3\": \"AddressLine3\", // string\n    \"zip\": \"12345\", // string\n    \"city\": \"CityName\", // string\n    \"country\": \"DE\" // string\n  }\n}\n\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"db338f38-6a0c-427f-b977-be5732ef6f84","id":"db338f38-6a0c-427f-b977-be5732ef6f84","name":"Foxtag.io Public Api","type":"collection"}},"urlObject":{"protocol":"https","path":["api","v1","public","locations",":location_id_or_number"],"host":["api","foxtag","io"],"query":[],"variable":[{"description":{"content":"<p>records uuid | records number</p>\n","type":"text/plain"},"type":"any","value":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | L-1","key":"location_id_or_number"}]}},"response":[{"id":"9bcd11a5-b2d7-4fea-94e3-6182e18556f2","name":"Show location","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://api.foxtag.io/api/v1/public/locations/:location_id_or_number","protocol":"https","host":["api","foxtag","io"],"path":["api","v1","public","locations",":location_id_or_number"],"variable":[{"key":"location_id_or_number","value":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | L-1","description":"records uuid | records number"}]}},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"location\": {\n        \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n        \"number\": \"L-1\",\n        \"name\": \"Location1\",\n        \"active_name\": \"Location1\",\n        \"customer_id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n        \"shares_customer_address\": false,\n        \"updated_at\": \"2023-01-01T06:50:52.552Z\",\n        \"active_address\": {\n            \"line1\": \"AddressLine1\",\n            \"line2\": \"AddressLine2\",\n            \"line3\": \"AddressLine3\",\n            \"zip\": \"12345\",\n            \"city\": \"CityName\",\n            \"country\": \"DE\"\n        }\n    }\n}"}],"_postman_id":"cb68b8f8-c36d-4341-9ae1-8c2877e7426b"},{"name":"Create/Update locations","id":"f00c44d1-4622-4fae-8f8f-14613aa0feef","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"locations\": [\n    {\n      \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n      \"customer_id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n      \"shares_customer_address\": false,\n      \"address_attributes\": {\n        \"line1\": \"AddressLine1\",\n        \"line2\": \"AddressLine2\",\n        \"zip\": \"12345\",\n        \"city\": \"CityName\",\n        \"country\": \"DE\"\n      }\n    }\n  ]\n}","options":{"raw":{"language":"json"}}},"url":"https://api.foxtag.io/api/v1/public/locations","description":"<h3 id=\"description\">Description</h3>\n<p>This endpoint allows creating or updating multiple location records in a single request (upsert behavior) by submitting a list of location objects.</p>\n<p>To create a new location record, omit the <code>id</code> field. To update an existing record, include the <code>id</code> field.</p>\n<p>The nested <code>country</code> attribute requires a value that adheres to the ISO 3166 standard.</p>\n<h3 id=\"request\">Request</h3>\n<ul>\n<li><p>Method: <code>POST</code></p>\n</li>\n<li><p>URL: <code>http://api.foxtag.io/api/v1/public/locations</code></p>\n</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<ul>\n<li>Content-Type: <code>application/json</code></li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"db338f38-6a0c-427f-b977-be5732ef6f84","id":"db338f38-6a0c-427f-b977-be5732ef6f84","name":"Foxtag.io Public Api","type":"collection"}},"urlObject":{"protocol":"https","path":["api","v1","public","locations"],"host":["api","foxtag","io"],"query":[],"variable":[]}},"response":[{"id":"772df44e-a955-4d4f-accc-f656448889bb","name":"Create/Update locations","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"locations\": [\n    {\n      \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n      \"customer_id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n      \"shares_customer_address\": false,\n      \"address_attributes\": {\n        \"line1\": \"AddressLine1\",\n        \"line2\": \"AddressLine2\",\n        \"zip\": \"12345\",\n        \"city\": \"CityName\",\n        \"country\": \"DE\"\n      }\n    }\n  ]\n}","options":{"raw":{"language":"json"}}},"url":"https://api.foxtag.io/api/v1/public/locations"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": \"success\",\n    \"errors_count\": 0,\n    \"results\": [\n        {\n            \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n            \"success\": true,\n            \"message\": null\n        }\n    ]\n}"}],"_postman_id":"f00c44d1-4622-4fae-8f8f-14613aa0feef"},{"name":"Delete Location","id":"d14c917d-cf06-477b-b366-ba24017aa93a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"https://api.foxtag.io/api/v1/public/locations/:location_id","description":"<h3 id=\"description\">Description</h3>\n<p>This endpoint deletes a location record identified by its unique ID (UUID)</p>\n<p>Note that a location cannot be deleted when one or more installation records referencing the location record exist. These installation records must be deleted beforehand.</p>\n<h3 id=\"request\">Request</h3>\n<ul>\n<li><p>Method: <code>DELETE</code></p>\n</li>\n<li><p>URL: <code>http://api.foxtag.io/api/v1/public/locations/:location_id</code></p>\n</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<ul>\n<li>Content-Type: <code>application/json</code></li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"db338f38-6a0c-427f-b977-be5732ef6f84","id":"db338f38-6a0c-427f-b977-be5732ef6f84","name":"Foxtag.io Public Api","type":"collection"}},"urlObject":{"protocol":"https","path":["api","v1","public","locations",":location_id"],"host":["api","foxtag","io"],"query":[],"variable":[{"description":{"content":"<p>records uuid</p>\n","type":"text/plain"},"type":"any","value":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx","key":"location_id"}]}},"response":[{"id":"ca75653a-c6bb-47e5-96c3-13fb6eea0acf","name":"Delete Location","originalRequest":{"method":"DELETE","header":[],"url":{"raw":"https://api.foxtag.io/api/v1/public/locations/:location_id","protocol":"https","host":["api","foxtag","io"],"path":["api","v1","public","locations",":location_id"],"variable":[{"key":"location_id","value":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n  \"message\": \"deleted\"\n}"}],"_postman_id":"d14c917d-cf06-477b-b366-ba24017aa93a"}],"id":"43a7597b-c350-47e0-b509-ccfa03510292","event":[{"listen":"prerequest","script":{"id":"1cb1b278-dea7-4f9b-943b-640d04a12a46","type":"text/javascript","packages":{},"requests":{},"exec":[""]}},{"listen":"test","script":{"id":"a380ce7f-e88e-4da9-be0c-3e4b55ac2d4a","type":"text/javascript","packages":{},"requests":{},"exec":[""]}}],"_postman_id":"43a7597b-c350-47e0-b509-ccfa03510292","description":"","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"db338f38-6a0c-427f-b977-be5732ef6f84","id":"db338f38-6a0c-427f-b977-be5732ef6f84","name":"Foxtag.io Public Api","type":"collection"}}},{"name":"Misc","item":[{"name":"Ping API","id":"44b68785-0ec5-42b0-82e1-aad230b0f9c2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://api.foxtag.io/api/v1/public/ping","description":"<h1 id=\"ping-foxtag\">Ping Foxtag</h1>\n<p>Basic request to check the API accessibility. The response body contains the list of roles granted to the access key that is used for the request.</p>\n<p>Values for the api key specific roles results given following schema:</p>\n<ul>\n<li><p><code>ENTITY</code>.<code>ACTION</code></p>\n<ul>\n<li><p>Enitity values:<br />  <code>articles</code>, <code>customers</code> , <code>installation_types</code>, <code>installations</code>, <code>job_types</code>, <code>jobs</code>, <code>labels</code>, <code>locations</code>, <code>users</code></p>\n</li>\n<li><p>Actions values:<br />  <code>read</code>, <code>write</code>, <code>delete</code></p>\n</li>\n<li><p>Example role value to acces articless 'list' and 'show' endpoints:<br />  <code>articles.read</code></p>\n</li>\n</ul>\n</li>\n<li><p>Special Role</p>\n<ul>\n<li><code>system_events</code></li>\n</ul>\n</li>\n</ul>\n<h2 id=\"request\">Request</h2>\n<ul>\n<li><p>Method: <code>GET</code></p>\n</li>\n<li><p>URL: <code>http://api.foxtag.io/api/v1/public/ping</code></p>\n</li>\n</ul>\n<h2 id=\"response\">Response</h2>\n<ul>\n<li>Content-Type: <code>application/json</code></li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"db338f38-6a0c-427f-b977-be5732ef6f84","id":"db338f38-6a0c-427f-b977-be5732ef6f84","name":"Foxtag.io Public Api","type":"collection"}},"urlObject":{"protocol":"https","path":["api","v1","public","ping"],"host":["api","foxtag","io"],"query":[],"variable":[]}},"response":[{"id":"b068fa14-ad3e-401e-aecc-d4d613ceadf2","name":"Ping API","originalRequest":{"method":"GET","header":[],"url":"https://api.foxtag.io/api/v1/public/ping"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"ping_at\": \"2023-01-01T06:50:52.552Z\",\n    \"roles\": [\n        \"articles.read\",\n        \"articles.write\",\n        \"labels.read\",\n        \"labels.write\"\n    ]\n}"}],"_postman_id":"44b68785-0ec5-42b0-82e1-aad230b0f9c2"}],"id":"7a4d641a-98d9-460d-a186-783042928c3a","_postman_id":"7a4d641a-98d9-460d-a186-783042928c3a","description":"","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"db338f38-6a0c-427f-b977-be5732ef6f84","id":"db338f38-6a0c-427f-b977-be5732ef6f84","name":"Foxtag.io Public Api","type":"collection"}}},{"name":"Users","item":[{"name":"List users","id":"023ebdc0-9156-4d22-806b-15f1235a2c63","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":"https://api.foxtag.io/api/v1/public/users","description":"<h3 id=\"description\">Description</h3>\n<p>This endpoint retrieves a paginated list of users if more than 500 records are available.</p>\n<p>This also includes deleted users, system users ( e.g. 'Foxtag Bot' ), portal users and support users.</p>\n<p>The response body includes an array of user objects with their attributes and metadata, such as the current page, total pages, and total record count.</p>\n<p>An optional \"page\" argument in the request body determines which page of records is returned. For example, \"page\": 1 returns the first 500 records, \"page\": 2 returns records 501–1000, and so on. If no page argument is provided, it defaults to 1.</p>\n<h3 id=\"request\">Request</h3>\n<ul>\n<li><p>Method: <code>GET</code></p>\n</li>\n<li><p>URL: <code>http://api.foxtag.io/api/v1/public/users/</code></p>\n</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<ul>\n<li><p>Content-Type: <code>application/json</code></p>\n</li>\n<li><p>Retrieved data for a single record:</p>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", // string &lt;uuid&gt;\n  \"number\": \"Usr-1\", // string\n  \"email\": \"user1@email.com\", // string\n  \"name\": \"UserName1\", // string\n  \"user_role\": \"Administration\" // string\n  \"updated_at\": \"2023-01-01T06:50:52.552Z\", // string &lt;date-time&gt;\n  \"deleted_at\": null // nil or string &lt;date-time&gt;\n}\n\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"db338f38-6a0c-427f-b977-be5732ef6f84","id":"db338f38-6a0c-427f-b977-be5732ef6f84","name":"Foxtag.io Public Api","type":"collection"}},"urlObject":{"protocol":"https","path":["api","v1","public","users"],"host":["api","foxtag","io"],"query":[{"disabled":true,"description":{"content":"<p>Defaults to \"1\" if ommited</p>\n","type":"text/plain"},"key":"page","value":"Integer"}],"variable":[]}},"response":[{"id":"bcee02d6-3fe5-46a8-b780-a8731b0ce4b7","name":"List users","originalRequest":{"method":"GET","header":[],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":{"raw":"https://api.foxtag.io/api/v1/public/users?page=1","protocol":"https","host":["api","foxtag","io"],"path":["api","v1","public","users"],"query":[{"key":"page","value":"1"}]}},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"users\": [\n        {\n            \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n            \"number\": \"Usr-1\",\n            \"email\": \"user1@email.com\",\n            \"name\": \"UserName1\",\n            \"user_role\": \"Administration\",\n            \"updated_at\": \"2023-01-01T06:50:52.552Z\",\n            \"deleted_at\": null\n        }\n    ],\n    \"meta\": {\n        \"current_page\": 1,\n        \"total_pages\": 1,\n        \"total_count\": 1\n    }\n}"}],"_postman_id":"023ebdc0-9156-4d22-806b-15f1235a2c63"},{"name":"Show user","id":"b09c197b-b45b-4cc1-9f8c-62a2f7ebb3b6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":"https://api.foxtag.io/api/v1/public/users/:user_id_or_number","description":"<h3 id=\"description\">Description</h3>\n<p>This endpoint retrieves details for a specific user, using either its unique ID (UUID) or user number as an identifier.</p>\n<p>The user number is optional and can be assigned through the web administration frontend.</p>\n<h3 id=\"request\">Request</h3>\n<ul>\n<li><p>Method: <code>GET</code></p>\n</li>\n<li><p>URL: <code>http://api.foxtag.io/api/v1/public/users/:user_id_or_number</code></p>\n</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<ul>\n<li><p>Content-Type: <code>application/json</code></p>\n</li>\n<li><p>Retrieved data for the record:</p>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", // string &lt;uuid&gt;\n  \"number\": \"Usr-1\", // string\n  \"email\": \"user1@email.com\", // string\n  \"name\": \"UserName1\", // string\n  \"user_role\": \"Administration\" // strings\n  \"updated_at\": \"2023-01-01T06:50:52.552Z\", // string &lt;date-time&gt;\n  \"deleted_at\": null // nil or string &lt;date-time&gt;\n}\n\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"db338f38-6a0c-427f-b977-be5732ef6f84","id":"db338f38-6a0c-427f-b977-be5732ef6f84","name":"Foxtag.io Public Api","type":"collection"}},"urlObject":{"protocol":"https","path":["api","v1","public","users",":user_id_or_number"],"host":["api","foxtag","io"],"query":[],"variable":[{"description":{"content":"<p>records uuid | records number</p>\n","type":"text/plain"},"type":"any","value":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | Usr-1","key":"user_id_or_number"}]}},"response":[{"id":"f774d433-454c-44a0-ba54-d94140c5bc3d","name":"Show user","originalRequest":{"method":"GET","header":[],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":{"raw":"https://api.foxtag.io/api/v1/public/users/:user_id_or_number","protocol":"https","host":["api","foxtag","io"],"path":["api","v1","public","users",":user_id_or_number"],"variable":[{"key":"user_id_or_number","value":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | Usr-1","description":"records uuid | records number"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n  \"user\": {\n    \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n    \"number\": \"Usr-1\",\n    \"email\": \"user1@email.com\",\n    \"name\": \"UserName1\",\n    \"user_role\": \"Administration\",\n    \"updated_at\": \"2023-01-01T06:50:52.552Z\",\n    \"deleted_at\": null\n  }\n}"}],"_postman_id":"b09c197b-b45b-4cc1-9f8c-62a2f7ebb3b6"}],"id":"6a99adcc-c82f-488f-89b2-3751be18a772","_postman_id":"6a99adcc-c82f-488f-89b2-3751be18a772","description":"","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"db338f38-6a0c-427f-b977-be5732ef6f84","id":"db338f38-6a0c-427f-b977-be5732ef6f84","name":"Foxtag.io Public Api","type":"collection"}}},{"name":"Contacts","item":[{"name":"List contacts","id":"6642b7b5-119c-4f8e-bb20-2cf08a702f3f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://api.foxtag.io/api/v1/public/contacts","description":"<h3 id=\"description\">Description</h3>\n<p>This request retrieves all available contact records, with pagination applied if there are more than 500 contacts.</p>\n<p>The response contains an array of contact record along with metadata for the current page, total pages, and total record count. You can use an optional \"page\" argument in the request body to specify which page of records to retrieve. For instance, \"page\": 1 returns records 1–500, \"page\": 2 returns records 501–1000, and so on. If the page argument is omitted, it defaults to 1.</p>\n<h3 id=\"request\">Request</h3>\n<ul>\n<li><p>Method: <code>GET</code></p>\n</li>\n<li><p>URL: <code>http://api.foxtag.io/api/v1/public/contacts/</code></p>\n</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<ul>\n<li><p>Content-Type: <code>application/json</code></p>\n</li>\n<li><p>Retrieved data for a single record:</p>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n   \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", // string &lt;uuid&gt;\n   \"name\": \"ContactName3\", // string\n   \"company\": \"Company3\", // string\n   \"email\": \"contact3@email.com\", // string\n   \"phone\": \"3-123456789-0\", // string\n   \"mobile\": \"3-123456789-1\", // string\n   \"fax\": \"3-123456789-2\", // string\n   \"note\": \"Note3\", // string\n   \"updated_at\": \"2024-10-29T07:52:22.088Z\" // string &lt;Date-Time&gt;\n}\n\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"db338f38-6a0c-427f-b977-be5732ef6f84","id":"db338f38-6a0c-427f-b977-be5732ef6f84","name":"Foxtag.io Public Api","type":"collection"}},"urlObject":{"protocol":"https","path":["api","v1","public","contacts"],"host":["api","foxtag","io"],"query":[],"variable":[]}},"response":[{"id":"cb645a73-3dfa-45ac-bfd6-0edd14b5acac","name":"list","originalRequest":{"method":"GET","header":[],"url":"https://api.foxtag.io/api/v1/public/contacts"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"contacts\": [\n        {\n            \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n            \"name\": \"ContactName1\",\n            \"company\": \"Company1\",\n            \"email\": \"contact1@email.com\",\n            \"phone\": \"1-123456789-0\",\n            \"mobile\": \"1-123456789-1\",\n            \"fax\": \"1-123456789-2\",\n            \"note\": \"Note1\",\n            \"updated_at\": \"2024-10-29T07:52:22.088Z\"\n        },\n        {\n            \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n            \"name\": \"ContactName2\",\n            \"company\": \"Company2\",\n            \"email\": \"contact2@email.com\",\n            \"phone\": \"2-123456789-0\",\n            \"mobile\": \"2-123456789-1\",\n            \"fax\": \"2-123456789-2\",\n            \"note\": \"Note2\",\n            \"updated_at\": \"2024-10-29T07:52:22.088Z\"\n        },\n        {\n            \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n            \"name\": \"ContactName3\",\n            \"company\": \"Company3\",\n            \"email\": \"contact3@email.com\",\n            \"phone\": \"3-123456789-0\",\n            \"mobile\": \"3-123456789-1\",\n            \"fax\": \"3-123456789-2\",\n            \"note\": \"Note3\",\n            \"updated_at\": \"2024-10-29T07:52:22.088Z\"\n        }\n    ],\n    \"meta\": {\n        \"current_page\": 1,\n        \"total_pages\": 1,\n        \"total_count\": 3\n    }\n}"}],"_postman_id":"6642b7b5-119c-4f8e-bb20-2cf08a702f3f"},{"name":"Show contact","id":"aaefdb8c-7270-4394-8bd1-4591d09ce472","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://api.foxtag.io/api/v1/public/contacts/:contact_id","description":"<h3 id=\"description\">Description</h3>\n<p>This endpoint retrieves details for a specific contact, using its unique ID (UUID).</p>\n<h3 id=\"request\">Request</h3>\n<ul>\n<li><p>Method: <code>GET</code></p>\n</li>\n<li><p>URL: <code>http://api.foxtag.io/api/v1/public/contacts/:contact_id</code></p>\n</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<ul>\n<li><p>Content-Type: <code>application/json</code></p>\n</li>\n<li><p>Retrieved data of a single record:</p>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n   \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\", // string &lt;uuid&gt;\n   \"name\": \"ContactName3\", // string\n   \"company\": \"Company3\", // string\n   \"email\": \"contact3@email.com\", // string\n   \"phone\": \"3-123456789-0\", // string\n   \"mobile\": \"3-123456789-1\", // string\n   \"fax\": \"3-123456789-2\", // string\n   \"note\": \"Note3\", // string\n   \"updated_at\": \"2024-10-29T07:52:22.088Z\" // string &lt;Date-Time&gt;\n}\n\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"db338f38-6a0c-427f-b977-be5732ef6f84","id":"db338f38-6a0c-427f-b977-be5732ef6f84","name":"Foxtag.io Public Api","type":"collection"}},"urlObject":{"protocol":"https","path":["api","v1","public","contacts",":contact_id"],"host":["api","foxtag","io"],"query":[],"variable":[{"type":"any","value":"","key":"contact_id"}]}},"response":[{"id":"e95ba909-e83f-4ea2-8100-19c2e2abb872","name":"Show","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://api.foxtag.io/api/v1/public/contacts/:contact_id","protocol":"https","host":["api","foxtag","io"],"path":["api","v1","public","contacts",":contact_id"],"variable":[{"key":"contact_id","value":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx","description":"records uuid"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"contact\": {\n        \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n        \"name\": \"ContactName1\",\n        \"company\": \"Company1\",\n        \"email\": \"contact1@email.com\",\n        \"phone\": \"1-123456789-0\",\n        \"mobile\": \"1-123456789-1\",\n        \"fax\": \"1-123456789-2\",\n        \"note\": \"Note1\",\n        \"updated_at\": \"2024-10-29T07:52:22.088Z\"\n    }\n}"}],"_postman_id":"aaefdb8c-7270-4394-8bd1-4591d09ce472"},{"name":"Create/Update contacts","id":"5e7107b5-def8-451d-a0e5-a16bcbb14290","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"contacts\": [\n    {\n      \"names\": \"ContactName1\",\n      \"company\": \"Company1\",\n      \"phone\": \"1-123456789-0\",\n      \"mobile\": \"1-123456789-1\",\n      \"fax\": \"1-123456789-2\",\n      \"email\": \"contact1@email.com\",\n      \"note\": \"Note1\"\n    }\n  ]\n}","options":{"raw":{"language":"json"}}},"url":"https://api.foxtag.io/api/v1/public/contacts","description":"<h3 id=\"description\">Description</h3>\n<p>This endpoint allows creating or updating multiple contacts in a single request (upsert behavior) by providing a list of contact objects.</p>\n<p>To create a new contact, omit the <code>id</code> field. To update an existing contact, include the <code>id</code> for the respective record.</p>\n<p>A maximum of 100 records can be processed per request. Requests exceeding this limit will result in a 422 error.</p>\n<h3 id=\"request\">Request</h3>\n<ul>\n<li><p>Method: <code>POST</code></p>\n</li>\n<li><p>URL: <code>http://api.foxtag.io/api/v1/public/contacts</code></p>\n</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<ul>\n<li>Content-Type: <code>application/json</code></li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"db338f38-6a0c-427f-b977-be5732ef6f84","id":"db338f38-6a0c-427f-b977-be5732ef6f84","name":"Foxtag.io Public Api","type":"collection"}},"urlObject":{"protocol":"https","path":["api","v1","public","contacts"],"host":["api","foxtag","io"],"query":[],"variable":[]}},"response":[{"id":"cc29a383-a6ea-4fbd-a6f3-67913e324f07","name":"Create/Update contacts","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"contacts\": [\n    {\n      \"names\": \"ContactName1\",\n      \"company\": \"Company1\",\n      \"phone\": \"1-123456789-0\",\n      \"mobile\": \"1-123456789-1\",\n      \"fax\": \"1-123456789-2\",\n      \"email\": \"contact1@email.com\",\n      \"note\": \"Note1\"\n    }\n  ]\n}","options":{"raw":{"language":"json"}}},"url":"https://api.foxtag.io/api/v1/public/contacts"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": \"success\",\n    \"errors_count\": 0,\n    \"results\": [\n        {\n            \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n            \"success\": true,\n            \"message\": null\n        }\n    ]\n}"}],"_postman_id":"5e7107b5-def8-451d-a0e5-a16bcbb14290"},{"name":"Delete contact","id":"a6923d8c-61e0-459c-b0ea-9bd91600d1cd","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"https://api.foxtag.io/api/v1/public/contacts/:contact_id","description":"<h3 id=\"description\">Description</h3>\n<p>This endpoint deletes a contact record identified by its unique ID (UUID)</p>\n<h3 id=\"request\">Request</h3>\n<ul>\n<li><p>Method: <code>DELETE</code></p>\n</li>\n<li><p>URL: <code>http://api.foxtag.io/api/v1/public/contacts/:contact_id</code></p>\n</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<ul>\n<li>Content-Type: <code>application/json</code></li>\n</ul>\n<p>Response body example:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"message\": \"deleted\"\n}\n\n</code></pre>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"db338f38-6a0c-427f-b977-be5732ef6f84","id":"db338f38-6a0c-427f-b977-be5732ef6f84","name":"Foxtag.io Public Api","type":"collection"}},"urlObject":{"protocol":"https","path":["api","v1","public","contacts",":contact_id"],"host":["api","foxtag","io"],"query":[],"variable":[{"description":{"content":"<p>contact uuid</p>\n","type":"text/plain"},"type":"any","value":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx","key":"contact_id"}]}},"response":[{"id":"598225f4-341b-4e72-a5ee-f9ad36e0975b","name":"Delete contact","originalRequest":{"method":"GET","header":[]},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"message\": \"deleted\"\n}"}],"_postman_id":"a6923d8c-61e0-459c-b0ea-9bd91600d1cd"}],"id":"6f5280fe-16a9-4ee2-a0fb-b3186630cfdb","_postman_id":"6f5280fe-16a9-4ee2-a0fb-b3186630cfdb","description":"","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":true,"source":{"_postman_id":"db338f38-6a0c-427f-b977-be5732ef6f84","id":"db338f38-6a0c-427f-b977-be5732ef6f84","name":"Foxtag.io Public Api","type":"collection"}}}],"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]}},"event":[{"listen":"prerequest","script":{"id":"ee5ba128-977e-43e4-bef9-4242ce12d1ed","type":"text/javascript","packages":{},"requests":{},"exec":[""]}},{"listen":"test","script":{"id":"e938b897-07fb-4945-afe3-5f4a2638e4c7","type":"text/javascript","packages":{},"requests":{},"exec":[""]}}]}