{"info":{"_postman_id":"08318820-cdd9-46ce-b82c-62251e9eddc4","name":"API/v1 for Provider","description":"<html><head></head><body><p>This is a short introduction on how to implement your software as a provider:</p>\n<p><strong>The Concept:</strong><br>Alution's Provider API is fundamentally a REST API with a unique approach. While you can use the standard Alution API as a typical REST API, Alution also offers an alternative, more straightforward method that doesn't require changes to your code whenever we update our fields.</p>\n<p><strong>How It Works:</strong><br>Instead of sending data in the predefined structure, you provide us with a representation of your database schema, including validation details, in a JSON Schema format. This allows us to understand your column names, data types, and validation rules.</p>\n<p><strong>Steps to Implement:</strong></p>\n<ul>\n<li><p>Send us your database schema in JSON Schema format, including column details and validation rules.</p>\n</li>\n<li><p>Map your schema fields in Alution under&nbsp;<strong>Settings &gt; Provider Field Mapping</strong>.</p>\n</li>\n<li><p>Once mapped, you can directly POST your table entries formatted in your own schema directly to Alution.cloud without extra code modifications or data formatting.</p>\n</li>\n</ul>\n<p>This approach simplifies integration, making it easier to keep your existing data formats and workflows intact while seamlessly syncing with Alution.</p>\n<p>Additionally: Append&nbsp;<code>?relations=customFieldSchemas</code>&nbsp;to each show or index request to retrieve your group with the mapped values within your column fields.</p>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[],"owner":"43321794","collectionId":"08318820-cdd9-46ce-b82c-62251e9eddc4","publishedId":"2sB34eJhFD","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"28aae7"},"publishDate":"2025-07-09T12:59:29.000Z"},"item":[{"name":"Auth","item":[{"name":"Token Create (User)","id":"2d4f3d4f-2221-4b7d-aa9c-ad3723b61782","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"email\": \"{{username_or_email}}\",\n    \"password\": \"{{password}}\",\n    \"totp\": null, // Only if used. Leave empty or remove completely if not required!\n    \"token_name\": \"My custom token name.\"\n}","options":{"raw":{"language":"json"}}},"url":"https://dev.alution.test/api/v1/auth/token","urlObject":{"path":["auth","token"],"host":["https://dev.alution.test/api/v1"],"query":[{"disabled":true,"key":"","value":null}],"variable":[]}},"response":[],"_postman_id":"2d4f3d4f-2221-4b7d-aa9c-ad3723b61782"}],"id":"4d95fa80-7a3f-4ef3-b1ed-194c9a718ed8","description":"<p>Before importing or managing provider data, you need access to the system via a bearer token. You can create this token through the user's credentials. You can use the Administrator user (the user with ID 1), as this account is not limited by permissions or groups and always has full system access. This makes it ideal for provider scenarios. While you can use any user, remember that a user without proper permissions may be limited in what they can do.</p>\n","event":[{"listen":"prerequest","script":{"id":"2a9f1f1b-aec7-4a46-91cd-90e887d19886","type":"text/javascript","packages":{},"exec":[""]}},{"listen":"test","script":{"id":"f9af6dc4-8d8f-4709-88c5-fc7a6365c83b","type":"text/javascript","packages":{},"exec":[""]}}],"_postman_id":"4d95fa80-7a3f-4ef3-b1ed-194c9a718ed8","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":true,"source":{"_postman_id":"08318820-cdd9-46ce-b82c-62251e9eddc4","id":"08318820-cdd9-46ce-b82c-62251e9eddc4","name":"API/v1 for Provider","type":"collection"}}},{"name":"Custom Field Schemas","item":[{"name":"Custom Field Schemas Create","id":"dafb10e1-48e9-4c87-a999-d77c0cd5f79c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n   \"type\":\"contacts\", \n   \"group\":\"MyCustomUniqueGroupName\",\n   \"schema\": {\n        \"$schema\":\"http://json-schema.org/schema#\",\n        \"type\":\"object\",\n        \"properties\": {\n            \"MyDatabaseContactNameColumn\": {\n                \"minLength\":0,\n                \"maxLength\":50,\n                \"type\":\"string\",\n                \"description\": \"Name of Contact\"\n            },\n            \"MyDatabaseContactLegalFormColumn\": {\n                \"minLength\":0,\n                \"maxLength\":10,\n                \"type\":\"string\",\n                \"description\": \"Legal Form of Contact\"\n            }\n        }\n   }\n}","options":{"raw":{"language":"json"}}},"url":"https://dev.alution.test/api/v1/custom-field-schemas","urlObject":{"path":["custom-field-schemas"],"host":["https://dev.alution.test/api/v1"],"query":[],"variable":[]}},"response":[{"id":"d36b6732-ebd4-4ae3-a7f6-3251ab46b94e","name":"Custom Field Schemas Create","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n   \"type\":\"contacts\", \n   \"group\":\"MyCustomUniqueGroupName\",\n   \"schema\": {\n        \"$schema\":\"http://json-schema.org/schema#\",\n        \"type\":\"object\",\n        \"properties\": {\n            \"MyDatabaseContactNameColumn\": {\n                \"minLength\":0,\n                \"maxLength\":50,\n                \"type\":\"string\",\n                \"description\": \"Name of Contact\"\n            },\n            \"MyDatabaseContactLegalFormColumn\": {\n                \"minLength\":0,\n                \"maxLength\":10,\n                \"type\":\"string\",\n                \"description\": \"Legal Form of Contact\"\n            }\n        }\n   }\n}","options":{"raw":{"language":"json"}}},"url":"https://dev.alution.test/api/v1/custom-field-schemas"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Server","value":"nginx/1.27.4"},{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"Vary","value":"Accept-Encoding"},{"key":"X-Powered-By","value":"PHP/8.4.4"},{"key":"Cache-Control","value":"no-cache, private"},{"key":"Date","value":"Thu, 24 Jul 2025 08:46:19 GMT"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Content-Encoding","value":"gzip"}],"cookie":[],"responseTime":null,"body":"{\n    \"data\": [\n        {\n            \"id\": 3,\n            \"group\": \"MyCustomUniqueGroupName\",\n            \"name\": \"MyDatabaseContactNameColumn\",\n            \"type\": \"string\",\n            \"description\": \"Name of Contact\",\n            \"rules\": [\n                \"min:0\",\n                \"max:50\"\n            ]\n        },\n        {\n            \"id\": 4,\n            \"group\": \"MyCustomUniqueGroupName\",\n            \"name\": \"MyDatabaseContactLegalFormColumn\",\n            \"type\": \"string\",\n            \"description\": \"Legal Form of Contact\",\n            \"rules\": [\n                \"min:0\",\n                \"max:10\"\n            ]\n        }\n    ]\n}"}],"_postman_id":"dafb10e1-48e9-4c87-a999-d77c0cd5f79c"},{"name":"Custom Field Schemas Show","id":"7c217b61-33f0-4a4f-b278-9ee0c541f693","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":false},"method":"GET","header":[],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":"https://dev.alution.test/api/v1/custom-field-schemas/{{custom_field_sch1ema}}","urlObject":{"path":["custom-field-schemas","{{custom_field_sch1ema}}"],"host":["https://dev.alution.test/api/v1"],"query":[],"variable":[]}},"response":[],"_postman_id":"7c217b61-33f0-4a4f-b278-9ee0c541f693"}],"id":"58121c85-21f9-4282-8bdd-81d9d7027930","description":"<p>When creating a custom schema, you need to specify the following key components:</p>\n<ul>\n<li><p><code>type</code>: Defines the category of data. Options include:</p>\n<ul>\n<li><p><code>\"contacts\"</code> (default for contact information)</p>\n</li>\n<li><p><code>\"addresses\"</code></p>\n</li>\n<li><p><code>\"users\"</code></p>\n</li>\n<li><p><code>\"projects\"</code></p>\n</li>\n<li><p><code>\"products\"</code></p>\n</li>\n</ul>\n</li>\n<li><p><code>group</code>: A unique identifier for your schema group. It must:</p>\n<ul>\n<li><p>Be the same across all of your schemas</p>\n</li>\n<li><p>Clearly indicate which software or system the group belongs to</p>\n</li>\n</ul>\n</li>\n<li><p><code>schema</code>: A JSON Schema object describing the structure of your data, closely resembling your database tables to facilitate development and data handling.</p>\n</li>\n</ul>\n<hr />\n<h2 id=\"detailed-explanation\">Detailed Explanation</h2>\n<h3 id=\"1-type\">1. <code>type</code></h3>\n<p>Specify the data category relevant to your schema. Example options:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">\"type\": \"contacts\"\n\n</code></pre>\n<p>Copy</p>\n<p>Choose the appropriate type from the list above.</p>\n<h3 id=\"2-group\">2. <code>group</code></h3>\n<p>Provide a unique and descriptive name for your schema group. This helps identify the schema’s purpose and its association to your software.<br /><strong>Example:</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">\"group\": \"MyCustomUniqueGroupName\"\n\n</code></pre>\n<p>Make sure this name is unique and indicates which software or system the schema belongs to.</p>\n<h3 id=\"3-schema\">3. <code>schema</code></h3>\n<p>Define your data structure using JSON Schema standards. Keep it as close as possible to your database structure to simplify development and data synchronization.</p>\n<p><strong>Schema example:</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">\"schema\": {\n  \"$schema\": \"http://json-schema.org/schema#\",\n  \"type\": \"object\",\n  \"properties\": {\n    // Define each column, ensuring the name resembles your database's column names.\n    // Add descriptions for clarity, and validations to ensure data integrity.\n    \"ContactName\": {\n      \"minLength\": ,\n      \"maxLength\": 50,\n      \"type\": \"string\",\n      \"description\": \"Kontaktname\"\n    }\n  }\n}\n\n</code></pre>\n<p><strong>Notes:</strong></p>\n<ul>\n<li><p>The property names should match your database columns.</p>\n</li>\n<li><p>Provide descriptive text for each property.</p>\n</li>\n<li><p>Include validation rules such as <code>minLength</code>, <code>maxLength</code>, <code>type</code>, etc., to prevent validation errors during data import or update.</p>\n</li>\n<li><p>Ensure the schema accurately reflects your data structure for seamless integration.</p>\n</li>\n</ul>\n","_postman_id":"58121c85-21f9-4282-8bdd-81d9d7027930","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":true,"source":{"_postman_id":"08318820-cdd9-46ce-b82c-62251e9eddc4","id":"08318820-cdd9-46ce-b82c-62251e9eddc4","name":"API/v1 for Provider","type":"collection"}}},{"name":"Mappings","item":[{"name":"Mappings Index","id":"cfb3b9d8-8efa-47ca-b451-7c35f626cf36","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://dev.alution.test/api/v1/custom-field-schemas/mappings?group=MyCustomUniqueGroupName&type=contacts","description":"<p>The response from the update endpoint includes three key fields to guide your synchronization process:</p>\n<ul>\n<li><p><strong><code>force_update</code></strong> <strong>(boolean):</strong><br />  If set to <code>true</code>, this indicates that the user has changed the group's mapping configuration and requested a resync Essentially, it’s a prompt to resynchronize your data with the latest mappings.</p>\n</li>\n<li><p><strong><code>fields</code></strong> <strong>(array):</strong><br />  Contains a list of the fields that are currently mapped and accepted by the endpoint. This helps you understand which data fields you should include on the update.</p>\n</li>\n<li><p><strong><code>overridable</code></strong> <strong>(array):</strong><br />  Lists the fields that are available to be mapped. If you don’t provide your own default mappings, you can ignore this and allow users to decide which fields to map via the interface. Alternatively, you can use these to automatically map fields yourself and simplify the process.</p>\n</li>\n</ul>\n<p><strong>Usage tip:</strong></p>\n<ul>\n<li><p>If <code>force_update</code> is <code>true</code>, proceed to refresh (update) all relevant entries from your database into Alution to ensure sync consistency.</p>\n</li>\n<li><p>Use the <code>fields</code> list to know which data points are relevant and should be updated.</p>\n</li>\n<li><p>Leverage <code>overridable</code> to determine which fields you can pre-map or offer for mapping, streamlining the setup or automation process.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":true,"source":{"_postman_id":"08318820-cdd9-46ce-b82c-62251e9eddc4","id":"08318820-cdd9-46ce-b82c-62251e9eddc4","name":"API/v1 for Provider","type":"collection"}},"urlObject":{"path":["custom-field-schemas","mappings"],"host":["https://dev.alution.test/api/v1"],"query":[{"key":"group","value":"MyCustomUniqueGroupName"},{"key":"type","value":"contacts"}],"variable":[]}},"response":[{"id":"e90d9064-3141-4908-9a62-0abc6c515f8e","name":"Mappings Index","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://dev.alution.test/api/v1/custom-field-schemas/mappings?group=MyCustomUniqueGroupName&type=contacts","host":["https://dev.alution.test/api/v1"],"path":["custom-field-schemas","mappings"],"query":[{"key":"group","value":"MyCustomUniqueGroupName"},{"key":"type","value":"contacts"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Server","value":"nginx/1.27.4"},{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"Vary","value":"Accept-Encoding"},{"key":"X-Powered-By","value":"PHP/8.4.4"},{"key":"Cache-Control","value":"no-cache, private"},{"key":"Date","value":"Thu, 24 Jul 2025 08:59:13 GMT"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Content-Encoding","value":"gzip"}],"cookie":[],"responseTime":null,"body":"{\n    \"force_update\": false,\n    \"fields\": [\n        \"MyDatabaseContactNameColumn\",\n        \"MyDatabaseContactLegalFormColumn\"\n    ],\n    \"overridable\": {\n        \"name\": \"string\",\n        \"type\": \"string\",\n        \"legal_form\": \"string\",\n        \"tax_id_number\": \"string\",\n        \"vat_id_number\": \"string\",\n        \"description\": \"string\",\n        \"established_at\": \"string\",\n        \"flexible_field_1\": null,\n        \"flexible_field_2\": null,\n        \"flexible_field_3\": null\n    }\n}"}],"_postman_id":"cfb3b9d8-8efa-47ca-b451-7c35f626cf36"},{"name":"Mappings Update","id":"3d0879cb-c90e-4607-b481-32868aa622a3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\n    \"mappings\": {\n        \"name\": \"MyDatabaseContactNameColumn\",\n        \"legal_form\": \"MyDatabaseContactLegalFormColumn\"\n    }\n}","options":{"raw":{"language":"json"}}},"url":"https://dev.alution.test/api/v1/custom-field-schemas/mappings?group=MyCustomUniqueGroupName&type=contacts","description":"<p>This step is optional but highly recommended, especially the first time you synchronize data with Alution. Providing a default mapping reduces the need for users to manually map each field, streamlining the setup process.</p>\n<p>To do this, send a <code>mappings</code> object in your PATCH request to the endpoint, where:</p>\n<ul>\n<li><p><strong>Keys</strong> are the <code>overridable</code> fields provided by Alution (as specified in the <code>overridable</code> array from the response).</p>\n</li>\n<li><p><strong>Values</strong> are your database column names, as defined in your schema or your system's <code>CustomFieldSchema</code>.</p>\n</li>\n</ul>\n<p>You can retrieve all available fields via a GET request to the same endpoint, which will return the list of overridable fields.</p>\n<p><strong>After PATCHING:</strong><br />You will receive a response containing an array where:</p>\n<ul>\n<li><p><strong>Keys</strong> are your database column names.</p>\n</li>\n<li><p><strong>Values</strong> are booleans (<code>true</code> or <code>false</code>) indicating whether the mapping for that field was successfully updated.</p>\n</li>\n</ul>\n<p>This way, you can verify which mappings were successfully applied and handle any fields that failed to update accordingly.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":true,"source":{"_postman_id":"08318820-cdd9-46ce-b82c-62251e9eddc4","id":"08318820-cdd9-46ce-b82c-62251e9eddc4","name":"API/v1 for Provider","type":"collection"}},"urlObject":{"path":["custom-field-schemas","mappings"],"host":["https://dev.alution.test/api/v1"],"query":[{"key":"group","value":"MyCustomUniqueGroupName"},{"key":"type","value":"contacts"}],"variable":[]}},"response":[{"id":"ce0c21bd-4570-494d-a9fe-eb2f21aee47b","name":"Mappings Update","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\n    \"mappings\": {\n        \"name\": \"MyDatabaseContactNameColumn\",\n        \"legal_form\": \"MyDatabaseContactLegalFormColumn\"\n    }\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"https://dev.alution.test/api/v1/custom-field-schemas/mappings?group=MyCustomUniqueGroupName&type=contacts","host":["https://dev.alution.test/api/v1"],"path":["custom-field-schemas","mappings"],"query":[{"key":"group","value":"MyCustomUniqueGroupName"},{"key":"type","value":"contacts"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Server","value":"nginx/1.27.4"},{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"Vary","value":"Accept-Encoding"},{"key":"X-Powered-By","value":"PHP/8.4.4"},{"key":"Cache-Control","value":"no-cache, private"},{"key":"Date","value":"Thu, 24 Jul 2025 08:47:03 GMT"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Content-Encoding","value":"gzip"}],"cookie":[],"responseTime":null,"body":"{\n    \"updated\": {\n        \"MyDatabaseContactNameColumn\": true,\n        \"MyDatabaseContactLegalFormColumn\": true\n    }\n}"}],"_postman_id":"3d0879cb-c90e-4607-b481-32868aa622a3"}],"id":"72c3bebf-30dd-4984-9b0a-9704866f8eb7","description":"<p>Mappings are used to indicate which of your database columns are associated with a specific custom field schema and are currently mapped.</p>\n","_postman_id":"72c3bebf-30dd-4984-9b0a-9704866f8eb7","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":true,"source":{"_postman_id":"08318820-cdd9-46ce-b82c-62251e9eddc4","id":"08318820-cdd9-46ce-b82c-62251e9eddc4","name":"API/v1 for Provider","type":"collection"}}},{"name":"Contacts","item":[{"name":"Contacts Create","id":"6aa9a890-8462-434f-a01b-37ba04e6e1a0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"identifier\": \"MY-UNIQUE-ID\",\n    \"MyCustomUniqueGroupName\": {\n        \"MyDatabaseContactNameColumn\": \"My Column Value\"\n    }\n}","options":{"raw":{"language":"json"}}},"url":"https://dev.alution.test/api/v1/contacts","description":"<h2 id=\"1-identifier\">1. <code>identifier</code></h2>\n<ul>\n<li><p><strong>Purpose:</strong> A unique key that identifies each record.</p>\n</li>\n<li><p><strong>Requirements:</strong></p>\n<ul>\n<li><p>Should match your database table's primary key.</p>\n</li>\n<li><p>Must be unique across all systems to avoid conflicts.</p>\n</li>\n<li><p>If your ID is just a number, prefix it with a short code representing your software (e.g., <code>\"serp-1\"</code> for \"Super-ERP\" with ID 1).</p>\n</li>\n</ul>\n</li>\n</ul>\n<p><strong>Example:</strong><br /><code>\"serp-1\"</code> instead of <code>\"1\"</code>.</p>\n<p><strong>Important:</strong><br />Never use just a number like <code>\"1\"</code> alone, as it could conflict with IDs from Alution.</p>\n<hr />\n<h2 id=\"2-wrapping-column-values\">2. Wrapping Column Values</h2>\n<ul>\n<li><p>Enclose your data fields inside the <strong>unique group</strong> you specified when importing your custom schema.</p>\n</li>\n<li><p><strong>Purpose:</strong></p>\n<ul>\n<li><p>Ensures the data abides by your schema's validation rules.</p>\n</li>\n<li><p>Data will only be processed if the fields are correctly mapped.</p>\n</li>\n</ul>\n</li>\n<li><p><strong>Note:</strong></p>\n<ul>\n<li><p>Unmapped fields, even if present in your group, will be ignored.</p>\n</li>\n<li><p>If your table has few fields and the total request size stays under 10MB, you can send all fields at once without special handling.</p>\n</li>\n</ul>\n</li>\n</ul>\n<hr />\n<h2 id=\"important\">Important</h2>\n<p>This data structure is used for both creating new records and updating existing ones for each model in your provider group.</p>\n","urlObject":{"path":["contacts"],"host":["https://dev.alution.test/api/v1"],"query":[],"variable":[]}},"response":[],"_postman_id":"6aa9a890-8462-434f-a01b-37ba04e6e1a0"},{"name":"Contacts Update","id":"51442db7-fa64-47fc-aa09-fe9f55887801","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":false},"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\n    \"identifier\": \"MY-UNIQUE-ID\",\n    \"MyCustomUniqueGroupName\": {\n        \"MyDatabaseContactLegalFormColumn\": \"GmbH\"\n    }\n}","options":{"raw":{"language":"json"}}},"url":"https://dev.alution.test/api/v1/contacts/{{identifier}}","description":"<h2 id=\"1-identifier\">1. <code>identifier</code></h2>\n<ul>\n<li><p><strong>Purpose:</strong> A unique key that identifies each record.</p>\n</li>\n<li><p><strong>Requirements:</strong></p>\n<ul>\n<li><p>Should match your database table's primary key.</p>\n</li>\n<li><p>Must be unique across all systems to avoid conflicts.</p>\n</li>\n<li><p>If your ID is just a number, prefix it with a short code representing your software (e.g., <code>\"serp-1\"</code> for \"Super-ERP\" with ID 1).</p>\n</li>\n</ul>\n</li>\n</ul>\n<p><strong>Example:</strong><br /><code>\"serp-1\"</code> instead of <code>\"1\"</code>.</p>\n<p><strong>Important:</strong><br />Never use just a number like <code>\"1\"</code> alone, as it could conflict with IDs from Alution.</p>\n<hr />\n<h2 id=\"2-wrapping-column-values\">2. Wrapping Column Values</h2>\n<ul>\n<li><p>Enclose your data fields inside the <strong>unique group</strong> you specified when importing your custom schema.</p>\n</li>\n<li><p><strong>Purpose:</strong></p>\n<ul>\n<li><p>Ensures the data abides by your schema's validation rules.</p>\n</li>\n<li><p>Data will only be processed if the fields are correctly mapped.</p>\n</li>\n</ul>\n</li>\n<li><p><strong>Note:</strong></p>\n<ul>\n<li><p>Unmapped fields, even if present in your group, will be ignored.</p>\n</li>\n<li><p>If your table has few fields and the total request size stays under 10MB, you can send all fields at once without special handling.</p>\n</li>\n</ul>\n</li>\n</ul>\n<hr />\n<h2 id=\"important\">Important</h2>\n<p>This data structure is used for both creating new records and updating existing ones for each model in your provider group.</p>\n","urlObject":{"path":["contacts","{{identifier}}"],"host":["https://dev.alution.test/api/v1"],"query":[],"variable":[]}},"response":[],"_postman_id":"51442db7-fa64-47fc-aa09-fe9f55887801"},{"name":"Contacts Index","id":"b057963c-5e52-4efb-aa71-d000ce86aa91","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":false},"method":"GET","header":[],"url":"https://dev.alution.test/api/v1/contacts?relations=customFieldSchemas&perPage=10&page=1","urlObject":{"path":["contacts"],"host":["https://dev.alution.test/api/v1"],"query":[{"description":{"content":"<p>Appending customFieldSchemas as a value to the relationsparameter, will ensure that your data is </p>\n","type":"text/plain"},"key":"relations","value":"customFieldSchemas"},{"description":{"content":"<p>Set the number of entries loaded per page. Keep in mind that loading too many entries or large items may cause a 403 error due to response size limitations in Nginx. It's better to keep the page size smaller and perform more frequent iterations, which is usually the more reliable approach.</p>\n","type":"text/plain"},"key":"perPage","value":"10"},{"description":{"content":"<p>The page you want to request.</p>\n","type":"text/plain"},"key":"page","value":"1"}],"variable":[]}},"response":[],"_postman_id":"b057963c-5e52-4efb-aa71-d000ce86aa91"},{"name":"Contacts Show","id":"2fb72617-8fe2-4011-8008-6f4ef0c62f70","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":false},"method":"GET","header":[],"url":"https://dev.alution.test/api/v1/contacts/{{contact_identifier}}?relations=customFieldSchemas","urlObject":{"path":["contacts","{{contact_identifier}}"],"host":["https://dev.alution.test/api/v1"],"query":[{"description":{"content":"<p>Appending customFieldSchemas as a value to the relationsparameter, will ensure that your data is </p>\n","type":"text/plain"},"key":"relations","value":"customFieldSchemas"}],"variable":[]}},"response":[],"_postman_id":"2fb72617-8fe2-4011-8008-6f4ef0c62f70"}],"id":"a10da4c2-40c3-4317-9bb5-048410243bc3","description":"<p>Contacts can be viewed as a folder, which has a name and contains multiple addresses. For example, a company named \"Jane Doe LLC\" might be represented as a contact named \"Jane Doe LLC\" or simply \"Jane Doe.\" Inside this contact, you store the addresses associated with the company, which might or might not be named after their locations.</p>\n<p>For instance, the company \"Jane Doe\" has a primary address in Germany and another in the USA, both belonging to the same company. These addresses are grouped together within the same contact.</p>\n<p>It's important to note that an address must always be within a contact. If your system does not support multiple addresses for a single contact, you should generate a separate contact for each address, ideally using the same or similar name. This approach has no negative effects and is a legitimate way to structure your data, especially when multiple addresses are not inherently supported.</p>\n","_postman_id":"a10da4c2-40c3-4317-9bb5-048410243bc3","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":true,"source":{"_postman_id":"08318820-cdd9-46ce-b82c-62251e9eddc4","id":"08318820-cdd9-46ce-b82c-62251e9eddc4","name":"API/v1 for Provider","type":"collection"}}},{"name":"Addresses","item":[{"name":"Addresses Create","id":"3221fc43-6ebf-4cb2-9b70-4d35e7c7c33c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"identifier\": \"MY-UNIQUE-ID\",\n    \"MyCustomUniqueGroupName\": {\n        \"MyOwnColumnName\": \"My Column Value\"\n    }\n}","options":{"raw":{"language":"json"}}},"url":"https://dev.alution.test/api/v1/contacts/{{contact_identifier}}/addresses","description":"<h2 id=\"1-identifier\">1. <code>identifier</code></h2>\n<ul>\n<li><p><strong>Purpose:</strong> A unique key that identifies each record.</p>\n</li>\n<li><p><strong>Requirements:</strong></p>\n<ul>\n<li><p>Should match your database table's primary key.</p>\n</li>\n<li><p>Must be unique across all systems to avoid conflicts.</p>\n</li>\n<li><p>If your ID is just a number, prefix it with a short code representing your software (e.g., <code>\"serp-1\"</code> for \"Super-ERP\" with ID 1).</p>\n</li>\n</ul>\n</li>\n</ul>\n<p><strong>Example:</strong><br /><code>\"serp-1\"</code> instead of <code>\"1\"</code>.</p>\n<p><strong>Important:</strong><br />Never use just a number like <code>\"1\"</code> alone, as it could conflict with IDs from Alution.</p>\n<hr />\n<h2 id=\"2-wrapping-column-values\">2. Wrapping Column Values</h2>\n<ul>\n<li><p>Enclose your data fields inside the <strong>unique group</strong> you specified when importing your custom schema.</p>\n</li>\n<li><p><strong>Purpose:</strong></p>\n<ul>\n<li><p>Ensures the data abides by your schema's validation rules.</p>\n</li>\n<li><p>Data will only be processed if the fields are correctly mapped.</p>\n</li>\n</ul>\n</li>\n<li><p><strong>Note:</strong></p>\n<ul>\n<li><p>Unmapped fields, even if present in your group, will be ignored.</p>\n</li>\n<li><p>If your table has few fields and the total request size stays under 10MB, you can send all fields at once without special handling.</p>\n</li>\n</ul>\n</li>\n</ul>\n<hr />\n<h2 id=\"important\">Important</h2>\n<p>This data structure is used for both creating new records and updating existing ones for each model in your provider group.</p>\n","urlObject":{"path":["contacts","{{contact_identifier}}","addresses"],"host":["https://dev.alution.test/api/v1"],"query":[],"variable":[]}},"response":[],"_postman_id":"3221fc43-6ebf-4cb2-9b70-4d35e7c7c33c"},{"name":"Addresses Index","id":"6b4a970e-44e1-41a5-9dcd-11eefc56269a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":false},"method":"GET","header":[],"url":"https://dev.alution.test/api/v1/contacts/{{contact_identifier}}/addresses?relations=customFieldSchemas&perPage=10&page=1","urlObject":{"path":["contacts","{{contact_identifier}}","addresses"],"host":["https://dev.alution.test/api/v1"],"query":[{"description":{"content":"<p>Appending customFieldSchemas as a value to the relationsparameter, will ensure that your data is </p>\n","type":"text/plain"},"key":"relations","value":"customFieldSchemas"},{"description":{"content":"<p>Set the number of entries loaded per page. Keep in mind that loading too many entries or large items may cause a 403 error due to response size limitations in Nginx. It's better to keep the page size smaller and perform more frequent iterations, which is usually the more reliable approach.</p>\n","type":"text/plain"},"key":"perPage","value":"10"},{"description":{"content":"<p>The page you want to request.</p>\n","type":"text/plain"},"key":"page","value":"1"}],"variable":[]}},"response":[],"_postman_id":"6b4a970e-44e1-41a5-9dcd-11eefc56269a"},{"name":"Addresses Show","id":"0c41c57a-0a0f-47e9-9048-886cc903d2c4","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":false},"method":"GET","header":[],"url":"https://dev.alution.test/api/v1/contacts/{{contact_identifier}}/addresses/{{address_identifier}}?relations=customFieldSchemas","urlObject":{"path":["contacts","{{contact_identifier}}","addresses","{{address_identifier}}"],"host":["https://dev.alution.test/api/v1"],"query":[{"description":{"content":"<p>Appending customFieldSchemas as a value to the relationsparameter, will ensure that your data is </p>\n","type":"text/plain"},"key":"relations","value":"customFieldSchemas"}],"variable":[]}},"response":[],"_postman_id":"0c41c57a-0a0f-47e9-9048-886cc903d2c4"}],"id":"50d0c85b-2d1f-4d55-94b3-433d18594066","description":"<p>Addresses describe the physical location of a company, as previously mentioned in the Contacts section. An address represents the entity that holds tickets, users, and projects in place within the system.</p>\n<p>Addresses are required to be contained within a contact. It is recommended to name the primary address similarly to the contact name, and indicate whether it is primary or secondary by including this in the address name.</p>\n<p>For example, if the contact is \"Jane Doe LLC,\" a primary address could be named \"Jane Doe LLC - Primary\" and a secondary address \"Jane Doe LLC - Secondary.\"</p>\n<p>This naming convention helps prevent confusion for users, as Alution allows searching for contacts and addresses. If addresses are only called \"Primary\" or \"Secondary,\" it can be difficult to distinguish between different entries when multiple addresses or contacts share the same name. Clear, descriptive naming improves search accuracy and usability.</p>\n","_postman_id":"50d0c85b-2d1f-4d55-94b3-433d18594066","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":true,"source":{"_postman_id":"08318820-cdd9-46ce-b82c-62251e9eddc4","id":"08318820-cdd9-46ce-b82c-62251e9eddc4","name":"API/v1 for Provider","type":"collection"}}},{"name":"Users","item":[{"name":"Users Create","id":"0eb49a5e-1339-44d5-8530-8eb899430011","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"identifier\": \"MY-UNIQUE-ID\",\n    \"MyCustomUniqueGroupName\": {\n        \"MyOwnColumnName\": \"My Column Value\"\n    }\n}","options":{"raw":{"language":"json"}}},"url":"https://dev.alution.test/api/v1/contacts/{{contact_id}}/addresses/{{address_id}}/users","description":"<h2 id=\"1-identifier\">1. <code>identifier</code></h2>\n<ul>\n<li><p><strong>Purpose:</strong> A unique key that identifies each record.</p>\n</li>\n<li><p><strong>Requirements:</strong></p>\n<ul>\n<li><p>Should match your database table's primary key.</p>\n</li>\n<li><p>Must be unique across all systems to avoid conflicts.</p>\n</li>\n<li><p>If your ID is just a number, prefix it with a short code representing your software (e.g., <code>\"serp-1\"</code> for \"Super-ERP\" with ID 1).</p>\n</li>\n</ul>\n</li>\n</ul>\n<p><strong>Example:</strong><br /><code>\"serp-1\"</code> instead of <code>\"1\"</code>.</p>\n<p><strong>Important:</strong><br />Never use just a number like <code>\"1\"</code> alone, as it could conflict with IDs from Alution.</p>\n<hr />\n<h2 id=\"2-wrapping-column-values\">2. Wrapping Column Values</h2>\n<ul>\n<li><p>Enclose your data fields inside the <strong>unique group</strong> you specified when importing your custom schema.</p>\n</li>\n<li><p><strong>Purpose:</strong></p>\n<ul>\n<li><p>Ensures the data abides by your schema's validation rules.</p>\n</li>\n<li><p>Data will only be processed if the fields are correctly mapped.</p>\n</li>\n</ul>\n</li>\n<li><p><strong>Note:</strong></p>\n<ul>\n<li><p>Unmapped fields, even if present in your group, will be ignored.</p>\n</li>\n<li><p>If your table has few fields and the total request size stays under 10MB, you can send all fields at once without special handling.</p>\n</li>\n</ul>\n</li>\n</ul>\n<hr />\n<h2 id=\"important\">Important</h2>\n<p>This data structure is used for both creating new records and updating existing ones for each model in your provider group.</p>\n","urlObject":{"path":["contacts","{{contact_id}}","addresses","{{address_id}}","users"],"host":["https://dev.alution.test/api/v1"],"query":[],"variable":[]}},"response":[],"_postman_id":"0eb49a5e-1339-44d5-8530-8eb899430011"},{"name":"Users Index","id":"79c5adee-28e3-427e-9ff5-71beb0a55c32","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":false},"method":"GET","header":[],"url":"https://dev.alution.test/api/v1/contacts/{{contact_identifier}}/addresses/{{address_identifier}}/users?relations=customFieldSchemas&perPage=10&page=1","urlObject":{"path":["contacts","{{contact_identifier}}","addresses","{{address_identifier}}","users"],"host":["https://dev.alution.test/api/v1"],"query":[{"description":{"content":"<p>Appending customFieldSchemas as a value to the relationsparameter, will ensure that your data is </p>\n","type":"text/plain"},"key":"relations","value":"customFieldSchemas"},{"description":{"content":"<p>Set the number of entries loaded per page. Keep in mind that loading too many entries or large items may cause a 403 error due to response size limitations in Nginx. It's better to keep the page size smaller and perform more frequent iterations, which is usually the more reliable approach.</p>\n","type":"text/plain"},"key":"perPage","value":"10"},{"description":{"content":"<p>The page you want to request.</p>\n","type":"text/plain"},"key":"page","value":"1"}],"variable":[]}},"response":[],"_postman_id":"79c5adee-28e3-427e-9ff5-71beb0a55c32"},{"name":"Users Show","id":"5548a3c5-f6d3-451a-a0fb-18ca1deadfbc","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":false},"method":"GET","header":[],"url":"https://dev.alution.test/api/v1/contacts/{{contact_identifier}}/addresses/{{address_identifier}}/users/{{user_udentifier}}?relations=customFieldSchemas","urlObject":{"path":["contacts","{{contact_identifier}}","addresses","{{address_identifier}}","users","{{user_udentifier}}"],"host":["https://dev.alution.test/api/v1"],"query":[{"description":{"content":"<p>Appending customFieldSchemas as a value to the relationsparameter, will ensure that your data is </p>\n","type":"text/plain"},"key":"relations","value":"customFieldSchemas"}],"variable":[]}},"response":[],"_postman_id":"5548a3c5-f6d3-451a-a0fb-18ca1deadfbc"}],"id":"a9c9cbfc-67b0-4f39-baf7-070abf8bf046","description":"<p>In Alution, users are not only individuals with full system access; they can also represent a person at a company's location, such as an employee or contact.</p>\n<p>It is mandatory that a user is always created within an address. This is because, in Alution, users are associated directly with addresses. For example, if Mr. Jon Doe works at the primary address of \"Jane Doe LLC,\" the user record for Jon Doe will be linked to that specific address. This setup allows you to see exactly where the user is located when viewing their details.</p>\n<p>This approach is also useful when dealing with guest access, as it enables limiting user permissions to only information related to their address or company.</p>\n<p>In Alution, the distinction between a customer or contact user and an employee/worker is made via the group permission \"can consume license.\"</p>\n<ul>\n<li><p>If the user has this permission enabled, they are considered an employee and will be billed or valued as such.</p>\n</li>\n<li><p>If not, they are treated as a contact user or guest, with limited access.</p>\n</li>\n</ul>\n<p>This structure helps manage user roles, permissions, and billing appropriately, based on their relationship to the company and their intended system usage.</p>\n","_postman_id":"a9c9cbfc-67b0-4f39-baf7-070abf8bf046","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":true,"source":{"_postman_id":"08318820-cdd9-46ce-b82c-62251e9eddc4","id":"08318820-cdd9-46ce-b82c-62251e9eddc4","name":"API/v1 for Provider","type":"collection"}}},{"name":"Projects","item":[{"name":"Projects Create","id":"a88057c9-35ba-42c1-bb71-e61a20f27786","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"identifier\": \"MY-UNIQUE-ID\",\n    \"MyCustomUniqueGroupName\": {\n        \"MyOwnColumnName\": \"My Column Value\"\n    }\n}","options":{"raw":{"language":"json"}}},"url":"https://dev.alution.test/api/v1/contacts/{{contact_identifier}}/addresses/{{address_identifier}}/projects","description":"<h2 id=\"1-identifier\">1. <code>identifier</code></h2>\n<ul>\n<li><p><strong>Purpose:</strong> A unique key that identifies each record.</p>\n</li>\n<li><p><strong>Requirements:</strong></p>\n<ul>\n<li><p>Should match your database table's primary key.</p>\n</li>\n<li><p>Must be unique across all systems to avoid conflicts.</p>\n</li>\n<li><p>If your ID is just a number, prefix it with a short code representing your software (e.g., <code>\"serp-1\"</code> for \"Super-ERP\" with ID 1).</p>\n</li>\n</ul>\n</li>\n</ul>\n<p><strong>Example:</strong><br /><code>\"serp-1\"</code> instead of <code>\"1\"</code>.</p>\n<p><strong>Important:</strong><br />Never use just a number like <code>\"1\"</code> alone, as it could conflict with IDs from Alution.</p>\n<hr />\n<h2 id=\"2-wrapping-column-values\">2. Wrapping Column Values</h2>\n<ul>\n<li><p>Enclose your data fields inside the <strong>unique group</strong> you specified when importing your custom schema.</p>\n</li>\n<li><p><strong>Purpose:</strong></p>\n<ul>\n<li><p>Ensures the data abides by your schema's validation rules.</p>\n</li>\n<li><p>Data will only be processed if the fields are correctly mapped.</p>\n</li>\n</ul>\n</li>\n<li><p><strong>Note:</strong></p>\n<ul>\n<li><p>Unmapped fields, even if present in your group, will be ignored.</p>\n</li>\n<li><p>If your table has few fields and the total request size stays under 10MB, you can send all fields at once without special handling.</p>\n</li>\n</ul>\n</li>\n</ul>\n<hr />\n<h2 id=\"important\">Important</h2>\n<p>This data structure is used for both creating new records and updating existing ones for each model in your provider group.</p>\n","urlObject":{"path":["contacts","{{contact_identifier}}","addresses","{{address_identifier}}","projects"],"host":["https://dev.alution.test/api/v1"],"query":[],"variable":[]}},"response":[],"_postman_id":"a88057c9-35ba-42c1-bb71-e61a20f27786"},{"name":"Projects Index","id":"7e23ec34-2482-48cd-8cfe-56e3fa49b506","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":false},"method":"GET","header":[],"url":"https://dev.alution.test/api/v1/contacts/{{contact_identifier}}/addresses/{{address_identifier}}/projects?relations=customFieldSchemas&perPage=10&page=1","urlObject":{"path":["contacts","{{contact_identifier}}","addresses","{{address_identifier}}","projects"],"host":["https://dev.alution.test/api/v1"],"query":[{"description":{"content":"<p>Appending customFieldSchemas as a value to the relationsparameter, will ensure that your data is </p>\n","type":"text/plain"},"key":"relations","value":"customFieldSchemas"},{"description":{"content":"<p>Set the number of entries loaded per page. Keep in mind that loading too many entries or large items may cause a 403 error due to response size limitations in Nginx. It's better to keep the page size smaller and perform more frequent iterations, which is usually the more reliable approach.</p>\n","type":"text/plain"},"key":"perPage","value":"10"},{"description":{"content":"<p>The page you want to request.</p>\n","type":"text/plain"},"key":"page","value":"1"}],"variable":[]}},"response":[],"_postman_id":"7e23ec34-2482-48cd-8cfe-56e3fa49b506"},{"name":"Projects Show","id":"e8b9f880-0b2e-4e03-9e2f-fc03bacad08b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":false},"method":"GET","header":[],"url":"https://dev.alution.test/api/v1/contacts/{{contact_identifier}}/addresses/{{address_identifier}}/projects/{{project_identifier}}/?relations=customFieldSchemas","urlObject":{"path":["contacts","{{contact_identifier}}","addresses","{{address_identifier}}","projects","{{project_identifier}}",""],"host":["https://dev.alution.test/api/v1"],"query":[{"description":{"content":"<p>Appending customFieldSchemas as a value to the relationsparameter, will ensure that your data is </p>\n","type":"text/plain"},"key":"relations","value":"customFieldSchemas"}],"variable":[]}},"response":[],"_postman_id":"e8b9f880-0b2e-4e03-9e2f-fc03bacad08b"}],"id":"5063fe0f-cbbe-4e3e-b0a7-bb9b481c0554","description":"<p>Projects are currently represented as a group entity in the system. When syncing projects to an address, the project will become available for selection during ticket creation. This setup allows you to directly associate a ticket with a project at the moment of closing or when transferring data back to your software, facilitating seamless project management and integration.</p>\n","_postman_id":"5063fe0f-cbbe-4e3e-b0a7-bb9b481c0554","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":true,"source":{"_postman_id":"08318820-cdd9-46ce-b82c-62251e9eddc4","id":"08318820-cdd9-46ce-b82c-62251e9eddc4","name":"API/v1 for Provider","type":"collection"}}},{"name":"Products","item":[{"name":"Products Create","id":"24a8436b-d57d-43ab-8507-ace814a54f5e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"identifier\": \"MY-UNIQUE-ID\",\n    \"MyCustomUniqueGroupName\": {\n        \"MyOwnColumnName\": \"My Column Value\"\n    }\n}","options":{"raw":{"language":"json"}}},"url":"https://dev.alution.test/api/v1/products","description":"<h2 id=\"1-identifier\">1. <code>identifier</code></h2>\n<ul>\n<li><p><strong>Purpose:</strong> A unique key that identifies each record.</p>\n</li>\n<li><p><strong>Requirements:</strong></p>\n<ul>\n<li><p>Should match your database table's primary key.</p>\n</li>\n<li><p>Must be unique across all systems to avoid conflicts.</p>\n</li>\n<li><p>If your ID is just a number, prefix it with a short code representing your software (e.g., <code>\"serp-1\"</code> for \"Super-ERP\" with ID 1).</p>\n</li>\n</ul>\n</li>\n</ul>\n<p><strong>Example:</strong><br /><code>\"serp-1\"</code> instead of <code>\"1\"</code>.</p>\n<p><strong>Important:</strong><br />Never use just a number like <code>\"1\"</code> alone, as it could conflict with IDs from Alution.</p>\n<hr />\n<h2 id=\"2-wrapping-column-values\">2. Wrapping Column Values</h2>\n<ul>\n<li><p>Enclose your data fields inside the <strong>unique group</strong> you specified when importing your custom schema.</p>\n</li>\n<li><p><strong>Purpose:</strong></p>\n<ul>\n<li><p>Ensures the data abides by your schema's validation rules.</p>\n</li>\n<li><p>Data will only be processed if the fields are correctly mapped.</p>\n</li>\n</ul>\n</li>\n<li><p><strong>Note:</strong></p>\n<ul>\n<li><p>Unmapped fields, even if present in your group, will be ignored.</p>\n</li>\n<li><p>If your table has few fields and the total request size stays under 10MB, you can send all fields at once without special handling.</p>\n</li>\n</ul>\n</li>\n</ul>\n<hr />\n<h2 id=\"important\">Important</h2>\n<p>This data structure is used for both creating new records and updating existing ones for each model in your provider group.</p>\n","urlObject":{"path":["products"],"host":["https://dev.alution.test/api/v1"],"query":[],"variable":[]}},"response":[],"_postman_id":"24a8436b-d57d-43ab-8507-ace814a54f5e"},{"name":"Products Index","id":"04098a94-57e3-4f73-92e3-e62c94cd94ee","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":false},"method":"GET","header":[],"url":"https://dev.alution.test/api/v1/products?relations=customFieldSchemas&perPage=10&page=1","urlObject":{"path":["products"],"host":["https://dev.alution.test/api/v1"],"query":[{"description":{"content":"<p>Appending customFieldSchemas as a value to the relationsparameter, will ensure that your data is </p>\n","type":"text/plain"},"key":"relations","value":"customFieldSchemas"},{"description":{"content":"<p>Set the number of entries loaded per page. Keep in mind that loading too many entries or large items may cause a 403 error due to response size limitations in Nginx. It's better to keep the page size smaller and perform more frequent iterations, which is usually the more reliable approach.</p>\n","type":"text/plain"},"key":"perPage","value":"10"},{"description":{"content":"<p>The page you want to request.</p>\n","type":"text/plain"},"key":"page","value":"1"}],"variable":[]}},"response":[],"_postman_id":"04098a94-57e3-4f73-92e3-e62c94cd94ee"},{"name":"Products Show","id":"622b1333-35d0-4a42-b934-76099cc77bd4","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":false},"method":"GET","header":[],"url":"https://dev.alution.test/api/v1/products/{{product_identifier}}?relations=customFieldSchemas","urlObject":{"path":["products","{{product_identifier}}"],"host":["https://dev.alution.test/api/v1"],"query":[{"description":{"content":"<p>Appending customFieldSchemas as a value to the relationsparameter, will ensure that your data is </p>\n","type":"text/plain"},"key":"relations","value":"customFieldSchemas"}],"variable":[]}},"response":[],"_postman_id":"622b1333-35d0-4a42-b934-76099cc77bd4"}],"id":"d82f75ca-a42a-479f-9ad9-a3983843f249","description":"<p>Products are currently managed exclusively via the API. This is a crucial component, especially if your system is used for time-tracking or if products need to be added directly within a ticket.</p>\n<p>Products can be linked directly to a ticket or combined with a time record, which will be used when transferring a time-entry along with a closed ticket back to your software. For example, when a ticket is closed and a transfer-type is specified, the associated products and time-records will be included in the transfer, ensuring comprehensive and accurate data synchronization.</p>\n","_postman_id":"d82f75ca-a42a-479f-9ad9-a3983843f249","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":true,"source":{"_postman_id":"08318820-cdd9-46ce-b82c-62251e9eddc4","id":"08318820-cdd9-46ce-b82c-62251e9eddc4","name":"API/v1 for Provider","type":"collection"}}},{"name":"Transfer-Types","item":[{"name":"Transfer-Types","id":"844dd011-6032-405f-8505-1847b22ff922","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"identifier\": \"MY-UNIQUE-ID\",\n    \"MyCustomUniqueGroupName\": {\n        \"MyOwnColumnName\": \"My Column Value\"\n    }\n}","options":{"raw":{"language":"json"}}},"url":"https://dev.alution.test/api/v1/transfer-types","description":"<h2 id=\"1-identifier\">1. <code>identifier</code></h2>\n<ul>\n<li><p><strong>Purpose:</strong> A unique key that identifies each record.</p>\n</li>\n<li><p><strong>Requirements:</strong></p>\n<ul>\n<li><p>Should match your database table's primary key.</p>\n</li>\n<li><p>Must be unique across all systems to avoid conflicts.</p>\n</li>\n<li><p>If your ID is just a number, prefix it with a short code representing your software (e.g., <code>\"serp-1\"</code> for \"Super-ERP\" with ID 1).</p>\n</li>\n</ul>\n</li>\n</ul>\n<p><strong>Example:</strong><br /><code>\"serp-1\"</code> instead of <code>\"1\"</code>.</p>\n<p><strong>Important:</strong><br />Never use just a number like <code>\"1\"</code> alone, as it could conflict with IDs from Alution.</p>\n<hr />\n<h2 id=\"2-wrapping-column-values\">2. Wrapping Column Values</h2>\n<ul>\n<li><p>Enclose your data fields inside the <strong>unique group</strong> you specified when importing your custom schema.</p>\n</li>\n<li><p><strong>Purpose:</strong></p>\n<ul>\n<li><p>Ensures the data abides by your schema's validation rules.</p>\n</li>\n<li><p>Data will only be processed if the fields are correctly mapped.</p>\n</li>\n</ul>\n</li>\n<li><p><strong>Note:</strong></p>\n<ul>\n<li><p>Unmapped fields, even if present in your group, will be ignored.</p>\n</li>\n<li><p>If your table has few fields and the total request size stays under 10MB, you can send all fields at once without special handling.</p>\n</li>\n</ul>\n</li>\n</ul>\n<hr />\n<h2 id=\"important\">Important</h2>\n<p>This data structure is used for both creating new records and updating existing ones for each model in your provider group.</p>\n","urlObject":{"path":["transfer-types"],"host":["https://dev.alution.test/api/v1"],"query":[],"variable":[]}},"response":[],"_postman_id":"844dd011-6032-405f-8505-1847b22ff922"},{"name":"Transfer-Types Index","id":"8aff6918-3fca-4eda-bc76-44d21f56d27c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":false},"method":"GET","header":[],"url":"https://dev.alution.test/api/v1/contacts?relations=customFieldSchemas&perPage=10&page=1","urlObject":{"path":["contacts"],"host":["https://dev.alution.test/api/v1"],"query":[{"description":{"content":"<p>Appending customFieldSchemas as a value to the relationsparameter, will ensure that your data is </p>\n","type":"text/plain"},"key":"relations","value":"customFieldSchemas"},{"description":{"content":"<p>Set the number of entries loaded per page. Keep in mind that loading too many entries or large items may cause a 403 error due to response size limitations in Nginx. It's better to keep the page size smaller and perform more frequent iterations, which is usually the more reliable approach.</p>\n","type":"text/plain"},"key":"perPage","value":"10"},{"description":{"content":"<p>The page you want to request.</p>\n","type":"text/plain"},"key":"page","value":"1"}],"variable":[]}},"response":[],"_postman_id":"8aff6918-3fca-4eda-bc76-44d21f56d27c"},{"name":"Transfer-Types Show","id":"2f4b1cfa-61ca-441d-94af-a3869d427937","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":false},"method":"GET","header":[],"url":"https://dev.alution.test/api/v1/contacts/MY-UNIQUE-ID?relations=customFieldSchemas","urlObject":{"path":["contacts","MY-UNIQUE-ID"],"host":["https://dev.alution.test/api/v1"],"query":[{"description":{"content":"<p>Appending customFieldSchemas as a value to the relationsparameter, will ensure that your data is </p>\n","type":"text/plain"},"key":"relations","value":"customFieldSchemas"}],"variable":[]}},"response":[],"_postman_id":"2f4b1cfa-61ca-441d-94af-a3869d427937"}],"id":"9d001285-2b67-4285-853e-e0960ce6a316","description":"<p>Transfer-Types are definitions provided by your software to specify the category or nature of a process, such as offers, invoices, projects, or other document types. Transfer-Types typically include offers, invoices, projects, purchase orders, and delivery notes.</p>\n<p>When a ticket is closed, a Transfer-Type can be selected to indicate what the ticket should represent and where it should be added within your system. Some ERPs allow creating custom categories, but at their core, these are variations of the same concept. These transfer-types enable synchronization to Alution, allowing customers to activate custom transfer options.</p>\n<p>For instance, closing a ticket could automatically add the ticket to the \"Tickets\" category inside your ERP system. If your system does not support custom categories, you need to define at least one transfer-type to enable the transfer of tickets into your system effectively.</p>\n","_postman_id":"9d001285-2b67-4285-853e-e0960ce6a316","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":true,"source":{"_postman_id":"08318820-cdd9-46ce-b82c-62251e9eddc4","id":"08318820-cdd9-46ce-b82c-62251e9eddc4","name":"API/v1 for Provider","type":"collection"}}},{"name":"Transfers","item":[{"name":"Transfers Index","id":"74a44a98-a1e0-4a67-ac4b-2049d6310295","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://dev.alution.test/api/v1/transfers?type=ticket&relations=transferable.timeRecords.recordType.product.customFieldSchemas,transferable.products.customFieldSchemas,transferable.address.customFieldSchemas,transferable.project.customFieldSchemas","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":true,"source":{"_postman_id":"08318820-cdd9-46ce-b82c-62251e9eddc4","id":"08318820-cdd9-46ce-b82c-62251e9eddc4","name":"API/v1 for Provider","type":"collection"}},"urlObject":{"path":["transfers"],"host":["https://dev.alution.test/api/v1"],"query":[{"description":{"content":"<p>Currently, only \"ticket\" is available.</p>\n","type":"text/plain"},"key":"type","value":"ticket"},{"description":{"content":"<p>Optional relationships to retrieve all related data associated with this Ticket transfer, such as products, time records, etc., and the ticket itself.</p>\n","type":"text/plain"},"key":"relations","value":"transferable.timeRecords.recordType.product.customFieldSchemas,transferable.products.customFieldSchemas,transferable.address.customFieldSchemas,transferable.project.customFieldSchemas"}],"variable":[]}},"response":[{"id":"d51c611b-ec89-4a8f-8419-e442448a37ae","name":"Transfers Index","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://dev.alution.test/api/v1/transfers?type=ticket&relations=transferable.timeRecords.recordType.product.customFieldSchemas,transferable.products.customFieldSchemas,transferable.address.customFieldSchemas,transferable.project.customFieldSchemas","host":["https://dev.alution.test/api/v1"],"path":["transfers"],"query":[{"key":"type","value":"ticket","description":"Currently, only \"ticket\" is available."},{"key":"relations","value":"transferable.timeRecords.recordType.product.customFieldSchemas,transferable.products.customFieldSchemas,transferable.address.customFieldSchemas,transferable.project.customFieldSchemas","description":"Optional relationships to retrieve all related data associated with this Ticket transfer, such as products, time records, etc., and the ticket itself."}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Server","value":"nginx/1.27.4"},{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"Vary","value":"Accept-Encoding"},{"key":"X-Powered-By","value":"PHP/8.4.4"},{"key":"Cache-Control","value":"no-cache, private"},{"key":"Date","value":"Fri, 25 Jul 2025 09:12:23 GMT"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Content-Encoding","value":"gzip"}],"cookie":[],"responseTime":null,"body":"{\n    \"data\": [\n        {\n            \"id\": 1,\n            \"transferred_at\": null,\n            \"response_status\": null,\n            \"response_message\": null,\n            \"response_data\": null,\n            \"transferable_type\": \"ticket\",\n            \"transferable_id\": 1,\n            \"custom_date\": null,\n            \"transfer_type_reference\": null,\n            \"transferType\": {\n                \"id\": 1,\n                \"identifier\": \"bsoft-vg-1\",\n                \"name\": \"Rechnungsvorgang\",\n                \"description\": \"Der Ticket wird beim Übertragen in eine Rechnung innerhalb von Buttlersoft umgewandelt.\\n\\n\",\n                \"definitions\": null,\n                \"is_active\": 1,\n                \"is_globally_available\": 1,\n                \"icon\": \"\",\n                \"related_type\": \"ticket\",\n                \"created_at\": null,\n                \"updated_at\": null,\n                \"deleted_at\": null,\n                \"reference_template\": \"\"\n            },\n            \"transferable\": {\n                \"id\": 1,\n                \"title\": \"Drucker funktioniert nicht\",\n                \"description\": null,\n                \"address_id\": 42,\n                \"closed_at\": \"2025-07-25T09:09:29.000000Z\",\n                \"closed_by\": 1,\n                \"reopened_at\": null,\n                \"reopened_by\": null,\n                \"created_at\": \"2025-07-25T08:31:11.000000Z\",\n                \"created_by\": 1,\n                \"transfer_note\": null,\n                \"review_survey_requested\": 0,\n                \"is_locked\": 0,\n                \"reference\": null,\n                \"address\": {\n                    \"id\": 42,\n                    \"identifier\": \"bsoft-kdr-1069\",\n                    \"name\": \"Dr. Dovie Stanton\",\n                    \"email\": \"rolfson.coby@example.org\",\n                    \"phone\": \"+1-678-252-8594\",\n                    \"fax\": \"ut\",\n                    \"floor_number\": \"dolores\",\n                    \"street_name\": \"Ramon Larkin\",\n                    \"street_number\": \"Nienow Tunnel\",\n                    \"zip_code\": \"75686-0798\",\n                    \"city\": \"Lake Shawna\",\n                    \"state_province\": \"ab\",\n                    \"country\": \"Somalia\",\n                    \"website\": \"explicabo\",\n                    \"description\": \"Nam quia dolorem voluptatem perferendis quae laborum. Nobis commodi et sit eum aperiam expedita. Non omnis deleniti qui molestias repellat quibusdam.\",\n                    \"latitude\": \"67.317146\",\n                    \"longitude\": \"-55.578271\",\n                    \"is_primary_address\": 1,\n                    \"BpNexT\": {\n                        \"AnsNr\": null,\n                        \"AdrNr\": null,\n                        \"AendDat\": \"1970-01-01T13:37:00.0000000Z\"\n                    }\n                },\n                \"project\": null,\n                \"timeRecords\": [\n                    {\n                        \"id\": 1,\n                        \"run_seconds\": 2280,\n                        \"paused_seconds\": 0,\n                        \"total_seconds\": 2280,\n                        \"math_script_result\": 4,\n                        \"finished_recording\": 1,\n                        \"recorded_by\": 1,\n                        \"updated_by\": 1,\n                        \"record_type_id\": 1,\n                        \"started_at\": \"2025-07-25T11:37:00.000000Z\",\n                        \"finished_at\": \"2025-07-25T12:15:00.000000Z\",\n                        \"created_at\": \"2025-07-25T09:08:12.000000Z\",\n                        \"updated_at\": \"2025-07-25T09:09:14.000000Z\",\n                        \"timeRecordObject\": {\n                            \"content\": \"<ul><li><p>Verbindung zum Drucker von Frau Dr. Dr. Rebeka Nitzsche via Fernwartung hergestellt</p></li><li><p>Diagnose des Problems (Verbindungs- und Treiberprobleme) durchgeführt</p></li><li><p>Software- und Treiberaktualisierungen eingespielt</p></li><li><p>Einstellungen am Drucker überprüft und angepasst</p></li><li><p>Netzwerkverbindung stabilisiert</p></li><li><p>Drucker erfolgreich getestet und Funktion bestätigt</p></li></ul>\",\n                            \"content_templated\": \"<p>Dienstleistung per Fernwartung</p><p>durchgeführt von Administrator  am 25.07.2025</p><p>von 13:37 Uhr bis 14:15 Uhr</p><p>1 AW entspricht 10 min</p><p>durchgeführte Tätigkeiten: <ul><li><p>Verbindung zum Drucker von Frau Dr. Dr. Rebeka Nitzsche via Fernwartung hergestellt</p></li><li><p>Diagnose des Problems (Verbindungs- und Treiberprobleme) durchgeführt</p></li><li><p>Software- und Treiberaktualisierungen eingespielt</p></li><li><p>Einstellungen am Drucker überprüft und angepasst</p></li><li><p>Netzwerkverbindung stabilisiert</p></li><li><p>Drucker erfolgreich getestet und Funktion bestätigt</p></li></ul></p>\",\n                            \"discount_in_percent\": 0\n                        },\n                        \"recordedBy\": {\n                            \"id\": 1,\n                            \"identifier\": null,\n                            \"name\": \"administrator\",\n                            \"first_name\": \"Administrator\",\n                            \"middle_name\": null,\n                            \"last_name\": null,\n                            \"display_name\": \"Administrator \",\n                            \"email\": null,\n                            \"full_name\": \"Administrator\",\n                            \"department\": null,\n                            \"position\": null,\n                            \"avatar_url\": \"\",\n                            \"created_at\": \"2025-07-25T08:30:38.000000Z\",\n                            \"updated_at\": \"2025-07-25T08:30:38.000000Z\",\n                            \"deleted_at\": null\n                        },\n                        \"recordType\": {\n                            \"id\": 1,\n                            \"name\": \"Fernwartung\",\n                            \"math_script_id\": 1,\n                            \"product_id\": 1,\n                            \"created_at\": \"2025-07-25T09:02:38.000000Z\",\n                            \"updated_at\": \"2025-07-25T09:06:39.000000Z\",\n                            \"product\": {\n                                \"id\": 1,\n                                \"identifier\": \"bsoft-art-1337\",\n                                \"global_trade_item_number\": \"1234567890\",\n                                \"name\": \"Dienstleistung per Fernwartung\",\n                                \"description\": \"Dienstleistungsarbeiten per Fernwartung\",\n                                \"unit\": \"AW\",\n                                \"price\": 120,\n                                \"cost\": null,\n                                \"stock_quantity\": 0,\n                                \"product_type\": null,\n                                \"amount\": null,\n                                \"discount\": null,\n                                \"created_at\": null,\n                                \"updated_at\": null,\n                                \"pivot.created_at\": null,\n                                \"pivot.created_by\": null,\n                                \"BpNexT\": {\n                                    \"ArtNr\": null,\n                                    \"Einh\": null,\n                                    \"Bez1\": null,\n                                    \"AendDat\": \"1970-01-01T13:37:00.0000000Z\"\n                                }\n                            }\n                        }\n                    }\n                ],\n                \"products\": []\n            }\n        }\n    ]\n}"}],"_postman_id":"74a44a98-a1e0-4a67-ac4b-2049d6310295"},{"name":"Transfers Update","event":[{"listen":"test","script":{"id":"66db36f9-19c1-4a20-bd15-f2b8bcaf3802","exec":[""],"type":"text/javascript","packages":{}}}],"id":"ef80b670-75be-4995-abf6-fb8341ae5429","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\n    \"response_status\": 200,\n    \"response_message\": \"Die Rechnung wurde erfolgreich unter der Rechnungsnummer RE251337 erstellt!\",\n    \"response_data\": {}\n}","options":{"raw":{"language":"json"}}},"url":"https://dev.alution.test/api/v1/transfers/{{transfer_id}}","description":"<p>After you have fetched a transfer and successfully handled the ticket within your software, you must notify Alution about the outcome. This involves PATCHing the transfer object with status information to indicate whether the transfer was successful or if it failed, along with the reason for failure if applicable.</p>\n<p><strong>Important notes:</strong></p>\n<ul>\n<li><p>Once a ticket has been transferred successfully, it cannot be reopened (via the frontend view).</p>\n</li>\n<li><p>During an ongoing transfer, the user can cancel or retry the transfer, but after completion, the ticket's state is final.</p>\n</li>\n</ul>\n<h3 id=\"what-to-send-in-the-patch-request\">What to send in the PATCH request:</h3>\n<p>You should include the following fields:</p>\n<ul>\n<li><p><strong><code>response_status</code></strong>:<br />  An integer representing the HTTP status code indicating the transfer result such like</p>\n<ul>\n<li><p><code>200</code> for success (transfer completed successfully).</p>\n</li>\n<li><p><code>422</code> for failed transfer (unprocessed entity), which should include a <code>response_message</code> explaining the reason.</p>\n</li>\n<li><p>any other matching HTTP status code</p>\n</li>\n</ul>\n</li>\n<li><p><strong><code>response_message</code></strong> (optional):<br />  A string containing the reason for failure or additional information.</p>\n</li>\n<li><p><strong><code>response_data</code></strong> (optional):<br />  An array containing related data if needed. Currently, it can be empty or omitted.</p>\n</li>\n</ul>\n<h3 id=\"effect-of-response_status\">Effect of response_status:</h3>\n<ul>\n<li><p>When set to <strong>200</strong>, Alution marks the transfer as successful:</p>\n<ul>\n<li><p>The ticket will be locked.</p>\n</li>\n<li><p>If configured, a badge job will be triggered.</p>\n</li>\n<li><p>The transfer object will be removed upon future GET requests to the index endpoint.</p>\n</li>\n</ul>\n</li>\n<li><p>When set to <strong>422</strong> or other error codes, Alution will interpret this as a failure and handle it accordingly, with the <code>response_message</code> providing the reason.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":true,"source":{"_postman_id":"08318820-cdd9-46ce-b82c-62251e9eddc4","id":"08318820-cdd9-46ce-b82c-62251e9eddc4","name":"API/v1 for Provider","type":"collection"}},"urlObject":{"path":["transfers","{{transfer_id}}"],"host":["https://dev.alution.test/api/v1"],"query":[],"variable":[]}},"response":[{"id":"29457751-8822-4f4c-a15c-338b49d44d52","name":"Transfers Update","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\n    \"response_status\": 200,\n    \"response_message\": \"Die Rechnung wurde erfolgreich unter der Rechnungsnummer RE251337 erstellt!\",\n    \"response_data\": {}\n}","options":{"raw":{"language":"json"}}},"url":"https://dev.alution.test/api/v1/transfers/{{transfer_id}}"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Server","value":"nginx/1.27.4"},{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"Vary","value":"Accept-Encoding"},{"key":"X-Powered-By","value":"PHP/8.4.4"},{"key":"Cache-Control","value":"no-cache, private"},{"key":"Date","value":"Fri, 25 Jul 2025 10:03:30 GMT"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Content-Encoding","value":"gzip"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 1,\n    \"transferred_at\": \"2025-07-25T10:03:30.526277Z\",\n    \"response_status\": 200,\n    \"response_message\": \"Die Rechnung wurde erfolgreich unter der Rechnungsnummer RE251337 erstellt!\",\n    \"response_data\": [],\n    \"transferable_type\": \"ticket\",\n    \"transferable_id\": 1,\n    \"custom_date\": null,\n    \"transfer_type_reference\": null,\n    \"transferType\": {\n        \"id\": 1,\n        \"identifier\": \"bsoft-vg-1\",\n        \"name\": \"Rechnungsvorgang\",\n        \"description\": \"Der Ticket wird beim Übertragen in eine Rechnung innerhalb von Buttlersoft umgewandelt.\\n\\n\",\n        \"definitions\": null,\n        \"is_active\": 1,\n        \"is_globally_available\": 1,\n        \"icon\": \"\",\n        \"related_type\": \"ticket\",\n        \"created_at\": null,\n        \"updated_at\": null,\n        \"deleted_at\": null,\n        \"reference_template\": \"\"\n    },\n    \"transferable\": {\n        \"id\": 1,\n        \"title\": \"Drucker funktioniert nicht\",\n        \"description\": null,\n        \"address_id\": 42,\n        \"closed_at\": \"2025-07-25T09:09:29.000000Z\",\n        \"closed_by\": 1,\n        \"reopened_at\": null,\n        \"reopened_by\": null,\n        \"created_at\": \"2025-07-25T08:31:11.000000Z\",\n        \"created_by\": 1,\n        \"transfer_note\": null,\n        \"review_survey_requested\": 0,\n        \"is_locked\": 0,\n        \"reference\": null\n    }\n}"}],"_postman_id":"ef80b670-75be-4995-abf6-fb8341ae5429"}],"id":"f4fe76a8-9841-48bf-9703-04e32731b05a","description":"<p>Transfers in Alution are the process of moving a ticket or data from alution into your software. This could mean converting a ticket into an invoice, sending it to an external system.</p>\n<p>Once a transfer is completed successfully, the ticket becomes locked and cannot be reopened. If the transfer fails, it remains possible to retry or cancel the process.</p>\n","_postman_id":"f4fe76a8-9841-48bf-9703-04e32731b05a","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":true,"source":{"_postman_id":"08318820-cdd9-46ce-b82c-62251e9eddc4","id":"08318820-cdd9-46ce-b82c-62251e9eddc4","name":"API/v1 for Provider","type":"collection"}}},{"name":"Providers","item":[{"name":"Providers Create","id":"bfa232bf-e84e-4130-96f2-bacf1d787381","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"name\": \"Buttlersoft\",\n    \"description\": \"Keeping track of your customers, while providing the cleanest services!\",\n    \"group\": \"BSoft\",\n    \"legal_name\": \"Victoria Housekeeping Co.\",\n    \"privacy_policy_url\": \"https://bsoft.com/privacy\",\n    \"support_url\": \"https://bsoft.com/support\",\n    \"manual_field_mapping_disabled\": false\n}","options":{"raw":{"language":"json"}}},"url":"https://dev.alution.test/api/v1/providers","urlObject":{"path":["providers"],"host":["https://dev.alution.test/api/v1"],"query":[],"variable":[]}},"response":[{"id":"b311955f-11a1-41c9-935a-8de82876c982","name":"Providers Create","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"name\": \"Buttlersoft\",\n    \"description\": \"Keeping track of your customers, while providing the cleanest services!\",\n    \"group\": \"BSoft\",\n    \"legal_name\": \"Victoria Housekeeping Co.\",\n    \"privacy_policy_url\": \"https://bsoft.com/privacy\",\n    \"support_url\": \"https://bsoft.com/support\"\n}","options":{"raw":{"language":"json"}}},"url":"https://dev.alution.test/api/v1/providers"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Server","value":"nginx/1.27.4"},{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"X-Powered-By","value":"PHP/8.4.4"},{"key":"Cache-Control","value":"no-cache, private"},{"key":"Date","value":"Wed, 23 Jul 2025 10:44:50 GMT"},{"key":"Access-Control-Allow-Origin","value":"*"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 1,\n    \"name\": \"Buttlersoft\",\n    \"description\": \"Keeping track of your customers, while providing the cleanest services!\",\n    \"group\": \"BSoft\",\n    \"legal_name\": \"Victoria Housekeeping Co.\",\n    \"privacy_policy_url\": \"https://bsoft.com/privacy\",\n    \"support_url\": null,\n    \"created_at\": \"2025-07-23T10:44:50.000000Z\",\n    \"updated_at\": \"2025-07-23T10:44:50.000000Z\"\n}"}],"_postman_id":"bfa232bf-e84e-4130-96f2-bacf1d787381"},{"name":"Providers Show","id":"215052c1-eff4-4430-b9b5-9a221fca4822","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":false},"method":"GET","header":[],"url":"https://dev.alution.test/api/v1/providers/{{group_or_id}}?relations=settings","urlObject":{"path":["providers","{{group_or_id}}"],"host":["https://dev.alution.test/api/v1"],"query":[{"key":"relations","value":"settings"}],"variable":[]}},"response":[],"_postman_id":"215052c1-eff4-4430-b9b5-9a221fca4822"}],"id":"ed8bceb7-80f0-4876-8cf0-247c41d7ad63","description":"<p><strong>Registering as a Provider and Binding Your Group</strong></p>\n<p>To maximize your integration's capabilities, you have the option to register your group as a provider and associate it with your software or organization. While optional, this step is highly recommended to enhance your user experience and streamline operations.</p>\n<p><strong>Why Register Your Group as a Provider?</strong><br />For example, if your group is named <strong>\"MyCustomGroup\"</strong>, registering it as a provider allows you to:</p>\n<ul>\n<li><p><strong>Display your legal company name</strong> to users for clarity and branding</p>\n</li>\n<li><p><strong>Provide support and privacy policy URLs</strong> to foster transparency and build trust</p>\n</li>\n<li><p><strong>Add</strong> <strong><code>ProviderSettings</code></strong> to your provider, enabling you to offer customized, user-specific settings directly within your application</p>\n</li>\n</ul>\n<p><strong>Advantages of Utilizing ProviderSettings</strong><br />Integrating <code>ProviderSettings</code> enables you to deliver configuration options tailored to individual users without developing a custom settings interface from scratch. While direct integration of settings within your app is perfectly valid—especially for first-party integrations—utilizing provider settings through <strong>Alution</strong> offers added benefits:</p>\n<ul>\n<li><p><strong>Automatic Settings Page Generation:</strong> Alution will generate a dedicated settings interface under the \"Integrations\" section based on your defined <code>ProviderSettings</code>.</p>\n</li>\n<li><p><strong>Simplified User Configuration:</strong> Users can easily adjust their preferences without navigating away from their workflow, reducing support overhead and improving user satisfaction.</p>\n</li>\n</ul>\n<p><strong>Practical Example:</strong><br />Suppose your application manages contact categories such as <strong>\"Customer\"</strong> and <strong>\"Vendor\"</strong>. You want users to choose whether to sync all contacts, only customers, or only vendors. You can define a <code>ProviderSetting</code> for this choice.</p>\n<p>When users access the integration via Alution, they will see a dropdown menu with these options and can select their preferred sync setting directly—without needing to access your server or application interface. Your system can then retrieve this setting via a single API call, enabling seamless and flexible contact synchronization.</p>\n","_postman_id":"ed8bceb7-80f0-4876-8cf0-247c41d7ad63","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":true,"source":{"_postman_id":"08318820-cdd9-46ce-b82c-62251e9eddc4","id":"08318820-cdd9-46ce-b82c-62251e9eddc4","name":"API/v1 for Provider","type":"collection"}}},{"name":"Provider-Settings","item":[{"name":"Provider-Settings Create","id":"2c8e46fe-fcdb-4289-9545-927cc62b3e27","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"name\": \"categories_to_sync\",\n    \"friendly_name\": \"Categories to Sync\",\n    \"description\": \"Select which categories should be synced between Buttlersoft and Alution.\",\n    \"type\": \"array\",\n    \"options\": {\n        \"vendor\": \"Sync Vendors\",\n        \"customer\": \"Sync Customers\"\n    },\n    \"validation_rules\": {\n        \"required\": true,\n        \"*\": [\n            \"string\",\n            \"distinct\",\n            \"in:customer,vendor\"\n        ]\n    },\n    \"value\": [\n        \"customer\"\n    ]\n}","options":{"raw":{"language":"json"}}},"url":"https://dev.alution.test/api/v1/providers/{{group_or_id}}/settings","description":"<h3 id=\"supported-types\">Supported types</h3>\n<ul>\n<li><p>integer</p>\n</li>\n<li><p>double</p>\n</li>\n<li><p>boolean</p>\n</li>\n<li><p>array</p>\n</li>\n<li><p>string</p>\n</li>\n</ul>\n<h3 id=\"validation-rules\">Validation Rules</h3>\n<p><code>validation_rules</code> are a critical part of defining provider settings, ensuring that user-provided values are valid, consistent, and within expected bounds.</p>\n<p>These rules are specified as an object (associative array), where each key represents a validation rule, and the value provides parameters or details</p>\n<ul>\n<li><p>The <code>type</code> will always be automatically validated</p>\n</li>\n<li><p>The * rule indicates that the array value will be used to validate each entry within the array object itself.</p>\n</li>\n</ul>\n<hr />\n<p><strong>Note:</strong> <code>\"required\"</code> and <code>\"nullable\"</code> are booleans. Set the value to <code>true</code> if you want them to be applied; otherwise, they are not applied. The only exception is if the entire array is a string array—then, including only the key (e.g., <code>\"required\"</code> or <code>[\"required\"]</code>) is enough.</p>\n<hr />\n<h3 id=\"supported-validation-rules\">Supported Validation Rules</h3>\n<p>The validation rules allowed rules, including but not limited to:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Rule</th>\n<th>Description</th>\n<th>Example</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>required</code></td>\n<td>Ensures the value is present and not empty</td>\n<td><code>\"required\"</code></td>\n</tr>\n<tr>\n<td><code>string</code></td>\n<td>Validates that the value is a string</td>\n<td><code>\"string\"</code></td>\n</tr>\n<tr>\n<td><code>max:xxx</code></td>\n<td>Limits maximum length (for strings, arrays, files, etc.)</td>\n<td><code>\"max:255\"</code></td>\n</tr>\n<tr>\n<td><code>min:xxx</code></td>\n<td>Enforces minimum length or value</td>\n<td><code>\"min:3\"</code></td>\n</tr>\n<tr>\n<td><code>email</code></td>\n<td>Validates that the value is a valid email address</td>\n<td><code>\"email\"</code></td>\n</tr>\n<tr>\n<td><code>nullable</code></td>\n<td>Allows the value to be null</td>\n<td><code>\"nullable\"</code></td>\n</tr>\n<tr>\n<td><code>in:option1,option2</code></td>\n<td>Ensures the value is within predefined options</td>\n<td><code>\"in:small,medium,large\"</code></td>\n</tr>\n<tr>\n<td><code>digits:xxx</code></td>\n<td>Validates a numeric value with an exact number of digits</td>\n<td><code>\"digits:5\"</code></td>\n</tr>\n<tr>\n<td><code>numeric</code></td>\n<td>Checks if the value is numeric</td>\n<td><code>\"numeric\"</code></td>\n</tr>\n<tr>\n<td><code>regex:/pattern/</code></td>\n<td>Validates the value against a custom regular expression</td>\n<td><code>\"regex:/^[a-z]+$/\"</code></td>\n</tr>\n<tr>\n<td><code>date</code></td>\n<td>Checks if the value is a valid date</td>\n<td><code>\"date\"</code></td>\n</tr>\n<tr>\n<td><code>after:date</code> / <code>before:date</code></td>\n<td>Date must be after / before a specific date</td>\n<td><code>\"after:2021-01-01\"</code> / <code>\"before:tomorrow\"</code></td>\n</tr>\n<tr>\n<td><code>boolean</code></td>\n<td>Validates that the value is boolean</td>\n<td><code>\"boolean\"</code></td>\n</tr>\n<tr>\n<td><code>array</code></td>\n<td>Checks if the value is an array</td>\n<td><code>\"array\"</code></td>\n</tr>\n<tr>\n<td><code>distinct</code></td>\n<td>Ensures all array values are unique</td>\n<td><code>\"distinct\"</code></td>\n</tr>\n</tbody>\n</table>\n</div>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":true,"source":{"_postman_id":"08318820-cdd9-46ce-b82c-62251e9eddc4","id":"08318820-cdd9-46ce-b82c-62251e9eddc4","name":"API/v1 for Provider","type":"collection"}},"urlObject":{"path":["providers","{{group_or_id}}","settings"],"host":["https://dev.alution.test/api/v1"],"query":[],"variable":[]}},"response":[{"id":"92296e38-f06e-4ff9-9a8d-15cc98177ce3","name":"Provider-Settings Create","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"name\": \"categories_to_sync\",\n    \"friendly_name\": \"Categories to Sync\",\n    \"description\": \"Select which categories should be synced between Buttlersoft and Alution.\",\n    \"type\": \"array\",\n    \"options\": {\n        \"vendor\": \"Sync Vendors\",\n        \"customer\": \"Sync Customers\"\n    },\n    \"validation_rules\": {\n        \"required\": true,\n        \"*\": [\n            \"string\",\n            \"distinct\",\n            \"in:customer,vendor\"\n        ]\n    },\n    \"value\": [\n        \"customer\"\n    ]\n}","options":{"raw":{"language":"json"}}},"url":"https://dev.alution.test/api/v1/providers/{{group_or_id}}/settings"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Server","value":"nginx/1.27.4"},{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"X-Powered-By","value":"PHP/8.4.4"},{"key":"Cache-Control","value":"no-cache, private"},{"key":"Date","value":"Fri, 25 Jul 2025 13:26:48 GMT"},{"key":"Access-Control-Allow-Origin","value":"*"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 12,\n    \"name\": \"categories_to_sync\",\n    \"friendly_name\": \"Categories to Sync\",\n    \"description\": \"Select which categories should be synced between Buttlersoft and Alution.\",\n    \"type\": \"array\",\n    \"options\": {\n        \"vendor\": \"Sync Vendors\",\n        \"customer\": \"Sync Customers\"\n    },\n    \"validation_rules\": {\n        \"required\": true,\n        \"*\": [\n            \"string\",\n            \"distinct\",\n            \"in:customer,vendor\"\n        ]\n    },\n    \"value\": [\n        \"customer\"\n    ]\n}"},{"id":"ef9b1675-7c1a-4a5e-a0ca-fd00332179bd","name":"2. Provider-Settings Create","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"name\": \"my_double\",\n    \"friendly_name\": \"My Double\",\n    \"type\": \"double\",\n    \"validation_rules\": [\n        \"nullable\"\n    ]\n}","options":{"raw":{"language":"json"}}},"url":"https://dev.alution.test/api/v1/providers/{{group_or_id}}/settings"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Server","value":"nginx/1.27.4"},{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"X-Powered-By","value":"PHP/8.4.4"},{"key":"Cache-Control","value":"no-cache, private"},{"key":"Date","value":"Fri, 25 Jul 2025 14:21:36 GMT"},{"key":"Access-Control-Allow-Origin","value":"*"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 14,\n    \"name\": \"my_double\",\n    \"friendly_name\": \"My Double\",\n    \"description\": null,\n    \"type\": \"null\",\n    \"options\": null,\n    \"validation_rules\": [\n        \"nullable\"\n    ],\n    \"value\": null\n}"},{"id":"0240b9ee-4a35-42db-94d7-d3d40da6e17e","name":"3. Provider-Settings Create","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"name\": \"my_bool\",\n    \"friendly_name\": \"My Bool\",\n    \"type\": \"boolean\",\n    \"value\": true\n}","options":{"raw":{"language":"json"}}},"url":"https://dev.alution.test/api/v1/providers/{{group_or_id}}/settings"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Server","value":"nginx/1.27.4"},{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"X-Powered-By","value":"PHP/8.4.4"},{"key":"Cache-Control","value":"no-cache, private"},{"key":"Date","value":"Fri, 25 Jul 2025 14:22:55 GMT"},{"key":"Access-Control-Allow-Origin","value":"*"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 15,\n    \"name\": \"my_bool\",\n    \"friendly_name\": \"My Bool\",\n    \"description\": null,\n    \"type\": \"boolean\",\n    \"options\": null,\n    \"validation_rules\": null,\n    \"value\": true\n}"}],"_postman_id":"2c8e46fe-fcdb-4289-9545-927cc62b3e27"},{"name":"Provider-Settings Update","id":"eb59ee44-9e92-4d1e-9590-4cc2c0a9219f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\n    \"name\": \"categories_to_sync\",\n    \"friendly_name\": \"Categories to Sync\",\n    \"description\": \"Select which categories should be synced between Buttlersoft and Alution.\",\n    \"type\": \"array\",\n    \"options\": {\n        \"vendor\": \"Sync Vendors\",\n        \"customer\": \"Sync Customers\"\n    },\n    \"validation_rules\": {\n        \"required\": true,\n        \"*\": [\n            \"string\",\n            \"distinct\",\n            \"in:customer,vendor\"\n        ]\n    },\n    \"value\": [\n        \"vendor\"\n    ]\n}","options":{"raw":{"language":"json"}}},"url":"https://dev.alution.test/api/v1/providers/{{group_or_id}}/settings/{{name_or_id}}","description":"<p>Updating an existing ProviderSetting uses the same validation approach as creation. To update a setting, you need to send the complete object containing all relevant properties, including any changes, as a PUT request to the designated endpoint. This means the payload must represent the full, updated configuration of the ProviderSetting, not just the modified fields.</p>\n<p><strong>Key points:</strong></p>\n<ul>\n<li><p>The full ProviderSetting object must be included in the request payload.</p>\n</li>\n<li><p>All required fields, like <code>name</code>, <code>type</code>, <code>validation_rules</code>, etc., should be provided.</p>\n</li>\n<li><p>Validation rules are processed the same way during updates, ensuring data integrity with each change.</p>\n</li>\n<li><p>Partial updates (patches) are not supported unless explicitly specified; always send the complete object.</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":true,"source":{"_postman_id":"08318820-cdd9-46ce-b82c-62251e9eddc4","id":"08318820-cdd9-46ce-b82c-62251e9eddc4","name":"API/v1 for Provider","type":"collection"}},"urlObject":{"path":["providers","{{group_or_id}}","settings","{{name_or_id}}"],"host":["https://dev.alution.test/api/v1"],"query":[],"variable":[]}},"response":[{"id":"2853a0cb-1692-4356-abb6-24587f587e41","name":"Provider-Settings Update","originalRequest":{"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\n    \"name\": \"categories_to_sync\",\n    \"friendly_name\": \"Categories to Sync\",\n    \"description\": \"Select which categories should be synced between Buttlersoft and Alution.\",\n    \"type\": \"array\",\n    \"options\": {\n        \"vendor\": \"Sync Vendors\",\n        \"customer\": \"Sync Customers\"\n    },\n    \"validation_rules\": {\n        \"required\": true,\n        \"*\": [\n            \"string\",\n            \"distinct\",\n            \"in:customer,vendor\"\n        ]\n    },\n    \"value\": [\n        \"vendor\"\n    ]\n}","options":{"raw":{"language":"json"}}},"url":"https://dev.alution.test/api/v1/providers/{{group_or_id}}/settings/{{name_or_id}}"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Server","value":"nginx/1.27.4"},{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"Vary","value":"Accept-Encoding"},{"key":"X-Powered-By","value":"PHP/8.4.4"},{"key":"Cache-Control","value":"no-cache, private"},{"key":"Date","value":"Fri, 25 Jul 2025 13:27:26 GMT"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Content-Encoding","value":"gzip"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 12,\n    \"name\": \"categories_to_sync\",\n    \"friendly_name\": \"Categories to Sync\",\n    \"description\": \"Select which categories should be synced between Buttlersoft and Alution.\",\n    \"type\": \"array\",\n    \"options\": {\n        \"vendor\": \"Sync Vendors\",\n        \"customer\": \"Sync Customers\"\n    },\n    \"validation_rules\": {\n        \"required\": true,\n        \"*\": [\n            \"string\",\n            \"distinct\",\n            \"in:customer,vendor\"\n        ]\n    },\n    \"value\": [\n        \"vendor\"\n    ]\n}"}],"_postman_id":"eb59ee44-9e92-4d1e-9590-4cc2c0a9219f"},{"name":"Provider-Settings Index","id":"fcf55aab-3ae9-4b67-a2e1-df683ee8269c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://dev.alution.test/api/v1/providers/{{group_or_id}}/settings","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":true,"source":{"_postman_id":"08318820-cdd9-46ce-b82c-62251e9eddc4","id":"08318820-cdd9-46ce-b82c-62251e9eddc4","name":"API/v1 for Provider","type":"collection"}},"urlObject":{"path":["providers","{{group_or_id}}","settings"],"host":["https://dev.alution.test/api/v1"],"query":[{"disabled":true,"description":{"content":"<p>Using the 'minimal' display option will return a single JSON object containing key-value pairs of name and value.</p>\n","type":"text/plain"},"key":"display","value":"minimal"}],"variable":[]}},"response":[{"id":"21af0f97-6d68-490f-9378-96887f28da54","name":"Default - Provider-Settings Index","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://dev.alution.test/api/v1/providers/{{group_or_id}}/settings","host":["https://dev.alution.test/api/v1"],"path":["providers","{{group_or_id}}","settings"],"query":[{"key":"display","value":"minimal","description":"Using the 'minimal' display option will return a single JSON object containing key-value pairs of name and value.","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Server","value":"nginx/1.27.4"},{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"Vary","value":"Accept-Encoding"},{"key":"X-Powered-By","value":"PHP/8.4.4"},{"key":"Cache-Control","value":"no-cache, private"},{"key":"Date","value":"Fri, 25 Jul 2025 14:14:32 GMT"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Content-Encoding","value":"gzip"}],"cookie":[],"responseTime":null,"body":"{\n    \"data\": [\n        {\n            \"id\": 2,\n            \"name\": \"auto_sync_enabled\",\n            \"friendly_name\": \"Automatische Synchronisation\",\n            \"description\": \"Wenn aktiviert, werden Änderungen automatisch übertragen. (nach Prüfintervall in Minuten)\",\n            \"type\": \"boolean\",\n            \"options\": null,\n            \"validation_rules\": null,\n            \"value\": true\n        },\n        {\n            \"id\": 1,\n            \"name\": \"categories_to_sync\",\n            \"friendly_name\": \"Categories to Sync\",\n            \"description\": \"Select which categories should be synced between Buttlersoft and Alution.\",\n            \"type\": \"array\",\n            \"options\": {\n                \"vendor\": \"Sync Vendors\",\n                \"customer\": \"Sync Customers\"\n            },\n            \"validation_rules\": {\n                \"*\": [\n                    \"string\",\n                    \"distinct\",\n                    \"in:customer,vendor\"\n                ],\n                \"required\": true\n            },\n            \"value\": [\n                \"vendor\"\n            ]\n        },\n        {\n            \"id\": 3,\n            \"name\": \"update_interval_minutes\",\n            \"friendly_name\": \"Prüfintervall in Minuten\",\n            \"description\": \"Geben Sie hier eine Zahl zwischen 1 und 60 an, die den Minutenabstand festlegt, in dem geprüft werden soll, ob Änderungen vorliegen, die synchronisiert werden müssen.\",\n            \"type\": \"integer\",\n            \"options\": null,\n            \"validation_rules\": {\n                \"max\": 60,\n                \"min\": 1,\n                \"required\": true\n            },\n            \"value\": 50\n        }\n    ]\n}"},{"id":"42a8c1a7-0847-4798-b8e1-61fecd079501","name":"Minimal - Provider-Settings Index","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://dev.alution.test/api/v1/providers/{{group_or_id}}/settings?display=minimal","host":["https://dev.alution.test/api/v1"],"path":["providers","{{group_or_id}}","settings"],"query":[{"key":"display","value":"minimal","description":"Using the 'minimal' display option will return a single JSON object containing key-value pairs of name and value."}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Server","value":"nginx/1.27.4"},{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"Vary","value":"Accept-Encoding"},{"key":"X-Powered-By","value":"PHP/8.4.4"},{"key":"Cache-Control","value":"no-cache, private"},{"key":"Date","value":"Fri, 25 Jul 2025 14:14:52 GMT"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Content-Encoding","value":"gzip"}],"cookie":[],"responseTime":null,"body":"{\n    \"auto_sync_enabled\": true,\n    \"categories_to_sync\": [\n        \"vendor\"\n    ],\n    \"update_interval_minutes\": 50\n}"}],"_postman_id":"fcf55aab-3ae9-4b67-a2e1-df683ee8269c"}],"id":"be68a357-4de8-4b4d-bc8e-f8583fbee88b","description":"<p><code>ProviderSettings</code> allow you to define configurable options that your users can manage directly within the Alution settings.</p>\n<p><strong>Benefits of Using ProviderSettings in Alution:</strong></p>\n<ul>\n<li><p><strong>Automated Settings UI:</strong> When you define <code>ProviderSettings</code>, Alution automatically generates a user-friendly configuration page, simplifying setup and management.</p>\n</li>\n<li><p><strong>Reduced Development Effort:</strong> You avoid building custom preference UI components, leveraging Alution’s built-in form generation to streamline deployment.</p>\n</li>\n</ul>\n<p><strong>Example Use Case:</strong><br />Suppose your app manages contact synchronization with categories including <strong>\"Customer\"</strong> and <strong>\"Vendor\"</strong>. You can create a <code>ProviderSetting</code> that offers a dropdown for users to select whether to sync <strong>all contacts</strong>, <strong>only customers</strong>, or <strong>only vendors</strong>. Once configured within Alution, users can select their preference directly through the provided interface. Your backend can then retrieve this setting via a single API call, enabling tailored, flexible synchronization processes aligned with user choices.</p>\n","_postman_id":"be68a357-4de8-4b4d-bc8e-f8583fbee88b","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":true,"source":{"_postman_id":"08318820-cdd9-46ce-b82c-62251e9eddc4","id":"08318820-cdd9-46ce-b82c-62251e9eddc4","name":"API/v1 for Provider","type":"collection"}}},{"name":"Tickets","item":[{"name":"Tickets Create","id":"9611c396-7ddf-4651-8605-69dad1946f46","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"identifier\": \"MyUniqueTicket\",\n  \"title\": \"Cleanup of the Mayor's Facility\",\n  \"description\": \"The city mayor requested a cleanup. Please schedule an appointment and deliver excellent results to keep our clients happy!\",\n  \"responsible_identifier\": \"MyUser1\",\n  \"due_at\": \"1970-01-01T13:37\",\n  \"address_identifier\": \"AR-3424\",\n  \"project_identifier\": null,\n  \"policy_group_id\": null, // If set, responsible_identifier is not allowed\n  \"priority\": 50, // 0 = None, 10 = VeryLow, 20 = Low, 30 = Medium, 40 = High, 50 = VeryHigh\n  \"collaborator_identifiers\": [\n    \"MyUser4\", \n    \"MyUser5\"\n  ]\n}","options":{"raw":{"language":"json"}}},"url":"https://dev.alution.test/api/v1/tickets","description":"<p>The Provider API uses the same endpoint as the regular User API.</p>\n<p>Since tickets cannot be mapped by either the User or the Provider API, they cannot be resolved through your provided group and therefore columnfields cannot be autoresolved. However, because <strong>Alution</strong> already recognizes your identifiers (which are typically constructed using your database IDs with a specific prefix), you still can use your identifiers instead of <strong>Alution</strong> numeric IDs when creating or updating tickets.</p>\n<p>By default, <strong>Alution</strong> does <strong>not</strong> interpret identifiers passed to the endpoint. To enable identifier-based resolution, include the field <strong>\"identifier\"</strong> in your request body. When <strong>identifier</strong> is provided:</p>\n<ul>\n<li><p>Alution recognizes that the ticket is being created by a <strong>Provider</strong>.</p>\n</li>\n<li><p>All standard <strong>_id</strong> fields are <strong>disabled</strong> and replaced with <strong>_identifier</strong> fields.</p>\n</li>\n<li><p>Alution will first attempt to resolve entities using your provided identifiers.</p>\n</li>\n<li><p>As a fallback, you may still include Alution’s internal ID, but it must be placed inside the <strong>_identifier</strong> field rather than <strong>_id</strong> (since <strong>_id</strong> fields are prohibited when \"identifier\" is set).</p>\n</li>\n</ul>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":true,"source":{"_postman_id":"08318820-cdd9-46ce-b82c-62251e9eddc4","id":"08318820-cdd9-46ce-b82c-62251e9eddc4","name":"API/v1 for Provider","type":"collection"}},"urlObject":{"path":["tickets"],"host":["https://dev.alution.test/api/v1"],"query":[],"variable":[]}},"response":[{"id":"87fced12-f08b-427c-8756-9b881448477a","name":"Tickets Create","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"identifier\": \"MyUniqueTicket\",\n  \"title\": \"Cleanup of the Mayor's Facility\",\n  \"description\": \"The city mayor requested a cleanup. Please schedule an appointment and deliver excellent results to keep our clients happy!\",\n  \"responsible_identifier\": \"MyUser1\",\n  \"due_at\": \"1970-01-01T13:37\",\n  \"address_identifier\": \"AR-3424\",\n  \"project_identifier\": null,\n  \"policy_group_id\": null, // If set, responsible_identifier is not allowed\n  \"priority\": 50, // 0 = None, 10 = VeryLow, 20 = Low, 30 = Medium, 40 = High, 50 = VeryHigh\n  \"collaborator_identifiers\": [\n    \"MyUser4\", \n    \"MyUser5\"\n  ]\n}","options":{"raw":{"language":"json"}}},"url":"https://dev.alution.test/api/v1/tickets"},"status":"Created","code":201,"_postman_previewlanguage":null,"header":[{"key":"Server","value":"nginx/1.27.4"},{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"X-Powered-By","value":"PHP/8.4.14"},{"key":"Cache-Control","value":"no-cache, private"},{"key":"Date","value":"Tue, 16 Dec 2025 15:44:32 GMT"},{"key":"X-Reference","value":"#req-xznc-9872"},{"key":"Access-Control-Allow-Origin","value":"*"}],"cookie":[],"responseTime":null,"body":"{\n    \"identifier\": \"MyUniqueTicket\",\n    \"id\": 91,\n    \"title\": \"Cleanup of the Mayor's Facility\",\n    \"description\": \"The city mayor requested a cleanup. Please schedule an appointment and deliver excellent results to keep our clients happy!\",\n    \"address_id\": 2,\n    \"transfer_note\": null,\n    \"review_survey_requested\": false,\n    \"is_locked\": false,\n    \"priority\": 50,\n    \"status\": \"open\",\n    \"status_changed_at\": \"2025-12-16T15:44:32.000000Z\",\n    \"due_at\": \"1970-01-01T12:37:00.000000Z\",\n    \"created_at\": \"2025-12-16T15:44:32.000000Z\",\n    \"updated_at\": \"2025-12-16T15:44:32.000000Z\",\n    \"responsible\": {\n        \"id\": 11,\n        \"identifier\": \"MyUser1\",\n        \"name\": null,\n        \"first_name\": \"john.doe\",\n        \"middle_name\": null,\n        \"last_name\": null,\n        \"display_name\": \"john.doe \",\n        \"email\": \"John\",\n        \"full_name\": \"john.doe\",\n        \"department\": null,\n        \"position\": null,\n        \"avatar_url\": \"\",\n        \"created_at\": \"2025-12-03T10:30:16.000000Z\",\n        \"updated_at\": \"2025-12-03T10:30:16.000000Z\",\n        \"deleted_at\": null,\n        \"is_locked\": false\n    }\n}"}],"_postman_id":"9611c396-7ddf-4651-8605-69dad1946f46"},{"name":"Tickets Show","id":"db48ffef-bf65-40bf-b7b7-4bbea34a8152","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://dev.alution.test/api/v1/tickets/{{ticket_id}}","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":true,"source":{"_postman_id":"08318820-cdd9-46ce-b82c-62251e9eddc4","id":"08318820-cdd9-46ce-b82c-62251e9eddc4","name":"API/v1 for Provider","type":"collection"}},"urlObject":{"path":["tickets","{{ticket_id}}"],"host":["https://dev.alution.test/api/v1"],"query":[],"variable":[]}},"response":[{"id":"ab0c3d8e-d50c-4de6-b482-7d79765e5751","name":"Tickets Show","originalRequest":{"method":"GET","header":[],"url":"https://dev.alution.test/api/v1/tickets/{{ticket_id}}"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Server","value":"nginx/1.27.4"},{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"Vary","value":"Accept-Encoding"},{"key":"X-Powered-By","value":"PHP/8.4.14"},{"key":"Cache-Control","value":"no-cache, private"},{"key":"Date","value":"Tue, 16 Dec 2025 16:06:08 GMT"},{"key":"X-Reference","value":"#req-ulkt-1168"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Content-Encoding","value":"gzip"}],"cookie":[],"responseTime":null,"body":"{\n    \"identifier\": \"MyUniqueTicket\",\n    \"id\": 91,\n    \"title\": \"Cleanup of the Mayor's Facility\",\n    \"description\": \"The city mayor requested a cleanup. Please schedule an appointment and deliver excellent results to keep our clients happy!\",\n    \"address_id\": 2,\n    \"transfer_note\": null,\n    \"review_survey_requested\": false,\n    \"is_locked\": false,\n    \"priority\": 50,\n    \"status\": \"open\",\n    \"status_changed_at\": \"2025-12-16T15:44:32.000000Z\",\n    \"due_at\": \"1970-01-01T12:37:00.000000Z\",\n    \"created_at\": \"2025-12-16T15:44:32.000000Z\",\n    \"updated_at\": \"2025-12-16T15:44:32.000000Z\"\n}"}],"_postman_id":"db48ffef-bf65-40bf-b7b7-4bbea34a8152"}],"id":"95995ecd-4a0c-4b4b-ba6f-72911a382b41","description":"<p>As a provider, you can easily create tickets through the API. However, please note that currently only a limited set of ticket features is available via the Provider API. Additional functionality will be added in future updates.</p>\n<p>At this time, providers can only <strong>create</strong> and <strong>update</strong> tickets via the API. All other ticket-related actions must be performed through the frontend or the User API.</p>\n<p>These limitations are subject to change, but for now, please keep them in mind when implementing ticket creation or updates as a provider.</p>\n","_postman_id":"95995ecd-4a0c-4b4b-ba6f-72911a382b41","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]},"isInherited":true,"source":{"_postman_id":"08318820-cdd9-46ce-b82c-62251e9eddc4","id":"08318820-cdd9-46ce-b82c-62251e9eddc4","name":"API/v1 for Provider","type":"collection"}}}],"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{barer_api_token}}"}]}},"event":[{"listen":"prerequest","script":{"id":"5e1b41af-d997-4318-8163-1f4062baebd3","type":"text/javascript","packages":{},"exec":[""]}},{"listen":"test","script":{"id":"866f9aa0-e43b-4080-8dec-5312c55dd671","type":"text/javascript","packages":{},"exec":[""]}}],"variable":[{"key":"tenant","value":"dev","type":"string"},{"key":"tld","value":"test","type":"string"},{"key":"domain","value":"alution","type":"string"},{"key":"schema","value":"https","type":"string"},{"key":"base_url","value":"https://dev.alution.test","type":"string"},{"key":"api_path","value":"/api/v1","type":"string"},{"key":"api_url","value":"https://dev.alution.test/api/v1","type":"string"}]}