{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"f3effbb7-d678-47b0-8b9c-6f7fca3d9f76","name":"Prysmex API Documentation","description":"<img src=\"https://content.pstmn.io/dbbc5a84-bd57-4491-b1c5-10e5eaa21a07/bG9nby5wbmc=\" width=\"393\" height=\"130\">\n\n### 🎉 Welcome to the Prysmex API Documentation! `v8.4.11`\n\nExplore and interact with nearly every feature available in the Prysmex app — all through powerful API calls.\n\n# Setup\n\n### 👤 Create a Prysmex account\n\nBefore you can use our APIs, you'll need an API-KEY🔑. If you already have an account, [login](https://app.prysmex.com) to you account or [create a new account](https://app.prysmex.com/sign_up).\n\n### 📁 Create a space\n\nNow that you've created you account, you need to create a **Space** to generate an ApiKey.\n\n> A space represents a client within the platform and can be associated with a plan. All Prysmex modules and features are located within a space, and only users (except managed users) can move between spaces. \n  \n\nFor help creating a space, please refer to [https://help.prysmex.com](https://help.prysmex.com/)\n\n### 🔑 Generate an API KEY\n\nNow that you are inside a space, navigate to [settings &gt; api keys](https://app.prysmex.com/fwd/admin/api_keys/new) to generate a your ApiKey.\n\n> API-KEYs impersonate users, if you would like to limit the api key privileges, create a user with a role that has the privileges you require for your use case. \n  \n\nAfter generating the ApiKey, make sure you store it safely since it cannot be recovered after creation.\n\nNow lets configure lets import and configure the collection to start using the APIs! 🚀\n\n### ↓ Import the collection\n\n**Click \"Run in Postman\" to get started!**\n\nIf you don’t have a Postman account yet, you’ll be prompted to create one — it’s quick and free. Once logged in, you can create a new workspace or use an existing one.\n\nThen simply import the collection into your workspace to begin exploring and testing the API.\n\n> 💡 Already have an account? Just choose a workspace and import the collection — you’re ready to go! \n  \n\n### ⚙️ Configure the collection\n\nHere are the most important variables for running most request in the collection:\n\n| Name | Description |\n| --- | --- |\n| `api_host` | The url of Prysmex's backend [<i>https://b.prysmex.com</i>](https://b.prysmex.com) |\n| `client` | Most requests require a Space context, set your Space identifier here. Setting this value sets the Client-Subdomain header. |\n| `api_key` | Your api key, setting this value sets the **Authorization** header. e.g. `ApiKey ge6gdAym9n5yvmUtZeMY`. This is required for requests inside the [Authenticated endpoints](https://developers.prysmex.com/#cc4689af-9492-4a3c-a6ce-f1c706559c63) folder. |\n\nYou can set them by clicking on the collection and navigatint to the variables tab Prysmex _API Documentation > Variables_ or by clicking the variables icon at the top right of this window as shown in the following image.\n\n<img src=\"https://content.pstmn.io/cf3df5b3-bbef-4535-bb96-e0c50ca128a0/U2NyZWVuc2hvdCAyMDI1LTA3LTA1IGF0IDExLjU2LjA44oCvcC5tLi5wbmc=\" alt=\"Configure%20variables\">\n\nSome additional variables include:\n\n| Name | Description |\n| --- | --- |\n| `locale` | locale |\n| `time_zone` | time_zone |\n| `refresh` | refresh |\n\n### 🚀 Run your first request!\n\nYour set! Now select you first request and run it! Some requests require additional configuration, try running _Authenticated endpoints > Users > GET me_ to display your current user.\n\n---\n\n# Collection conventions\n\n- Variables are formatted like `this`\n    \n- Requests are organized in two main categories, **Authenticated endpoints** and **Unauthenticated endpoints.**\n    \n- API authentication is only available via ApiKey (Authorization Header), which you can generate from our app.\n    \n\n---\n\n# API conventions\n\n### Data format - JSON API {}\n\nALMOST ALL of our APIs use the JSONAPI standard for rendering data. Please refer to the official [json-api docs](https://jsonapi.org/) if you have any doubts about the standard.\n\n### Authentication\n\nThe following headers must be included in each request (Authorization only for authenticated endpoints). This collection takes care of this with your environment variables:\n\n| Key | Value |\n| --- | --- |\n| Client-Subdomain | my-client |\n| Authorization | ApiKey ge6gdAym9n5yvmUtZeMY |\n\n### JSON:API Headers\n\nSince MOST APIs follow the JSON:API media type for structured JSON responses and requests.\n\n#### 📥 `Accept` Header (recommended for read requests)\n\n**Purpose:** Tells the server that the client expects a JSON:API-formatted response.  \n**Usage:** Accept: application/vnd.api+json\n\nOptional, but **recommended** — if omitted, the server will still return JSON:API responses by default.\n\n### 📤 `Content-Type` Header (required for write requests)\n\n**Purpose:** Declares that the request body is formatted as a JSON:API document.  \n**Usage:** Content-Type: application/vnd.api+json\n\n**Required** for all requests that send a JSON:API body (e.g., **POST**, **PATCH**, **PUT**, etc..). This collection already handles this for all requests.\n\n### Try your first requests\n\n**Create a user group**\n\n``` shell\ncurl -X POST \"https://b.prysmex.com/api/user_groups\" \\\n  -H \"Authorization: ApiKey your-key\" \\\n  -H \"Client-Subdomain: yourspace\" \\\n  -H \"Content-Type: application/vnd.api+json\" \\\n  -d '{ \"data\": { \"type\": \"user-groups\", \"attributes\": { \"name\": \"My first group\" } } }'\n\n ```\n\n**Search reports**\n\n``` shell\ncurl -X POST \"https://b.prysmex.com/api/reports/search?page=1&per=10\" \\\n  -H \"Authorization: ApiKey your-key\" \\\n  -H \"Client-Subdomain: yourspace\" \\\n  -H \"Accept: application/vnd.api+json\"\n\n ```\n\n### Query params in body\n\nUnless specified otherwise, parameters can be sent **either in the query string** or **in the request body**, and will be interpreted the same by the server.\n\nFor example, if a request requires a `current_password` parameter, you may send it in either format:\n\n🔹 Option 1 – As a query parameter\n\n``` bash\ncurl -X PATCH \"https://b.prysmex.com/users/123?current_password=secret123\"\n\n ```\n\n🔹 Option 2 – In the JSON request body\n\n``` bash\ncurl -X PATCH \"https://b.prysmex.com/users/123\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"current_password\": \"secret123\"}'\n\n ```\n\n✅ Both options are valid and interchangeable for most endpoints.\n\n> 💡 For complex or structured data, using the JSON body is generally preferred. \n  \n\n### 📌 Optional Query Parameters\n\n| Parameter | Type | Description |\n| --- | --- | --- |\n| `time_zone` | String | Used to interpret or format time values. Accepts values like `America/Mexico_City`, `Etc/UTC`, `Europe/Brussels`, etc. |\n| `refresh` | Boolean | Some models are searched through a search engine, which can make results not immediately available. Setting this param ensures they are searchable right after creation or update. Useful for real-time search results in testing or automation scenarios. |\n\n### 🌍 Locale Resolution\n\nThe application determines the language/locale for the request based on the following precedence:\n\n1. `locale` query parameter (e.g., `?locale=es`)\n    \n2. `current_user.locale` (based on the authenticated user's preferences)\n    \n3. `Accept-Language` request header (e.g., `Accept-Language: en-US`)\n    \n\n> 💡 This allows clients to override localization per request while still honoring user and browser preferences when no override is provided. \n  \n\n---\n\n# Filtering / pagination\n\n### Pagination\n\nMost search endpoints support pagination, use the following query params to control your pagination:\n\n| Key | Value | Description |\n| --- | --- | --- |\n| page | int | Number of the page that you want to get data |\n| per | int | Number of objects per page (max: 5000) |\n\n### Basic filtering\n\n``` json\n// id equals 1\n{\n  \"id\": 1\n}\n// state equals (created OR pending) AND (id is greater than 1 and less than 5000)\n{\n  \"state\": [\"created\", \"pending\"],\n  \"id\": {\"gt\": 1, \"lte\": 5000}\n}\n// description contains 'some text' AND due_at is null AND cost is not null AND created_at in given range\n{\n  \"description\": \"some text\",\n  \"due_at\": null,\n  \"cost\": {\"exists\": true},\n  \"created_at\": {\"gt\": \"2024-01-01T06:00:00\", \"lt\": \"2025-01-19\"}\n}\n// Relative dates - current month\n{\n  \"created_at\": {\"gt\": \"now/M\", \"lt\": \"now+1M/M\"}\n}\n\n ```\n\n#### Negating a query\n\nYou can easily negate a query by simply adding `__negate: true`\n\n``` json\n// NOT (state is done AND due_at is null)\n{\n  \"__negate\": true,\n  \"state\": [\"done\"],\n  \"due_at\": null\n}\n\n ```\n\n#### Disabling a query\n\nDisable a query by simply adding `__disable: true`\n\n``` json\n// This query will be ignored\n{\n  \"__disable\": true,\n  \"state\": [\"done\"]\n}\n\n ```\n\n### Filter group\n\nIf you need more control over AND/OR logic you can use a filter group. You can set the AND/OR evaluation via the `type` key (`any`, `all`). When `type` is set to `any`, filters are evaluated in OR context.\n\n``` json\n{\n  \"type\": \"any\", // or all\n  \"filters\": [\n    {\n      \"__negate\": true,\n      \"state\": [\"created\", \"pending\"],\n      \"id\": {\"gt\": 1, \"lte\": 5000}\n    },\n    {\n      \"created_by_id\": 50\n    }\n  ]\n}\n\n ```\n\n`__disable` and `__negate` keywords can also be used in a filter group.\n\n``` json\n{\n  \"__negate\": true, // negate group\n  \"type\": \"any\",\n  \"filters\": [\n    {\n      \"__negate\": true, // negate filter\n      \"created_by_id\": 50\n    },\n    {\n      \"state\": [\"done\"]\n    }\n  ]\n}\n\n ```\n\n### Advanced filtering\n\nYou can nest another filter group inside a filter group.\n\n``` json\n{\n  \"type\": \"any\",\n  \"filters\": [\n    {...}, // a filter\n    {...}, // another filter\n    { // a nested filter group\n      \"type\": \"all\",\n      \"filters\": [\n        {...} // filter\n      ]\n    }\n  ]\n}\n\n ```\n\n# Custom serialization\n\nWhenever you make a request, the data returned from the server might have more or less data that what you might need. You can use jsonapi's `fields` and `include` params to customize which data will be serialized from the server to fit your needs.\n\n> This only applies to requests that returned jsonapi payloads, which is most of them \n  \n\n#### fields `hash`\n\nAllows you to filter which `attributes` and `relationships` will be rendered in the payload for each model type.\n\n#### include `array`\n\nAllows you to filter include related records in the `included` section of the payload. This is not by model type but rather the action relationship name.\n\n#### links `boolean`\n\nAdds links to records useful for fetching the record from the server or for navigating to the record in the app.\n\n#### i18n `boolean` `string` `array`\n\nSome records have translations via a schema (e.g. Report, Inspection, CertificateRequest, etc..). Use this option to serialize translated values.\n\n#### Example\n\nHere is an example of how a request made to `/api/reports/1` using the `fields` and `include` params looks like:\n\n**payload**\n\n``` json\n{\n    \"fields\": {\n        \"reports\": \"description,state,created_by,reviewer,i18n_documents,zones\",\n        \"users\": \"first_name\",\n        \"zones\": \"name\"\n    },\n    \"include\": [\"created_by\",\"reviewer\",\"zones\"],\n    \"links\": true,\n    \"i18n\": \"es\"\n}\n\n ```\n\n**response**\n\n``` json\n{\n    \"data\": {\n        \"id\": \"1\",\n        \"type\": \"reports\",\n        \"attributes\": {\n            \"description\": \"Optio temporibus adipisci excepturi at. Sit enim saepe corrupti tempore. Veritatis modi commodi doloremque omnis vero ut.\\nPerspiciatis inventore ex culpa eveniet asperiores animi. Itaque voluptatem velit minima nihil quaerat nostrum illum. Facere ex ipsum corporis magnam. Dignissimos quo laborum recusandae laboriosam.\\nNostrum aliquam culpa consequatur dicta ipsum. Iusto rem voluptate totam error. Distinctio modi hic repellendus voluptatibus.\",\n            \"i18n-documents\": {\n                \"es\": {\n                    \"pictures\": [\n                        \"http://development.localhost:9000/uploads/prysmex/1/no_id/pictures/accident_1_32f7922e-ac48-4ee1-ac54-7f8eb3ce74fc.jpg\"\n                    ],\n                    \"shared_9fe60c\": {\n                        \"location9999\": [\n                            {\n                                \"lat\": 25.698535187692862,\n                                \"lng\": -100.29809969651323\n                            }\n                        ]\n                    }\n                }\n            },\n            \"state\": \"done\"\n        },\n        \"relationships\": {\n            \"created-by\": {\n                \"data\": {\n                    \"id\": \"10\",\n                    \"type\": \"users\"\n                }\n            },\n            \"reviewer\": {\n                \"data\": {\n                    \"id\": \"1\",\n                    \"type\": \"users\"\n                }\n            },\n            \"zones\": {\n                \"data\": [\n                    {\n                        \"id\": \"6\",\n                        \"type\": \"zones\"\n                    }\n                ]\n            }\n        },\n        \"links\": {\n            \"self\": \"http://localhost:3000/api/reports/1\",\n            \"app\": \"http://localhost:4200/s/prysmex/intents/custom?qs=(intent:(action:'in_app_navigation',payload:(to:'reports.show',args:(model_id:1))))\"\n        }\n    },\n    \"included\": [\n        {\n            \"id\": \"10\",\n            \"type\": \"users\",\n            \"attributes\": {\n                \"first-name\": \"Lawerence\"\n            },\n            \"relationships\": {}\n        },\n        {\n            \"id\": \"1\",\n            \"type\": \"users\",\n            \"attributes\": {\n                \"first-name\": \"Prysmex\"\n            },\n            \"relationships\": {}\n        },\n        {\n            \"id\": \"6\",\n            \"type\": \"zones\",\n            \"attributes\": {\n                \"name\": \"Distribution center-52\"\n            },\n            \"relationships\": {},\n            \"links\": {\n                \"self\": \"http://localhost:3000/api/zones/6\"\n            }\n        }\n    ]\n}\n\n ```\n\n### Security\n\nTo prevent a user from accessing that they are not authorized to access, non-admin users have limitations how much they can configure the serialized data via `fields` and `include`.\n\n# JSONAPI flat\n\nSometimes dealing with included resources in jsonapi can be a bit tedious, which is why we support serializing in a custom 'flattened' version of the SPEC. To use it, simply add the `.jsonapi_flat` extension to a `GET` request like this:\n\n`api/reports/1.jsonapi_flat`\n\nHere is an example of the same request with the original vs flattened version.\n\n**Original**\n\n``` json\n{\n  \"data\": {\n    \"id\": \"53\",\n    \"type\": \"reports\",\n    \"attributes\": {\n      \"state\": \"created\"\n    },\n    \"relationships\": {\n      \"created-by\": {\n        \"data\": {\n          \"id\": \"9\",\n          \"type\": \"users\"\n        }\n      }\n    }\n  },\n  \"included\": [\n    {\n      \"id\": \"9\",\n      \"type\": \"users\",\n      \"attributes\": {\n        \"first-name\": \"Ehtel\"\n      },\n      \"relationships\": {}\n    }\n  ]\n}\n\n ```\n\n**Flattened**\n\n``` json\n{\n  \"id\": \"53\",\n  \"type\": \"reports\",\n  \"attributes\": {\n    \"state\": \"created\"\n  },\n  \"relationships\": {\n    \"created-by\": {\n      \"data\": {\n        \"id\": \"9\",\n        \"type\": \"users\",\n        \"attributes\": {\n          \"first-name\": \"Ehtel\"\n        },\n        \"relationships\": {}\n      }\n    }\n  }\n}\n\n ```\n\nNow all the data of the user co-located with the relationship, instead of having to search for a user name in the `included` section via its id.\n\n---\n\n# Errors\n\nErrors are returned in [json-api errors](https://jsonapi.org/examples/#error-objects) format.  \nHere as some common errors when processing requests and when they might occure.\n\n| Status Code | Meaning | Description |\n| --- | --- | --- |\n| `401 Unauthorized` | **Missing or invalid credentials** | The request did not include valid authentication credentials (e.g., missing or expired token). |\n| `403 Forbidden` | **Access denied** | Authentication was successful, but the user does not have permission to access the requested resource. |\n| `422 Unprocessable Entity` | **Invalid or incomplete request data** | The request was well-formed but could not be processed due to semantic errors (e.g., missing required fields, invalid formats). |\n\n### Error payload examples\n\nInvalid api key `401`\n\n``` json\n{\n    \"errors\": [\n        {\n            \"detail\": \"Invalid api key\"\n        }\n    ]\n}\n\n ```\n\nInvalid payload when creating a resource. `422`\n\n``` json\n{\n    \"errors\": [\n        {\n            \"status\": \"422\",\n            \"code\": \"blank\",\n            \"title\": \"Unprocessable Content\",\n            \"detail\": \"Nombre no puede estar en blanco\",\n            \"source\": {\n                \"pointer\": \"/data/attributes/name\"\n            }\n        },\n        {\n            \"status\": \"422\",\n            \"code\": \"too_short\",\n            \"title\": \"Unprocessable Content\",\n            \"detail\": \"Nombre es demasiado corto (3 caracteres mínimo)\",\n            \"source\": {\n                \"pointer\": \"/data/attributes/name\"\n            }\n        }\n    ]\n}\n\n ```\n\n---\n\n# Bulk actions\n\nMost models support bulk actions for `create`, `update`, and `destroy`. There are multiple advantages for using the bulk api when deleting multiple records:\n\n- Transaction - All or nothing, if anything, nothing is saved.\n    \n- Dry run - These endpoints support passing `dry_run` query param which will simulate the whole request without saving any change.\n    \n- Performance - Single request will always be faster than multiple requests.\n    \n\n> For bulk actions, authorization runs per-instance e.g. meaning if you are deleting 10 records, the user MUST have permission to delete all 10 records. \n  \n\n### Create\n\nTo create multiple records, wrap the JSON:API payloads under a `data` key.\n\n``` json\n{\n  \"data\": [\n    {}, // create payload 1\n    {} // create payload 2\n  ]\n}\n\n ```\n\nThe endpoint is `/bulk`, for example, **POST** `/api/reports/bulk`. The endpoint returns a json object with an ids key, containing the created ids `{ids: []}`.\n\n### Update\n\nTo update multiple records, wrap the JSON:API payloads under a `data` key. The id is retrieved from each payload, under `/data/id`, make sure every update payload has the id available.\n\n``` json\n{\n  \"data\": [\n    {}, // update payload 1\n    {} // update payload 2\n  ]\n}\n\n ```\n\nThe endpoint is `/bulk_update`, for example, **PATCH** `/api/reports/bulk_update`. The endpoint returns no content.\n\n### Destroy\n\nTo destroy multiple records, use the **DELETE** `/api/reports` endpoint. To select which records to delete, you must use one of two options.\n\n| **Param** | **Description** |\n| --- | --- |\n| `ids` | Array of ids. This will validate that all ids exist. |\n| `filters` | See the filtering spec. |\n\nThe endpoint returns a json object with an ids key, containing the created ids `{ids: []}`.\n\n> ⚠ Note that different users might select different reports to delete due to their read authorizations \n  \n\n---\n\n# Nested actions\n\nSome models allow to modify nested resources in a `create` / `update` request by using the `included` keyword (create, update) and `_destroy` attribute (destroy).\n\nSome examples are:\n\n- Creating an `Inspection` along with its associated `Report`(s) in the same request.\n    \n- Modifying an `Inspection`, removing an existing associated report and adding a new report.\n    \n\nHere is a summary table that illustrates the posibilities.\n\n| Main resource action | **Possible nested resource action** |\n| --- | --- |\n| create | create |\n| update | create, update, destroy |\n\n#### Example: Creating an Inspection with a Report\n\nAs you can see, the report is a regular JSON:API request nested inside the `included` keyword. It's vital to add the relationship in the parent to the child.\n\n``` json\n{\n    \"data\": {\n        \"id\": \"local-d37ij9\",\n        \"attributes\": {\n            \"document\": {\n                \"text2\": \"My text\"\n            }\n        },\n        \"relationships\": {\n            \"project\": {\n                \"data\": {\n                    \"type\": \"projects\",\n                    \"id\": \"1\"\n                }\n            },\n            \"reports\": {\n                \"data\": [\n                    {\n                        \"type\": \"reports\",\n                        \"id\": \"local-463m0o\"\n                    }\n                ]\n            },\n            \"schema-template-version\": {\n                \"data\": {\n                    \"type\": \"inspection-schema-templates\",\n                    \"id\": \"2\"\n                }\n            }\n        },\n        \"included\": [\n            {\n                \"id\": \"local-463m0o\",\n                \"attributes\": {\n                    \"description\": \"Some description\",\n                    \"document\": {\n                        \"pictures\": [],\n                        \"meta\": {}\n                    }\n                },\n                \"relationships\": {\n                    \"project\": {\n                        \"data\": {\n                            \"type\": \"projects\",\n                            \"id\": \"1\"\n                        }\n                    },\n                    \"schema-template-version\": {\n                        \"data\": {\n                            \"type\": \"report-schema-templates\",\n                            \"id\": \"6\"\n                        }\n                    }\n                },\n                \"type\": \"reports\",\n                \"lid\": \"@ember-data:lid-report-local-463m0o\"\n            }\n        ],\n        \"type\": \"inspections\",\n        \"lid\": \"@ember-data:lid-inspection-local-d37ij9\"\n    }\n}\n\n ```\n\n#### Example: Updating an Inspection deleting existing Report and adding a new Report\n\nTo delete a record, it must be marked with the `-destroy` attribute.\n\n``` json\n{\n    \"data\": {\n        \"id\": \"146\",\n        \"attributes\": {\n            \"document\": {\n                \"text2\": \"My updated text\"\n            }\n        },\n        \"relationships\": {\n            \"reports\": {\n                \"data\": [\n                    {\n                        \"type\": \"reports\",\n                        \"id\": \"local-6jl3h\"\n                    },\n                    {\n                        \"type\": \"reports\",\n                        \"id\": \"179\"\n                    }\n                ]\n            },\n            \"schema-template-version\": {\n                \"data\": {\n                    \"type\": \"inspection-schema-templates\",\n                    \"id\": \"2\"\n                }\n            }\n        },\n        \"included\": [\n            {\n                \"id\": \"179\",\n                \"type\": \"reports\",\n                \"attributes\": {\n                    \"-destroy\": true\n                }\n            },\n            {\n                \"id\": \"local-6jl3h\",\n                \"attributes\": {\n                    \"description\": \"Some description\",\n                    \"document\": {\n                        \"pictures\": [],\n                        \"meta\": {}\n                    }\n                },\n                \"relationships\": {\n                    \"project\": {\n                        \"data\": {\n                            \"type\": \"projects\",\n                            \"id\": \"1\"\n                        }\n                    },\n                    \"schema-template-version\": {\n                        \"data\": {\n                            \"type\": \"report-schema-templates\",\n                            \"id\": \"6\"\n                        }\n                    }\n                },\n                \"type\": \"reports\",\n                \"lid\": \"@ember-data:lid-report-local-6jl3h\"\n            }\n        ],\n        \"type\": \"inspections\",\n        \"lid\": \"@ember-data:lid-inspection-local-d37ij9\"\n    }\n}\n\n ```\n\n# Data models\n\n### Doc conventions\n\nThis docs are a collection are organized into two major categories **Authenticated endpoints** and **Unauthenticated endpoints**, which then are organized by data model (e.g. _Users_, _Clients_, _Reports_, etc...). Inside each folder, you'll find example requests that range from creating, updating, searching, deleting to other model specific requests. At the beginning of each directory, you'll find a section called **Data Model** that contains a representation of the database table for that model with the following divided into two categories:\n\n- 🔒 **System-managed attributes**: Set or updated automatically by the system. These cannot be provided or modified through the API.\n    \n- 📤 **API-settable attributes**: Fields that can be created or updated by the client when interacting with the API.\n    \n\nSee **Common Data Model attributes** table to new an example of how each model table looks like.\n\n> This postman collection contains requests for all models that exist in our platform and we do our best to maintain them up to date. If you have any issues, o need help, feel free to contact us in the live chat in our app at [https://app.prysmex.com](https://app.prysmex.com). \n  \n\n### Common Data Model attributes\n\nEach data model contains a table with its attributes (columns). Since most data models contain the following attributes, they are NOT listed on each of the tables.\n\n#### 📤 Settable\n\n| **Attribute** | **Type** | **Default** | **Description** |\n| --- | --- | --- | --- |\n\n#### 🔒 System managed\n\n| **Attribute** | **Type** | **Default** | **Description** |\n| --- | --- | --- | --- |\n| **created_at**\\* | datetime | timestamp for now | Timestamp when the record was created  <br>(system-managed) |\n| **updated_at**\\* | datetime | timestamp for now | Timestamp when the record was last updated  <br>(system-managed) |\n| deleted_at | datetime | null | Soft-deletion timestamp  <br>(system-managed) |\n| **created_by_id**\\* | integer | id if current `User` | ID of the `User` who created this record  <br>(system-managed) |\n| last_updated_by_id | integer | null | ID of the `User` who last updated this record  <br>(system-managed) |\n| last_deleted_by_id | integer | null | ID of the `User` who deleted this record  <br>(system-managed) |\n\n# Disclaimers\n\n- 🚫 API versioning is not currently supported. This means that new releases may introduce breaking changes without prior notice. Please monitor updates closely and test your integrations regularly.","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"420467","team":133853,"collectionId":"f3effbb7-d678-47b0-8b9c-6f7fca3d9f76","publishedId":"2sB2qgeJZQ","public":true,"publicUrl":"https://developers.prysmex.com","privateUrl":"https://go.postman.co/documentation/420467-f3effbb7-d678-47b0-8b9c-6f7fca3d9f76","customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"0277cc"},"documentationLayout":"classic-double-column","customisation":{"metaTags":[{"name":"description","value":"Explore the Prysmex API, built with the JSON:API specification, for seamless B2B facility management integration. Automate workflows, manage operations, and enhance efficiency in industrial environments with our powerful, standards-based API."},{"name":"title","value":"Prysmex API – JSON:API for Smart B2B Facility Management Integration &amp; Automation"}],"appearance":{"default":"system_default","themes":[{"name":"dark","logo":"https://content.pstmn.io/4ec9c85d-d57f-49fd-819c-e87b3eddab59/cHJ5c21leDIucG5n","colors":{"top-bar":"212121","right-sidebar":"303030","highlight":"0277cc"}},{"name":"light","logo":"https://content.pstmn.io/4ec9c85d-d57f-49fd-819c-e87b3eddab59/cHJ5c21leDIucG5n","colors":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"0277cc"}}]}},"version":"8.10.1","publishDate":"2025-07-05T05:11:47.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{"title":"Prysmex API – JSON:API for Smart B2B Facility Management Integration &amp; Automation","description":"Explore the Prysmex API, built with the JSON:API specification, for seamless B2B facility management integration. Automate workflows, manage operations, and enhance efficiency in industrial environments with our powerful, standards-based API."},"logos":{"logoLight":"https://content.pstmn.io/4ec9c85d-d57f-49fd-819c-e87b3eddab59/cHJ5c21leDIucG5n","logoDark":"https://content.pstmn.io/4ec9c85d-d57f-49fd-819c-e87b3eddab59/cHJ5c21leDIucG5n"}},"statusCode":200},"environments":[],"user":{"authenticated":false,"permissions":{"publish":false}},"run":{"button":{"js":"https://run.pstmn.io/button.js","css":"https://run.pstmn.io/button.css"}},"web":"https://www.getpostman.com/","team":{"logo":"https://res.cloudinary.com/postman/image/upload/t_team_logo_pubdoc/v1/team/01456ab4ff4241cc3e5e27e250d4d9e06de428eeed26cd63f584735a455cbac2","favicon":"https://prysmex.com/favicon.ico"},"isEnvFetchError":false,"languages":"[{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"HttpClient\"},{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"RestSharp\"},{\"key\":\"curl\",\"label\":\"cURL\",\"variant\":\"cURL\"},{\"key\":\"dart\",\"label\":\"Dart\",\"variant\":\"http\"},{\"key\":\"go\",\"label\":\"Go\",\"variant\":\"Native\"},{\"key\":\"http\",\"label\":\"HTTP\",\"variant\":\"HTTP\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"OkHttp\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"Unirest\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"Fetch\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"jQuery\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"XHR\"},{\"key\":\"c\",\"label\":\"C\",\"variant\":\"libcurl\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Axios\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Native\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Request\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Unirest\"},{\"key\":\"objective-c\",\"label\":\"Objective-C\",\"variant\":\"NSURLSession\"},{\"key\":\"ocaml\",\"label\":\"OCaml\",\"variant\":\"Cohttp\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"cURL\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"Guzzle\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"HTTP_Request2\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"pecl_http\"},{\"key\":\"powershell\",\"label\":\"PowerShell\",\"variant\":\"RestMethod\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"http.client\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"Requests\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"httr\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"RCurl\"},{\"key\":\"ruby\",\"label\":\"Ruby\",\"variant\":\"Net::HTTP\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"Httpie\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"wget\"},{\"key\":\"swift\",\"label\":\"Swift\",\"variant\":\"URLSession\"}]","languageSettings":[{"key":"csharp","label":"C#","variant":"HttpClient"},{"key":"csharp","label":"C#","variant":"RestSharp"},{"key":"curl","label":"cURL","variant":"cURL"},{"key":"dart","label":"Dart","variant":"http"},{"key":"go","label":"Go","variant":"Native"},{"key":"http","label":"HTTP","variant":"HTTP"},{"key":"java","label":"Java","variant":"OkHttp"},{"key":"java","label":"Java","variant":"Unirest"},{"key":"javascript","label":"JavaScript","variant":"Fetch"},{"key":"javascript","label":"JavaScript","variant":"jQuery"},{"key":"javascript","label":"JavaScript","variant":"XHR"},{"key":"c","label":"C","variant":"libcurl"},{"key":"nodejs","label":"NodeJs","variant":"Axios"},{"key":"nodejs","label":"NodeJs","variant":"Native"},{"key":"nodejs","label":"NodeJs","variant":"Request"},{"key":"nodejs","label":"NodeJs","variant":"Unirest"},{"key":"objective-c","label":"Objective-C","variant":"NSURLSession"},{"key":"ocaml","label":"OCaml","variant":"Cohttp"},{"key":"php","label":"PHP","variant":"cURL"},{"key":"php","label":"PHP","variant":"Guzzle"},{"key":"php","label":"PHP","variant":"HTTP_Request2"},{"key":"php","label":"PHP","variant":"pecl_http"},{"key":"powershell","label":"PowerShell","variant":"RestMethod"},{"key":"python","label":"Python","variant":"http.client"},{"key":"python","label":"Python","variant":"Requests"},{"key":"r","label":"R","variant":"httr"},{"key":"r","label":"R","variant":"RCurl"},{"key":"ruby","label":"Ruby","variant":"Net::HTTP"},{"key":"shell","label":"Shell","variant":"Httpie"},{"key":"shell","label":"Shell","variant":"wget"},{"key":"swift","label":"Swift","variant":"URLSession"}],"languageOptions":[{"label":"C# - HttpClient","value":"csharp - HttpClient - C#"},{"label":"C# - RestSharp","value":"csharp - RestSharp - C#"},{"label":"cURL - cURL","value":"curl - cURL - cURL"},{"label":"Dart - http","value":"dart - http - Dart"},{"label":"Go - Native","value":"go - Native - Go"},{"label":"HTTP - HTTP","value":"http - HTTP - HTTP"},{"label":"Java - OkHttp","value":"java - OkHttp - Java"},{"label":"Java - Unirest","value":"java - Unirest - Java"},{"label":"JavaScript - Fetch","value":"javascript - Fetch - JavaScript"},{"label":"JavaScript - jQuery","value":"javascript - jQuery - JavaScript"},{"label":"JavaScript - XHR","value":"javascript - XHR - JavaScript"},{"label":"C - libcurl","value":"c - libcurl - C"},{"label":"NodeJs - Axios","value":"nodejs - Axios - NodeJs"},{"label":"NodeJs - Native","value":"nodejs - Native - NodeJs"},{"label":"NodeJs - Request","value":"nodejs - Request - NodeJs"},{"label":"NodeJs - Unirest","value":"nodejs - Unirest - NodeJs"},{"label":"Objective-C - NSURLSession","value":"objective-c - NSURLSession - Objective-C"},{"label":"OCaml - Cohttp","value":"ocaml - Cohttp - OCaml"},{"label":"PHP - cURL","value":"php - cURL - PHP"},{"label":"PHP - Guzzle","value":"php - Guzzle - PHP"},{"label":"PHP - HTTP_Request2","value":"php - HTTP_Request2 - PHP"},{"label":"PHP - pecl_http","value":"php - pecl_http - PHP"},{"label":"PowerShell - RestMethod","value":"powershell - RestMethod - PowerShell"},{"label":"Python - http.client","value":"python - http.client - Python"},{"label":"Python - Requests","value":"python - Requests - Python"},{"label":"R - httr","value":"r - httr - R"},{"label":"R - RCurl","value":"r - RCurl - R"},{"label":"Ruby - Net::HTTP","value":"ruby - Net::HTTP - Ruby"},{"label":"Shell - Httpie","value":"shell - Httpie - Shell"},{"label":"Shell - wget","value":"shell - wget - Shell"},{"label":"Swift - URLSession","value":"swift - URLSession - Swift"}],"layoutOptions":[{"value":"classic-single-column","label":"Single Column"},{"value":"classic-double-column","label":"Double Column"}],"versionOptions":[],"environmentOptions":[{"value":"0","label":"No Environment"}],"canonicalUrl":"https://developers.prysmex.com/view/metadata/2sB2qgeJZQ"}