{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"db338f38-6a0c-427f-b977-be5732ef6f84","name":"Foxtag.io Public Api","description":"The Foxtag API provides access to your organization’s data within the Foxtag platform, allowing integration with other software on the customer’s side.\n\nThis REST API utilizes resource-oriented URLs and standard HTTP response codes to indicate errors. All API responses are in JSON format, and all data sent to the API should also be in JSON format.\n\n> **NOTE:** For testing with this tool, it’s advised to generate a dedicated API key. Be sure to delete the testing key once it is no longer needed. \n  \n\nOur production API Endpoint: `api.foxtag.io/api/v1/public` ( https only )\n\n---\n\n# Authentication\n\nFoxtag provides access to its Public API endpoints using long-lived API keys. As these keys do **not** automatically expire, we highly recommend the following security practices:\n\n- Regularly rotate API keys\n    \n- Remove any API keys that are no longer in use or have been compromised\n    \n\n## Anatomie of API keys\n\nEach API key has a public and private part, separated by a dot. The public part allows identification of the API key in use and supports debugging efforts. The private part is securely stored as a hash, ensuring that only the API key creator has access to its original value.\n\nExample API key:\n\n`9d819a.4aD3CkTdp-PiDoBLFAi9gzRUsS83cIo5xwKgfA85lRE`\n\n## API key usage\n\nInclude the API key in the header of each request to a Public API endpoint in this format:\n\n```\nAuthorization:Bearer <your-api-key>\n\n ```\n\nCurl Request Example\n\n``` bash\ncurl -X GET \"https://api.foxtag.com/endpoint\" \\\n     -H \"Authorization: Bearer <your-api-key>\"\n\n ```\n\n## Create and manage API keys\n\nAPI key creation and management are handled in the administration section of [foxtag.io](https://www.foxtag.io/organizations/settings), accessible only to accounts with administrative privileges.\n\nWhen a new API key is created, relevant access rights must be selected (see image below). Assigning only the permissions necessary for the intended use case is highly suggested.\n\n<img src=\"https://content.pstmn.io/ac85a6a2-586a-4c7b-919b-2ec8505c4f42/YXBpX2tleV9hY2Nlc3NfcmlnaHRzLnBuZw==\">\n\nEnsure that the API key is copied immediately upon creation. Foxtag stores the API key as an encrypted hash, making it impossible to retrieve the key at a later time.\n\n<img src=\"https://content.pstmn.io/2ff17534-cc88-44d8-a5f1-30f1ac5a19f4/YXBpX2tleV9hZnRlcl9jcmVhdGlvbi5wbmc=\">\n\nCreating an API key for foxtag.io is a simple process. It is recommended to delete any unused API keys or those that cannot be fully trusted to remain confidential.\n\n---\n\n# **API Endpoint-Basics**\n\n## Accept Headers\n\nThe Foxtag Public API returns data in JSON format. Ensure that the correct `Accept` header is included with every request.\n\n- Either accept json content type.  \n    Accept: application/json\n    \n- Or at least accept all content types.  \n    Accept: \\*/\\*\n    \n- In case the correct header cannot be sent, append a `.json` suffix to the URL to make the request clear and unambiguous.  \n    `GET /users.json`\n    \n\nProblems with accepting content types result in `HTTP 406 Not Acceptable`\n\n## Routes\n\nThe Foxtag public API may offer up to four different endpoints for a given resource, utilizing the GET, POST, or DELETE methods. Availability varies, so not all resources support every endpoint type.\n\n#### GET ( Resource Index )\n\nFetches a paginated list of record. Including the query paramter `page` determines which page is returned. Some endpoints offer the usage of additional query parameters for further filtering.\n\nExample: `GET /users?page=1`\n\n#### GET ( Specific record )\n\nRetrieves detailed information about a specific record, offering more in-depth data compared to index routes. The record is identified by either its UUID or number attribute and placed as a path attribute.\n\nExample: `GET /users/:customer_id_or_number`\n\n#### POST ( Create/Upsert records )\n\nRecords can be created or updated using an endpoint that following either just create or upsert behavior. The request body should contain a list of record data. If the data includes an `id` field (UUID), the system will update the existing record with the matching `id` (provided the endpoint supports upsert behavior). If the `id` field is omitted, the system will create a new record with the provided data.\n\n> **NOTE**: While records can be identified by their `number` attribute in **GET** requests, updating records strictly requires the `id` (UUID) of the record. \n  \n> **NOTE**: Ensure the request body is sent in JSON format with the `Content-Type: application/json` header. \n  \n\nTo maintain efficient request processing, the creation or updating of records is limited to 100 objects per request. Requests exceeding this limit will result in an HTTP 422 error with the message \"Too many elements in a single request.\"\n\n**SEE SECTION UPSERT RESPONSE FOR FURTHER INFORMATION OF THE RESPONSE**\n\n#### DELETE ( Delete record )\n\nCertain resources can be deleted using an HTTP DELETE request. Like the POST request, the `id` (UUID) of the record must be included as a path attribute.  \nExample: `DELETE /users/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`\n\n> **NOTE**: Be aware that deleting an **Installation** records will also remove all related data, such as inventory (things/components), check events and reports. \n  \n\n---\n\n# Pagination and sorting\n\n### Pagination\n\nRequests that retrieve lists of records are paginated, with a maximum of 500 records per page in most cases. The response includes a `meta` section, where the current page and the total number of pages are indicated, making it easy to navigate through large datasets.\n\nIf no page is specified, the default page (page 1) is returned. To access additional pages, simply append a `page` query parameter to the URL, as demonstrated in this example to retrieve page 3:\n\n`GET /users?page=3`\n\nThis allows for easy navigation through paginated records without additional configuration.\n\n``` json\n// Example meta info of a paginated response\n{ \n  // ... resource data here ...\n  \"meta\": {\n    \"current_page\": 1,\n    \"total_pages\": 3,\n    \"total_count\": 1063\n  }\n}\n\n ```\n\n### Sorting\n\nRecords in the list are sorted by the `updated_at` field, with the latest updates appearing last. For new records, the `updated_at` value is initialized to the creation timestamp.\n\n---\n\n# Upsert Response\n\n### Attributes\n\nMany endpoints support the creation or updating of multiple records by submitting a list of objects in a **POST** request.  \nWhen upsert behavior is supported by the endpoint, the response to such a request includes the following details:\n\n| **ATTRIBUTE** | **TYPE** | **DESCRIPTION** |\n| --- | --- | --- |\n| status | string | Has value `success` or `with_errors` |\n| errors_count | int | Error count. `0` if no errors |\n| results | array | List of results |\n| results objects .id | uuid or null | ID of the record if available. `null` if not available |\n| results objects .success | boolean | Record has been saved |\n| results objects .message | string or null | Error message. `null` if succesfull |\n\n### Request response without errors\n\nUpon success, the response includes a list of IDs corresponding to the newly inserted or updated records.  \nRequests that do not encounter any errors will have the status marked as `success` and an `errors_count` of `0`.\n\nExample response:\n\n``` json\n// Example Response with 2 successful updates (HTTP 200)\n{\n  \"status\": \"success\",\n  \"errors_count\": 0,\n  \"results\": [\n    {\n      \"id\": \"88e08d4b-b410-4afb-be50-6b980926ed70\",\n      \"success\": true,\n      \"message\": null\n    },\n    {\n      \"id\": \"428d87f7-99a4-40b5-b337-7775b958c022\",\n      \"success\": true,\n      \"message\": null\n    }\n  ]\n}\n\n ```\n\n### Request response with errors\n\nIn case some or all records fail to save, the response will include a mixed list, with records marked as `success: false`.  \nRequests that contain errors will have the status `with_errors` and an `errors_count` greater than `0`.\n\n> **NOTE**: Repsonses with errors respond with HTTP status 200, not with a HTTP error code \n  \n\nExample response:\n\n``` json\n// Example Response with errors (HTTP 200)\n{\n  \"status\": \"with_errors\",\n  \"errors_count\": 2,\n  \"results\": [\n    // not created record\n    {\n      \"id\": null,\n      \"success\": false,\n      \"message\": \"Customer no. is taken\"\n    },\n    // not updated record\n    {\n      \"id\": \"88e08d4b-b410-4afb-be50-6b980926ed70\",\n      \"success\": false,\n      \"message\": \"Customer no. is taken\"\n    },\n    // created record\n    {\n      \"id\": \"4071d49e-bb5b-4647-85cd-2635fca6b00b\",\n      \"success\": true,\n      \"message\": null\n    }\n  ]\n}\n\n ```","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"28130234","team":6178108,"collectionId":"db338f38-6a0c-427f-b977-be5732ef6f84","publishedId":"2sAYX5MNuP","public":true,"publicUrl":"https://documenter-api.postman.tech/view/28130234/2sAYX5MNuP","privateUrl":"https://go.postman.co/documentation/28130234-db338f38-6a0c-427f-b977-be5732ef6f84","customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"documentationLayout":"classic-double-column","customisation":{"metaTags":[{"name":"description","value":"The Foxtag Public API provides access to your organization's account data for seamless integration with customer-side software. "},{"name":"title","value":"Foxtag | Public-API Documentation | Postman API Network"}],"appearance":{"default":"light","themes":[{"name":"dark","logo":null,"colors":{"top-bar":"212121","right-sidebar":"303030","highlight":"FF6C37"}},{"name":"light","logo":null,"colors":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"}}]}},"version":"8.10.1","publishDate":"2025-02-04T15:09:10.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{"title":"Foxtag | Public-API Documentation | Postman API Network","description":"The Foxtag Public API provides access to your organization's account data for seamless integration with customer-side software. "},"logos":{"logoLight":null,"logoDark":null}},"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/c9acf12edf212095139d37e1bc00017be7829ccf5ed0841a0f08b85b273453f8","favicon":""},"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://documenter.gw.postman.com/view/metadata/2sAYX5MNuP"}