{"basePath":"/platform","definitions":{"address":{"description":"address information","properties":{"city":{"description":"city name","maxLength":128,"minLength":3,"type":"string"},"country":{"$ref":"#/definitions/country"},"line1":{"description":"exact address information, e.g. \"Masson str 123, office 15\"","maxLength":128,"minLength":3,"pattern":"^[^\\r\\n]+$","type":"string","x-schema-errors":{"pattern":"no newline characters allowed"}},"postal_code":{"description":"postal code","maxLength":12,"minLength":1,"type":"string"},"state":{"description":"state name","maxLength":40,"minLength":2,"type":"string"}},"required":["country","city","line1"],"type":"object"},"billing":{"description":"Billing information for current customer","properties":{"auto_payment":{"$ref":"#/definitions/billing.auto_payment"},"balance":{"$ref":"#/definitions/billing.balance"},"cash_balance":{"$ref":"#/definitions/billing.cash_balance"},"contract":{"$ref":"#/definitions/billing.contract"},"currency":{"$ref":"#/definitions/billing.currency"},"emails":{"$ref":"#/definitions/billing.emails"},"entity":{"$ref":"#/definitions/billing.entity"},"estimated_invoice":{"$ref":"#/definitions/billing.estimated_invoice"},"id":{"description":"Customer's unique ID","type":"integer"},"multiplier":{"$ref":"#/definitions/billing.multiplier"},"payment_method":{"$ref":"#/definitions/billing.payment_method"},"tariff":{"$ref":"#/definitions/billing.tariff"}},"type":"object"},"billing.auto_payment":{"description":"Automatically charge invoices on the second day of the month, if possible.","type":"boolean"},"billing.balance":{"description":"Current account balance, in EUR cents.","type":"integer"},"billing.cash_balance":{"description":"Current account cash balance (cash deposited on the account, refundable), in EUR cents.","type":"integer"},"billing.contract":{"description":"Contract information for commercial account","properties":{"date":{"$ref":"#/definitions/billing.contract.date"},"number":{"$ref":"#/definitions/billing.contract.number"}},"required":["number","date"],"type":"object"},"billing.contract.date":{"description":"Contract date in form 'YYYY-MM-DD'.","maxLength":10,"minLength":10,"type":"string"},"billing.contract.number":{"description":"Contract number.","maxLength":16,"minLength":4,"type":"string"},"billing.currency":{"description":"Currency used for money specification","maxLength":3,"minLength":3,"type":"string"},"billing.email":{"description":"e-mail address","format":"email","maxLength":255,"minLength":5,"type":"string","x-schema-errors":{"format":"invalid email format"},"x-view-type":"email"},"billing.emails":{"description":"E-mail addresses where CC all billing-related messages: payments, invoices and reminders.\n","items":{"$ref":"#/definitions/billing.email"},"maxItems":4,"type":"array"},"billing.entity":{"description":"Billing entity information for the contract","properties":{"address":{"$ref":"#/definitions/address"},"company":{"$ref":"#/definitions/billing.entity.company"},"extra_invoice_info":{"$ref":"#/definitions/billing.entity.extra_invoice_info"},"registration_number":{"$ref":"#/definitions/billing.entity.registration_number"},"vat_code":{"$ref":"#/definitions/billing.entity.vat_code"}},"required":["address","company","registration_number"],"type":"object"},"billing.entity.company":{"description":"Offical company name.","maxLength":255,"minLength":1,"type":"string"},"billing.entity.extra_invoice_info":{"description":"additional information to be added to the invoice, e,.g. Purchsing Order number","maxLength":512,"type":"string"},"billing.entity.registration_number":{"description":"Company registration number.","maxLength":64,"minLength":5,"type":"string"},"billing.entity.vat_code":{"description":"VAT number, for EU companies only, required for companies from Lithuania.","maxLength":20,"minLength":4,"type":"string"},"billing.estimated_invoice":{"description":"customer's estimated invoice data that will be issued for next month. Estimation is calculated for current month based on the average usage.","properties":{"amount":{"$ref":"#/definitions/invoice.amount"},"items":{"$ref":"#/definitions/invoice.items"},"period":{"$ref":"#/definitions/invoice.period"},"statistics":{"$ref":"#/definitions/invoice.statistics"},"timestamp":{"description":"UNIX timestasmp when this estimation was calculated","type":"number"}},"type":"object"},"billing.multiplier":{"description":"Currency multiplier, used to display currency values. For example if currency is EUR and all currency values are in EUR-cents, the multiplier will be 0.01 to show user EUR instead of cents","type":"number"},"billing.payment_method":{"description":"Type of payment methods used by billing.","type":"string"},"billing.payment_portal.result":{"description":"payment portal information","properties":{"link":{"description":"link to payment portal","type":"string"}},"type":"object"},"billing.put":{"properties":{"auto_payment":{"$ref":"#/definitions/billing.auto_payment"},"emails":{"$ref":"#/definitions/billing.emails"}},"type":"object"},"billing.result":{"properties":{"result":{"description":"Customer's billing info in reply, fields included according to request's **fields** parameter.","items":{"$ref":"#/definitions/billing"},"type":"array"}},"type":"object"},"billing.tariff":{"description":"Tariff name(plan) that customer is now using","type":"string"},"calc.interval.counter":{"anyOf":[{"$ref":"#/definitions/container.interval.counter.expression"},{"$ref":"#/definitions/container.interval.counter.dataset"},{"$ref":"#/definitions/container.interval.counter.route"},{"$ref":"#/definitions/container.interval.counter.datetime"},{"$ref":"#/definitions/container.interval.counter.parameter"},{"$ref":"#/definitions/container.interval.counter.message"},{"$ref":"#/definitions/container.interval.counter.interval"},{"$ref":"#/definitions/container.interval.counter.active"},{"$ref":"#/definitions/container.interval.counter.geofence"},{"$ref":"#/definitions/container.interval.counter.variable"},{"$ref":"#/definitions/container.interval.counter.specified"},{"$ref":"#/definitions/container.interval.counter.calculator"},{"$ref":"#/definitions/container.interval.counter.accumulator"}],"x-key-property":"type"},"calc.interval.counters":{"description":"[Intervals counters](https://flespi.com/kb/analytics-reports-and-events-engine#interval-counters), define how to calculate messsages inside each interval.\n","items":{"$ref":"#/definitions/calc.interval.counter"},"maxItems":50,"type":"array"},"calc.interval.selector":{"anyOf":[{"$ref":"#/definitions/container.interval.selector.expression"},{"$ref":"#/definitions/container.interval.selector.datetime"},{"$ref":"#/definitions/container.interval.selector.geofence"},{"$ref":"#/definitions/container.interval.selector.calculator"},{"$ref":"#/definitions/container.interval.selector.inactive"}],"x-key-property":"type"},"calc.interval.selectors":{"description":"[Intervals selectors](https://flespi.com/kb/analytics-reports-and-events-engine#interval-selectors) are used to split device messages into intervals based on user-defined criteria.\nResulting intervals will have begin, end times, and duration. It is possible to have intervals that consist of one message only, i.e. with zero duration.\n\nEach interval selector type has its own internal logic in the configuration, determines the state of each analyzed message sequentially, and assigns each message one of the following:\n* ON — interval can continue\n* ON_NEW — interval should restart\n* OFF — interval should stop\n* UNKNOWN — unable to calculate\n\nSo, to detect one interval it is enough to have at least one message marked ON or ON_NEW.\n\nIf multiple interval selectors are specified, they will be merged with AND logic, i.e. only ranges where all specified interval selectors are active will be present in the final intervals\n","items":{"$ref":"#/definitions/calc.interval.selector"},"maxItems":3,"minItems":1,"type":"array"},"changelog.get":{"properties":{"count":{"default":10000000,"description":"limit number of posts to be returned","format":"uint32","maximum":10000000,"minimum":1,"type":"integer"},"fields":{"description":"CSV-formatted list of post fields to be returned","maxLength":4096,"type":"string"},"filter":{"description":"optional filter expression to return only matching posts","maxLength":1024,"type":"string","x-view-type":"expression"},"from":{"description":"start moment's UNIX timestamp, use 0 to ignore left bound","minimum":0,"type":"number","x-view-type":"datetime"},"reverse":{"default":false,"description":"use true to list posts from newest to oldest","type":"boolean"},"to":{"description":"end moment's UNIX timestamp, use 0 to ignore right bound","minimum":0,"type":"number","x-view-type":"datetime"}},"type":"object"},"changelog.post":{"properties":{"author":{"description":"display name of the post author on the forum","type":"string"},"name":{"description":"name of the changelog the post belongs to","type":"string"},"text":{"description":"post text in markdown format","format":"textarea","type":"string"},"timestamp":{"description":"post publication UNIX timestamp","type":"number","x-view-type":"datetime"},"title":{"description":"changelog topic title","type":"string"},"url":{"description":"direct link to the post on the forum","type":"string"}},"type":"object"},"changelog.posts":{"properties":{"result":{"description":"changelog posts sorted by publication time","items":{"$ref":"#/definitions/changelog.post"},"type":"array"}},"type":"object"},"chat.ai_assistant.post":{"properties":{"enable":{"description":"Enable or disable AI assistant","type":"boolean"}},"required":["enable"],"type":"object"},"chat.file.post":{"properties":{"name":{"$ref":"#/definitions/chat.message.name"},"reply_timestamp":{"$ref":"#/definitions/chat.message.reply_timestamp"}},"type":"object"},"chat.get":{"properties":{"count":{"default":1000000,"description":"limit number of chat messages to be returned","format":"uint32","maximum":1000000,"minimum":1,"type":"integer"},"filter":{"description":"filter search by applying field=value filter as used in containers","maxLength":1024,"type":"string","x-view-type":"expression"},"from":{"description":"start moment's UNIX timestamp to limit chat message from beginning. use 0 to ignore left bound","minimum":0,"type":"number","x-view-type":"datetime"},"reverse":{"default":false,"description":"time sorting parameter (true/false), use true to list messages from end to beginning","type":"boolean"},"to":{"description":"end moment's UNIX timestamp to limit chat message to the end. use 0 to ignore right bound","minimum":0,"type":"number","x-view-type":"datetime"}},"type":"object"},"chat.knowledge":{"description":"associated knowledge chunks","properties":{"links":{"description":"knowledge links","items":{"description":"link to associated knowledge","properties":{"category":{"description":"knowledge category","type":"string"},"count":{"description":"quantity of semantically similar text information","type":"integer"},"distance":{"description":"semantic distance between context and the knowledge chunk under the link","type":"number"},"link":{"description":"URL for knowledge","type":"string"},"title":{"description":"link title","type":"string"}},"type":"object"},"type":"array"}},"type":"object"},"chat.knowledge.get":{"properties":{"context":{"description":"Context to search for semantically similar knowledge","maxLength":4096,"minLength":5,"type":"string"}},"required":["context"],"type":"object"},"chat.message":{"description":"A single support-chat message. Messages flow in both directions between the customer and the flespi support team; \"direction\" tells the two sides apart and \"name\" identifies the author. The flespi support team includes flespi's AI assistant, whose messages appear under its name like any other flespi-team message.\n","properties":{"cdn_id":{"description":"Identifier of the attached file in the flespi CDN (file messages only).","type":"number"},"data":{"$ref":"#/definitions/chat.message.data"},"direction":{"description":"Message direction. true - message from the customer; false - message from the flespi support team.","type":"boolean"},"file":{"description":"Name of the attached file (file messages only).","type":"string"},"mime":{"description":"MIME type of the attached file (file messages only).","type":"string"},"name":{"$ref":"#/definitions/chat.message.name"},"reply_timestamp":{"$ref":"#/definitions/chat.message.reply_timestamp"},"size":{"description":"Size of the attached file in bytes (file messages only).","type":"number"},"text":{"$ref":"#/definitions/chat.message.text"},"timestamp":{"$ref":"#/definitions/chat.message.timestamp"},"type":{"description":"Message type:\n  * 0 => text message\n  * 3 => file attachment, accompanied by the \"cdn_id\", \"mime\", \"file\", \"size\" and \"uuid\" fields\n","enum":[0,3],"readOnly":true,"type":"number","x-view-enum-labels":["Text","File"]},"uuid":{"description":"UUID of the attached file in the flespi CDN, used to build its download URL (file messages only).","type":"string"}},"type":"object"},"chat.message.data":{"additionalProperties":true,"description":"Auxiliary message data.","maxProperties":100,"type":"object"},"chat.message.name":{"description":"Person name.","maxLength":256,"minLength":1,"type":"string"},"chat.message.reply_timestamp":{"description":"When set, the UNIX timestamp of the message this one replies to (threading).","type":"number","x-view-type":"datetime"},"chat.message.text":{"description":"Message text.","maxLength":16384,"minLength":1,"type":"string"},"chat.message.timestamp":{"description":"Message UNIX timestamp.","type":"number","x-view-type":"datetime"},"chat.post":{"properties":{"data":{"$ref":"#/definitions/chat.message.data"},"name":{"$ref":"#/definitions/chat.message.name"},"reply_timestamp":{"$ref":"#/definitions/chat.message.reply_timestamp"},"text":{"$ref":"#/definitions/chat.message.text"},"type":{"const":0,"default":0,"readOnly":true,"type":"number"}},"required":["text"],"type":"object","x-view-order":["name","text"]},"chat.put":{"properties":{"name":{"$ref":"#/definitions/chat.message.name"}},"type":"object"},"container.interval":{"additionalProperties":true,"description":"selected interval data","properties":{"begin":{"$ref":"#/definitions/container.interval.begin"},"duration":{"$ref":"#/definitions/container.interval.duration"},"end":{"$ref":"#/definitions/container.interval.end"}},"type":"object"},"container.interval.begin":{"description":"interval begin time, UNIX timestamp","minimum":1,"type":"number","x-view-type":"datetime"},"container.interval.counter":{"anyOf":[{"$ref":"#/definitions/container.interval.counter.expression"},{"$ref":"#/definitions/container.interval.counter.dataset"},{"$ref":"#/definitions/container.interval.counter.route"},{"$ref":"#/definitions/container.interval.counter.datetime"},{"$ref":"#/definitions/container.interval.counter.parameter"},{"$ref":"#/definitions/container.interval.counter.message"},{"$ref":"#/definitions/container.interval.counter.interval"},{"$ref":"#/definitions/container.interval.counter.active"},{"$ref":"#/definitions/container.interval.counter.geofence"},{"$ref":"#/definitions/container.interval.counter.variable"},{"$ref":"#/definitions/container.interval.counter.specified"},{"$ref":"#/definitions/container.interval.counter.accumulator"}],"x-key-property":"type"},"container.interval.counter.accumulator":{"description":"Accumulate value of another counter across multiple intervals.\n\nUse to compute aggregate metrics like total mileage.\n","properties":{"counter":{"description":"Counter name which numerical value to accumulate.\n","maxLength":128,"minLength":1,"type":"string"},"name":{"$ref":"#/definitions/container.interval.counter.name"},"reset_expression":{"description":"[Expression](https://flespi.com/kb/expressions) over interval counters that can be used to specify reset condition for accumulated value, e.g. when to start value accumulation again from scratch.\nNon-zero expression evaluation result means condition to be reset. For example you may specify: \"duration>3600\" to continiously accumulate value only for short intervals, that are less than 1 hour.\nprevious(\"counter_name\") function, if used in expression will return the value of counter_name counter from previously calculated and stored interval.\n","format":"expression-complex","maxLength":1024,"minLength":1,"type":"string","x-view-type":"expression"},"reset_interval":{"description":"Defines interval, upon which accumulated value will be automatically reset to zero","enum":["hour","day","week_monday","week_sunday","month","year"],"type":"string","x-view-enum-labels":["Hour","Day","Week (from Monday)","Week (from Sunday)","Month","Year"]},"type":{"const":"accumulator","default":"accumulator","description":"Accumulate value of another counter across multiple intervals.\n\nUse to compute aggregate metrics like total mileage.\n","readOnly":true,"type":"string"}},"required":["type","name","counter"],"title":"Accumulator","type":"object","x-view-order":["type","name","counter","reset_interval","reset_expression"],"x-view-shrink-field":"name"},"container.interval.counter.active":{"description":"Return true/false based on whether the interval is currently active/inactive.\n\nUse to detect unfinished (e.g. still is running) intervals.\n","properties":{"name":{"$ref":"#/definitions/container.interval.counter.name"},"type":{"const":"active","default":"active","description":"Return true/false based on whether the interval is currently active/inactive.\n\nUse to detect unfinished (e.g. still is running) intervals.\n","readOnly":true,"type":"string"}},"required":["type","name"],"title":"Active","type":"object","x-view-order":["type","name"],"x-view-shrink-field":"name"},"container.interval.counter.calculator":{"description":"Put intervals generated by another calculator into this calculator either as array(all or aggregated by some field) or object (first, last or aggregated).\nUse to intersect data from multiple calculators.","properties":{"allow_finish_after":{"description":"when true, may include intervals that started before our 'end' but finished later","type":"boolean"},"allow_start_before":{"description":"when true, may include intervals that started before our 'begin' but finished later","type":"boolean"},"calc_id":{"description":"Calculator ID which intervals to add","minimum":1,"type":"integer","x-flespi-acl":"gw/calcs","x-view-selector":"calcs"},"fields":{"description":"Specify which fields to copy from referenced calculator intervals.\nFor example to limit the size of counter JSON you may configure to include just 'id', 'begin' and 'duration' fields.\n","items":{"anyOf":[{"description":"Use field name from referenced calculator's interval as is","maxLength":64,"minLength":1,"pattern":"^[\\w:!%$.-]([\\w:!%$. -]*[\\w:!%$.-])?$","title":"Interval field","type":"string"},{"description":"Compute new field using expression over referenced calculator's interval fields and selected aggregate method\n\nIf expression is not specified the value of field from referenced interval JSON will be taken directly.\n","properties":{"aggregate":{"default":"first","description":"Aggregation method, valid only when counter method set to 'aggregate' or 'aggregate_by_field':\n - first - will be used the first calculated value\n - last - will be used the last calculated value\n - summary - will be used summation of all calculated values\n - minimum - will be used minimum calculated value (for numbers only)\n - maximum - will be used maximum calculated value (for numbers only)\n\n If 'aggregate_by_field' method is used aggregation method is not applicable to the first field, which is automatically used for grouping intervals\n","enum":["first","last","summary","minimum","maximum"],"type":"string"},"expression":{"description":"[Expression](https://flespi.com/kb/expressions) for calculating field value for the referenced interval.\n\nIf the expression value can not be calculated for the field it will generate null.\n\nIf expression is not specified for the field the value from referenced interval JSON will be taken directly.\n","format":"expression-complex","maxLength":256,"minLength":1,"type":"string","x-view-type":"expression"},"name":{"description":"field name, will be used as key in generated interval JSON","maxLength":64,"minLength":1,"pattern":"^[\\w:!%$.-]([\\w:!%$. -]*[\\w:!%$.-])?$","type":"string"}},"required":["name"],"title":"Computed field","type":"object","x-view-order":["name","expression","aggregate"],"x-view-shrink-field":"name"}]},"maxItems":24,"minItems":1,"type":"array"},"lookup_time_after":{"description":"specify how many seconds to look forward after interval end to search for intervals","maximum":864000,"minimum":0,"type":"integer"},"lookup_time_before":{"description":"specify how many seconds to look back before interval begin to search for intervals","maximum":864000,"minimum":0,"type":"integer"},"method":{"default":"each","description":"Method for selecting interval(s) from referenced calculator:\n - first - will be used the first suitable interval\n - last - will be used the last suitable interval\n - each - all suitable intervals values will be presented as array\n - aggregate - aggregate intervals into single, for this method you should specify fields\n - aggregate_by_field - group intervals based on the first field, and aggregate them into single value, the first field value will be used for grouping\n","enum":["first","last","each","aggregate","aggregate_by_field"],"type":"string"},"name":{"$ref":"#/definitions/container.interval.counter.name"},"type":{"const":"calc","default":"calc","description":"Put intervals generated by another calculator into this calculator either as array(all or aggregated by some field) or object (first, last or aggregated).\nUse to intersect data from multiple calculators.","readOnly":true,"type":"string"},"validate_interval":{"description":"Optional expression to validate intervals. If specified only those intervals from referenced calculator that conforms to the expression will be added.\nYou use flespi [expressions](https://flespi.com/kb/expressions) and reference interval counter fields as parameters inside it.\n","format":"expression-complex","maxLength":1024,"type":"string","x-view-type":"expression"}},"required":["type","name","calc_id"],"title":"Calculator","type":"object","x-view-order":["type","name","calc_id","method","validate_interval","allow_start_before","lookup_time_before","allow_finish_after","lookup_time_after","fields","aggregate"],"x-view-shrink-field":"name"},"container.interval.counter.dataset":{"description":"For each message generate a JSON object and return an array of generated points.\n\nUse to collect a set of specific data points for each interval, e.g. to plot them on a diagram.\n\nWhen there is a need to copy message parameters into the interval without any conversion or renaming it is suggested to use 'message' counter with method='each' instead.\nAlso take a look at counter of type='parameter' which can be also suitable instead of dataset.\n","properties":{"allow_unknown":{"description":"when true, if some field is not possible to calculate (e.g. parameter is missing) pass null instead","type":"boolean"},"fields":{"description":"values to be precalcuated for each message","items":{"properties":{"name":{"description":"field name, will be used as key in generated JSON for each message","maxLength":64,"minLength":1,"pattern":"^[\\w:!%$.-]([\\w:!%$. -]*[\\w:!%$.-])?$","type":"string"},"value":{"description":"[Expression](https://flespi.com/kb/expressions) for calculating field value for the message referencing values of its parameters, e.g.: (param1+param2)/(param3-param4)\n","format":"expression-complex","maxLength":256,"minLength":1,"type":"string","x-view-type":"expression"}},"required":["name","value"],"title":"Field","type":"object"},"maxItems":20,"minItems":1,"type":"array"},"name":{"$ref":"#/definitions/container.interval.counter.name"},"type":{"const":"dataset","default":"dataset","description":"For each message generate a JSON object and return an array of generated points.\n\nUse to collect a set of specific data points for each interval, e.g. to plot them on a diagram.\n\nWhen there is a need to copy message parameters into the interval without any conversion or renaming it is suggested to use 'message' counter with method='each' instead.\nAlso take a look at counter of type='parameter' which can be also suitable instead of dataset.\n","readOnly":true,"type":"string"},"validate_message":{"$ref":"#/definitions/container.interval.validate_message"}},"required":["type","name","fields"],"title":"Dataset","type":"object","x-view-order":["type","name","fields","allow_unknown","validate_message"],"x-view-shrink-field":"name"},"container.interval.counter.datetime":{"description":"Print the user-formatted begin or end time according to specified timezone into the interval.\n\nUse to add interval begin/end time as string in user's timezone.\n","properties":{"format":{"default":"%c","description":"Timestamp format, POSIX way, check strftime function for the format definition","maxLength":256,"minLength":2,"type":"string"},"interval":{"default":"begin","description":"Timestamp source","enum":["begin","end"],"type":"string","x-view-enum-labels":["Interval begin","Interval end"]},"name":{"$ref":"#/definitions/container.interval.counter.name"},"type":{"const":"datetime","default":"datetime","description":"Print the user-formatted begin or end time according to specified timezone into the interval.\n\nUse to add interval begin/end time as string in user's timezone.\n","readOnly":true,"type":"string"},"validate_message":{"$ref":"#/definitions/container.interval.validate_message"}},"required":["type","name"],"title":"Datetime","type":"object","x-view-order":["type","name","interval","format","validate_message"],"x-view-shrink-field":"name"},"container.interval.counter.expression":{"description":"Calculate a value based on device message parameter values.\nEvaluates an expression using device message parameters and add its first, last, average, minimum or maximum calculated value to the interval.\n\nThis is the most popular type of interval counter that is used to calculate almost everything which can be extracted from device messages within the selected interval.\nUse to compute various metrics within interval like mileage, engine hours, duration of some event and so on.\nAlso used to determine first/last value of specific message parameters within interval.\n","properties":{"expression":{"description":"[Expression](https://flespi.com/kb/expressions) for calculating counter value for the message referencing values of its parameters, e.g.: (param1+param2)/(param3-param4)\n","format":"expression-complex","maxLength":1024,"minLength":1,"type":"string","x-view-type":"expression"},"method":{"default":"first","description":"Method for combining each message's value on interval together:\n - first - will be used first calculated value\n - last - will be used last calculated value\n - minimum - will be used the minimum calculated value\n - maximum - will be used the maximum calculated value\n - summary - will be used summation of all calculated values\n - average - average value among calculated\n - difference - the difference between each next and current calculated values, in the counter summary of such differences will be stored\n - duration - summary of duration from the current message till the next, for each case when boolean expression evaluates to non-zero\n","enum":["first","last","average","minimum","maximum","summary","difference","duration"],"type":"string"},"name":{"$ref":"#/definitions/container.interval.counter.name"},"type":{"const":"expression","default":"expression","description":"Calculate a value based on device message parameter values.\nEvaluates an expression using device message parameters and add its first, last, average, minimum or maximum calculated value to the interval.\n\nThis is the most popular type of interval counter that is used to calculate almost everything which can be extracted from device messages within the selected interval.\nUse to compute various metrics within interval like mileage, engine hours, duration of some event and so on.\nAlso used to determine first/last value of specific message parameters within interval.\n","readOnly":true,"type":"string"},"validate_message":{"$ref":"#/definitions/container.interval.validate_message"}},"required":["type","name","expression"],"title":"Expression","type":"object","x-view-order":["type","name","expression","method","validate_message"],"x-view-shrink-field":"name"},"container.interval.counter.geofence":{"description":"Store the name of the geofence that was triggered in the interval selector of type 'geofence'.\n\nUse only with interval selector of type 'geofence'. In all other cases it will report null.\n","properties":{"name":{"$ref":"#/definitions/container.interval.counter.name"},"type":{"const":"geofence","default":"geofence","description":"Store the name of the geofence that was triggered in the interval selector of type 'geofence'.\n\nUse only with interval selector of type 'geofence'. In all other cases it will report null.\n","readOnly":true,"type":"string"}},"required":["type","name"],"title":"Geofence","type":"object","x-view-order":["type","name"],"x-view-shrink-field":"name"},"container.interval.counter.interval":{"description":"Calculate result of expression that references already calculated interval parameters (that are defined as counter before this counter).\n\nUse to compute average/max/min values for the interval or perform any other combination of interval counter values into a new one.\n\nIn expression you access interval parameters by using the names of previously defined counters.\nThe availability of parameters in the interval message depends on the order of defined counters as it may reference only previously defined counter names.\n","properties":{"expression":{"description":"[Expression](https://flespi.com/kb/expressions) for calculating counter value for the interval referencing values of its counters, e.g.: (counter1+counter2)/duration\n","format":"expression-complex","maxLength":1024,"minLength":1,"type":"string","x-view-type":"expression"},"name":{"$ref":"#/definitions/container.interval.counter.name"},"type":{"const":"interval","default":"interval","description":"Calculate result of expression that references already calculated current interval parameters (that are defined as counters and located before this one in the counters array) or counter values from previously calculated interval (accessible with previous(\"counter_name\") function).\n\nUse to compute average/max/min values for the interval or perform any other combination of interval counter values into a new one.\n\nIn expression you access interval parameters by using the names of previously defined counters.\nThe availability of parameters in the interval message depends on the order of defined counters as it may reference only previously defined counter names.\n","readOnly":true,"type":"string"}},"required":["type","name","expression"],"title":"Interval","type":"object","x-view-order":["type","name","expression"],"x-view-shrink-field":"name"},"container.interval.counter.message":{"description":"Copy part or full message JSON into the interval according to specified method (first, last, each, aggregate, aggregate_by_field).\n\nUse to include raw, filtered or aggregated message data into the interval.\n\nAlso is used to copy into interval the values of first or last message parameters in simplfied form.\n\nAlso is used to find an extremum on the interval, for a example add to the interval a message when the speed was maximum.\n\nAlso is used to calculate aggregated value from messages by some field, for example to enumerate all encountered BLE beacons and add their last position.\n","properties":{"extremum":{"description":"Select message(s) according to selected extremum calculated from the specified expression","properties":{"expression":{"description":"[Expression](https://flespi.com/kb/expressions) for calculating extremum value for the message referencing values of its parameters, e.g.: (param1+param2)/(param3-param4)\n","format":"expression-complex","maxLength":1024,"minLength":1,"type":"string","x-view-type":"expression"},"type":{"default":"minimum","description":"Type of the extremum of calculated expression to select correct message(s)","enum":["minimum","maximum"],"type":"string"}},"required":["type","expression"],"type":"object","x-view-order":["type","expression"]},"fields":{"description":"Fields to copy from the message into JSON object under counter. If not specified all message fields will be copied.\n","items":{"anyOf":[{"description":"Use message parameter name as is","maxLength":256,"minLength":1,"pattern":"^[\\w:!%$.-]([\\w:!%$. -]*[\\w:!%$.-])?$","title":"Message field","type":"string"},{"description":"Compute new field using expression over message parameters and selected aggregate method\n\nIf expression is not specified the value of message parameter will be taken directly.\n","properties":{"aggregate":{"default":"first","description":"Aggregation method, valid only when counter method set to 'aggregate' or 'aggregate_by_field':\n - first - will be used the first calculated value\n - last - will be used the last calculated value\n - summary - will be used summation of all calculated values\n - minimum - will be used minimum calculated value (for numbers only)\n - maximum - will be used maximum calculated value (for numbers only)\n\n If 'aggregate_by_field' method is used aggregation method is not applicable to the first field, which is automatically used for grouping messages\n","enum":["first","last","summary","minimum","maximum"],"type":"string"},"expression":{"description":"[Expression](https://flespi.com/kb/expressions) for calculating field value for counter JSON output.\n\nIf the expression value can not be calculated for the field it will generate null.\n\nIf expression is not specified for the field the value from message parameter with the same name as field will be taken directly.\n","format":"expression-complex","maxLength":256,"minLength":1,"type":"string","x-view-type":"expression"},"name":{"description":"field name, will be used as key in the counter JSON output","maxLength":64,"minLength":1,"pattern":"^[\\w:!%$.-]([\\w:!%$. -]*[\\w:!%$.-])?$","type":"string"}},"required":["name"],"title":"Computed field","type":"object","x-view-order":["name","expression","aggregate"],"x-view-shrink-field":"name"}]},"maxItems":20,"minItems":1,"type":"array"},"method":{"default":"first","description":"Method for selecting message which will be copied into parameter's value:\n - first - will be used the first suitable message\n - last - will be used the last suitable message\n - each - all suitable messages values will be presented as array\n - aggregate - aggregate messages into single, for this method you should specify fields\n - aggregate_by_field - group messages based on the first field, and aggregate them into single value, the first field value will be used for grouping\n","enum":["first","last","each","aggregate","aggregate_by_field"],"type":"string"},"name":{"$ref":"#/definitions/container.interval.counter.name"},"type":{"const":"message","default":"message","description":"Copy part or full message JSON into the interval according to specified method (first, last, each, aggregate, aggregate_by_field).\n\nUse to include raw, filtered or aggregated message data into the interval.\n\nAlso is used to copy into interval the values of first or last message parameters in simplfied form.\n\nAlso is used to find an extremum on the interval, for a example add to the interval a message when the speed was maximum.\n\nAlso is used to calculate aggregated value from messages by some field, for example to enumerate all encountered BLE beacons and add their last position.\n","readOnly":true,"type":"string"},"validate_message":{"$ref":"#/definitions/container.interval.validate_message"}},"required":["type","name"],"title":"Message","type":"object","x-view-order":["type","name","method","extremum","fields","validate_message"],"x-view-shrink-field":"name"},"container.interval.counter.name":{"description":"counter name, will be used as key in generated interval JSON","maxLength":64,"minLength":1,"pattern":"^[\\w_\\.\\-]+$","type":"string"},"container.interval.counter.parameter":{"description":"Add parameter value(-es) from the message into the interval (e.g. first, last, each or each distinct encountered).\n\nUse to include specific message parameters into the interval JSON.\n\nThis counter usually is used for simple cases like copy device.id or ident to the interval JSON.\nIt is also suitable for more complex cases when you need to enumerate all distinct parameter values encountered in messages - for example enumerate visited geofences detected by plugin, failed DTC codes or list all encountered BLE beacons.\n\n\nFor more complex cases, when you need to add multiple message parameters or somehow convert their value using expression take a look at 'expression' and 'message' interval counters instead.\n","properties":{"method":{"default":"first","description":"Method for generating counter value:\n - first - will be used parameter value from the first suitable message\n - last - will be used parameter value from the last suitable message\n - each - parameter value form all suitable messages will be presented as an array\n - distinct - distinct parameter values gathered from all suitable messages will be presented as array. If parameter value is an array by itself its unique elements will be extracted.\n","enum":["first","last","each","distinct"],"type":"string"},"name":{"$ref":"#/definitions/container.interval.counter.name"},"parameter":{"description":"Original message parameter name which to add to the interval, if not specified counter name will be used.\n\nFor distinct method the counter will store in the interval JSON all unique values of this parameter encountered in messages.\nWhen the parameter value is JSON array all unique elements inside array will be enumerated.\nThis can be used for all cases like enumerating DTC codes from \"can.dtc\" parameter, visited geofences from \"plugin.geofence.name\" parameter and even includes all BLE beacons tracked with \"ble.beacons\" parameter.\n\nYou can not use anything except message parameter name in this field. If you want to convert parameter value using some expression or calculate a value based on multiple parameters consider using 'expression' or 'message' type of interval counter instead.\n","maxLength":128,"type":"string"},"type":{"const":"parameter","default":"parameter","description":"Add parameter value(-es) from the message into the interval (e.g. first, last, each or each distinct encountered).\n\nUse to include specific message parameters into the interval JSON.\n\nThis counter usually is used for simple cases like copy device.id or ident to the interval JSON.\nIt is also suitable for more complex cases when you need to enumerate all distinct parameter values encountered in messages - for example enumerate visited geofences detected by plugin, failed DTC codes or list all encountered BLE beacons.\n\n\nFor more complex cases, when you need to add multiple message parameters or somehow convert their value using expression take a look at 'expression' and 'message' interval counters instead.\n","readOnly":true,"type":"string"},"validate_message":{"$ref":"#/definitions/container.interval.validate_message"}},"required":["type","name"],"title":"Parameter","type":"object","x-view-order":["type","name","parameter","method","validate_message"],"x-view-shrink-field":"name"},"container.interval.counter.route":{"description":"Dump position.latitude and position.longitude parameters for each message within the interval into [Google-encoded polyline algorithm](https://developers.google.com/maps/documentation/utilities/polylinealgorithm) format.\n\nUse to generate a compressed representation of the trip’s route.\n","properties":{"name":{"$ref":"#/definitions/container.interval.counter.name"},"type":{"const":"route","default":"route","description":"Dump position.latitude and position.longitude parameters for each message within the interval into [Google-encoded polyline algorithm](https://developers.google.com/maps/documentation/utilities/polylinealgorithm) format.\n\nUse to generate a compressed representation of the trip’s route.\n","readOnly":true,"type":"string"},"validate_message":{"$ref":"#/definitions/container.interval.validate_message"}},"required":["type","name"],"title":"Route","type":"object","x-view-order":["type","name","validate_message"],"x-view-shrink-field":"name"},"container.interval.counter.specified":{"description":"Save info into the interval field under specified name and value.\n\nUse to tag calculators for easier filtering later on.\n","properties":{"name":{"$ref":"#/definitions/container.interval.counter.name"},"type":{"const":"specified","default":"specified","description":"Save info into the interval field under specified name and value.\n\nUse to tag calculators for easier filtering later on.\n","readOnly":true,"type":"string"},"value":{"anyOf":[{"maxLength":256,"minLength":1,"title":"string","type":"string"},{"title":"number","type":"number"},{"title":"boolean","type":"boolean"}]}},"required":["type","name","value"],"title":"Specified","type":"object","x-view-order":["type","name","value"],"x-view-shrink-field":"name"},"container.interval.counter.variable":{"description":"Calculate value according to expression and make it available for use in other counters’ expressions.\n\nUse to store and maintain state during counters calculation.\n\nAccess to claculated value by this counter is available in other counters through the use of variable(\"counter-name\") function.\nNo actual value will be stored in the interval JSON.\n","properties":{"expression":{"description":"[Expression](https://flespi.com/kb/expressions) for calculating variable value for the message referencing values of its parameters, e.g.: (param1+param2)/(param3-param4)\n","format":"expression-complex","maxLength":1024,"minLength":1,"type":"string","x-view-type":"expression"},"name":{"$ref":"#/definitions/container.interval.counter.name"},"type":{"const":"variable","default":"variable","description":"Calculate value according to expression and make it available for use in other counters’ expressions.\n\nUse to store and maintain state during counters calculation.\n\nAccess to claculated value by this counter is available in other counters through the use of variable(\"counter-name\") function.\nNo actual value will be stored in the interval JSON.\n","readOnly":true,"type":"string"},"validate_message":{"$ref":"#/definitions/container.interval.validate_message"}},"required":["type","name","expression"],"title":"Variable (virtual)","type":"object","x-view-order":["type","name","expression","method","validate_message"],"x-view-shrink-field":"name"},"container.interval.counters":{"description":"[Intervals counters](https://flespi.com/kb/analytics-reports-and-events-engine#interval-counters), define how to calculate messsages inside each interval.\n","items":{"$ref":"#/definitions/container.interval.counter"},"maxItems":50,"type":"array"},"container.interval.duration":{"description":"interval duration in seconds","type":"number"},"container.interval.end":{"description":"interval end time","minimum":1,"type":"number","x-view-type":"datetime"},"container.interval.geofence.coordinate":{"properties":{"lat":{"description":"Latitude in degrees, between -90 and +90 inclusive","maximum":90,"minimum":-90,"type":"number"},"lon":{"description":"Longitude in degrees, between -180 and +180 inclusive","maximum":180,"minimum":-180,"type":"number"}},"required":["lat","lon"],"title":"Coordinate","type":"object"},"container.interval.geofence.name":{"description":"geofence name, can be optionally ava in 'geofence' counter","maxLength":128,"type":"string"},"container.interval.selector":{"anyOf":[{"$ref":"#/definitions/container.interval.selector.expression"},{"$ref":"#/definitions/container.interval.selector.datetime"},{"$ref":"#/definitions/container.interval.selector.geofence"},{"$ref":"#/definitions/container.interval.selector.inactive"}],"x-key-property":"type"},"container.interval.selector.calculator":{"description":"Intervals are detected based on another calculator intervals.\nThis type of selector can be used only in calculators and not available in on-demand intervals calculation via REST API.\n","properties":{"calc_id":{"description":"Calculator ID which intervals will be used as a reference for this selector","minimum":1,"type":"integer","x-flespi-acl":"gw/calcs","x-view-selector":"calcs"},"invert":{"$ref":"#/definitions/container.interval.selector.invert"},"max_active":{"$ref":"#/definitions/container.interval.selector.max_active"},"max_inactive":{"$ref":"#/definitions/container.interval.selector.max_inactive"},"max_messages_time_diff":{"$ref":"#/definitions/container.interval.selector.max_messages_time_diff"},"min_active":{"$ref":"#/definitions/container.interval.selector.min_active"},"min_duration":{"$ref":"#/definitions/container.interval.selector.min_duration"},"type":{"const":"calc","default":"calc","description":"Intervals are detected based on another calculator intervals.\nThis type of selector can be used only in calculators and not available in on-demand intervals calculation via REST API.\n","readOnly":true,"type":"string"},"validate_interval":{"description":"Optional [expression](https://flespi.com/kb/expressions) to validate intervals that will be used for referencing this selector.","format":"expression-telematics","maxLength":1024,"type":"string"}},"required":["type","calc_id"],"title":"Calculator","type":"object","x-view-order":["type","calc_id","min_active","min_duration","max_inactive","max_messages_time_diff","max_active","invert","validate_interval"],"x-view-shrink-field":"name"},"container.interval.selector.datetime":{"description":"Interval selection with time & date change according to selected or default timezone. Can be used to split messages on intervals per each day or month.","properties":{"max_messages_time_diff":{"$ref":"#/definitions/container.interval.selector.max_messages_time_diff"},"merge_message_after":{"$ref":"#/definitions/container.interval.selector.merge_message_after"},"merge_message_before":{"$ref":"#/definitions/container.interval.selector.merge_message_before"},"name":{"$ref":"#/definitions/container.interval.selector.name"},"split":{"default":"day","description":"Defines criteria, upon which interval will be automatically splitted","enum":["hour","day","week_monday","week_sunday","month","year"],"type":"string","x-view-enum-labels":["Hour","Day","Week (from Monday)","Week (from Sunday)","Month","Year"]},"type":{"const":"datetime","default":"datetime","description":"Interval selection with time & date change according to selected or default timezone. Can be used to split messages on intervals per each day or month.","readOnly":true,"type":"string"},"validate_message":{"$ref":"#/definitions/container.interval.validate_message"}},"required":["type"],"title":"Date or Time","type":"object","x-view-order":["type","split","name","max_messages_time_diff","merge_message_before","merge_message_after","validate_message"],"x-view-shrink-field":"name"},"container.interval.selector.expression":{"description":"Interval selection via non-zero expression that references message properties","properties":{"expression":{"description":"[Expression](https://flespi.com/kb/expressions) that defines is given message belong to the interval or not.\nIn expression you may reference values of message parameters, e.g.: (param1+param2)>=1 | (param3-param4)!=0\n","format":"expression-complex","maxLength":1024,"minLength":1,"type":"string","x-view-type":"expression"},"invert":{"$ref":"#/definitions/container.interval.selector.invert"},"max_active":{"$ref":"#/definitions/container.interval.selector.max_active"},"max_inactive":{"$ref":"#/definitions/container.interval.selector.max_inactive"},"max_messages_time_diff":{"$ref":"#/definitions/container.interval.selector.max_messages_time_diff"},"merge_message_after":{"$ref":"#/definitions/container.interval.selector.merge_message_after"},"merge_message_before":{"$ref":"#/definitions/container.interval.selector.merge_message_before"},"merge_unknown":{"$ref":"#/definitions/container.interval.selector.merge_unknown"},"method":{"default":"boolean","description":"Defines the way how expression result will be evaluated for the interval.\n- boolean method expects non-zero value to activate/continue interval and zero to stop it\n- change method will setup new interval each time expression result is different from previous\n","enum":["boolean","change"],"type":"string"},"min_active":{"$ref":"#/definitions/container.interval.selector.min_active"},"min_duration":{"$ref":"#/definitions/container.interval.selector.min_duration"},"name":{"$ref":"#/definitions/container.interval.selector.name"},"type":{"const":"expression","default":"expression","description":"Interval selection via non-zero expression that references message properties","readOnly":true,"type":"string"},"validate_message":{"$ref":"#/definitions/container.interval.validate_message"}},"required":["type","expression"],"title":"Expression","type":"object","x-view-order":["type","expression","method","name","min_active","min_duration","max_inactive","max_messages_time_diff","max_active","merge_message_before","merge_message_after","merge_unknown","invert","validate_message"],"x-view-shrink-field":"name"},"container.interval.selector.geofence":{"description":"Create intervals based on the geofence inside/outside status.\n\nBy default it will return ON status for the message when it is inside of assigned or configured geofences. When geofence is changed it will return ON_NEW status.\n\nTo create intervals when device is outside of assigned or configured geofences use invert=true option which will return ON status for each message outside of assigned or configured geofences.\n\nFor more precise control of geofences status you may use interval selector of type expression and within expression test for geofence availability: \"geofence() != null\" or simple expression=\"geofence()\" (returns the name of assigned geofence of null) and method=\"change\".\n\nWhich geofences to use is determined by 'geofences' option.\nIf you leave it unspecified in the selector configuration, all geofences assigned to calculator will be used automatically.\nIf you will explicitly specify geofences in selector configuration only these geofences will be controlled.\n","properties":{"geofences":{"description":"Explicit configuration of geofences for entrance/exit detection.\n\nWhen geofences configuration provided explicitly with this parameter the selector will use only their configuration ignoring any geofence entity that is linked to the device or calculator.\n\nTo avoid any misinterpretation and unlock extra functionality we recommend to avoid explicit geofences configuration (leave 'geofences' unconfigured in the interval selector) and only use geofences that are linked to the device or calculator.\n","items":{"anyOf":[{"$ref":"#/definitions/geoset.circle"},{"$ref":"#/definitions/geoset.polygon"},{"$ref":"#/definitions/geoset.corridor"}],"x-key-property":"type"},"maxItems":64,"minItems":1,"type":"array"},"invert":{"$ref":"#/definitions/container.interval.selector.invert"},"max_active":{"$ref":"#/definitions/container.interval.selector.max_active"},"max_inactive":{"$ref":"#/definitions/container.interval.selector.max_inactive"},"max_messages_time_diff":{"$ref":"#/definitions/container.interval.selector.max_messages_time_diff"},"merge_message_after":{"$ref":"#/definitions/container.interval.selector.merge_message_after"},"merge_message_before":{"$ref":"#/definitions/container.interval.selector.merge_message_before"},"merge_unknown":{"$ref":"#/definitions/container.interval.selector.merge_unknown"},"min_active":{"$ref":"#/definitions/container.interval.selector.min_active"},"min_duration":{"$ref":"#/definitions/container.interval.selector.min_duration"},"name":{"$ref":"#/definitions/container.interval.selector.name"},"type":{"const":"geofence","default":"geofence","description":"Create intervals based on the geofence inside/outside status.\n\nBy default it will return ON status for the message when it is inside of assigned or configured geofences. When geofence is changed it will return ON_NEW status.\n\nTo create intervals when device is outside of assigned or configured geofences use invert=true option which will return ON status for each message outside of assigned or configured geofences.\n\nFor more precise control of geofences status you may use interval selector of type expression and within expression test for geofence availability: \"geofence() != null\" or simple expression=\"geofence()\" (returns the name of assigned geofence of null) and method=\"change\".\n\nWhich geofences to use is determined by 'geofences' option.\nIf you leave it unspecified in the selector configuration, all geofences assigned to calculator will be used automatically.\nIf you will explicitly specify geofences in selector configuration only these geofences will be controlled.\n","readOnly":true,"type":"string"},"validate_message":{"$ref":"#/definitions/container.interval.validate_message"}},"required":["type"],"title":"Geofences","type":"object","x-view-order":["type","geofences","name","min_active","min_duration","max_inactive","max_messages_time_diff","max_active","merge_message_before","merge_message_after","merge_unknown","invert","validate_message"],"x-view-shrink-field":"name"},"container.interval.selector.inactive":{"description":"Interval selection based on the inactivity of telemetry data reception.\nWith this selector it is both possible to detect delays of telemetry data from device in realtime and analyze historical intervals when such delays occurred.\n","properties":{"delay_threshold":{"description":"Minimum latency in telemetry data retrieval to start interval, in seconds.\nTelemetry latency for each message can be calculated as (server.timestamp - timestamp).\nInterval will automatically start the from latest message below specified threshold and finish on the last message below threshold.\n","format":"uint32","maximum":315360000,"minimum":60,"type":"number"},"name":{"$ref":"#/definitions/container.interval.selector.name"},"type":{"const":"inactive","default":"inactive","description":"Interval selection based on the inactivity of telemetry data reception.\nWith this selector it is both possible to detect delays of telemetry data from device in realtime and analyze historical intervals when such delays occurred.\n","readOnly":true,"type":"string"}},"required":["type","delay_threshold"],"title":"Inactive","type":"object","x-view-order":["type","name","delay_threshold"],"x-view-shrink-field":"name"},"container.interval.selector.invert":{"description":"when true, evaluation of interval state for the message should be inverted, e.g. ON will become OFF. For example if you have a geofence selector and want to detect when a device leaves this geofence (in contrast to detecting when a device gets into the geofence), you want to enable the \"invert\" property.","type":"boolean"},"container.interval.selector.max_active":{"description":"if non-zero (in seconds), during sequential interval detection when the duration of a currently detected interval exceeds the specified value in seconds, the new interval will be started.","format":"uint32","maximum":864000,"type":"integer"},"container.interval.selector.max_inactive":{"description":"if non-zero (in seconds), inactive parts of intervals with duration shorter than the specified number of seconds will count towards the current interval and will be merged with the preceding and following active parts. Also, this property can timeout an active interval for the assigned device.","format":"uint32","maximum":864000,"type":"integer"},"container.interval.selector.max_messages_time_diff":{"description":"if non-zero, specifies a maximum timestamps difference between the two consecutive messages to include into the same interval, in seconds","format":"uint32","maximum":864000,"type":"integer"},"container.interval.selector.merge_message_after":{"description":"when true, the interval will be automatically extended by one message after with OFF/UNKNOWN state.","type":"boolean"},"container.interval.selector.merge_message_before":{"description":"when true, the interval will be automatically extended by one message earlier with OFF/UNKNOWN state.","type":"boolean"},"container.interval.selector.merge_unknown":{"description":"when true, if we have an active interval and the current message state is unknown, it will be appended to the active interval. The unknown state can appear in an expression type selector when a message does not contain a parameter specified in the expression or in a geofence type selector when there are no coordinates in the message.","type":"boolean"},"container.interval.selector.min_active":{"description":"if non-zero (in seconds), all intervals with duration in seconds less than specified will be skipped.","format":"uint32","maximum":86400,"type":"integer"},"container.interval.selector.min_duration":{"description":"minimum final(merged) duration for the generated interval, in seconds","format":"uint32","maximum":86400,"type":"integer"},"container.interval.selector.name":{"description":"custom description for interval selector","maxLength":256,"type":"string"},"container.interval.selectors":{"description":"[Intervals selectors](https://flespi.com/kb/analytics-reports-and-events-engine#interval-selectors), specify the way to extract intervals from messages.\n","items":{"$ref":"#/definitions/container.interval.selector"},"maxItems":3,"minItems":1,"type":"array"},"container.interval.timezone":{"default":"UTC","description":"Default timezone used in all date/time related operations in selectors and counters, optional","enum":["UTC","Africa/Abidjan","Africa/Accra","Africa/Addis_Ababa","Africa/Algiers","Africa/Asmara","Africa/Bamako","Africa/Bangui","Africa/Banjul","Africa/Bissau","Africa/Blantyre","Africa/Brazzaville","Africa/Bujumbura","Africa/Cairo","Africa/Casablanca","Africa/Ceuta","Africa/Conakry","Africa/Dakar","Africa/Dar_es_Salaam","Africa/Djibouti","Africa/Douala","Africa/El_Aaiun","Africa/Freetown","Africa/Gaborone","Africa/Harare","Africa/Johannesburg","Africa/Juba","Africa/Kampala","Africa/Khartoum","Africa/Kigali","Africa/Kinshasa","Africa/Lagos","Africa/Libreville","Africa/Lome","Africa/Luanda","Africa/Lubumbashi","Africa/Lusaka","Africa/Malabo","Africa/Maputo","Africa/Maseru","Africa/Mbabane","Africa/Mogadishu","Africa/Monrovia","Africa/Nairobi","Africa/Ndjamena","Africa/Niamey","Africa/Nouakchott","Africa/Ouagadougou","Africa/Porto-Novo","Africa/Sao_Tome","Africa/Tripoli","Africa/Tunis","Africa/Windhoek","America/Adak","America/Anchorage","America/Anguilla","America/Antigua","America/Araguaina","America/Argentina/Buenos_Aires","America/Argentina/Catamarca","America/Argentina/Cordoba","America/Argentina/Jujuy","America/Argentina/La_Rioja","America/Argentina/Mendoza","America/Argentina/Rio_Gallegos","America/Argentina/Salta","America/Argentina/San_Juan","America/Argentina/San_Luis","America/Argentina/Tucuman","America/Argentina/Ushuaia","America/Aruba","America/Asuncion","America/Atikokan","America/Bahia","America/Bahia_Banderas","America/Barbados","America/Belem","America/Belize","America/Blanc-Sablon","America/Boa_Vista","America/Bogota","America/Boise","America/Cambridge_Bay","America/Campo_Grande","America/Cancun","America/Caracas","America/Cayenne","America/Cayman","America/Chicago","America/Chihuahua","America/Costa_Rica","America/Creston","America/Cuiaba","America/Curacao","America/Danmarkshavn","America/Dawson","America/Dawson_Creek","America/Denver","America/Detroit","America/Dominica","America/Edmonton","America/Eirunepe","America/El_Salvador","America/Fort_Nelson","America/Fortaleza","America/Glace_Bay","America/Godthab","America/Goose_Bay","America/Grand_Turk","America/Grenada","America/Guadeloupe","America/Guatemala","America/Guayaquil","America/Guyana","America/Halifax","America/Havana","America/Hermosillo","America/Indiana/Indianapolis","America/Indiana/Knox","America/Indiana/Marengo","America/Indiana/Petersburg","America/Indiana/Tell_City","America/Indiana/Vevay","America/Indiana/Vincennes","America/Indiana/Winamac","America/Inuvik","America/Iqaluit","America/Jamaica","America/Juneau","America/Kentucky/Louisville","America/Kentucky/Monticello","America/Kralendijk","America/La_Paz","America/Lima","America/Los_Angeles","America/Lower_Princes","America/Maceio","America/Managua","America/Manaus","America/Marigot","America/Martinique","America/Matamoros","America/Mazatlan","America/Menominee","America/Merida","America/Metlakatla","America/Mexico_City","America/Miquelon","America/Moncton","America/Monterrey","America/Montevideo","America/Montserrat","America/Nassau","America/New_York","America/Nipigon","America/Nome","America/Noronha","America/North_Dakota/Beulah","America/North_Dakota/Center","America/North_Dakota/New_Salem","America/Ojinaga","America/Panama","America/Pangnirtung","America/Paramaribo","America/Phoenix","America/Port-au-Prince","America/Port_of_Spain","America/Porto_Velho","America/Puerto_Rico","America/Punta_Arenas","America/Rainy_River","America/Rankin_Inlet","America/Recife","America/Regina","America/Resolute","America/Rio_Branco","America/Santarem","America/Santiago","America/Santo_Domingo","America/Sao_Paulo","America/Scoresbysund","America/Sitka","America/St_Barthelemy","America/St_Johns","America/St_Kitts","America/St_Lucia","America/St_Thomas","America/St_Vincent","America/Swift_Current","America/Tegucigalpa","America/Thule","America/Thunder_Bay","America/Tijuana","America/Toronto","America/Tortola","America/Vancouver","America/Whitehorse","America/Winnipeg","America/Yakutat","America/Yellowknife","Antarctica/Casey","Antarctica/Davis","Antarctica/DumontDUrville","Antarctica/Macquarie","Antarctica/Mawson","Antarctica/McMurdo","Antarctica/Palmer","Antarctica/Rothera","Antarctica/Syowa","Antarctica/Troll","Antarctica/Vostok","Arctic/Longyearbyen","Asia/Aden","Asia/Almaty","Asia/Amman","Asia/Anadyr","Asia/Aqtau","Asia/Aqtobe","Asia/Ashgabat","Asia/Atyrau","Asia/Baghdad","Asia/Bahrain","Asia/Baku","Asia/Bangkok","Asia/Barnaul","Asia/Beirut","Asia/Bishkek","Asia/Brunei","Asia/Chita","Asia/Choibalsan","Asia/Colombo","Asia/Damascus","Asia/Dhaka","Asia/Dili","Asia/Dubai","Asia/Dushanbe","Asia/Famagusta","Asia/Gaza","Asia/Hebron","Asia/Ho_Chi_Minh","Asia/Hong_Kong","Asia/Hovd","Asia/Irkutsk","Asia/Jakarta","Asia/Jayapura","Asia/Jerusalem","Asia/Kabul","Asia/Kamchatka","Asia/Karachi","Asia/Kathmandu","Asia/Khandyga","Asia/Kolkata","Asia/Krasnoyarsk","Asia/Kuala_Lumpur","Asia/Kuching","Asia/Kuwait","Asia/Macau","Asia/Magadan","Asia/Makassar","Asia/Manila","Asia/Muscat","Asia/Nicosia","Asia/Novokuznetsk","Asia/Novosibirsk","Asia/Omsk","Asia/Oral","Asia/Phnom_Penh","Asia/Pontianak","Asia/Pyongyang","Asia/Qatar","Asia/Qostanay","Asia/Qyzylorda","Asia/Riyadh","Asia/Sakhalin","Asia/Samarkand","Asia/Seoul","Asia/Shanghai","Asia/Singapore","Asia/Srednekolymsk","Asia/Taipei","Asia/Tashkent","Asia/Tbilisi","Asia/Tehran","Asia/Thimphu","Asia/Tokyo","Asia/Tomsk","Asia/Ulaanbaatar","Asia/Urumqi","Asia/Ust-Nera","Asia/Vientiane","Asia/Vladivostok","Asia/Yakutsk","Asia/Yangon","Asia/Yekaterinburg","Asia/Yerevan","Atlantic/Azores","Atlantic/Bermuda","Atlantic/Canary","Atlantic/Cape_Verde","Atlantic/Faroe","Atlantic/Madeira","Atlantic/Reykjavik","Atlantic/South_Georgia","Atlantic/St_Helena","Atlantic/Stanley","Australia/Adelaide","Australia/Brisbane","Australia/Broken_Hill","Australia/Currie","Australia/Darwin","Australia/Eucla","Australia/Hobart","Australia/Lindeman","Australia/Lord_Howe","Australia/Melbourne","Australia/Perth","Australia/Sydney","Europe/Amsterdam","Europe/Andorra","Europe/Astrakhan","Europe/Athens","Europe/Belgrade","Europe/Berlin","Europe/Bratislava","Europe/Brussels","Europe/Bucharest","Europe/Budapest","Europe/Busingen","Europe/Chisinau","Europe/Copenhagen","Europe/Dublin","Europe/Gibraltar","Europe/Guernsey","Europe/Helsinki","Europe/Isle_of_Man","Europe/Istanbul","Europe/Jersey","Europe/Kaliningrad","Europe/Kiev","Europe/Kirov","Europe/Lisbon","Europe/Ljubljana","Europe/London","Europe/Luxembourg","Europe/Madrid","Europe/Malta","Europe/Mariehamn","Europe/Minsk","Europe/Monaco","Europe/Moscow","Europe/Oslo","Europe/Paris","Europe/Podgorica","Europe/Prague","Europe/Riga","Europe/Rome","Europe/Samara","Europe/San_Marino","Europe/Sarajevo","Europe/Saratov","Europe/Simferopol","Europe/Skopje","Europe/Sofia","Europe/Stockholm","Europe/Tallinn","Europe/Tirane","Europe/Ulyanovsk","Europe/Uzhgorod","Europe/Vaduz","Europe/Vatican","Europe/Vienna","Europe/Vilnius","Europe/Volgograd","Europe/Warsaw","Europe/Zagreb","Europe/Zaporozhye","Europe/Zurich","Indian/Antananarivo","Indian/Chagos","Indian/Christmas","Indian/Cocos","Indian/Comoro","Indian/Kerguelen","Indian/Mahe","Indian/Maldives","Indian/Mauritius","Indian/Mayotte","Indian/Reunion","Pacific/Apia","Pacific/Auckland","Pacific/Bougainville","Pacific/Chatham","Pacific/Chuuk","Pacific/Easter","Pacific/Efate","Pacific/Enderbury","Pacific/Fakaofo","Pacific/Fiji","Pacific/Funafuti","Pacific/Galapagos","Pacific/Gambier","Pacific/Guadalcanal","Pacific/Guam","Pacific/Honolulu","Pacific/Kiritimati","Pacific/Kosrae","Pacific/Kwajalein","Pacific/Majuro","Pacific/Marquesas","Pacific/Midway","Pacific/Nauru","Pacific/Niue","Pacific/Norfolk","Pacific/Noumea","Pacific/Pago_Pago","Pacific/Palau","Pacific/Pitcairn","Pacific/Pohnpei","Pacific/Port_Moresby","Pacific/Rarotonga","Pacific/Saipan","Pacific/Tahiti","Pacific/Tarawa","Pacific/Tongatapu","Pacific/Wake","Pacific/Wallis"],"type":"string"},"container.interval.validate_interval":{"description":"[Expression](https://flespi.com/kb/expressions) for validating generated interval referencing values of its counters, e.g.: (counter1-counter2) > counter3.\nprevious(\"counter_name\") function, if used in expression will return the value of counter_name counter from previously calculated and stored interval.\n**Note: Do not use this field to filter intervals by duration (e.g., 'duration > X'). Instead, use the `min_active` and `min_duration` parameters in interval selectors.**\n","format":"expression-complex","maxLength":1024,"type":"string","x-view-type":"expression"},"container.interval.validate_message":{"description":"[Expression](https://flespi.com/kb/expressions) validating messages for selector/counter/calculator, e.g. value of 'position.valid == 1' will skip all messages where position.valid property is not defined or not 1(true)\n","format":"expression-complex","maxLength":1024,"type":"string","x-view-type":"expression"},"container.intervals.calculate":{"description":"intervals calculation configuration","properties":{"counters":{"$ref":"#/definitions/container.interval.counters"},"extend":{"$ref":"#/definitions/container.intervals.calculate.extend"},"from":{"$ref":"#/definitions/container.intervals.calculate.from"},"selectors":{"$ref":"#/definitions/container.interval.selectors"},"timezone":{"$ref":"#/definitions/container.interval.timezone"},"to":{"$ref":"#/definitions/container.intervals.calculate.to"},"validate_interval":{"$ref":"#/definitions/container.interval.validate_interval"},"validate_message":{"$ref":"#/definitions/container.interval.validate_message"}},"required":["selectors"],"title":"intervals configuration from REST parameters","type":"object","x-view-order":["from","to","extend","selectors","counters","timezone","validate_message","validate_interval"]},"container.intervals.calculate.extend":{"description":"if true, then interval will be extended up to one next message after 'to' and include it in its calculations, usually used together with merge_messages_after=true for interval selectors","type":"boolean"},"container.intervals.calculate.from":{"description":"UNIX timestamp of left time border for messages. Use 0 to ignore left bound.","minimum":0,"type":"number","x-view-type":"datetime"},"container.intervals.calculate.to":{"description":"UNIX timestamp of right time border for messages. Use 0 to ignore right bound.","minimum":0,"type":"number","x-view-type":"datetime"},"country":{"description":"country information","properties":{"code":{"description":"country code in CAPS, e.g. DE, UA, LT","readOnly":true,"type":"string"},"name":{"description":"country name","readOnly":true,"type":"string"}},"required":["name","code"],"type":"object"},"customer":{"description":"information about your user account state","properties":{"accessed":{"$ref":"#/definitions/customer.accessed"},"counters":{"$ref":"#/definitions/customer.counters"},"created":{"$ref":"#/definitions/customer.created"},"email":{"$ref":"#/definitions/customer.email"},"enabled":{"description":"Current enabled/disabled state of customer's account. Controlled by owner.","type":"boolean"},"id":{"description":"Your unique customer(subaccount) ID","type":"integer"},"metadata":{"$ref":"#/definitions/metadata"},"name":{"$ref":"#/definitions/customer.name"},"notify":{"$ref":"#/definitions/customer.notify"},"owner_id":{"description":"Customer's owner ID. For root-level flespi accounts it is zero.","type":"integer"},"region":{"description":"The region where customer data is located","enum":["eu"],"title":"Storage region","type":"string","x-view-enum-labels":["Europe"]},"sla":{"$ref":"#/definitions/customer.sla"}},"type":"object"},"customer.accessed":{"description":"The UNIX timestamp in UTC format when last time user accessed flespi platform via REST or MQTT.","format":"uint32","type":"integer"},"customer.counters":{"description":"Customer counters and limits values.\nCounters can be total (e.g. number of created items) or temporary (e.g. number of API calls performed).\nTemporary counters are accumulated and counters for last minute.\n\n-1 for limit means it is not set. 0 - customer ca not use item of given type.\n\nWhen customer account created more items that is allowed by current limits all extra elements will be blocked with code 5.\n\nLimits are set by the limit or for root-level user accounts (when owner_id=0) the limits are set by [user plan](https://flespi.com/pricing#restrictions).\n","properties":{"ai":{"description":"Counters and limits related to AI operations usage","properties":{"credits":{"description":"Quantity of AI credits consumed in current month","type":"integer"},"credits_limit":{"description":"Maximum AI credits that can be consumed per month","type":"integer"}},"type":"object"},"api":{"description":"Counters and limits related to API usage","properties":{"calls":{"description":"REST API calls performed by customer tokens and webhooks in last minute","type":"integer"},"calls_limit":{"description":"Maximum REST API calls per minute customer tokens and webhooks can execute","type":"integer"},"tokens":{"description":"Quantity of tokens created by customer","type":"integer"},"tokens_limit":{"description":"Maximum tokens customer can create","type":"integer"},"traffic":{"description":"REST API and MQTT session traffic performed by customer tokens and webhooks in last minute, in bytes","type":"integer"},"traffic_limit":{"description":"Maximum REST API and MQTT session traffic per minute customer tokens and webhooks can execute, in bytes","type":"integer"}},"type":"object"},"assets":{"description":"Counters and limits related to assets usage","properties":{"count":{"description":"Quantity of assets created by customer","type":"integer"},"count_limit":{"description":"Maximum assets customer can create","type":"integer"},"storage":{"description":"Total amount of data stored by all assets, in KB","type":"integer"},"storage_limit":{"description":"Maximum storage size each single asset can have, in KB","type":"integer"}},"type":"object"},"calcs":{"description":"Counters and limits related to calculators usage","properties":{"count":{"description":"Quantity of calculators created by customer","type":"integer"},"count_limit":{"description":"Maximum calculators customer can create","type":"integer"},"devices_count":{"description":"Total count of devices assigned to calculators","type":"integer"},"storage":{"description":"Total amount of intervals data stored by all devices assigned to calculators, in KB","type":"integer"},"storage_limit":{"description":"Maximum volume of stored intervals that can be consumed by a single device assigned to calculator, in KB","type":"integer"}},"type":"object"},"cdns":{"description":"Counters and limits related to CDNs usage","properties":{"count":{"description":"Quantity of CDNs created by customer","type":"integer"},"count_limit":{"description":"Maximum CDNs customer can create","type":"integer"},"storage":{"description":"Total amount of data stored by all CDNs, in KB","type":"integer"},"storage_limit":{"description":"Maximum storage size each single CDN can have, in KB","type":"integer"},"traffic":{"description":"Total HTTP traffic generated by all customer's CDNs in last minute, in bytes","type":"integer"},"traffic_limit":{"description":"Maximum HTTP traffic per minute each single customer CDN can generate, in bytes","type":"integer"}},"type":"object"},"channels":{"description":"Counters and limits related to channels usage","properties":{"commands_fail":{"description":"Quantity of failed execution attempts of device commands, in last minute and for all channels","type":"integer"},"commands_success":{"description":"Quantity of successfuly executed device commands, in last minute and for all channels","type":"integer"},"connections":{"description":"Total quantity of currently active connections to customer's channels","type":"integer"},"connections_limit":{"description":"Maximum quantity of simultaneous connections that a single channel can accept","type":"integer"},"count":{"description":"Quantity of channels created by customer","type":"integer"},"count_limit":{"description":"Maximum channels customer can create","type":"integer"},"errors":{"description":"Quantity of errors occurred in all customer's channels in last minute","type":"integer"},"messages":{"description":"Total quantity of messages generated by all customer's channels in last minute","type":"integer"},"messages_limit":{"description":"Maximum messages per minute each single customer channel can generate","type":"integer"},"settings_fail":{"description":"Quantity of failed execution or readout attempts of device settings, in last minute and for all channels","type":"integer"},"settings_success":{"description":"Quantity of successfuly executed or remotely read device settings, in last minute and for all channels","type":"integer"},"storage":{"description":"Total amount of stored messages by all customer's channels, in KB","type":"integer"},"storage_limit":{"description":"Maximum messages storage size each single channel can have, in KB","type":"integer"},"traffic":{"description":"Total traffic generated by all customer's channels in last minute, in bytes","type":"integer"},"traffic_limit":{"description":"Maximum traffic per minute each single customer's channel can perform, in bytes","type":"integer"}},"type":"object"},"containers":{"description":"Counters and limits related to containers usage","properties":{"count":{"description":"Quantity of containers created by customer","type":"integer"},"count_limit":{"description":"Maximum containers customer can create","type":"integer"},"storage":{"description":"Total amount of data stored by all containers, in KB","type":"integer"},"storage_limit":{"description":"Maximum storage size each single container can have, in KB","type":"integer"}},"type":"object"},"devices":{"description":"Counters and limits related to devices usage","properties":{"count":{"description":"Quantity of devices created by customer","type":"integer"},"count_limit":{"description":"Maximum devices customer can create","type":"integer"},"media_storage":{"description":"Total amount of media data stored by all devices, in KB","type":"integer"},"media_storage_limit":{"description":"Maximum storage size each single device can have for its media files, in KB","type":"integer"},"media_traffic":{"description":"Total media traffic generated by all customer's devices in last minute, in bytes","type":"integer"},"media_traffic_limit":{"description":"Maximum media traffic per minute each single customer devices can provide, in bytes","type":"integer"},"storage":{"description":"Total amount of messages data stored by all devices, in KB","type":"integer"},"storage_limit":{"description":"Maximum storage size each single device can have for its messages, in KB","type":"integer"}},"type":"object"},"geofences":{"description":"Counters and limits related to geofences usage","properties":{"count":{"description":"Quantity of geofences created by customer","type":"integer"},"count_limit":{"description":"Maximum geofences customer can create","type":"integer"}},"type":"object"},"grants":{"description":"Counters and limits related to grants usage","properties":{"calcs_count":{"description":"Total quantity of external calculators access to which is granted to this user account","type":"integer"},"channels_count":{"description":"Total quantity of external channels access to which is granted to this user account","type":"integer"},"count":{"description":"Quantity of grants created by customer","type":"integer"},"count_limit":{"description":"Maximum grants customer can create","type":"integer"},"devices_count":{"description":"Total quantity of external devices access to which is granted to this user account","type":"integer"},"grantors_count":{"description":"Total quantity of external grants that provided access to some elements to this user account","type":"integer"},"groups_count":{"description":"Total quantity of external groups access to which is granted to this user account","type":"integer"},"modems_count":{"description":"Total quantity of external modems access to which is granted to this user account","type":"integer"},"plugins_count":{"description":"Total quantity of external plugins access to which is granted to this user account","type":"integer"},"streams_count":{"description":"Total quantity of external streams access to which is granted to this user account","type":"integer"},"subaccounts_count":{"description":"Total quantity of external subaccounts access to which is granted to this user account","type":"integer"}},"type":"object"},"groups":{"description":"Counters and limits related to groups usage","properties":{"count":{"description":"Quantity of groups created by customer","type":"integer"},"count_limit":{"description":"Maximum groups customer can create","type":"integer"}},"type":"object"},"identity_providers":{"description":"Counters and limits related to identity providers usage","properties":{"count":{"description":"Quantity of identity providers created by customer","type":"integer"},"count_limit":{"description":"Maximum identity providers customer can create","type":"integer"}},"type":"object"},"limits":{"description":"Counters and limits related to subaccount limits usage","properties":{"count":{"description":"Quantity of limits created by customer","type":"integer"},"count_limit":{"description":"Maximum limits customer can create","type":"integer"}},"type":"object"},"modems":{"description":"Counters and limits related to modems usage","properties":{"count":{"description":"Quantity of modems created by customer","type":"integer"},"count_limit":{"description":"Maximum modems customer can create","type":"integer"},"sms":{"description":"Quantity of SMS messages sent via built-in flespi modem type in current month","type":"integer"},"sms_limit":{"description":"Maximum SMS messages that can be sent using built-in flespi modem per month","type":"integer"}},"type":"object"},"mqtt":{"description":"Counters and limits related to MQTT usage","properties":{"messages":{"description":"Quantity of published and subscribed MQTT messages for all MQTT sessions established by customer in last minute","type":"integer"},"messages_limit":{"description":"Maximum quantity of published and subscribed MQTT messages by all customer's MQTT sessions that can be generated per minute","type":"integer"},"retained_storage":{"description":"Retained MQTT messages size used by this customer account, in KB","type":"integer"},"retained_storage_limit":{"description":"Maximum MQTT retained messages size this customer account can provide, in KB","type":"integer"},"retained_storage_total":{"description":"Total combined amount of reatined MQTT messages storage used by curent customer account and all its subaccounts, in KB","type":"integer"},"session_expiry_interval_limit":{"description":"Maximum expiry interval persistent MQTT session can set, in seconds","type":"integer"},"sessions":{"description":"Total quantity of MQTT sessions created by customer","type":"integer"},"sessions_limit":{"description":"Maximum number of MQTT session customer can establish","type":"integer"},"sessions_storage":{"description":"Total amount of buffered MQTT messages stored by all customer's MQTT sessions, in KB","type":"integer"},"sessions_storage_limit":{"description":"Maximum buffered messages size each single MQTT session can store, in KB","type":"integer"},"subscriptions_count":{"description":"Total quantity of subscriptions activated by all customer's MQTT sessions","type":"integer"},"subscriptions_count_limit":{"description":"Maximum number of subscriptions each single MQTT session can use","type":"integer"}},"type":"object"},"plugins":{"description":"Counters and limits related to plugins usage","properties":{"buffered_messages":{"description":"Quantity of currently buffered messages by all customer's plugins","type":"integer"},"buffered_messages_limit":{"description":"Maximum quantity of messages that a single plugin can buffer","type":"integer"},"count":{"description":"Quantity of plugins created by customer","type":"integer"},"count_limit":{"description":"Maximum plugins customer can create","type":"integer"},"errors":{"description":"Quantity of errors occurred in all customer's plugins in last minute","type":"integer"},"messages":{"description":"Total quantity of messages generated by all customer's plugins in last minute","type":"integer"},"messages_limit":{"description":"Maximum messages per minute each single plugin can process","type":"integer"},"traffic":{"description":"Total traffic generated by all customer's plugins in last minute, in bytes","type":"integer"},"traffic_limit":{"description":"Maximum traffic per minute each single customer's plugin can perform, in bytes","type":"integer"}},"type":"object"},"realms":{"description":"Counters and limits related to realms usage","properties":{"count":{"description":"Quantity of realms created by customer","type":"integer"},"count_limit":{"description":"Maximum realms customer can create","type":"integer"},"users_count":{"description":"Total quantity of users created by customer in all realms","type":"integer"},"users_count_limit":{"description":"Maximum users customer can create per single realm","type":"integer"}},"type":"object"},"streams":{"description":"Counters and limits related to streams usage","properties":{"count":{"description":"Quantity of streams created by customer","type":"integer"},"count_limit":{"description":"Maximum streams customer can create","type":"integer"},"errors":{"description":"Quantity of errors occurred in all customer's streams in last minute","type":"integer"},"messages":{"description":"Total quantity of messages sent by all customer's streams in last minute","type":"integer"},"storage":{"description":"Total amount of storage used by queued messages buffer for all customer's channels, in KB","type":"integer"},"storage_limit":{"description":"Maximum queued messages size each single stream can store, in KB","type":"integer"},"traffic":{"description":"Total traffic generated by all customer's streams in last minute, in bytes","type":"integer"},"traffic_limit":{"description":"Maximum traffic per minute each single customer's stream can perform, in bytes","type":"integer"}},"type":"object"},"subaccounts":{"description":"Counters and limits related to subaccounts usage","properties":{"count":{"description":"Quantity of subaccounts created by customer","type":"integer"},"count_limit":{"description":"Maximum subaccounts customer can create","type":"integer"}},"type":"object"},"tokens":{"description":"Counters and limits related to tokens usage","properties":{"mqtt_messages":{"description":"Total quantity of published/subscribed MQTT messages done by MQTT all sessions authorized by customer tokens","type":"integer"},"mqtt_traffic":{"description":"MQTT sessions traffic performed by all customer's MQTT sessions in last minute, in bytes","type":"integer"},"rest_calls":{"description":"REST API calls performed by all customer tokens in last minute","type":"integer"},"rest_traffic":{"description":"REST API traffic performed by all customer tokens in last minute, in bytes","type":"integer"}},"type":"object"},"webhooks":{"description":"Counters and limits related to webhooks usage","properties":{"count":{"description":"Quantity of webhooks created by customer","type":"integer"},"count_limit":{"description":"Maximum webhooks customer can create","type":"integer"},"errors":{"description":"Quantity of errors occurred in all customer's webhooks in last minute","type":"integer"},"messages":{"description":"Total quantity of messages delivered by all customer's webhooks in last minute","type":"integer"},"storage":{"description":"Total amount of storage used by queued messages buffer for all customer's webhooks, in KB","type":"integer"},"storage_limit":{"description":"Maximum queued messages size each single webhook can store, in KB","type":"integer"},"traffic":{"description":"Total traffic generated by all customer's webhooks in last minute, in bytes","type":"integer"},"traffic_limit":{"description":"Maximum traffic per minute each single customer's webhooks can perform, in bytes","type":"integer"}},"type":"object"}},"type":"object"},"customer.created":{"description":"Account creation timestamp in UTC format.","format":"uint32","type":"integer"},"customer.email":{"description":"flespi user e-mail, unique among other flespi users.\nEMail in form xxxxx@flespi.io is auto-generated and not verified.\n\nMay be used for authorization with password after additional email verification.\n","maxLength":255,"minLength":1,"type":"string"},"customer.limit_id":{"description":"The ID of [limit](https://flespi.com/kb/subaccounts-organizing-dedicated-flespi-accounts-for-telematics-projects#limits) on which current user account is currently operating.\n\nFor root-level accounts (with owner_id=0) limits are set by the system according to their current [flespi plan](https://flespi.com/pricing).\n","format":"uint32","type":"integer","x-view-dict":"limits","x-view-selector":"limits"},"customer.name":{"description":"flespi user name","maxLength":255,"minLength":1,"title":"name","type":"string"},"customer.notify":{"default":1,"description":"Automatic notification settings to user's email from flespi.\n  * 0 => disable all;\n  * 1 => flespi can send monthly changelog and/or other types of e-mail notifications to user;\n","enum":[0,1],"format":"uint32","title":"E-Mail notifications","type":"integer","x-view-enum-labels":["Disable","Get flespi change log once a month"],"x-view-type":"radio"},"customer.put":{"properties":{"metadata":{"$ref":"#/definitions/metadata"},"name":{"$ref":"#/definitions/customer.name"},"notify":{"$ref":"#/definitions/customer.notify"}},"type":"object"},"customer.sla":{"description":"The [flespi plan and set of limits](https://flespi.com/pricing) on which user account is currently operating.\n  * 0 => Free plan\n  * 1 => Start plan\n  * 2 => Pro plan\n  * 3 => Enterprise plan\n  * 4 => Ultimate plan\n\nTo [modify your plan](https://flespi.com/kb/account-getting-inside-flespi#how-to-change-plan) please contact flespi support using integrated chat.\n","enum":[0,1,2,3,4],"format":"uint32","title":"flespi plan level that this account is currently using","type":"integer","x-view-enum-labels":["Free","Start","Pro","Enterprise","Ultimate"]},"customer.statsmessage":{"additionalProperties":true,"description":"Statistical record. It contains fixed fields described below and additional fields based on origin.","properties":{"origin":{"description":"Which state this record describes, like \"gw/channels/123\" or \"platform\".","type":"string"},"timestamp":{"description":"Record UNIX timestamp.","format":"uint32","type":"integer","x-view-type":"datetime"}},"type":"object"},"customers.result":{"properties":{"result":{"description":"Customer's info in reply, fields included according to request's **fields** parameter.","items":{"$ref":"#/definitions/customer"},"type":"array"}},"type":"object"},"deleted.item":{"properties":{"cid":{"description":"Item owner's id.","type":"integer"},"created":{"description":"Item creation timestamp.","type":"integer"},"data":{"description":"Item data at the moment of its removal.","type":"object"},"deleted":{"description":"Item removal timestamp.","type":"integer"},"id":{"description":"Item id within deleted items storage.","type":"integer"},"item_id":{"description":"Original item id.","type":"integer"},"origin":{"description":"Origin reference of the deleted item, formatted as `<rest-uri>/<item_id>` (e.g. `gw/devices/5084`). Computed from `type` and `item_id`.","type":"string"},"type":{"description":"Item type id.","type":"integer"}},"type":"object"},"error":{"properties":{"code":{"description":"Error code.","type":"integer"},"id":{"$ref":"#/definitions/item.id"},"reason":{"description":"Error description.","type":"string"}},"type":"object"},"errors":{"description":"Errors occurred while processing the request.","items":{"$ref":"#/definitions/error"},"type":"array"},"errors.result":{"description":"Canonical flespi response envelope used for non-2xx responses (and also when a 200 response carries per-item errors). 'result' is empty when 'errors' is populated.","properties":{"errors":{"$ref":"#/definitions/errors"},"result":{"description":"Always empty on error-only responses.","items":{},"type":"array"}},"type":"object"},"geoset.circle":{"description":"Circular region","properties":{"center":{"$ref":"#/definitions/container.interval.geofence.coordinate"},"name":{"$ref":"#/definitions/container.interval.geofence.name"},"radius":{"description":"Radius in kilometers","maximum":1000,"minimum":0.001,"type":"number"},"type":{"const":"circle","default":"circle","description":"Circle","readOnly":true,"type":"string"}},"required":["type","center","radius"],"title":"Circle","type":"object","x-view-order":["type","name","center","radius"],"x-view-shrink-field":"name","x-view-type":"geofence"},"geoset.corridor":{"description":"Corridor of certain width that consists from multiple sequentially connected points","properties":{"name":{"$ref":"#/definitions/container.interval.geofence.name"},"path":{"description":"Series of coordinates","items":{"$ref":"#/definitions/container.interval.geofence.coordinate"},"maxItems":1000,"minItems":2,"type":"array"},"type":{"const":"corridor","default":"corridor","description":"Corridor of certain width","readOnly":true,"type":"string"},"width":{"description":"Corridor width, maximum allowed distance till centerline between two neighbor points, in kilometers","maximum":1000,"minimum":0.001,"type":"number"}},"required":["type","path","width"],"title":"Corridor","type":"object","x-view-order":["type","name","width","path"],"x-view-shrink-field":"name","x-view-type":"geofence"},"geoset.polygon":{"description":"Area enclosed by a closed path","properties":{"name":{"$ref":"#/definitions/container.interval.geofence.name"},"path":{"description":"Series of coordinates","items":{"$ref":"#/definitions/container.interval.geofence.coordinate"},"maxItems":1024,"minItems":3,"type":"array"},"type":{"const":"polygon","default":"polygon","description":"Closed path","readOnly":true,"type":"string"}},"required":["type","path"],"title":"Polygon","type":"object","x-view-order":["type","name","path"],"x-view-shrink-field":"name","x-view-type":"geofence"},"grant":{"description":"grant information","properties":{"blocked":{"$ref":"#/definitions/item.blocked"},"cid":{"$ref":"#/definitions/grant.cid"},"created":{"$ref":"#/definitions/customer.created"},"enabled":{"$ref":"#/definitions/item.enabled"},"id":{"$ref":"#/definitions/grant.id"},"items":{"$ref":"#/definitions/grant.items"},"metadata":{"$ref":"#/definitions/metadata"},"name":{"$ref":"#/definitions/grant.name"}},"type":"object"},"grant.access":{"description":"The default access level for an item and its messages is set to \"view\", meaning that users can see the item and its messages\nbut cannot modify or delete them. The granted items can be combined with owned items, for example, an owned device can be assigned to a granted plugin or calculator.\n","minItems":1,"title":"Grant additional access levels","type":"array","uniqueItems":true},"grant.cid":{"description":"Access to the items owned by this subaccount will be granted. If ommited, the access to the items owned by current account will be granted.","minimum":1,"title":"Grantor ID","type":"integer","x-view-selector":"subaccounts-customer"},"grant.id":{"description":"grant ID","minimum":1,"type":"integer"},"grant.items":{"anyOf":[{"properties":{"access":{"description":"Once the \"operate-as\" level is granted, you will be able to fully operate under the own account.\nYou can use its ID as the \"x-flespi-cid\" HTTP header or as the \"cid\" property of an MQTT subscription.\n","items":{"enum":["create-devices","create-calcs","create-plugins","create-streams","create-channels","create-modems","create-groups","create-geofences","create-containers","create-cdns","create-assets","create-agents","create-connectors","operate-as"],"type":"string"},"maxItems":14,"minItems":0,"title":"Grant access levels","type":"array","uniqueItems":true},"ids":{"const":"own","default":"own","readOnly":true,"type":"string","x-view-hidden":true},"type":{"const":"platform/customer","default":"platform/customer","readOnly":true,"type":"string"}},"required":["type","ids"],"title":"Own account","type":"object","x-view-order":["access"]},{"properties":{"access":{"description":"The default access level for an item and its messages is set to \"view\", meaning that users can see the item and its messages\nbut cannot modify or delete them. The granted items can be combined with owned items, for example, an owned device can be assigned to a granted plugin or calculator.\n","items":{"enum":["edit","command","delete"],"type":"string"},"maxItems":3,"minItems":1,"title":"Grant additional access levels","type":"array","uniqueItems":true},"ids":{"anyOf":[{"const":"all","default":"all","readOnly":true,"title":"All items","type":"string","x-view-hidden":true},{"items":{"format":"uint32","minimum":1,"type":"number"},"maxItems":1024,"minItems":1,"title":"Set of items","type":"array","x-view-selector":"devices"}]},"type":{"const":"gw/devices","default":"gw/devices","readOnly":true,"type":"string"}},"required":["type","ids"],"title":"Devices","type":"object","x-view-order":["ids","access"]},{"properties":{"access":{"description":"The default access level for an item and its messages is set to \"view\", meaning that users can see the item and its messages\nbut cannot modify or delete them. The granted items can be combined with owned items, for example, an owned device can be assigned to a granted plugin or calculator.\n","items":{"enum":["edit","delete"],"type":"string"},"maxItems":2,"minItems":1,"title":"Grant additional access levels","type":"array","uniqueItems":true},"ids":{"anyOf":[{"const":"all","default":"all","readOnly":true,"title":"All items","type":"string","x-view-hidden":true},{"items":{"format":"uint32","minimum":1,"type":"number"},"maxItems":1024,"minItems":1,"title":"Set of items","type":"array","x-view-selector":"geofences"}]},"type":{"const":"gw/geofences","default":"gw/geofences","readOnly":true,"type":"string"}},"required":["type","ids"],"title":"Geofences","type":"object","x-view-order":["ids","access"]},{"properties":{"access":{"description":"The default access level for an item and its messages is set to \"view\", meaning that users can see the item and its messages\nbut cannot modify or delete them. The granted items can be combined with owned items, for example, an owned device can be assigned to a granted plugin or calculator.\n","items":{"enum":["edit","delete"],"type":"string"},"maxItems":3,"minItems":1,"title":"Grant additional access levels","type":"array","uniqueItems":true},"ids":{"anyOf":[{"const":"all","default":"all","readOnly":true,"title":"All items","type":"string","x-view-hidden":true},{"items":{"format":"uint32","minimum":1,"type":"number"},"maxItems":1024,"minItems":1,"title":"Set of items","type":"array","x-view-selector":"calcs"}]},"type":{"const":"gw/calcs","default":"gw/calcs","readOnly":true,"type":"string"}},"required":["type","ids"],"title":"Calcs","type":"object","x-view-order":["ids","access"]},{"properties":{"access":{"description":"The default access level for an item and its messages is set to \"view\", meaning that users can see the item and its messages\nbut cannot modify or delete them. The granted items can be combined with owned items, for example, an owned device can be assigned to a granted plugin or calculator.\n","items":{"enum":["edit","delete"],"type":"string"},"maxItems":3,"minItems":1,"title":"Grant additional access levels","type":"array","uniqueItems":true},"ids":{"anyOf":[{"const":"all","default":"all","readOnly":true,"title":"All items","type":"string","x-view-hidden":true},{"items":{"format":"uint32","minimum":1,"type":"number"},"maxItems":1024,"minItems":1,"title":"Set of items","type":"array","x-view-selector":"plugins"}]},"type":{"const":"gw/plugins","default":"gw/plugins","readOnly":true,"type":"string"}},"required":["type","ids"],"title":"Plugins","type":"object","x-view-order":["ids","access"]},{"properties":{"access":{"description":"The default access level for an item and its messages is set to \"view\", meaning that users can see the item and its messages\nbut cannot modify or delete them. The granted items can be combined with owned items, for example, an owned device can be assigned to a granted plugin or calculator.\n","items":{"enum":["edit","delete"],"type":"string"},"maxItems":3,"minItems":1,"title":"Grant additional access levels","type":"array","uniqueItems":true},"ids":{"anyOf":[{"const":"all","default":"all","readOnly":true,"title":"All items","type":"string","x-view-hidden":true},{"items":{"format":"uint32","minimum":1,"type":"number"},"maxItems":1024,"minItems":1,"title":"Set of items","type":"array","x-view-selector":"streams"}]},"type":{"const":"gw/streams","default":"gw/streams","readOnly":true,"type":"string"}},"required":["type","ids"],"title":"Streams","type":"object","x-view-order":["ids","access"]},{"properties":{"access":{"description":"The default access level for an item and its messages is set to \"view\", meaning that users can see the item and its messages\nbut cannot modify or delete them. The granted items can be combined with owned items, for example, an owned device can be assigned to a granted plugin or calculator.\n","items":{"enum":["edit","delete"],"type":"string"},"maxItems":3,"minItems":1,"title":"Grant additional access levels","type":"array","uniqueItems":true},"ids":{"anyOf":[{"const":"all","default":"all","readOnly":true,"title":"All items","type":"string","x-view-hidden":true},{"items":{"format":"uint32","minimum":1,"type":"number"},"maxItems":1024,"minItems":1,"title":"Set of items","type":"array","x-view-selector":"channels"}]},"type":{"const":"gw/channels","default":"gw/channels","readOnly":true,"type":"string"}},"required":["type","ids"],"title":"Channels","type":"object","x-view-order":["ids","access"]},{"properties":{"access":{"description":"The default access level for an item and its messages is set to \"view\", meaning that users can see the item and its messages\nbut cannot modify or delete them. The granted items can be combined with owned items, for example, an owned device can be assigned to a granted plugin or calculator.\n","items":{"enum":["edit","delete"],"type":"string"},"maxItems":3,"minItems":1,"title":"Grant additional access levels","type":"array","uniqueItems":true},"ids":{"anyOf":[{"const":"all","default":"all","readOnly":true,"title":"All items","type":"string","x-view-hidden":true},{"items":{"format":"uint32","minimum":1,"type":"number"},"maxItems":1024,"minItems":1,"title":"Set of items","type":"array","x-view-selector":"modems"}]},"type":{"const":"gw/modems","default":"gw/modems","readOnly":true,"type":"string"}},"required":["type","ids"],"title":"Modems","type":"object","x-view-order":["ids","access"]},{"properties":{"access":{"description":"The default access level for an item and its messages is set to \"view\", meaning that users can see the item and its messages\nbut cannot modify or delete them. The granted items can be combined with owned items, for example, an owned device can be assigned to a granted plugin or calculator.\n","items":{"enum":["edit","delete"],"type":"string"},"maxItems":3,"minItems":1,"title":"Grant additional access levels","type":"array","uniqueItems":true},"ids":{"anyOf":[{"const":"all","default":"all","readOnly":true,"title":"All items","type":"string","x-view-hidden":true},{"items":{"format":"uint32","minimum":1,"type":"number"},"maxItems":1024,"minItems":1,"title":"Set of items","type":"array","x-view-selector":"groups"}]},"type":{"const":"gw/groups","default":"gw/groups","readOnly":true,"type":"string"}},"required":["type","ids"],"title":"Groups","type":"object","x-view-order":["ids","access"]},{"properties":{"access":{"description":"The default access level for an item and its messages is set to \"view\", meaning that users can see the item and its messages\nbut cannot modify or delete them. The granted items can be combined with owned items, for example, an owned device can be assigned to a granted plugin or calculator.\n","items":{"enum":["edit","delete"],"type":"string"},"maxItems":2,"minItems":1,"title":"Grant additional access levels","type":"array","uniqueItems":true},"ids":{"anyOf":[{"const":"all","default":"all","readOnly":true,"title":"All items","type":"string","x-view-hidden":true},{"items":{"format":"uint32","minimum":1,"type":"number"},"maxItems":1024,"minItems":1,"title":"Set of items","type":"array","x-view-selector":"containers"}]},"type":{"const":"storage/containers","default":"storage/containers","readOnly":true,"type":"string"}},"required":["type","ids"],"title":"Containers","type":"object","x-view-order":["ids","access"]},{"properties":{"access":{"description":"The default access level for an item and its messages is set to \"view\", meaning that users can see the item and its messages\nbut cannot modify or delete them. The granted items can be combined with owned items, for example, an owned device can be assigned to a granted plugin or calculator.\n","items":{"enum":["edit","delete"],"type":"string"},"maxItems":2,"minItems":1,"title":"Grant additional access levels","type":"array","uniqueItems":true},"ids":{"anyOf":[{"const":"all","default":"all","readOnly":true,"title":"All items","type":"string","x-view-hidden":true},{"items":{"format":"uint32","minimum":1,"type":"number"},"maxItems":1024,"minItems":1,"title":"Set of items","type":"array","x-view-selector":"cdns"}]},"type":{"const":"storage/cdns","default":"storage/cdns","readOnly":true,"type":"string"}},"required":["type","ids"],"title":"CDNs","type":"object","x-view-order":["ids","access"]},{"properties":{"access":{"description":"The default access level for an item and its messages is set to \"view\", meaning that users can see the item and its messages\nbut cannot modify or delete them. The granted items can be combined with owned items, for example, an owned device can be assigned to a granted plugin or calculator.\n","items":{"enum":["edit","delete"],"type":"string"},"maxItems":2,"minItems":1,"title":"Grant additional access levels","type":"array","uniqueItems":true},"ids":{"anyOf":[{"const":"all","default":"all","readOnly":true,"title":"All items","type":"string","x-view-hidden":true},{"items":{"format":"uint32","minimum":1,"type":"number"},"maxItems":1024,"minItems":1,"title":"Set of items","type":"array","x-view-selector":"assets"}]},"type":{"const":"gw/assets","default":"gw/assets","readOnly":true,"type":"string"}},"required":["type","ids"],"title":"Assets","type":"object","x-view-order":["ids","access"]},{"properties":{"access":{"description":"The default access level for an item and its messages is set to \"view\", meaning that users can see the item and its messages\nbut cannot modify or delete them. The granted items can be combined with owned items, for example, an owned device can be assigned to a granted plugin or calculator.\n","items":{"enum":["edit","delete"],"type":"string"},"maxItems":2,"minItems":1,"title":"Grant additional access levels","type":"array","uniqueItems":true},"ids":{"anyOf":[{"const":"all","default":"all","readOnly":true,"title":"All items","type":"string","x-view-hidden":true},{"items":{"format":"uint32","minimum":1,"type":"number"},"maxItems":1024,"minItems":1,"title":"Set of items","type":"array","x-view-selector":"agents"}]},"type":{"const":"ai/agents","default":"ai/agents","readOnly":true,"type":"string"}},"required":["type","ids"],"title":"AI Agents","type":"object","x-view-order":["ids","access"]},{"properties":{"access":{"description":"The default access level for an item and its messages is set to \"view\", meaning that users can see the item and its messages\nbut cannot modify or delete them. The granted items can be combined with owned items, for example, an owned device can be assigned to a granted plugin or calculator.\n","items":{"enum":["edit","delete"],"type":"string"},"maxItems":2,"minItems":1,"title":"Grant additional access levels","type":"array","uniqueItems":true},"ids":{"anyOf":[{"const":"all","default":"all","readOnly":true,"title":"All items","type":"string","x-view-hidden":true},{"items":{"format":"uint32","minimum":1,"type":"number"},"maxItems":1024,"minItems":1,"title":"Set of items","type":"array","x-view-selector":"connectors"}]},"type":{"const":"ai/connectors","default":"ai/connectors","readOnly":true,"type":"string"}},"required":["type","ids"],"title":"AI Connectors","type":"object","x-view-order":["ids","access"]},{"properties":{"access":{"description":"Once the \"operate-as\" level is granted, you will be able to fully operate under the given subaccount.\nYou can use its ID as the \"x-flespi-cid\" HTTP header or as the \"cid\" property of an MQTT subscription.\n","items":{"enum":["create-devices","create-calcs","create-plugins","create-streams","create-channels","create-modems","create-groups","create-geofences","create-containers","create-cdns","create-assets","create-agents","create-connectors","operate-as"],"type":"string"},"maxItems":14,"minItems":0,"title":"Grant access levels","type":"array","uniqueItems":true},"ids":{"anyOf":[{"const":"all","default":"all","readOnly":true,"title":"All items","type":"string","x-view-hidden":true},{"items":{"format":"uint32","minimum":1,"type":"number"},"maxItems":1024,"minItems":1,"title":"Set of items","type":"array","x-view-selector":"subaccounts"}]},"type":{"const":"platform/customer","default":"platform/customer","readOnly":true,"type":"string"}},"required":["type","ids"],"title":"Subaccounts","type":"object","x-view-order":["ids","access"]}],"description":"You can grant access to all items of this type or to a set of items.","title":"Set of granted items"},"grant.name":{"description":"Grant name or description","maxLength":1024,"title":"Name","type":"string"},"grant.post":{"properties":{"cid":{"$ref":"#/definitions/grant.cid"},"enabled":{"$ref":"#/definitions/item.enabled-default"},"items":{"$ref":"#/definitions/grant.items"},"metadata":{"$ref":"#/definitions/metadata"},"name":{"$ref":"#/definitions/grant.name"}},"required":["items"],"title":"grant","type":"object","x-view-order":["name","cid","items","enabled","metadata"]},"grant.put":{"properties":{"enabled":{"$ref":"#/definitions/item.enabled"},"items":{"$ref":"#/definitions/grant.items"},"metadata":{"$ref":"#/definitions/metadata"},"name":{"$ref":"#/definitions/grant.name"}},"type":"object","x-view-order":["name","items","enabled","metadata"]},"grant.subaccount":{"description":"information about subaccount linked to the grant","properties":{"accessed":{"$ref":"#/definitions/customer.accessed"},"auto_created":{"$ref":"#/definitions/subitem.auto_created"},"blocked":{"description":"Block reason, 0 - not blocked","format":"uint32","type":"integer"},"cid":{"description":"Subaccount's cid","type":"integer"},"counters":{"$ref":"#/definitions/customer.counters"},"created":{"$ref":"#/definitions/customer.created"},"email":{"$ref":"#/definitions/customer.email"},"enabled":{"$ref":"#/definitions/item.enabled"},"fields":{"$ref":"#/definitions/subitem.fields"},"grant_id":{"$ref":"#/definitions/item.id"},"limit_id":{"$ref":"#/definitions/customer.limit_id"},"metadata":{"$ref":"#/definitions/metadata"},"name":{"$ref":"#/definitions/customer.name"},"notify":{"$ref":"#/definitions/customer.notify"},"owner_id":{"description":"Subaccount's owner ID. Zero for root-level flespi accounts.","type":"integer"},"region":{"description":"Region where the subaccount data is located.","type":"string"},"sla":{"$ref":"#/definitions/customer.sla"},"subaccount_id":{"$ref":"#/definitions/item.id"}},"type":"object"},"grant.subaccounts.list":{"properties":{"errors":{"$ref":"#/definitions/errors"},"result":{"description":"Subaccounts collection","items":{"$ref":"#/definitions/grant.subaccount"},"type":"array"}},"type":"object"},"grants.result":{"properties":{"result":{"description":"grants reply","items":{"$ref":"#/definitions/grant"},"type":"array"}},"type":"object"},"home.auto_created":{"properties":{"limit_id":{"$ref":"#/definitions/realm.limit_id"},"subaccount_id":{"description":"Owner of the user's personal subaccount\n","minimum":1,"title":"Owner ID","type":"integer","x-view-selector":"subaccounts"},"type":{"const":2,"default":2,"readOnly":true,"type":"integer"}},"required":["type"],"type":"object","x-view-order":["subaccount_id","limit_id"]},"home.current":{"properties":{"type":{"const":0,"default":0,"readOnly":true,"type":"integer"}},"required":["type"],"type":"object","x-view-hidden":true},"home.selected":{"properties":{"subaccount_id":{"description":"Subaccount ID for user token\n","minimum":1,"title":"Subaccount ID","type":"integer","x-view-selector":"subaccounts"},"type":{"const":1,"default":1,"readOnly":true,"type":"integer"}},"required":["type","subaccount_id"],"type":"object","x-view-order":["subaccount_id"]},"id.result":{"properties":{"result":{"description":"Element's ID list.","items":{"$ref":"#/definitions/item.id"},"type":"array"}},"type":"object"},"identity-provider":{"description":"identity provider information","properties":{"blocked":{"$ref":"#/definitions/item.blocked"},"cid":{"$ref":"#/definitions/item.cid"},"configuration":{"$ref":"#/definitions/identity-provider.configuration.result"},"created":{"$ref":"#/definitions/customer.created"},"id":{"$ref":"#/definitions/item.id"},"metadata":{"$ref":"#/definitions/metadata"},"name":{"$ref":"#/definitions/identity-provider.name"},"public_info":{"$ref":"#/definitions/identity-provider.public_info"},"type":{"$ref":"#/definitions/identity-provider.type.result"}},"type":"object"},"identity-provider-https-url":{"format":"uri-https","maxLength":1024,"minLength":8,"type":"string","x-view-placeholder":"https://"},"identity-provider-long-string":{"maxLength":1024,"minLength":1,"type":"string"},"identity-provider-short-string":{"maxLength":128,"minLength":1,"type":"string"},"identity-provider-url":{"maxLength":1024,"minLength":8,"type":"string"},"identity-provider.auth_url":{"description":"User authorization URL","format":"uri-https","maxLength":1024,"minLength":8,"title":"Authorization endpoint","type":"string","x-view-placeholder":"https://"},"identity-provider.cid":{"title":"Customer ID","type":"integer"},"identity-provider.client_id":{"maxLength":1024,"minLength":1,"title":"Client ID","type":"string"},"identity-provider.client_secret":{"maxLength":1024,"minLength":1,"title":"Client secret","type":"string","x-view-type":"password"},"identity-provider.configuration.auto":{"const":"auto","default":"auto","readOnly":true,"type":"string"},"identity-provider.configuration.manual":{"const":"manual","default":"manual","readOnly":true,"type":"string"},"identity-provider.configuration.oauth2":{"properties":{"auth_url":{"$ref":"#/definitions/identity-provider.auth_url"},"client_id":{"$ref":"#/definitions/identity-provider.client_id"},"client_secret":{"$ref":"#/definitions/identity-provider.client_secret"},"info_url":{"$ref":"#/definitions/identity-provider.info_url"},"redirect_url":{"$ref":"#/definitions/identity-provider.redirect_url"},"scopes":{"$ref":"#/definitions/identity-provider.scopes"},"token_url":{"$ref":"#/definitions/identity-provider.token_url"}},"required":["client_id","client_secret","auth_url","token_url","info_url","scopes"],"title":"Configuration","type":"object","x-view-order":["client_id","client_secret","auth_url","token_url","info_url","redirect_url","scopes"]},"identity-provider.configuration.oidc":{"anyOf":[{"$ref":"#/definitions/identity-provider.configuration.oidc.autodetect"},{"$ref":"#/definitions/identity-provider.configuration.oidc.manual"}],"x-key-property":"type"},"identity-provider.configuration.oidc.autodetect":{"properties":{"client_id":{"$ref":"#/definitions/identity-provider.client_id"},"client_secret":{"$ref":"#/definitions/identity-provider.client_secret"},"provider_url":{"$ref":"#/definitions/identity-provider.provider_url"},"redirect_url":{"$ref":"#/definitions/identity-provider.redirect_url"},"type":{"$ref":"#/definitions/identity-provider.configuration.auto"}},"required":["type","client_id","client_secret","provider_url"],"title":"Autodecect configuration","type":"object","x-view-order":["client_id","client_secret","provider_url","redirect_url"]},"identity-provider.configuration.oidc.manual":{"properties":{"auth_url":{"$ref":"#/definitions/identity-provider.auth_url"},"client_id":{"$ref":"#/definitions/identity-provider.client_id"},"client_secret":{"$ref":"#/definitions/identity-provider.client_secret"},"info_url":{"$ref":"#/definitions/identity-provider.info_url"},"redirect_url":{"$ref":"#/definitions/identity-provider.redirect_url"},"token_url":{"$ref":"#/definitions/identity-provider.token_url"},"type":{"$ref":"#/definitions/identity-provider.configuration.manual"}},"required":["type","client_id","client_secret","auth_url","token_url","info_url"],"title":"Manual configuration","type":"object","x-view-order":["client_id","client_secret","auth_url","token_url","info_url","redirect_url"]},"identity-provider.configuration.result":{"properties":{"auth_url":{"$ref":"#/definitions/identity-provider.auth_url"},"client_id":{"$ref":"#/definitions/identity-provider.client_id"},"client_secret":{"$ref":"#/definitions/identity-provider.client_secret"},"info_url":{"$ref":"#/definitions/identity-provider.info_url"},"redirect_url":{"$ref":"#/definitions/identity-provider.redirect_url"},"scopes":{"$ref":"#/definitions/identity-provider.scopes"},"token_url":{"$ref":"#/definitions/identity-provider.token_url"}},"title":"Configuration","type":"object"},"identity-provider.description":{"description":"Identity provide description text\n","maxLength":2048,"minLength":1,"title":"Description","type":"string","x-view-type":"textarea"},"identity-provider.id":{"title":"Identity Provider ID","type":"integer"},"identity-provider.info_url":{"description":"User information acquisition URL","format":"uri-https","maxLength":1024,"minLength":8,"title":"UserInfo endpoint","type":"string","x-view-placeholder":"https://"},"identity-provider.logo_url":{"format":"uri-https","maxLength":1024,"minLength":8,"title":"Logo URL","type":"string","x-view-placeholder":"https://"},"identity-provider.name":{"maxLength":128,"minLength":1,"title":"Name","type":"string"},"identity-provider.oauth2.common":{"title":"Custom OAuth 2.0 Identity Provider","type":"object","x-view-order":["name","configuration","public_info","metadata"]},"identity-provider.oauth2.custom.post":{"properties":{"configuration":{"$ref":"#/definitions/identity-provider.configuration.oauth2"},"metadata":{"$ref":"#/definitions/metadata"},"name":{"$ref":"#/definitions/identity-provider.name"},"public_info":{"$ref":"#/definitions/identity-provider.public_info"},"type":{"$ref":"#/definitions/identity-provider.type.oauth2"}},"required":["type","name","configuration","public_info"],"title":"Custom OAuth 2.0 Identity Provider","type":"object","x-view-order":["name","configuration","public_info","metadata"]},"identity-provider.oauth2.custom.put":{"properties":{"configuration":{"$ref":"#/definitions/identity-provider.configuration.oauth2"},"metadata":{"$ref":"#/definitions/metadata"},"name":{"$ref":"#/definitions/identity-provider.name"},"public_info":{"$ref":"#/definitions/identity-provider.public_info"},"type":{"$ref":"#/definitions/identity-provider.type.oauth2"}},"required":["type"],"title":"Custom OAuth 2.0 Identity Provider","type":"object","x-view-order":["name","configuration","public_info","metadata"]},"identity-provider.oauth2.predefined":{"properties":{"metadata":{"$ref":"#/definitions/metadata"},"name":{"$ref":"#/definitions/identity-provider.predefined.name"},"type":{"$ref":"#/definitions/identity-provider.type.predefined"}},"required":["type","name"],"title":"Predefined OAuth 2.0 Identity Provider","type":"object","x-view-order":["name","metadata"]},"identity-provider.oidc.common":{"title":"Custom OpenID Connect Identity Provider","type":"object","x-view-order":["name","configuration","public_info","metadata"]},"identity-provider.oidc.post":{"properties":{"configuration":{"$ref":"#/definitions/identity-provider.configuration.oidc"},"metadata":{"$ref":"#/definitions/metadata"},"name":{"$ref":"#/definitions/identity-provider.name"},"public_info":{"$ref":"#/definitions/identity-provider.public_info"},"type":{"$ref":"#/definitions/identity-provider.type.oidc"}},"required":["type","name","configuration","public_info"],"title":"Custom OpenID Connect Identity Provider","type":"object","x-view-order":["name","configuration","public_info","metadata"]},"identity-provider.oidc.put":{"properties":{"configuration":{"$ref":"#/definitions/identity-provider.configuration.oidc"},"metadata":{"$ref":"#/definitions/metadata"},"name":{"$ref":"#/definitions/identity-provider.name"},"public_info":{"$ref":"#/definitions/identity-provider.public_info"},"type":{"$ref":"#/definitions/identity-provider.type.oidc"}},"required":["type"],"title":"Custom OpenID Connect Identity Provider","type":"object","x-view-order":["name","configuration","public_info","metadata"]},"identity-provider.post":{"anyOf":[{"$ref":"#/definitions/identity-provider.oidc.post"},{"$ref":"#/definitions/identity-provider.oauth2.custom.post"},{"$ref":"#/definitions/identity-provider.oauth2.predefined"}],"x-key-property":"type"},"identity-provider.predefined.name":{"enum":["google","github","bitbucket","facebook"],"title":"","type":"string","x-view-enum-labels":["Google","Github","Bitbucket","Facebook"]},"identity-provider.properties.oauth2":{"configuration":{"$ref":"#/definitions/identity-provider.configuration.oauth2"},"metadata":{"$ref":"#/definitions/metadata"},"name":{"$ref":"#/definitions/identity-provider.name"},"public_info":{"$ref":"#/definitions/identity-provider.public_info"},"type":{"$ref":"#/definitions/identity-provider.type.oauth2"}},"identity-provider.properties.oidc":{"metadata":{"$ref":"#/definitions/metadata"},"name":{"$ref":"#/definitions/identity-provider.name"},"public_info":{"$ref":"#/definitions/identity-provider.public_info"},"type":{"$ref":"#/definitions/identity-provider.type.oidc"}},"identity-provider.provider_url":{"description":"Provider configuration discovery URL (performed via OpenID Connect Discovery protocol).\nMay be specified with or without `/.well-known/openid-configuration` path component.\n","format":"uri-https","maxLength":1024,"minLength":8,"title":"Provider URL","type":"string","x-view-placeholder":"https://"},"identity-provider.public_info":{"description":"Auxiliary public information available via public API and displayed while logging in\n","properties":{"description":{"$ref":"#/definitions/identity-provider.description"},"logo_url":{"$ref":"#/definitions/identity-provider.logo_url"},"name":{"$ref":"#/definitions/identity-provider.name"}},"required":["name"],"title":"Public information","type":"object","x-view-order":["name","logo_url","description"]},"identity-provider.put":{"anyOf":[{"$ref":"#/definitions/identity-provider.oidc.put"},{"$ref":"#/definitions/identity-provider.oauth2.custom.put"},{"$ref":"#/definitions/identity-provider.oauth2.predefined"}],"x-key-property":"type"},"identity-provider.redirect_url":{"description":"Custom redirect URL","maxLength":1024,"minLength":8,"title":"Redirect URL","type":"string","x-schema-anyOf":[{"pattern":"^https?:\\/\\/(?:localhost|127\\.0\\.0\\.1)(?::[0-9]+)?(?:\\/.*)?$","type":"string"},{"format":"uri-https","maxLength":1024,"minLength":8,"type":"string","x-view-placeholder":"https://"}],"x-schema-errors":{"anyOf":"redirect_url should be HTTPS for public domains or HTTP/HTTPS for localhost/127.0.0.1"},"x-view-placeholder":"https://"},"identity-provider.scopes":{"if":{"contains":{"const":"openid"}},"items":{"maxLength":1024,"minLength":1,"type":"string"},"minItems":1,"then":{"maxItems":0,"x-schema-errors":{"maxItems":"set this identity provider as OpenID Connect if it provides 'openid' scope"}},"title":"Scopes","type":"array"},"identity-provider.token_url":{"description":"Access token acquisition URL","format":"uri-https","maxLength":1024,"minLength":8,"title":"Token endpoint","type":"string","x-view-placeholder":"https://"},"identity-provider.type.oauth2":{"const":"oauth2","default":"oauth2","readOnly":true,"title":"Type","type":"string"},"identity-provider.type.oidc":{"const":"oidc","default":"oidc","readOnly":true,"title":"Type","type":"string"},"identity-provider.type.predefined":{"const":"predefined","default":"predefined","readOnly":true,"title":"Type","type":"string"},"identity-provider.type.result":{"title":"Type","type":"string"},"identity-providers.post":{"items":{"$ref":"#/definitions/identity-provider.post"},"maxItems":32,"minItems":1,"type":"array"},"identity-providers.result":{"properties":{"result":{"description":"Identity provider data","items":{"$ref":"#/definitions/identity-provider"},"type":"array"}},"type":"object"},"invoice":{"description":"invoice information","properties":{"amount":{"$ref":"#/definitions/invoice.amount"},"balance":{"$ref":"#/definitions/invoice.balance"},"closed":{"$ref":"#/definitions/invoice.closed"},"credits":{"$ref":"#/definitions/invoice.credits"},"currency":{"$ref":"#/definitions/billing.currency"},"date":{"$ref":"#/definitions/invoice.date"},"entity":{"$ref":"#/definitions/billing.entity"},"id":{"description":"Invoice's unique ID, used internally","type":"integer"},"items":{"$ref":"#/definitions/invoice.items"},"multiplier":{"$ref":"#/definitions/billing.multiplier"},"number":{"$ref":"#/definitions/invoice.number"},"payment":{"description":"payment link associated with this invoice","readOnly":true,"type":"string"},"pdf":{"description":"pdf file associated with this invoice","readOnly":true,"type":"string"},"period":{"$ref":"#/definitions/invoice.period"},"statistics":{"$ref":"#/definitions/invoice.statistics"}},"type":"object"},"invoice.amount":{"description":"total calculated amount of money in invoice items, in EUR cents","format":"int32","type":"number"},"invoice.balance":{"description":"total calculated balance for current invoice (payments - items), in EUR cents","format":"int32","type":"number"},"invoice.closed":{"description":"invoice has been closed flag, e.g. payed by customer","type":"boolean"},"invoice.credits":{"description":"related credit notes to the invoice","items":{"properties":{"amount":{"description":"credit note amount, in cents","type":"integer"},"date":{"description":"credit note date","type":"string"},"number":{"description":"credit note number","type":"string"},"pdf":{"description":"a link to credit note pdf document","type":"string"}},"type":"object"},"type":"array"},"invoice.date":{"description":"invoice date in form 'YYYY-MM-DD'","maxLength":10,"minLength":10,"type":"string"},"invoice.item":{"description":"invoiced item (position) details","properties":{"name":{"description":"position name","maxLength":255,"type":"string"},"price":{"description":"price of one unit, in EUR cents","format":"int32","type":"number"},"quantity":{"description":"quantity of elements being invoicing","format":"uint32","maximum":1000000,"type":"number"},"type":{"description":"position type","maxLength":255,"type":"string"}},"required":["type","name","quantity","price"],"type":"object"},"invoice.items":{"description":"invoice items","items":{"$ref":"#/definitions/invoice.item"},"minItems":1,"type":"array"},"invoice.number":{"description":"unique invoice number","maxLength":18,"minLength":4,"type":"string"},"invoice.period":{"description":"invoice period in form 'YYYY-MM'","maxLength":7,"minLength":7,"type":"string"},"invoice.statistics":{"additionalProperties":true,"description":"average monthly items consumption statistics on which this invoice is based, may be empty if not yet calculated or customer is on the Free plan","maxProperties":1024,"type":"object"},"invoices.charge.result":{"properties":{"result":{"description":"Invoices charge operation result.","items":{"description":"ID of successfully charged invoice","type":"number"},"type":"array"}},"type":"object"},"invoices.result":{"properties":{"result":{"description":"Customer's invoices data in reply, fields included according to request's **fields** parameter.","items":{"$ref":"#/definitions/invoice"},"type":"array"}},"type":"object"},"item.blocked":{"description":"Active block code for item","type":"integer"},"item.btime":{"description":"Item birth timestamp","type":"double"},"item.cid":{"description":"owner ID","format":"uint32","type":"integer"},"item.enabled":{"description":"Enable or disable item","type":"boolean"},"item.enabled-default":{"default":true,"description":"Enable or disable item","type":"boolean"},"item.id":{"description":"unique item ID","format":"uint32","minimum":1,"type":"integer"},"item.mtime":{"description":"Item last modification timestamp","type":"double"},"item.name":{"description":"Item name","maxLength":1024,"minLength":1,"type":"string"},"item.packets":{"description":"packet data","properties":{"conn":{"description":"Connection ID","minimum":0,"type":"integer"},"data":{"description":"base64 representation of binary data for the packet","maxLength":4194240,"minLength":1,"type":"string"},"timestamp":{"description":"UNIX timestamp of the event","minimum":1,"type":"number","x-view-type":"datetime"},"type":{"description":"3 least significant bits - traffic event type (enum):\n  * 0 - connection is opened\n  * 1 - connection is closed\n  * 2 - incoming data\n  * 3 - outgoing data\n  * 4 - peer identified\nbits 3...7 - traffic transport type bitmask:\n  * 0x00 - tcp\n  * 0x10 - channel\n  * 0x20 - mqtt\n  * 0x40 - http\n  * 0x80 - udp\n","minimum":0,"type":"number"}},"type":"object"},"item.packets.get":{"description":"parameter to filter packets selection","properties":{"count":{"default":10000000,"description":"The number of packets to be returned\n","format":"uint32","maximum":10000000,"minimum":1,"type":"integer"},"filter":{"description":"optional filter string to return only packets conforming to specific filtering rules","maxLength":1024,"type":"string"},"from":{"description":"UNIX timestamp of left time border for packets. Use 0 to ignore left bound.\n","minimum":0,"type":"number","x-view-type":"datetime"},"reverse":{"default":false,"description":"time sorting parameter (true/false), use false to list packets from end to beginning","type":"boolean"},"to":{"description":"UNIX timestamp of right time border for packets. Use 0 to ignore right bound.","minimum":0,"type":"number","x-view-type":"datetime"}},"type":"object"},"item.priority":{"description":"Item priority. The high priority item is processed first.","maximum":100,"minimum":0,"type":"integer"},"item.priority-default":{"default":0,"description":"Item priority. The high priority item is processed first.","maximum":100,"minimum":0,"type":"integer"},"limit":{"description":"limit properties","properties":{"agents_count":{"$ref":"#/definitions/limit.agents_count"},"ai_calls":{"$ref":"#/definitions/limit.ai_calls"},"ai_credits":{"$ref":"#/definitions/limit.ai_credits"},"api_calls":{"$ref":"#/definitions/limit.api_calls"},"api_traffic":{"$ref":"#/definitions/limit.api_traffic"},"asset_storage":{"$ref":"#/definitions/limit.asset_storage"},"assets_count":{"$ref":"#/definitions/limit.assets_count"},"blocking_duration":{"$ref":"#/definitions/limit.blocking_duration"},"calcs_count":{"$ref":"#/definitions/limit.calcs_count"},"calcs_storage":{"$ref":"#/definitions/limit.calcs_storage"},"cdn_storage":{"$ref":"#/definitions/limit.cdn_storage"},"cdn_traffic":{"$ref":"#/definitions/limit.cdn_traffic"},"cdns_count":{"$ref":"#/definitions/limit.cdns_count"},"channel_connections":{"$ref":"#/definitions/limit.channel_connections"},"channel_messages":{"$ref":"#/definitions/limit.channel_messages"},"channel_storage":{"$ref":"#/definitions/limit.channel_storage"},"channel_traffic":{"$ref":"#/definitions/limit.channel_traffic"},"channel_udp_packets":{"$ref":"#/definitions/limit.channel_udp_packets"},"channels_count":{"$ref":"#/definitions/limit.channels_count"},"cid":{"$ref":"#/definitions/item.cid"},"connectors_count":{"$ref":"#/definitions/limit.connectors_count"},"container_storage":{"$ref":"#/definitions/limit.container_storage"},"containers_count":{"$ref":"#/definitions/limit.containers_count"},"created":{"$ref":"#/definitions/customer.created"},"description":{"$ref":"#/definitions/limit.description"},"device_media_storage":{"$ref":"#/definitions/limit.device_media_storage"},"device_media_traffic":{"$ref":"#/definitions/limit.device_media_traffic"},"device_storage":{"$ref":"#/definitions/limit.device_storage"},"devices_count":{"$ref":"#/definitions/limit.devices_count"},"geofences_count":{"$ref":"#/definitions/limit.geofences_count"},"grants_count":{"$ref":"#/definitions/limit.grants_count"},"groups_count":{"$ref":"#/definitions/limit.groups_count"},"id":{"description":"account unique ID","type":"integer"},"identity_providers_count":{"$ref":"#/definitions/limit.identity_providers_count"},"limits_count":{"$ref":"#/definitions/limit.limits_count"},"metadata":{"$ref":"#/definitions/metadata"},"modems_count":{"$ref":"#/definitions/limit.modems_count"},"mqtt_messages":{"$ref":"#/definitions/limit.mqtt_messages"},"mqtt_retained_storage":{"$ref":"#/definitions/limit.mqtt_retained_storage"},"mqtt_session_storage":{"$ref":"#/definitions/limit.mqtt_session_storage"},"mqtt_sessions":{"$ref":"#/definitions/limit.mqtt_sessions"},"mqtt_subscriptions":{"$ref":"#/definitions/limit.mqtt_subscriptions"},"name":{"$ref":"#/definitions/limit.name"},"plugin_buffered_messages":{"$ref":"#/definitions/limit.plugin_buffered_messages"},"plugin_traffic":{"$ref":"#/definitions/limit.plugin_traffic"},"plugins_count":{"$ref":"#/definitions/limit.plugins_count"},"realm_users_count":{"$ref":"#/definitions/limit.realm_users_count"},"realms_count":{"$ref":"#/definitions/limit.realms_count"},"sms_count":{"$ref":"#/definitions/limit.sms_count"},"stream_storage":{"$ref":"#/definitions/limit.stream_storage"},"stream_traffic":{"$ref":"#/definitions/limit.stream_traffic"},"streams_count":{"$ref":"#/definitions/limit.streams_count"},"subaccounts_count":{"$ref":"#/definitions/limit.subaccounts_count"},"tokens_count":{"$ref":"#/definitions/limit.tokens_count"},"webhook_storage":{"$ref":"#/definitions/limit.webhook_storage"},"webhook_traffic":{"$ref":"#/definitions/limit.webhook_traffic"},"webhooks_count":{"$ref":"#/definitions/limit.webhooks_count"}},"type":"object"},"limit.agents_count":{"description":"AI agents limit. -1 not set, i.e. limited by owner, 0 creation is prohibited","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.ai_calls":{"description":"Maximum AI calls per minute limit. -1 not set, i.e. limited by owner, 0 calls is not allowed","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.ai_credits":{"description":"Maximum credits per month limit. -1 not set, i.e. limited by owner, 0 credits is not allowed","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.api_calls":{"description":"Quantity of REST API calls limit, per minute. -1 not set, i.e. limited by owner. Overflow blocks the most consuming token and/or webhook from platform access for blocking_duration seconds (60 by default)","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.api_traffic":{"description":"REST/MQTT traffic limit, per minute. -1 not set, i.e. limited by owner, 0 deny platform access. Overflow blocks the most consuming token and/or webhook from platform access for blocking_duration seconds (60 by default)","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.asset_storage":{"description":"asset capacity limit, KB. -1 not set, i.e. limited by owner. Overflow blocks asset from receiving new data and allow only read/delete operations.","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.assets_count":{"description":"Maximum assets user can create. -1 not set, i.e. limited by owner, 0 assets creation is prohibited and all existing assets blocked. Overflow randomly blocks assets that exceed specified limit.","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.blocking_duration":{"default":60,"description":"Block duration in seconds for the item(e.g. device, channel, user account, stream, plugin, etc) when one of its counters overflow.","maximum":3600,"minimum":60,"type":"integer"},"limit.calcs_count":{"description":"Maximum calculators user can create. -1 not set, i.e. limited by owner, 0 calculators creation is prohibited and all existing calculators blocked. Overflow randomly blocks calculators that exceed specified limit.","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.calcs_storage":{"description":"Maximum storage to be used to store intervals by device assigned to calculator, in KB. -1 not set, i.e. limited by owner. Exceeding this amount blocks assigned device from analytics calculations.\nTo activate auto-cleanup of this buffer decrease intervals_ttl calculator property or activate intervals_rotation for automatic intervls rotation by size.\n","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.cdn_storage":{"description":"CDN capacity limit, KB. -1 not set, i.e. limited by owner. Overflow blocks CDN from receiving new data and allow only read/delete operations.","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.cdn_traffic":{"description":"CDN files outgoing traffic limit, per minute. -1 not set, i.e. limited by owner. Overflow blocks CDN for 'blocking_duration' seconds","minimum":-1,"type":"integer"},"limit.cdns_count":{"description":"storage/cdns limit. -1 not set, i.e. limited by owner, 0 creation is prohibited, existing items blocked.","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.channel_connections":{"description":"Maximum simultaneous connections per minute that can be handled by the channel. -1 not set, i.e. limited by owner. Exceeding this limit stops the channel from accepting new connections for blocking_duration seconds (60 by default)","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.channel_messages":{"description":"Maximum messages per minute that can be handled by the channel. -1 not set, i.e. limited by owner. Exceeding this intensivity blocks the most consuming devices on the channel, and the channel itself if that is not enough, for blocking_duration seconds (60 by default)","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.channel_storage":{"description":"Maximum storage to be used by channel messages buffer, in KB. -1 not set, i.e. limited by owner. Exceeding this amount blocks channel until messages are automatically deleted by ttl or read/deleted by user.\nTo activate auto-cleanup of this buffer decrease messages_ttl channel property.\n","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.channel_traffic":{"description":"Maximum traffic per minute that can be handled by the channel (in bytes). -1 not set, i.e. limited by owner. Exceeding traffic limit blocks the most consuming devices on the channel, and the channel itself if that is not enough, for blocking_duration seconds (60 by default)","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.channel_udp_packets":{"description":"Maximum UDP packets per minute that can be handled by the channel. -1 not set, i.e. limited by owner. Exceeding this intensivity blocks channel for blocking_duration seconds (60 by default)","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.channels_count":{"description":"Maximum channels user can create. -1 not set, i.e. limited by owner, 0 channels creation is prohibited and all existing channels blocked. Overflow randomly blocks channels that exceed specified limit.","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.connectors_count":{"description":"AI connectors limit. -1 not set, i.e. limited by owner, 0 creation is prohibited","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.container_storage":{"description":"container capacity limit, KB. -1 not set, i.e. limited by owner. Overflow blocks container from receiving new data and allow only read/delete operations.","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.containers_count":{"description":"Maximum containers user can create. -1 not set, i.e. limited by owner, 0 containers creation is prohibited and all existing containers blocked. Overflow randomly blocks containers that exceed specified limit.","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.description":{"description":"limit description","maxLength":255,"minLength":0,"type":"string"},"limit.device_media_storage":{"description":"Maximum storage to be used by device media files, in KB. -1 not set, i.e. limited by owner. Exceeding this amount device from storing new media files and prevent live streaming functionality.\n\nTo activate auto-cleanup of this buffer decrease media_ttl or set corresponding media_rotate properties in the device.\n","minimum":-1,"type":"integer"},"limit.device_media_traffic":{"description":"Media data outgoing traffic limit, per minute, in bytes. -1 not set, i.e. limited by owner. Overflow blocks access to device media traffic for 'blocking_duration' seconds (60 by default)","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.device_storage":{"description":"Maximum storage to be used by device messages, in KB. -1 not set, i.e. limited by owner. Exceeding this amount device from storing new messages.\n\nTo activate auto-cleanup of this buffer decrease messages_ttl or set corresponding messages_rotate properties in the device.\n","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.devices_count":{"description":"Maximum devices user can create. -1 not set, i.e. limited by owner, 0 devices creation is prohibited and all existing devices blocked. Overflow randomly blocks devices that exceed specified limit.","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.geofences_count":{"description":"gw/geofences limit. -1 not set, i.e. limited by owner, 0 creation is prohibited. Overflow denies item creation","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.grants_count":{"description":"gw/grants limit. -1 not set, i.e. limited by owner, 0 creation is prohibited. Overflow denies item creation","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.groups_count":{"description":"gw/groups limit. -1 not set, i.e. limited by owner, 0 creation is prohibited","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.identity_providers_count":{"description":"platform/identity-providers limit. -1 not set, i.e. limited by owner, 0 creation is prohibited. Overflow denies item creation\n","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.limits_count":{"description":"Maximum subaccounts limits user can define. -1 not set, i.e. limited by owner, 0 limits creation is prohibited and all existing limits blocked. Overflow randomly blocks limits that exceed specified limit.","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.modems_count":{"description":"gw/modems limit. -1 not set, i.e. limited by owner, 0 creation is prohibited, existing items blocked","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.mqtt_messages":{"description":"MQTT messages intensivity limit, per minute. -1 not set, i.e. limited by owner. Overflow denies platform access for 60 seconds","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.mqtt_retained_storage":{"description":"Retain messges storage capacity, KB. -1 not set, i.e. limited by owner. Overflow rejects new retain messages","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.mqtt_session_storage":{"description":"Disconnected session storage capacity, KB. -1 not set, i.e. limited by owner. Overflow removes session","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.mqtt_sessions":{"description":"MQTT sessions limit. -1 not set, i.e. limited by owner, 0 rejects new MQTT connections","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.mqtt_subscriptions":{"description":"Topic subscriptions per session limit. -1 not set, i.e. limited by owner. Overflow rejects new subscriptions","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.name":{"description":"limit name","maxLength":255,"minLength":0,"type":"string"},"limit.plugin_buffered_messages":{"description":"queued messages count in internal plugin buffer. -1 not set, i.e. limited by owner. Overflow blocks plugin for 60 seconds","minimum":-1,"type":"integer"},"limit.plugin_traffic":{"description":"Maximum traffic per minute that can be handled by the plugin (in bytes). -1 not set, i.e. limited by owner. Exceeding traffic limit blocks plugin for blocking_duration seconds (60 by default)","minimum":-1,"type":"integer"},"limit.plugins_count":{"description":"Maximum plugins user can create. -1 not set, i.e. limited by owner, 0 plugins creation is prohibited and all existing plugins blocked. Overflow randomly blocks plugins that exceed specified limit.","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.post":{"properties":{"agents_count":{"$ref":"#/definitions/limit.post.agents_count"},"ai_calls":{"$ref":"#/definitions/limit.post.ai_calls"},"ai_credits":{"$ref":"#/definitions/limit.post.ai_credits"},"api_calls":{"$ref":"#/definitions/limit.post.api_calls"},"api_traffic":{"$ref":"#/definitions/limit.post.api_traffic"},"asset_storage":{"$ref":"#/definitions/limit.post.asset_storage"},"assets_count":{"$ref":"#/definitions/limit.post.assets_count"},"blocking_duration":{"$ref":"#/definitions/limit.blocking_duration"},"calcs_count":{"$ref":"#/definitions/limit.post.calcs_count"},"calcs_storage":{"$ref":"#/definitions/limit.post.calcs_storage"},"cdn_storage":{"$ref":"#/definitions/limit.post.cdn_storage"},"cdn_traffic":{"$ref":"#/definitions/limit.post.cdn_traffic"},"cdns_count":{"$ref":"#/definitions/limit.post.cdns_count"},"channel_connections":{"$ref":"#/definitions/limit.post.channel_connections"},"channel_messages":{"$ref":"#/definitions/limit.post.channel_messages"},"channel_storage":{"$ref":"#/definitions/limit.post.channel_storage"},"channel_traffic":{"$ref":"#/definitions/limit.post.channel_traffic"},"channel_udp_packets":{"$ref":"#/definitions/limit.post.channel_udp_packets"},"channels_count":{"$ref":"#/definitions/limit.post.channels_count"},"connectors_count":{"$ref":"#/definitions/limit.post.connectors_count"},"container_storage":{"$ref":"#/definitions/limit.post.container_storage"},"containers_count":{"$ref":"#/definitions/limit.post.containers_count"},"description":{"$ref":"#/definitions/limit.description"},"device_media_storage":{"$ref":"#/definitions/limit.post.device_media_storage"},"device_media_traffic":{"$ref":"#/definitions/limit.post.device_media_traffic"},"device_storage":{"$ref":"#/definitions/limit.post.device_storage"},"devices_count":{"$ref":"#/definitions/limit.post.devices_count"},"geofences_count":{"$ref":"#/definitions/limit.post.geofences_count"},"grants_count":{"$ref":"#/definitions/limit.post.grants_count"},"groups_count":{"$ref":"#/definitions/limit.post.groups_count"},"identity_providers_count":{"$ref":"#/definitions/limit.post.identity_providers_count"},"limits_count":{"$ref":"#/definitions/limit.post.limits_count"},"metadata":{"$ref":"#/definitions/metadata"},"modems_count":{"$ref":"#/definitions/limit.post.modems_count"},"mqtt_messages":{"$ref":"#/definitions/limit.post.mqtt_messages"},"mqtt_retained_storage":{"$ref":"#/definitions/limit.post.mqtt_retained_storage"},"mqtt_session_storage":{"$ref":"#/definitions/limit.post.mqtt_session_storage"},"mqtt_sessions":{"$ref":"#/definitions/limit.post.mqtt_sessions"},"mqtt_subscriptions":{"$ref":"#/definitions/limit.post.mqtt_subscriptions"},"name":{"$ref":"#/definitions/limit.name"},"plugin_buffered_messages":{"$ref":"#/definitions/limit.plugin_buffered_messages"},"plugin_traffic":{"$ref":"#/definitions/limit.post.plugin_traffic"},"plugins_count":{"$ref":"#/definitions/limit.post.plugins_count"},"realm_users_count":{"$ref":"#/definitions/limit.post.realm_users_count"},"realms_count":{"$ref":"#/definitions/limit.post.realms_count"},"sms_count":{"$ref":"#/definitions/limit.post.sms_count"},"stream_storage":{"$ref":"#/definitions/limit.post.stream_storage"},"stream_traffic":{"$ref":"#/definitions/limit.post.stream_traffic"},"streams_count":{"$ref":"#/definitions/limit.post.streams_count"},"subaccounts_count":{"$ref":"#/definitions/limit.post.subaccounts_count"},"tokens_count":{"$ref":"#/definitions/limit.post.tokens_count"},"webhook_storage":{"$ref":"#/definitions/limit.post.webhook_storage"},"webhook_traffic":{"$ref":"#/definitions/limit.post.webhook_traffic"},"webhooks_count":{"$ref":"#/definitions/limit.post.webhooks_count"}},"type":"object","x-view-order":["name","description","blocking_duration","api_calls","api_traffic","channels_count","channel_messages","channel_storage","channel_traffic","channel_connections","channel_udp_packets","containers_count","container_storage","cdns_count","cdn_storage","cdn_traffic","devices_count","device_storage","device_media_traffic","device_media_storage","streams_count","stream_storage","stream_traffic","modems_count","mqtt_sessions","mqtt_messages","mqtt_session_storage","mqtt_retained_storage","mqtt_subscriptions","sms_count","ai_credits","ai_calls","agents_count","connectors_count","tokens_count","subaccounts_count","limits_count","realms_count","calcs_count","calcs_storage","plugins_count","plugin_traffic","plugin_buffered_messages","groups_count","webhooks_count","webhook_storage","webhook_traffic","grants_count","identity_providers_count","geofences_count","assets_count","asset_storage","metadata"]},"limit.post.agents_count":{"default":-1,"description":"AI agents limit. -1 not set, i.e. limited by owner, 0 creation is prohibited","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.post.ai_calls":{"default":-1,"description":"Maximum AI calls per minute limit. -1 not set, i.e. limited by owner, 0 calls is not allowed","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.post.ai_credits":{"default":-1,"description":"Maximum credits per month limit. -1 not set, i.e. limited by owner, 0 credits is not allowed","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.post.api_calls":{"default":-1,"description":"Quantity of REST API calls limit, per minute. -1 not set, i.e. limited by owner. Overflow blocks the most consuming token and/or webhook from platform access for blocking_duration seconds (60 by default)","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.post.api_traffic":{"default":-1,"description":"REST/MQTT traffic limit, per minute. -1 not set, i.e. limited by owner, 0 deny platform access. Overflow blocks the most consuming token and/or webhook from platform access for blocking_duration seconds (60 by default)","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.post.asset_storage":{"default":-1,"description":"asset capacity limit, KB. -1 not set, i.e. limited by owner. Overflow blocks asset from receiving new data and allow only read/delete operations.","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.post.assets_count":{"default":-1,"description":"Maximum assets user can create. -1 not set, i.e. limited by owner, 0 assets creation is prohibited and all existing assets blocked. Overflow randomly blocks assets that exceed specified limit.","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.post.calcs_count":{"default":-1,"description":"Maximum calculators user can create. -1 not set, i.e. limited by owner, 0 calculators creation is prohibited and all existing calculators blocked. Overflow randomly blocks calculators that exceed specified limit.","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.post.calcs_storage":{"default":-1,"description":"Maximum storage to be used to store intervals by device assigned to calculator, in KB. -1 not set, i.e. limited by owner. Exceeding this amount blocks assigned device from analytics calculations.\nTo activate auto-cleanup of this buffer decrease intervals_ttl calculator property or activate intervals_rotation for automatic intervls rotation by size.\n","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.post.cdn_storage":{"default":-1,"description":"CDN capacity limit, KB. -1 not set, i.e. limited by owner. Overflow blocks CDN from receiving new data and allow only read/delete operations.","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.post.cdn_traffic":{"default":-1,"description":"CDN files outgoing traffic limit, per minute. -1 not set, i.e. limited by owner. Overflow blocks CDN for 'blocking_duration' seconds","minimum":-1,"type":"integer"},"limit.post.cdns_count":{"default":-1,"description":"storage/cdns limit. -1 not set, i.e. limited by owner, 0 creation is prohibited, existing items blocked.","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.post.channel_connections":{"default":-1,"description":"Maximum simultaneous connections per minute that can be handled by the channel. -1 not set, i.e. limited by owner. Exceeding this limit stops the channel from accepting new connections for blocking_duration seconds (60 by default)","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.post.channel_messages":{"default":-1,"description":"Maximum messages per minute that can be handled by the channel. -1 not set, i.e. limited by owner. Exceeding this intensivity blocks the most consuming devices on the channel, and the channel itself if that is not enough, for blocking_duration seconds (60 by default)","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.post.channel_storage":{"default":-1,"description":"Maximum storage to be used by channel messages buffer, in KB. -1 not set, i.e. limited by owner. Exceeding this amount blocks channel until messages are automatically deleted by ttl or read/deleted by user.\nTo activate auto-cleanup of this buffer decrease messages_ttl channel property.\n","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.post.channel_traffic":{"default":-1,"description":"Maximum traffic per minute that can be handled by the channel (in bytes). -1 not set, i.e. limited by owner. Exceeding traffic limit blocks the most consuming devices on the channel, and the channel itself if that is not enough, for blocking_duration seconds (60 by default)","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.post.channel_udp_packets":{"default":-1,"description":"Maximum UDP packets per minute that can be handled by the channel. -1 not set, i.e. limited by owner. Exceeding this intensivity blocks channel for blocking_duration seconds (60 by default)","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.post.channels_count":{"default":-1,"description":"Maximum channels user can create. -1 not set, i.e. limited by owner, 0 channels creation is prohibited and all existing channels blocked. Overflow randomly blocks channels that exceed specified limit.","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.post.connectors_count":{"default":-1,"description":"AI connectors limit. -1 not set, i.e. limited by owner, 0 creation is prohibited","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.post.container_storage":{"default":-1,"description":"container capacity limit, KB. -1 not set, i.e. limited by owner. Overflow blocks container from receiving new data and allow only read/delete operations.","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.post.containers_count":{"default":-1,"description":"Maximum containers user can create. -1 not set, i.e. limited by owner, 0 containers creation is prohibited and all existing containers blocked. Overflow randomly blocks containers that exceed specified limit.","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.post.device_media_storage":{"default":-1,"description":"Maximum storage to be used by device media files, in KB. -1 not set, i.e. limited by owner. Exceeding this amount device from storing new media files and prevent live streaming functionality.\n\nTo activate auto-cleanup of this buffer decrease media_ttl or set corresponding media_rotate properties in the device.\n","minimum":-1,"type":"integer"},"limit.post.device_media_traffic":{"default":-1,"description":"Media data outgoing traffic limit, per minute, in bytes. -1 not set, i.e. limited by owner. Overflow blocks access to device media traffic for 'blocking_duration' seconds (60 by default)","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.post.device_storage":{"default":-1,"description":"Maximum storage to be used by device messages, in KB. -1 not set, i.e. limited by owner. Exceeding this amount device from storing new messages.\n\nTo activate auto-cleanup of this buffer decrease messages_ttl or set corresponding messages_rotate properties in the device.\n","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.post.devices_count":{"default":-1,"description":"Maximum devices user can create. -1 not set, i.e. limited by owner, 0 devices creation is prohibited and all existing devices blocked. Overflow randomly blocks devices that exceed specified limit.","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.post.geofences_count":{"default":-1,"description":"gw/geofences limit. -1 not set, i.e. limited by owner, 0 creation is prohibited. Overflow denies item creation","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.post.grants_count":{"default":-1,"description":"gw/grants limit. -1 not set, i.e. limited by owner, 0 creation is prohibited. Overflow denies item creation","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.post.groups_count":{"default":-1,"description":"gw/groups limit. -1 not set, i.e. limited by owner, 0 creation is prohibited","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.post.identity_providers_count":{"default":-1,"description":"platform/identity-providers limit. -1 not set, i.e. limited by owner, 0 creation is prohibited. Overflow denies item creation\n","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.post.limits_count":{"default":-1,"description":"Maximum subaccounts limits user can define. -1 not set, i.e. limited by owner, 0 limits creation is prohibited and all existing limits blocked. Overflow randomly blocks limits that exceed specified limit.","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.post.modems_count":{"default":-1,"description":"gw/modems limit. -1 not set, i.e. limited by owner, 0 creation is prohibited, existing items blocked","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.post.mqtt_messages":{"default":-1,"description":"MQTT messages intensivity limit, per minute. -1 not set, i.e. limited by owner. Overflow denies platform access for 60 seconds","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.post.mqtt_retained_storage":{"default":-1,"description":"Retain messges storage capacity, KB. -1 not set, i.e. limited by owner. Overflow rejects new retain messages","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.post.mqtt_session_storage":{"default":-1,"description":"Disconnected session storage capacity, KB. -1 not set, i.e. limited by owner. Overflow removes session","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.post.mqtt_sessions":{"default":-1,"description":"MQTT sessions limit. -1 not set, i.e. limited by owner, 0 rejects new MQTT connections","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.post.mqtt_subscriptions":{"default":-1,"description":"Topic subscriptions per session limit. -1 not set, i.e. limited by owner. Overflow rejects new subscriptions","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.post.plugin_buffered_messages":{"default":-1,"description":"queued messages count in internal plugin buffer. -1 not set, i.e. limited by owner. Overflow blocks plugin for 60 seconds","minimum":-1,"type":"integer"},"limit.post.plugin_traffic":{"default":-1,"description":"Maximum traffic per minute that can be handled by the plugin (in bytes). -1 not set, i.e. limited by owner. Exceeding traffic limit blocks plugin for blocking_duration seconds (60 by default)","minimum":-1,"type":"integer"},"limit.post.plugins_count":{"default":-1,"description":"Maximum plugins user can create. -1 not set, i.e. limited by owner, 0 plugins creation is prohibited and all existing plugins blocked. Overflow randomly blocks plugins that exceed specified limit.","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.post.realm_users_count":{"default":-1,"description":"platform/realms/users limit. -1 not set, i.e. limited by owner, 0 creation is prohibited","minimum":-1,"type":"integer"},"limit.post.realms_count":{"default":-1,"description":"Maximum realms user can create. -1 not set, i.e. limited by owner, 0 relams creation is prohibited and all existing realms blocked. Overflow randomly blocks realms that exceed specified limit.","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.post.sms_count":{"default":-1,"description":"Maximum SMS per month limit. -1 not set, i.e. limited by owner, 0 SMS is not allowed","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.post.stream_storage":{"default":-1,"description":"Maximum storage to be used by stream messages buffer, in KB. -1 not set, i.e. limited by owner. Exceeding this amount blocks stream until pending messages are automatically deleted by ttl or successfully streamed to the target.\nTo activate auto-cleanup of this buffer decrease queue_ttl stream property.\n","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.post.stream_traffic":{"default":-1,"description":"Maximum traffic per minute that can be handled by the stream (in bytes). -1 not set, i.e. limited by owner. Exceeding traffic limit blocks stream for blocking_duration seconds (60 by default)","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.post.streams_count":{"default":-1,"description":"Maximum streams user can create. -1 not set, i.e. limited by owner, 0 streams creation is prohibited and all existing streams blocked. Overflow randomly blocks streams that exceed specified limit.","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.post.subaccounts_count":{"default":-1,"description":"Maximum subaccounts user can create. -1 not set, i.e. limited by owner, 0 subaccounts creation is prohibited and all existing subaccounts blocked. Overflow randomly blocks subaccounts that exceed specified limit.","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.post.tokens_count":{"default":-1,"description":"platform/tokens limit. -1 not set, i.e. limited by owner, 0 creation is prohibited","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.post.webhook_storage":{"default":-1,"description":"webhook's queue size","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.post.webhook_traffic":{"default":-1,"description":"webhook incoming/outgoing traffic limit, per minute. -1 not set, i.e. limited by owner. Overflow blocks the webhook for 60 seconds","minimum":-1,"type":"integer"},"limit.post.webhooks_count":{"default":-1,"description":"Maximum webhooks user can create. -1 not set, i.e. limited by owner, 0 webhooks creation is prohibited and all existing webhooks blocked. Overflow randomly blocks webhooks that exceed specified limit.","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.put":{"properties":{"agents_count":{"$ref":"#/definitions/limit.agents_count"},"ai_calls":{"$ref":"#/definitions/limit.ai_calls"},"ai_credits":{"$ref":"#/definitions/limit.ai_credits"},"api_calls":{"$ref":"#/definitions/limit.api_calls"},"api_traffic":{"$ref":"#/definitions/limit.api_traffic"},"asset_storage":{"$ref":"#/definitions/limit.asset_storage"},"assets_count":{"$ref":"#/definitions/limit.assets_count"},"blocking_duration":{"$ref":"#/definitions/limit.blocking_duration"},"calcs_count":{"$ref":"#/definitions/limit.calcs_count"},"calcs_storage":{"$ref":"#/definitions/limit.calcs_storage"},"cdn_storage":{"$ref":"#/definitions/limit.cdn_storage"},"cdn_traffic":{"$ref":"#/definitions/limit.cdn_traffic"},"cdns_count":{"$ref":"#/definitions/limit.cdns_count"},"channel_connections":{"$ref":"#/definitions/limit.channel_connections"},"channel_messages":{"$ref":"#/definitions/limit.channel_messages"},"channel_storage":{"$ref":"#/definitions/limit.channel_storage"},"channel_traffic":{"$ref":"#/definitions/limit.channel_traffic"},"channel_udp_packets":{"$ref":"#/definitions/limit.channel_udp_packets"},"channels_count":{"$ref":"#/definitions/limit.channels_count"},"connectors_count":{"$ref":"#/definitions/limit.connectors_count"},"container_storage":{"$ref":"#/definitions/limit.container_storage"},"containers_count":{"$ref":"#/definitions/limit.containers_count"},"description":{"$ref":"#/definitions/limit.description"},"device_media_storage":{"$ref":"#/definitions/limit.device_media_storage"},"device_media_traffic":{"$ref":"#/definitions/limit.device_media_traffic"},"device_storage":{"$ref":"#/definitions/limit.device_storage"},"devices_count":{"$ref":"#/definitions/limit.devices_count"},"geofences_count":{"$ref":"#/definitions/limit.geofences_count"},"grants_count":{"$ref":"#/definitions/limit.grants_count"},"groups_count":{"$ref":"#/definitions/limit.groups_count"},"identity_providers_count":{"$ref":"#/definitions/limit.identity_providers_count"},"limits_count":{"$ref":"#/definitions/limit.limits_count"},"metadata":{"$ref":"#/definitions/metadata"},"modems_count":{"$ref":"#/definitions/limit.modems_count"},"mqtt_messages":{"$ref":"#/definitions/limit.mqtt_messages"},"mqtt_retained_storage":{"$ref":"#/definitions/limit.mqtt_retained_storage"},"mqtt_session_storage":{"$ref":"#/definitions/limit.mqtt_session_storage"},"mqtt_sessions":{"$ref":"#/definitions/limit.mqtt_sessions"},"mqtt_subscriptions":{"$ref":"#/definitions/limit.mqtt_subscriptions"},"name":{"$ref":"#/definitions/limit.name"},"plugin_buffered_messages":{"$ref":"#/definitions/limit.plugin_buffered_messages"},"plugin_traffic":{"$ref":"#/definitions/limit.plugin_traffic"},"plugins_count":{"$ref":"#/definitions/limit.plugins_count"},"realms_count":{"$ref":"#/definitions/limit.realms_count"},"sms_count":{"$ref":"#/definitions/limit.sms_count"},"stream_storage":{"$ref":"#/definitions/limit.stream_storage"},"stream_traffic":{"$ref":"#/definitions/limit.stream_traffic"},"streams_count":{"$ref":"#/definitions/limit.streams_count"},"subaccounts_count":{"$ref":"#/definitions/limit.subaccounts_count"},"tokens_count":{"$ref":"#/definitions/limit.tokens_count"},"webhook_storage":{"$ref":"#/definitions/limit.webhook_storage"},"webhook_traffic":{"$ref":"#/definitions/limit.webhook_traffic"},"webhooks_count":{"$ref":"#/definitions/limit.webhooks_count"}},"type":"object","x-view-order":["name","description","blocking_duration","api_calls","api_traffic","channels_count","channel_messages","channel_storage","channel_traffic","channel_connections","channel_udp_packets","containers_count","container_storage","cdns_count","cdn_storage","cdn_traffic","devices_count","device_storage","device_media_traffic","device_media_storage","calcs_count","calcs_storage","plugins_count","plugin_traffic","plugin_buffered_messages","streams_count","stream_storage","stream_traffic","modems_count","mqtt_sessions","mqtt_messages","mqtt_session_storage","mqtt_retained_storage","mqtt_subscriptions","sms_count","ai_credits","ai_calls","agents_count","connectors_count","tokens_count","subaccounts_count","limits_count","realms_count","groups_count","webhooks_count","webhook_storage","webhook_traffic","grants_count","identity_providers_count","geofences_count","assets_count","asset_storage","metadata"]},"limit.realm_users_count":{"description":"platform/realms/users limit. -1 not set, i.e. limited by owner, 0 creation is prohibited","minimum":-1,"type":"integer"},"limit.realms_count":{"description":"Maximum realms user can create. -1 not set, i.e. limited by owner, 0 relams creation is prohibited and all existing realms blocked. Overflow randomly blocks realms that exceed specified limit.","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.sms_count":{"description":"Maximum SMS per month limit. -1 not set, i.e. limited by owner, 0 SMS is not allowed","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.stream_storage":{"description":"Maximum storage to be used by stream messages buffer, in KB. -1 not set, i.e. limited by owner. Exceeding this amount blocks stream until pending messages are automatically deleted by ttl or successfully streamed to the target.\nTo activate auto-cleanup of this buffer decrease queue_ttl stream property.\n","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.stream_traffic":{"description":"Maximum traffic per minute that can be handled by the stream (in bytes). -1 not set, i.e. limited by owner. Exceeding traffic limit blocks stream for blocking_duration seconds (60 by default)","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.streams_count":{"description":"Maximum streams user can create. -1 not set, i.e. limited by owner, 0 streams creation is prohibited and all existing streams blocked. Overflow randomly blocks streams that exceed specified limit.","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.subaccounts_count":{"description":"Maximum subaccounts user can create. -1 not set, i.e. limited by owner, 0 subaccounts creation is prohibited and all existing subaccounts blocked. Overflow randomly blocks subaccounts that exceed specified limit.","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.tokens_count":{"description":"platform/tokens limit. -1 not set, i.e. limited by owner, 0 creation is prohibited","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.webhook_storage":{"description":"webhook's queue size","maximum":549755813887,"minimum":-1,"type":"integer"},"limit.webhook_traffic":{"description":"webhook incoming/outgoing traffic limit, per minute. -1 not set, i.e. limited by owner. Overflow blocks the webhook for 60 seconds","minimum":-1,"type":"integer"},"limit.webhooks_count":{"description":"Maximum webhooks user can create. -1 not set, i.e. limited by owner, 0 webhooks creation is prohibited and all existing webhooks blocked. Overflow randomly blocks webhooks that exceed specified limit.","maximum":549755813887,"minimum":-1,"type":"integer"},"limits.result":{"properties":{"result":{"items":{"$ref":"#/definitions/limit"},"type":"array"}},"type":"object"},"logmessage":{"additionalProperties":true,"description":"Log record. It contains fixed fields described below and additional fields based on log record type.","properties":{"event_code":{"description":"Log record code.","type":"integer"},"event_origin":{"description":"Log record origin name.","type":"string"},"event_text":{"description":"Log record text.","type":"string"},"timestamp":{"description":"Log record UNIX timestamp.","type":"number","x-view-type":"datetime"}},"type":"object"},"logs.get":{"description":"filter returned log records","properties":{"count":{"default":10000000,"description":"limit number of logs to be returned","format":"uint32","maximum":10000000,"minimum":1,"type":"integer"},"fields":{"description":"CSV-formatted list of parameters to be returned in response message list. If message does not contain any of the specified fields, it will be skipped.\n","maxLength":4096,"type":"string"},"filter":{"description":"Optional filter string to return only logs conforming to specific filtering rules. You can use flespi [expressions](https://flespi.com/kb/expressions) and reference log fields inside them.","maxLength":1024,"type":"string"},"from":{"description":"start momemnt's UNIX timestamp to limit log sample from beginning. use 0 to ignore left bound","minimum":0,"type":"number","x-view-type":"datetime"},"reverse":{"default":false,"description":"time sorting parameter (true/false), use false to list logs from end to beginning","type":"boolean"},"to":{"description":"end moment's UNIX timestamp to limit log sample to end. use 0 to ignore right bound","minimum":0,"type":"number","x-view-type":"datetime"}},"type":"object"},"metadata":{"additionalProperties":true,"description":"Set of name/value pairs. Can be used for storing additional information about the item.","format":"metadata","type":"object"},"metadata.patch":{"additionalProperties":true,"description":"Set of name/value pairs. Can be used for storing additional information about the item.","format":"metadata","type":"object"},"oauth":{"properties":{"created":{"$ref":"#/definitions/customer.created"},"id":{"description":"OAuth profile unique ID","type":"integer"},"key":{"$ref":"#/definitions/oauth.key"},"provider":{"$ref":"#/definitions/oauth.provider"}},"type":"object"},"oauth.key":{"description":"profile unique text key","type":"string"},"oauth.provider":{"description":"provider where given profile is registered","type":"string"},"oauth.result":{"properties":{"result":{"description":"OAuth profiles with fields included according to request's **fields** parameter.","items":{"$ref":"#/definitions/oauth"},"type":"array"}},"type":"object"},"realm":{"description":"realm information","properties":{"blocked":{"$ref":"#/definitions/item.blocked"},"cid":{"$ref":"#/definitions/realm.cid"},"created":{"$ref":"#/definitions/customer.created"},"enabled":{"$ref":"#/definitions/realm.enabled"},"id":{"$ref":"#/definitions/realm.id"},"metadata":{"$ref":"#/definitions/metadata"},"name":{"$ref":"#/definitions/realm.name"},"oauth_server":{"$ref":"#/definitions/realm.oauth_server"},"public_id":{"$ref":"#/definitions/realm.public_id"},"public_info":{"$ref":"#/definitions/realm.public_info"},"role":{"$ref":"#/definitions/realm.role"},"roles_count":{"description":"Number of roles defined within the realm.","type":"integer"},"users_count":{"description":"Number of users defined within the realm.","type":"integer"}},"type":"object"},"realm-identity-provider":{"description":"identity provider binded to the realm information","properties":{"allow_registration":{"$ref":"#/definitions/realm-identity-provider.allow_registration"},"blocked":{"$ref":"#/definitions/item.blocked"},"enabled":{"$ref":"#/definitions/realm-identity-provider.enabled"},"identity_provider_id":{"$ref":"#/definitions/identity-provider.id"},"name":{"$ref":"#/definitions/identity-provider.name"},"new_user_name_source":{"$ref":"#/definitions/realm-identity-provider.new_user_name_source"},"public_info":{"$ref":"#/definitions/identity-provider.public_info"},"realm_id":{"$ref":"#/definitions/realm.id"},"type":{"$ref":"#/definitions/identity-provider.type.result"}},"type":"object"},"realm-identity-provider.allow_registration":{"description":"Allow new users registration via this identity provider\n","title":"Allow registration","type":"boolean"},"realm-identity-provider.enabled":{"description":"Enable bound Identity Provider in this realm\n","title":"Enable","type":"boolean"},"realm-identity-provider.new_user_name_source":{"anyOf":[{"$ref":"#/definitions/realm-identity-provider.new_user_name_source.email"},{"$ref":"#/definitions/realm-identity-provider.new_user_name_source.preferred_username"},{"$ref":"#/definitions/realm-identity-provider.new_user_name_source.nickname"},{"$ref":"#/definitions/realm-identity-provider.new_user_name_source.custom"}],"default":"email","description":"Source of the user name for new users registered via this identity provider.\nUse `email` to use the verified e-mail address.\nAny other value is treated as an exact user info field name, for example `preferred_username` or `nickname`.\nMake sure the identity provider configuration requests scopes that provide the selected field.\n","title":"New user name source"},"realm-identity-provider.new_user_name_source.custom":{"maxLength":64,"minLength":1,"title":"Custom","type":"string"},"realm-identity-provider.new_user_name_source.email":{"const":"email","default":"email","readOnly":true,"title":"Email","type":"string"},"realm-identity-provider.new_user_name_source.nickname":{"const":"nickname","default":"nickname","readOnly":true,"title":"Nickname","type":"string"},"realm-identity-provider.new_user_name_source.preferred_username":{"const":"preferred_username","default":"preferred_username","readOnly":true,"title":"Preferred username","type":"string"},"realm-identity-provider.parameters":{"properties":{"allow_registration":{"$ref":"#/definitions/realm-identity-provider.allow_registration"},"enabled":{"$ref":"#/definitions/realm-identity-provider.enabled"},"new_user_name_source":{"$ref":"#/definitions/realm-identity-provider.new_user_name_source"}},"title":"Identity Provider","type":"object","x-view-order":["enabled","allow_registration","new_user_name_source"]},"realm-identity-providers.result":{"properties":{"result":{"description":"Identity provider data","items":{"$ref":"#/definitions/realm-identity-provider"},"type":"array"}},"type":"object"},"realm-role":{"properties":{"created":{"description":"Role creation UNIX timestamp.","type":"number","x-view-type":"datetime"},"home":{"$ref":"#/definitions/realm-role.home"},"id":{"$ref":"#/definitions/realm-role.id"},"metadata":{"$ref":"#/definitions/metadata"},"name":{"$ref":"#/definitions/realm-role.name"},"parent_id":{"$ref":"#/definitions/realm-role.parent_id"},"realm_id":{"$ref":"#/definitions/realm.id"},"token_params":{"$ref":"#/definitions/realm-role.token_params"},"type":{"$ref":"#/definitions/realm-role.type"}},"type":"object"},"realm-role.home":{"anyOf":[{"$ref":"#/definitions/realm-role.property.inherit"},{"$ref":"#/definitions/realm-user.home.current"},{"$ref":"#/definitions/realm-user.home.selected"},{"$ref":"#/definitions/realm-user.home.auto_created"}],"description":"Token location policy","title":"Token home"},"realm-role.home.post":{"anyOf":[{"$ref":"#/definitions/realm-role.property.inherit"},{"$ref":"#/definitions/realm-user.home.current"},{"$ref":"#/definitions/realm-user.home.selected"},{"$ref":"#/definitions/realm-user.home.auto_created"}],"default":null,"description":"Token location policy","title":"Token home"},"realm-role.id":{"description":"Role unique numeric ID","title":"ID","type":"integer"},"realm-role.inherit.custom.base":{"title":"Role based on the another role","type":"object","x-view-order":["name","parent_id","home","token_params","metadata"]},"realm-role.inherit.custom.post":{"properties":{"home":{"$ref":"#/definitions/realm-role.home.post"},"metadata":{"$ref":"#/definitions/metadata"},"name":{"$ref":"#/definitions/realm-role.name"},"parent_id":{"$ref":"#/definitions/realm-role.parent_id"},"token_params":{"$ref":"#/definitions/realm-role.token_params.post"},"type":{"$ref":"#/definitions/realm-role.type.inherit.custom"}},"required":["type","name","parent_id"],"title":"Role based on the another role","type":"object","x-view-order":["name","parent_id","home","token_params","metadata"]},"realm-role.inherit.custom.put":{"properties":{"home":{"$ref":"#/definitions/realm-role.home"},"metadata":{"$ref":"#/definitions/metadata"},"name":{"$ref":"#/definitions/realm-role.name"},"parent_id":{"$ref":"#/definitions/realm-role.parent_id.RO"},"token_params":{"$ref":"#/definitions/realm-role.token_params"},"type":{"$ref":"#/definitions/realm-role.type.inherit.custom"}},"required":["type"],"title":"Role based on the another role","type":"object","x-view-order":["name","parent_id","home","token_params","metadata"]},"realm-role.inherit.default.base":{"title":"Role based on the realm default role","type":"object","x-view-order":["name","home","token_params","metadata"]},"realm-role.inherit.default.post":{"properties":{"home":{"$ref":"#/definitions/realm-role.home.post"},"metadata":{"$ref":"#/definitions/metadata"},"name":{"$ref":"#/definitions/realm-role.name"},"token_params":{"$ref":"#/definitions/realm-role.token_params.post"},"type":{"$ref":"#/definitions/realm-role.type.inherit.default"}},"required":["type","name"],"title":"Role based on the realm default role","type":"object","x-view-order":["name","home","token_params","metadata"]},"realm-role.inherit.default.put":{"properties":{"home":{"$ref":"#/definitions/realm-role.home"},"metadata":{"$ref":"#/definitions/metadata"},"name":{"$ref":"#/definitions/realm-role.name"},"token_params":{"$ref":"#/definitions/realm-role.token_params"},"type":{"$ref":"#/definitions/realm-role.type.inherit.default"}},"required":["type"],"title":"Role based on the realm default role","type":"object","x-view-order":["name","home","token_params","metadata"]},"realm-role.name":{"description":"Unique (in the specific realm) role name","maxLength":255,"minLength":1,"title":"Name","type":"string"},"realm-role.parent_id":{"description":"Parent role ID for the inheritance","minimum":1,"title":"Parent role ID","type":"integer","x-view-selector":"realm-roles"},"realm-role.parent_id.RO":{"description":"Parent role ID for the inheritance","minimum":1,"readOnly":true,"title":"Parent role ID","type":"integer","x-view-selector":"realm-roles"},"realm-role.post":{"anyOf":[{"$ref":"#/definitions/realm-role.inherit.default.post"},{"$ref":"#/definitions/realm-role.inherit.custom.post"}],"x-key-property":"type"},"realm-role.properties.base.post":{"home":{"$ref":"#/definitions/realm-role.home.post"},"metadata":{"$ref":"#/definitions/metadata"},"name":{"$ref":"#/definitions/realm-role.name"},"token_params":{"$ref":"#/definitions/realm-role.token_params.post"}},"realm-role.properties.base.put":{"home":{"$ref":"#/definitions/realm-role.home"},"metadata":{"$ref":"#/definitions/metadata"},"name":{"$ref":"#/definitions/realm-role.name"},"token_params":{"$ref":"#/definitions/realm-role.token_params"}},"realm-role.property.inherit":{"title":"Inherit","type":"null","x-view-hidden":true},"realm-role.put":{"anyOf":[{"$ref":"#/definitions/realm-role.inherit.default.put"},{"$ref":"#/definitions/realm-role.inherit.custom.put"}],"x-key-property":"type"},"realm-role.token_params":{"anyOf":[{"$ref":"#/definitions/realm-role.property.inherit"},{"$ref":"#/definitions/realm-role.token_params.custom"}],"description":"Token parameters for a user with this role","title":"Token parameters"},"realm-role.token_params.custom":{"description":"Custom token parameters for a user","properties":{"access":{"$ref":"#/definitions/realm.token.access"},"ips":{"$ref":"#/definitions/token.ips"},"origins":{"$ref":"#/definitions/token.origins"},"ttl":{"$ref":"#/definitions/realm.token.ttl"}},"required":["ttl","access"],"title":"Custom","type":"object","x-view-order":["ttl","access","origins","ips"]},"realm-role.token_params.custom.post":{"description":"Custom token parameters for a user","properties":{"access":{"$ref":"#/definitions/realm.token.access"},"ips":{"$ref":"#/definitions/token.ips"},"origins":{"$ref":"#/definitions/token.origins.post"},"ttl":{"$ref":"#/definitions/realm.token.ttl.post"}},"required":["access"],"title":"Custom","type":"object","x-view-order":["ttl","access","origins","ips"]},"realm-role.token_params.info":{"description":"Token parameters for a user with this role","title":"Token parameters"},"realm-role.token_params.post":{"anyOf":[{"$ref":"#/definitions/realm-role.property.inherit"},{"$ref":"#/definitions/realm-role.token_params.custom.post"}],"default":null,"description":"Token parameters for a user with this role","title":"Token parameters"},"realm-role.type":{"enum":["inherit.default","inherit.custom"],"readOnly":true,"title":"Role type","type":"string"},"realm-role.type.inherit.custom":{"const":"inherit.custom","default":"inherit.custom","readOnly":true,"type":"string"},"realm-role.type.inherit.default":{"const":"inherit.default","default":"inherit.default","readOnly":true,"type":"string"},"realm-roles.post":{"items":{"$ref":"#/definitions/realm-role.post"},"maxItems":32,"minItems":1,"type":"array"},"realm-roles.result":{"properties":{"result":{"description":"Role(s) information array\n","items":{"$ref":"#/definitions/realm-role"},"type":"array"}},"type":"object"},"realm-user":{"description":"realm user information","properties":{"created":{"$ref":"#/definitions/realm-user.created"},"enabled":{"$ref":"#/definitions/realm-user.enabled"},"has_password":{"description":"True when the user has a password set.","type":"boolean"},"id":{"$ref":"#/definitions/realm-user.id"},"metadata":{"$ref":"#/definitions/metadata"},"name":{"$ref":"#/definitions/realm-user.name"},"realm_id":{"$ref":"#/definitions/realm.id"},"role":{"$ref":"#/definitions/realm-user.role"},"subaccount_id":{"description":"ID of the subaccount associated with this realm user, when the user is bound to one.","type":"integer"},"token":{"$ref":"#/definitions/token.key"},"token_id":{"$ref":"#/definitions/token.id"}},"type":"object"},"realm-user.created":{"description":"User creation time\n","title":"Creation time","type":"integer"},"realm-user.enabled":{"description":"False when the user login is disabled.\n","title":"Enabled","type":"boolean"},"realm-user.enabled.post":{"default":true,"description":"False when the user login is disabled.\n","title":"Enabled","type":"boolean"},"realm-user.home":{"anyOf":[{"$ref":"#/definitions/realm-user.home.null"},{"$ref":"#/definitions/realm-user.home.current"},{"$ref":"#/definitions/realm-user.home.selected"},{"$ref":"#/definitions/realm-user.home.auto_created"}],"description":"Token location policy","title":"Token home"},"realm-user.home.auto_created":{"description":"User obtains its personal subaccount. User's token is stored in the user's subaccount\n","properties":{"limit_id":{"$ref":"#/definitions/realm.limit_id"},"subaccount_id":{"description":"Owner of the user's personal subaccount\n","minimum":1,"title":"Owner ID","type":"integer","x-view-selector":"subaccounts"},"type":{"const":2,"default":2,"readOnly":true,"type":"integer"}},"required":["type"],"title":"Automatically create subaccount for the user","type":"object","x-view-order":["subaccount_id","limit_id"]},"realm-user.home.current":{"description":"User token is created in the current account (realm owner)\n","properties":{"type":{"const":0,"default":0,"readOnly":true,"type":"integer"}},"required":["type"],"title":"User token in the current account","type":"object","x-view-hidden":true},"realm-user.home.info":{"description":"Token location policy","title":"Token home"},"realm-user.home.null":{"title":"Default","type":"null","x-view-hidden":true},"realm-user.home.post":{"anyOf":[{"$ref":"#/definitions/realm-user.home.null"},{"$ref":"#/definitions/realm-user.home.current"},{"$ref":"#/definitions/realm-user.home.selected"},{"$ref":"#/definitions/realm-user.home.auto_created"}],"description":"Token location policy","title":"Token home"},"realm-user.home.selected":{"description":"User token is created in the selected subaccount\n","properties":{"subaccount_id":{"description":"Subaccount ID for user token\n","minimum":1,"title":"Subaccount ID","type":"integer","x-view-selector":"subaccounts"},"type":{"const":1,"default":1,"readOnly":true,"type":"integer"}},"required":["type","subaccount_id"],"title":"User token in the selected subaccount","type":"object","x-view-order":["subaccount_id"]},"realm-user.id":{"description":"User unique numeric ID\n","title":"ID","type":"integer"},"realm-user.name":{"description":"Unique (in the specific realm) user name.\n","maxLength":255,"minLength":1,"title":"Name","type":"string"},"realm-user.password":{"description":"User's password used for authentication\n","maxLength":511,"minLength":16,"title":"Password","type":"string","x-view":{"hash":[{"minLength":8,"type":"sha512"},{"type":"text"}],"type":"password"},"x-view-hash":"sha512,text","x-view-type":"password"},"realm-user.post":{"anyOf":[{"properties":{"enabled":{"$ref":"#/definitions/realm-user.enabled.post"},"metadata":{"$ref":"#/definitions/metadata"},"name":{"$ref":"#/definitions/realm-user.name"},"password":{"$ref":"#/definitions/realm-user.password"},"registration":{"const":"immediate","default":"immediate","readOnly":true,"title":"Immediate registration","type":"string"},"role":{"$ref":"#/definitions/realm-user.role.post"}},"required":["registration","name","password"],"title":"immediate","type":"object","x-view-order":["id","name","enabled","password","role","metadata"]},{"properties":{"enabled":{"$ref":"#/definitions/realm-user.enabled.post"},"metadata":{"$ref":"#/definitions/metadata"},"name":{"$ref":"#/definitions/realm-user.name"},"registration":{"const":"confirmation","default":"confirmation","readOnly":true,"title":"Registration with confirmation","type":"string"},"role":{"$ref":"#/definitions/realm-user.role.post"}},"required":["registration","name"],"title":"confirmation","type":"object","x-view-order":["id","name","enabled","role","metadata"]}],"description":"Create a realm user using the role object.\nConfigure the user's role assignment, home, and token_params inside the `role` property.\n","x-key-property":"registration"},"realm-user.put":{"description":"Update a realm user using the role object.\nConfigure the user's role assignment, home, and token_params inside the `role` property.\n","properties":{"enabled":{"$ref":"#/definitions/realm-user.enabled"},"metadata":{"$ref":"#/definitions/metadata"},"name":{"$ref":"#/definitions/realm-user.name"},"password":{"$ref":"#/definitions/realm-user.password"},"role":{"$ref":"#/definitions/realm-user.role.put"}},"type":"object","x-view-order":["name","enabled","password","role","metadata"]},"realm-user.result":{"properties":{"result":{"description":"Users information array\n","items":{"$ref":"#/definitions/realm-user"},"type":"array"}},"type":"object"},"realm-user.role":{"properties":{"home":{"$ref":"#/definitions/realm-role.home"},"id":{"$ref":"#/definitions/realm-role.id"},"parent_id":{"$ref":"#/definitions/realm-role.parent_id"},"token_params":{"$ref":"#/definitions/realm-role.token_params"},"type":{"$ref":"#/definitions/realm-role.type"}},"type":"object"},"realm-user.role.inherit.custom.base":{"title":"Role based on the another role","type":"object","x-view-order":["parent_id","home","token_params"]},"realm-user.role.inherit.custom.post":{"properties":{"home":{"$ref":"#/definitions/realm-user.home.post"},"parent_id":{"$ref":"#/definitions/realm-role.parent_id"},"token_params":{"$ref":"#/definitions/realm-user.token_params.post"},"type":{"$ref":"#/definitions/realm-role.type.inherit.custom"}},"required":["type","parent_id"],"title":"Role based on the another role","type":"object","x-view-order":["parent_id","home","token_params"]},"realm-user.role.inherit.custom.put":{"properties":{"home":{"$ref":"#/definitions/realm-user.home"},"parent_id":{"$ref":"#/definitions/realm-role.parent_id.RO"},"token_params":{"$ref":"#/definitions/realm-user.token_params"},"type":{"$ref":"#/definitions/realm-role.type.inherit.custom"}},"required":["type"],"title":"Role based on the another role","type":"object","x-view-order":["parent_id","home","token_params"]},"realm-user.role.inherit.default.base":{"title":"Role based on the realm default role","type":"object","x-view-order":["home","token_params"]},"realm-user.role.inherit.default.post":{"properties":{"home":{"$ref":"#/definitions/realm-user.home.post"},"token_params":{"$ref":"#/definitions/realm-user.token_params.post"},"type":{"$ref":"#/definitions/realm-role.type.inherit.default"}},"required":["type"],"title":"Role based on the realm default role","type":"object","x-view-order":["home","token_params"]},"realm-user.role.inherit.default.put":{"properties":{"home":{"$ref":"#/definitions/realm-user.home"},"token_params":{"$ref":"#/definitions/realm-user.token_params"},"type":{"$ref":"#/definitions/realm-role.type.inherit.default"}},"required":["type"],"title":"Role based on the realm default role","type":"object","x-view-order":["home","token_params"]},"realm-user.role.post":{"anyOf":[{"$ref":"#/definitions/realm-user.role.inherit.default.post"},{"$ref":"#/definitions/realm-user.role.inherit.custom.post"}],"description":"User's role","title":"Role","x-key-property":"type"},"realm-user.role.properties.base.post":{"home":{"$ref":"#/definitions/realm-user.home.post"},"token_params":{"$ref":"#/definitions/realm-user.token_params.post"}},"realm-user.role.properties.base.put":{"home":{"$ref":"#/definitions/realm-user.home"},"token_params":{"$ref":"#/definitions/realm-user.token_params"}},"realm-user.role.put":{"anyOf":[{"$ref":"#/definitions/realm-user.role.inherit.default.put"},{"$ref":"#/definitions/realm-user.role.inherit.custom.put"}],"description":"User's role","title":"Role","x-key-property":"type"},"realm-user.token_params":{"anyOf":[{"$ref":"#/definitions/realm-user.token_params.null"},{"$ref":"#/definitions/realm-user.token_params.custom"}],"description":"User-specific token parameters (realm token parameters are used by default)","title":"Token parameters"},"realm-user.token_params.custom":{"description":"Custom token parameters for the user","properties":{"access":{"$ref":"#/definitions/realm.token.access"},"ips":{"$ref":"#/definitions/token.ips"},"origins":{"$ref":"#/definitions/token.origins"},"ttl":{"$ref":"#/definitions/realm.token.ttl"}},"required":["ttl","access"],"title":"Custom","type":"object","x-view-order":["ttl","access","origins","ips"]},"realm-user.token_params.custom.post":{"description":"Custom token parameters for the user","properties":{"access":{"$ref":"#/definitions/realm.token.access"},"ips":{"$ref":"#/definitions/token.ips"},"origins":{"$ref":"#/definitions/token.origins.post"},"ttl":{"$ref":"#/definitions/realm.token.ttl.post"}},"required":["access"],"title":"Custom","type":"object","x-view-order":["ttl","access","origins","ips"]},"realm-user.token_params.info":{"description":"User-specific token parameters (realm token parameters are used by default)","title":"Token parameters"},"realm-user.token_params.null":{"title":"Default","type":"null","x-view-hidden":true},"realm-user.token_params.post":{"anyOf":[{"$ref":"#/definitions/realm-user.token_params.null"},{"$ref":"#/definitions/realm-user.token_params.custom.post"}],"description":"User-specific token parameters (realm token parameters are used by default)","title":"Token parameters"},"realm.cid":{"description":"Realm owner's (customer's) ID\n","title":"Customer ID","type":"integer"},"realm.description":{"description":"Realm description text\n","maxLength":2048,"minLength":1,"title":"Description","type":"string","x-view-type":"textarea"},"realm.enabled":{"description":"False when public realm API access is disabled.\n","title":"Enabled","type":"boolean"},"realm.enabled.post":{"default":true,"description":"False when public realm API access is disabled.\n","title":"Enabled","type":"boolean"},"realm.home":{"anyOf":[{"$ref":"#/definitions/realm.home.current"},{"$ref":"#/definitions/realm.home.selected"},{"$ref":"#/definitions/realm.home.auto_created"}],"description":"Users' tokens home account policy\n","title":"Users' home","x-key-property":"type"},"realm.home.auto_created":{"description":"Each user obtains its personal subaccount. User's token is stored in the user's subaccount\n","properties":{"limit_id":{"$ref":"#/definitions/realm.limit_id"},"subaccount_id":{"description":"Owner of the user's personal subaccount\n","minimum":1,"title":"Owner ID","type":"integer","x-view-selector":"subaccounts"},"type":{"const":2,"default":2,"readOnly":true,"type":"integer"}},"required":["type"],"title":"Automatically create subaccount for each user","type":"object","x-view-order":["subaccount_id","limit_id"]},"realm.home.current":{"description":"Tokens of all the users are created in the current account (realm owner)\n","properties":{"type":{"const":0,"default":0,"readOnly":true,"type":"integer"}},"required":["type"],"title":"All users in the current account","type":"object","x-view-hidden":true},"realm.home.post":{"anyOf":[{"$ref":"#/definitions/realm.home.current"},{"$ref":"#/definitions/realm.home.selected"},{"$ref":"#/definitions/realm.home.auto_created"}],"default":{"type":0},"description":"Users' tokens home account policy\n","title":"Users' home","x-key-property":"type"},"realm.home.selected":{"description":"Tokens of all the users are created in the selected subaccount\n","properties":{"subaccount_id":{"description":"Subaccount ID for user token\n","minimum":1,"title":"Subaccount ID","type":"integer","x-view-selector":"subaccounts"},"type":{"const":1,"default":1,"readOnly":true,"type":"integer"}},"required":["type","subaccount_id"],"title":"All users in the selected subaccount","type":"object","x-view-order":["subaccount_id"]},"realm.id":{"description":"Realm unique numeric ID\n","title":"ID","type":"integer"},"realm.limit_id":{"description":"Limit ID for users' personal subaccounts\n","minimum":1,"title":"Limit ID","type":"integer","x-view-selector":"limits"},"realm.logo_url":{"description":"Realm logo picture URL\n","format":"uri-https","maxLength":1024,"minLength":8,"title":"Logo URL","type":"string","x-view-placeholder":"https://","x-view-selector":"cdnfileurl"},"realm.name":{"description":"Realm name string\n","maxLength":256,"minLength":1,"title":"Name","type":"string"},"realm.oauth_server":{"description":"Realm OAuth server configuration.\n","properties":{"allowed_clients":{"description":"Exact HTTPS Client ID Metadata Document URLs allowed to use Realm OAuth. URL variants are different clients and unlisted URLs are rejected before retrieval. An empty array denies every client and clears OAuth admission.","items":{"format":"uri-https","pattern":"^[^#]*$","type":"string"},"maxItems":16,"type":"array","uniqueItems":true},"enabled":{"description":"Enable the public Realm OAuth authorization-server metadata, authorization, and token endpoints. Set to false to disable OAuth admission.","type":"boolean"}},"required":["enabled","allowed_clients"],"title":"OAuth server","type":"object","x-view-order":["enabled","allowed_clients"]},"realm.oauth_server.post":{"default":{"allowed_clients":[],"enabled":false},"description":"Realm OAuth server configuration.\n","properties":{"allowed_clients":{"description":"Exact HTTPS Client ID Metadata Document URLs allowed to use Realm OAuth. URL variants are different clients and unlisted URLs are rejected before retrieval. An empty array denies every client and clears OAuth admission.","items":{"format":"uri-https","pattern":"^[^#]*$","type":"string"},"maxItems":16,"type":"array","uniqueItems":true},"enabled":{"description":"Enable the public Realm OAuth authorization-server metadata, authorization, and token endpoints. Set to false to disable OAuth admission.","type":"boolean"}},"required":["enabled","allowed_clients"],"title":"OAuth server","type":"object","x-view-order":["enabled","allowed_clients"]},"realm.post":{"description":"Create a realm using the role object.\nConfigure the realm's default role (home, token_params) inside the `role` property.\n","properties":{"enabled":{"$ref":"#/definitions/realm.enabled.post"},"metadata":{"$ref":"#/definitions/metadata"},"name":{"$ref":"#/definitions/realm.name"},"oauth_server":{"$ref":"#/definitions/realm.oauth_server.post"},"public_info":{"$ref":"#/definitions/realm.public_info.post"},"role":{"$ref":"#/definitions/realm.role.post"}},"required":["name","role"],"type":"object","x-view-order":["name","enabled","public_info","role","oauth_server","metadata"]},"realm.public_id":{"description":"Public realm ID for specifing realm in public REST API\n","title":"Public ID","type":"string"},"realm.public_info":{"description":"Public visible information","properties":{"description":{"$ref":"#/definitions/realm.description"},"logo_url":{"$ref":"#/definitions/realm.logo_url"},"name":{"$ref":"#/definitions/realm.name"}},"title":"Public information","type":"object","x-view-order":["name","description","logo_url"]},"realm.public_info.post":{"default":{},"description":"Public visible information","properties":{"description":{"$ref":"#/definitions/realm.description"},"logo_url":{"$ref":"#/definitions/realm.logo_url"},"name":{"$ref":"#/definitions/realm.name"}},"title":"Public information","type":"object","x-view-order":["name","description","logo_url"]},"realm.put":{"description":"Update a realm using the role object.\nConfigure the realm's default role (home, token_params) inside the `role` property.\n","properties":{"enabled":{"$ref":"#/definitions/realm.enabled"},"metadata":{"$ref":"#/definitions/metadata"},"name":{"$ref":"#/definitions/realm.name"},"oauth_server":{"$ref":"#/definitions/realm.oauth_server"},"public_info":{"$ref":"#/definitions/realm.public_info"},"role":{"$ref":"#/definitions/realm.role"}},"type":"object","x-view-order":["name","enabled","public_info","role","oauth_server","metadata"]},"realm.result":{"properties":{"result":{"description":"Realms data array\n","items":{"$ref":"#/definitions/realm"},"type":"array"}},"type":"object"},"realm.role":{"properties":{"home":{"$ref":"#/definitions/realm.home"},"token_params":{"$ref":"#/definitions/realm.token_params"}},"required":["home","token_params"],"title":"Default role","type":"object","x-view-order":["home","token_params"]},"realm.role.post":{"properties":{"home":{"$ref":"#/definitions/realm.home"},"token_params":{"$ref":"#/definitions/realm.token_params.post"}},"required":["home","token_params"],"title":"Default role","type":"object","x-view-order":["home","token_params"]},"realm.subaccount_id":{"minimum":1,"type":"integer","x-view-selector":"subaccounts"},"realm.token.access":{"anyOf":[{"$ref":"#/definitions/token.access.standard"},{"$ref":"#/definitions/realm.token.access.acl"},{"$ref":"#/definitions/token.access.master"}],"description":"Token access permissions","title":"Access","x-key-property":"type","x-view-type":"buttontoggle"},"realm.token.access.acl":{"description":"Standard token with ACL restrictions.","properties":{"acl":{"$ref":"#/definitions/realm.token.acl"},"templating":{"default":false,"description":"Substitute templates (strings encosed in `%` characters or in `%{` and `%}`) in MQTT ACL topics.\nFor example, templating topic `/my/topic/%realm.id%/data` for realm with id=42\ngenerates token with ACL topic `/my/topic/42/data`. Supported templates:\n  - `realm.id`\n  - `realm.cid`\n  - `realm.public_id`\n  - `realm.home.subaccount_id`\n  - `realm.home.limit_id`\n  - `user.id`\n  - `user.name`\n  - `user.subaccount_id`\n  - `user.home.subaccount_id`\n  - `user.home.limit_id`\n","type":"boolean"},"type":{"const":2,"default":2,"readOnly":true,"type":"integer"}},"required":["type","acl"],"title":"ACL","type":"object","x-view-order":["acl","templating"]},"realm.token.ace":{"anyOf":[{"$ref":"#/definitions/token.ace.gw.channels"},{"$ref":"#/definitions/token.ace.gw.devices"},{"$ref":"#/definitions/token.ace.gw.groups"},{"$ref":"#/definitions/token.ace.gw.streams"},{"$ref":"#/definitions/token.ace.gw.modems"},{"$ref":"#/definitions/token.ace.gw.calcs"},{"$ref":"#/definitions/token.ace.gw.plugins"},{"$ref":"#/definitions/token.ace.gw.geofences"},{"$ref":"#/definitions/token.ace.storage.containers"},{"$ref":"#/definitions/token.ace.storage.cdns"},{"$ref":"#/definitions/realm.token.ace.mqtt"},{"$ref":"#/definitions/token.ace.ai"},{"$ref":"#/definitions/token.ace.ai.mcp"},{"$ref":"#/definitions/token.ace.ai.tools"},{"$ref":"#/definitions/token.ace.ai.agents"},{"$ref":"#/definitions/token.ace.ai.connectors"}],"description":"Access control entry (ACE) - allows to perform specified HTTP methods on the specified module or with the specified items\n","x-key-property":"uri"},"realm.token.ace.mqtt":{"properties":{"actions":{"description":"Allowed MQTT actions array for the current topic mask.","items":{"enum":["publish","subscribe"],"type":"string"},"maxItems":2,"minItems":1,"title":"actions","type":"array","uniqueItems":true},"methods":{"$ref":"#/definitions/token.ace.methods-get-post-delete"},"topic":{"description":"Authorize token to publish and subscribe topics matched given mask. Mask has a regular format of MQTT subscriptions.\n","format":"percent-template-validated","maxLength":1024,"minLength":1,"pattern":"^(?!flespi$)(?!flespi\\/).*$","type":"string","x-schema-errors":{"pattern":"direct ACL to flespi/ namespace is forbidden"},"x-schema-format-validator":{"anyOf":[{"const":"realm.id"},{"const":"realm.cid"},{"const":"realm.public_id"},{"const":"realm.home.subaccount_id"},{"const":"realm.home.limit_id"},{"const":"user.id"},{"const":"user.name"},{"const":"user.subaccount_id"},{"const":"user.home.subaccount_id"},{"const":"user.home.limit_id"}],"x-schema-errors":{"anyOf":"unsupported template"}}},"uri":{"const":"mqtt","default":"mqtt","description":"URI affected by ACE (access control entry)","title":"uri","type":"string"}},"required":["uri"],"title":"mqtt","type":"object","x-view-order":["topic","actions","methods"]},"realm.token.acl":{"description":"Access control list (ACL) - list of granted permissions to work with the specified modules and/or items\n","items":{"$ref":"#/definitions/realm.token.ace"},"maxItems":32,"type":"array"},"realm.token.ttl":{"description":"Token time-to-leave value","maximum":31536000,"minimum":1,"title":"TTL","type":"integer","x-view-type":"seconds"},"realm.token.ttl.post":{"default":86400,"description":"Token time-to-leave value","maximum":31536000,"minimum":1,"title":"TTL","type":"integer","x-view-type":"seconds"},"realm.token_params":{"properties":{"access":{"$ref":"#/definitions/realm.token.access"},"ips":{"$ref":"#/definitions/token.ips"},"origins":{"$ref":"#/definitions/token.origins"},"ttl":{"$ref":"#/definitions/realm.token.ttl"}},"required":["ttl","access"],"title":"Default users' token parameters","type":"object","x-view-order":["ttl","access","origins","ips"]},"realm.token_params.post":{"properties":{"access":{"$ref":"#/definitions/realm.token.access"},"ips":{"$ref":"#/definitions/token.ips"},"origins":{"$ref":"#/definitions/token.origins.post"},"ttl":{"$ref":"#/definitions/realm.token.ttl.post"}},"required":["access"],"title":"Default users' token parameters","type":"object","x-view-order":["ttl","access","origins","ips"]},"subaccount":{"description":"subaccount properties","properties":{"accessed":{"$ref":"#/definitions/customer.accessed"},"blocked":{"description":"Block reason, 0 - not blocked","format":"uint32","type":"integer"},"cid":{"$ref":"#/definitions/item.cid"},"counters":{"$ref":"#/definitions/customer.counters"},"created":{"$ref":"#/definitions/customer.created"},"email":{"$ref":"#/definitions/customer.email"},"enabled":{"$ref":"#/definitions/item.enabled"},"id":{"description":"Subaccount's unique ID","type":"integer"},"limit_id":{"$ref":"#/definitions/customer.limit_id"},"metadata":{"$ref":"#/definitions/metadata"},"name":{"$ref":"#/definitions/customer.name"},"notify":{"$ref":"#/definitions/customer.notify"},"owner_id":{"description":"Subaccount's owner ID. Zero for root-level flespi accounts.","type":"integer"},"region":{"description":"Region where the subaccount data is located.","type":"string"},"sla":{"$ref":"#/definitions/customer.sla"}},"type":"object"},"subaccount.post":{"properties":{"enabled":{"$ref":"#/definitions/item.enabled-default"},"limit_id":{"$ref":"#/definitions/customer.limit_id"},"metadata":{"$ref":"#/definitions/metadata"},"name":{"$ref":"#/definitions/customer.name"}},"required":["name"],"type":"object","x-view-order":["name","limit_id","enabled","metadata"]},"subaccount.put":{"properties":{"enabled":{"$ref":"#/definitions/item.enabled"},"limit_id":{"$ref":"#/definitions/customer.limit_id"},"metadata":{"$ref":"#/definitions/metadata"},"name":{"$ref":"#/definitions/customer.name"}},"type":"object","x-view-order":["name","limit_id","enabled","metadata"]},"subaccounts.result":{"description":"collection of subaccounts","properties":{"result":{"description":"Subaccounts reply","items":{"$ref":"#/definitions/subaccount"},"type":"array"}},"type":"object"},"subitem.auto_created":{"description":"Flag is set to true when the item is assigned automatically due to belonging to any group","type":"boolean"},"subitem.fields":{"additionalProperties":true,"description":"Auxiliary fields attached to subitem","type":"object"},"subitems.array":{"description":"List of items to which a subitem is added","items":{"properties":{"id":{"$ref":"#/definitions/item.id"},"name":{"$ref":"#/definitions/item.name"}},"type":"object"},"type":"array"},"timezone.enum":{"default":"UTC","description":"Timezone specification","enum":["UTC","Africa/Abidjan","Africa/Accra","Africa/Addis_Ababa","Africa/Algiers","Africa/Asmara","Africa/Bamako","Africa/Bangui","Africa/Banjul","Africa/Bissau","Africa/Blantyre","Africa/Brazzaville","Africa/Bujumbura","Africa/Cairo","Africa/Casablanca","Africa/Ceuta","Africa/Conakry","Africa/Dakar","Africa/Dar_es_Salaam","Africa/Djibouti","Africa/Douala","Africa/El_Aaiun","Africa/Freetown","Africa/Gaborone","Africa/Harare","Africa/Johannesburg","Africa/Juba","Africa/Kampala","Africa/Khartoum","Africa/Kigali","Africa/Kinshasa","Africa/Lagos","Africa/Libreville","Africa/Lome","Africa/Luanda","Africa/Lubumbashi","Africa/Lusaka","Africa/Malabo","Africa/Maputo","Africa/Maseru","Africa/Mbabane","Africa/Mogadishu","Africa/Monrovia","Africa/Nairobi","Africa/Ndjamena","Africa/Niamey","Africa/Nouakchott","Africa/Ouagadougou","Africa/Porto-Novo","Africa/Sao_Tome","Africa/Tripoli","Africa/Tunis","Africa/Windhoek","America/Adak","America/Anchorage","America/Anguilla","America/Antigua","America/Araguaina","America/Argentina/Buenos_Aires","America/Argentina/Catamarca","America/Argentina/Cordoba","America/Argentina/Jujuy","America/Argentina/La_Rioja","America/Argentina/Mendoza","America/Argentina/Rio_Gallegos","America/Argentina/Salta","America/Argentina/San_Juan","America/Argentina/San_Luis","America/Argentina/Tucuman","America/Argentina/Ushuaia","America/Aruba","America/Asuncion","America/Atikokan","America/Bahia","America/Bahia_Banderas","America/Barbados","America/Belem","America/Belize","America/Blanc-Sablon","America/Boa_Vista","America/Bogota","America/Boise","America/Cambridge_Bay","America/Campo_Grande","America/Cancun","America/Caracas","America/Cayenne","America/Cayman","America/Chicago","America/Chihuahua","America/Costa_Rica","America/Creston","America/Cuiaba","America/Curacao","America/Danmarkshavn","America/Dawson","America/Dawson_Creek","America/Denver","America/Detroit","America/Dominica","America/Edmonton","America/Eirunepe","America/El_Salvador","America/Fort_Nelson","America/Fortaleza","America/Glace_Bay","America/Godthab","America/Goose_Bay","America/Grand_Turk","America/Grenada","America/Guadeloupe","America/Guatemala","America/Guayaquil","America/Guyana","America/Halifax","America/Havana","America/Hermosillo","America/Indiana/Indianapolis","America/Indiana/Knox","America/Indiana/Marengo","America/Indiana/Petersburg","America/Indiana/Tell_City","America/Indiana/Vevay","America/Indiana/Vincennes","America/Indiana/Winamac","America/Inuvik","America/Iqaluit","America/Jamaica","America/Juneau","America/Kentucky/Louisville","America/Kentucky/Monticello","America/Kralendijk","America/La_Paz","America/Lima","America/Los_Angeles","America/Lower_Princes","America/Maceio","America/Managua","America/Manaus","America/Marigot","America/Martinique","America/Matamoros","America/Mazatlan","America/Menominee","America/Merida","America/Metlakatla","America/Mexico_City","America/Miquelon","America/Moncton","America/Monterrey","America/Montevideo","America/Montserrat","America/Nassau","America/New_York","America/Nipigon","America/Nome","America/Noronha","America/North_Dakota/Beulah","America/North_Dakota/Center","America/North_Dakota/New_Salem","America/Ojinaga","America/Panama","America/Pangnirtung","America/Paramaribo","America/Phoenix","America/Port-au-Prince","America/Port_of_Spain","America/Porto_Velho","America/Puerto_Rico","America/Punta_Arenas","America/Rainy_River","America/Rankin_Inlet","America/Recife","America/Regina","America/Resolute","America/Rio_Branco","America/Santarem","America/Santiago","America/Santo_Domingo","America/Sao_Paulo","America/Scoresbysund","America/Sitka","America/St_Barthelemy","America/St_Johns","America/St_Kitts","America/St_Lucia","America/St_Thomas","America/St_Vincent","America/Swift_Current","America/Tegucigalpa","America/Thule","America/Thunder_Bay","America/Tijuana","America/Toronto","America/Tortola","America/Vancouver","America/Whitehorse","America/Winnipeg","America/Yakutat","America/Yellowknife","Antarctica/Casey","Antarctica/Davis","Antarctica/DumontDUrville","Antarctica/Macquarie","Antarctica/Mawson","Antarctica/McMurdo","Antarctica/Palmer","Antarctica/Rothera","Antarctica/Syowa","Antarctica/Troll","Antarctica/Vostok","Arctic/Longyearbyen","Asia/Aden","Asia/Almaty","Asia/Amman","Asia/Anadyr","Asia/Aqtau","Asia/Aqtobe","Asia/Ashgabat","Asia/Atyrau","Asia/Baghdad","Asia/Bahrain","Asia/Baku","Asia/Bangkok","Asia/Barnaul","Asia/Beirut","Asia/Bishkek","Asia/Brunei","Asia/Chita","Asia/Choibalsan","Asia/Colombo","Asia/Damascus","Asia/Dhaka","Asia/Dili","Asia/Dubai","Asia/Dushanbe","Asia/Famagusta","Asia/Gaza","Asia/Hebron","Asia/Ho_Chi_Minh","Asia/Hong_Kong","Asia/Hovd","Asia/Irkutsk","Asia/Jakarta","Asia/Jayapura","Asia/Jerusalem","Asia/Kabul","Asia/Kamchatka","Asia/Karachi","Asia/Kathmandu","Asia/Khandyga","Asia/Kolkata","Asia/Krasnoyarsk","Asia/Kuala_Lumpur","Asia/Kuching","Asia/Kuwait","Asia/Macau","Asia/Magadan","Asia/Makassar","Asia/Manila","Asia/Muscat","Asia/Nicosia","Asia/Novokuznetsk","Asia/Novosibirsk","Asia/Omsk","Asia/Oral","Asia/Phnom_Penh","Asia/Pontianak","Asia/Pyongyang","Asia/Qatar","Asia/Qostanay","Asia/Qyzylorda","Asia/Riyadh","Asia/Sakhalin","Asia/Samarkand","Asia/Seoul","Asia/Shanghai","Asia/Singapore","Asia/Srednekolymsk","Asia/Taipei","Asia/Tashkent","Asia/Tbilisi","Asia/Tehran","Asia/Thimphu","Asia/Tokyo","Asia/Tomsk","Asia/Ulaanbaatar","Asia/Urumqi","Asia/Ust-Nera","Asia/Vientiane","Asia/Vladivostok","Asia/Yakutsk","Asia/Yangon","Asia/Yekaterinburg","Asia/Yerevan","Atlantic/Azores","Atlantic/Bermuda","Atlantic/Canary","Atlantic/Cape_Verde","Atlantic/Faroe","Atlantic/Madeira","Atlantic/Reykjavik","Atlantic/South_Georgia","Atlantic/St_Helena","Atlantic/Stanley","Australia/Adelaide","Australia/Brisbane","Australia/Broken_Hill","Australia/Currie","Australia/Darwin","Australia/Eucla","Australia/Hobart","Australia/Lindeman","Australia/Lord_Howe","Australia/Melbourne","Australia/Perth","Australia/Sydney","Europe/Amsterdam","Europe/Andorra","Europe/Astrakhan","Europe/Athens","Europe/Belgrade","Europe/Berlin","Europe/Bratislava","Europe/Brussels","Europe/Bucharest","Europe/Budapest","Europe/Busingen","Europe/Chisinau","Europe/Copenhagen","Europe/Dublin","Europe/Gibraltar","Europe/Guernsey","Europe/Helsinki","Europe/Isle_of_Man","Europe/Istanbul","Europe/Jersey","Europe/Kaliningrad","Europe/Kiev","Europe/Kirov","Europe/Lisbon","Europe/Ljubljana","Europe/London","Europe/Luxembourg","Europe/Madrid","Europe/Malta","Europe/Mariehamn","Europe/Minsk","Europe/Monaco","Europe/Moscow","Europe/Oslo","Europe/Paris","Europe/Podgorica","Europe/Prague","Europe/Riga","Europe/Rome","Europe/Samara","Europe/San_Marino","Europe/Sarajevo","Europe/Saratov","Europe/Simferopol","Europe/Skopje","Europe/Sofia","Europe/Stockholm","Europe/Tallinn","Europe/Tirane","Europe/Ulyanovsk","Europe/Uzhgorod","Europe/Vaduz","Europe/Vatican","Europe/Vienna","Europe/Vilnius","Europe/Volgograd","Europe/Warsaw","Europe/Zagreb","Europe/Zaporozhye","Europe/Zurich","Indian/Antananarivo","Indian/Chagos","Indian/Christmas","Indian/Cocos","Indian/Comoro","Indian/Kerguelen","Indian/Mahe","Indian/Maldives","Indian/Mauritius","Indian/Mayotte","Indian/Reunion","Pacific/Apia","Pacific/Auckland","Pacific/Bougainville","Pacific/Chatham","Pacific/Chuuk","Pacific/Easter","Pacific/Efate","Pacific/Enderbury","Pacific/Fakaofo","Pacific/Fiji","Pacific/Funafuti","Pacific/Galapagos","Pacific/Gambier","Pacific/Guadalcanal","Pacific/Guam","Pacific/Honolulu","Pacific/Kiritimati","Pacific/Kosrae","Pacific/Kwajalein","Pacific/Majuro","Pacific/Marquesas","Pacific/Midway","Pacific/Nauru","Pacific/Niue","Pacific/Norfolk","Pacific/Noumea","Pacific/Pago_Pago","Pacific/Palau","Pacific/Pitcairn","Pacific/Pohnpei","Pacific/Port_Moresby","Pacific/Rarotonga","Pacific/Saipan","Pacific/Tahiti","Pacific/Tarawa","Pacific/Tongatapu","Pacific/Wake","Pacific/Wallis"],"type":"string"},"timezone.enum.base":{"default":"UTC","enum":["UTC","Africa/Abidjan","Africa/Accra","Africa/Addis_Ababa","Africa/Algiers","Africa/Asmara","Africa/Bamako","Africa/Bangui","Africa/Banjul","Africa/Bissau","Africa/Blantyre","Africa/Brazzaville","Africa/Bujumbura","Africa/Cairo","Africa/Casablanca","Africa/Ceuta","Africa/Conakry","Africa/Dakar","Africa/Dar_es_Salaam","Africa/Djibouti","Africa/Douala","Africa/El_Aaiun","Africa/Freetown","Africa/Gaborone","Africa/Harare","Africa/Johannesburg","Africa/Juba","Africa/Kampala","Africa/Khartoum","Africa/Kigali","Africa/Kinshasa","Africa/Lagos","Africa/Libreville","Africa/Lome","Africa/Luanda","Africa/Lubumbashi","Africa/Lusaka","Africa/Malabo","Africa/Maputo","Africa/Maseru","Africa/Mbabane","Africa/Mogadishu","Africa/Monrovia","Africa/Nairobi","Africa/Ndjamena","Africa/Niamey","Africa/Nouakchott","Africa/Ouagadougou","Africa/Porto-Novo","Africa/Sao_Tome","Africa/Tripoli","Africa/Tunis","Africa/Windhoek","America/Adak","America/Anchorage","America/Anguilla","America/Antigua","America/Araguaina","America/Argentina/Buenos_Aires","America/Argentina/Catamarca","America/Argentina/Cordoba","America/Argentina/Jujuy","America/Argentina/La_Rioja","America/Argentina/Mendoza","America/Argentina/Rio_Gallegos","America/Argentina/Salta","America/Argentina/San_Juan","America/Argentina/San_Luis","America/Argentina/Tucuman","America/Argentina/Ushuaia","America/Aruba","America/Asuncion","America/Atikokan","America/Bahia","America/Bahia_Banderas","America/Barbados","America/Belem","America/Belize","America/Blanc-Sablon","America/Boa_Vista","America/Bogota","America/Boise","America/Cambridge_Bay","America/Campo_Grande","America/Cancun","America/Caracas","America/Cayenne","America/Cayman","America/Chicago","America/Chihuahua","America/Costa_Rica","America/Creston","America/Cuiaba","America/Curacao","America/Danmarkshavn","America/Dawson","America/Dawson_Creek","America/Denver","America/Detroit","America/Dominica","America/Edmonton","America/Eirunepe","America/El_Salvador","America/Fort_Nelson","America/Fortaleza","America/Glace_Bay","America/Godthab","America/Goose_Bay","America/Grand_Turk","America/Grenada","America/Guadeloupe","America/Guatemala","America/Guayaquil","America/Guyana","America/Halifax","America/Havana","America/Hermosillo","America/Indiana/Indianapolis","America/Indiana/Knox","America/Indiana/Marengo","America/Indiana/Petersburg","America/Indiana/Tell_City","America/Indiana/Vevay","America/Indiana/Vincennes","America/Indiana/Winamac","America/Inuvik","America/Iqaluit","America/Jamaica","America/Juneau","America/Kentucky/Louisville","America/Kentucky/Monticello","America/Kralendijk","America/La_Paz","America/Lima","America/Los_Angeles","America/Lower_Princes","America/Maceio","America/Managua","America/Manaus","America/Marigot","America/Martinique","America/Matamoros","America/Mazatlan","America/Menominee","America/Merida","America/Metlakatla","America/Mexico_City","America/Miquelon","America/Moncton","America/Monterrey","America/Montevideo","America/Montserrat","America/Nassau","America/New_York","America/Nipigon","America/Nome","America/Noronha","America/North_Dakota/Beulah","America/North_Dakota/Center","America/North_Dakota/New_Salem","America/Ojinaga","America/Panama","America/Pangnirtung","America/Paramaribo","America/Phoenix","America/Port-au-Prince","America/Port_of_Spain","America/Porto_Velho","America/Puerto_Rico","America/Punta_Arenas","America/Rainy_River","America/Rankin_Inlet","America/Recife","America/Regina","America/Resolute","America/Rio_Branco","America/Santarem","America/Santiago","America/Santo_Domingo","America/Sao_Paulo","America/Scoresbysund","America/Sitka","America/St_Barthelemy","America/St_Johns","America/St_Kitts","America/St_Lucia","America/St_Thomas","America/St_Vincent","America/Swift_Current","America/Tegucigalpa","America/Thule","America/Thunder_Bay","America/Tijuana","America/Toronto","America/Tortola","America/Vancouver","America/Whitehorse","America/Winnipeg","America/Yakutat","America/Yellowknife","Antarctica/Casey","Antarctica/Davis","Antarctica/DumontDUrville","Antarctica/Macquarie","Antarctica/Mawson","Antarctica/McMurdo","Antarctica/Palmer","Antarctica/Rothera","Antarctica/Syowa","Antarctica/Troll","Antarctica/Vostok","Arctic/Longyearbyen","Asia/Aden","Asia/Almaty","Asia/Amman","Asia/Anadyr","Asia/Aqtau","Asia/Aqtobe","Asia/Ashgabat","Asia/Atyrau","Asia/Baghdad","Asia/Bahrain","Asia/Baku","Asia/Bangkok","Asia/Barnaul","Asia/Beirut","Asia/Bishkek","Asia/Brunei","Asia/Chita","Asia/Choibalsan","Asia/Colombo","Asia/Damascus","Asia/Dhaka","Asia/Dili","Asia/Dubai","Asia/Dushanbe","Asia/Famagusta","Asia/Gaza","Asia/Hebron","Asia/Ho_Chi_Minh","Asia/Hong_Kong","Asia/Hovd","Asia/Irkutsk","Asia/Jakarta","Asia/Jayapura","Asia/Jerusalem","Asia/Kabul","Asia/Kamchatka","Asia/Karachi","Asia/Kathmandu","Asia/Khandyga","Asia/Kolkata","Asia/Krasnoyarsk","Asia/Kuala_Lumpur","Asia/Kuching","Asia/Kuwait","Asia/Macau","Asia/Magadan","Asia/Makassar","Asia/Manila","Asia/Muscat","Asia/Nicosia","Asia/Novokuznetsk","Asia/Novosibirsk","Asia/Omsk","Asia/Oral","Asia/Phnom_Penh","Asia/Pontianak","Asia/Pyongyang","Asia/Qatar","Asia/Qostanay","Asia/Qyzylorda","Asia/Riyadh","Asia/Sakhalin","Asia/Samarkand","Asia/Seoul","Asia/Shanghai","Asia/Singapore","Asia/Srednekolymsk","Asia/Taipei","Asia/Tashkent","Asia/Tbilisi","Asia/Tehran","Asia/Thimphu","Asia/Tokyo","Asia/Tomsk","Asia/Ulaanbaatar","Asia/Urumqi","Asia/Ust-Nera","Asia/Vientiane","Asia/Vladivostok","Asia/Yakutsk","Asia/Yangon","Asia/Yekaterinburg","Asia/Yerevan","Atlantic/Azores","Atlantic/Bermuda","Atlantic/Canary","Atlantic/Cape_Verde","Atlantic/Faroe","Atlantic/Madeira","Atlantic/Reykjavik","Atlantic/South_Georgia","Atlantic/St_Helena","Atlantic/Stanley","Australia/Adelaide","Australia/Brisbane","Australia/Broken_Hill","Australia/Currie","Australia/Darwin","Australia/Eucla","Australia/Hobart","Australia/Lindeman","Australia/Lord_Howe","Australia/Melbourne","Australia/Perth","Australia/Sydney","Europe/Amsterdam","Europe/Andorra","Europe/Astrakhan","Europe/Athens","Europe/Belgrade","Europe/Berlin","Europe/Bratislava","Europe/Brussels","Europe/Bucharest","Europe/Budapest","Europe/Busingen","Europe/Chisinau","Europe/Copenhagen","Europe/Dublin","Europe/Gibraltar","Europe/Guernsey","Europe/Helsinki","Europe/Isle_of_Man","Europe/Istanbul","Europe/Jersey","Europe/Kaliningrad","Europe/Kiev","Europe/Kirov","Europe/Lisbon","Europe/Ljubljana","Europe/London","Europe/Luxembourg","Europe/Madrid","Europe/Malta","Europe/Mariehamn","Europe/Minsk","Europe/Monaco","Europe/Moscow","Europe/Oslo","Europe/Paris","Europe/Podgorica","Europe/Prague","Europe/Riga","Europe/Rome","Europe/Samara","Europe/San_Marino","Europe/Sarajevo","Europe/Saratov","Europe/Simferopol","Europe/Skopje","Europe/Sofia","Europe/Stockholm","Europe/Tallinn","Europe/Tirane","Europe/Ulyanovsk","Europe/Uzhgorod","Europe/Vaduz","Europe/Vatican","Europe/Vienna","Europe/Vilnius","Europe/Volgograd","Europe/Warsaw","Europe/Zagreb","Europe/Zaporozhye","Europe/Zurich","Indian/Antananarivo","Indian/Chagos","Indian/Christmas","Indian/Cocos","Indian/Comoro","Indian/Kerguelen","Indian/Mahe","Indian/Maldives","Indian/Mauritius","Indian/Mayotte","Indian/Reunion","Pacific/Apia","Pacific/Auckland","Pacific/Bougainville","Pacific/Chatham","Pacific/Chuuk","Pacific/Easter","Pacific/Efate","Pacific/Enderbury","Pacific/Fakaofo","Pacific/Fiji","Pacific/Funafuti","Pacific/Galapagos","Pacific/Gambier","Pacific/Guadalcanal","Pacific/Guam","Pacific/Honolulu","Pacific/Kiritimati","Pacific/Kosrae","Pacific/Kwajalein","Pacific/Majuro","Pacific/Marquesas","Pacific/Midway","Pacific/Nauru","Pacific/Niue","Pacific/Norfolk","Pacific/Noumea","Pacific/Pago_Pago","Pacific/Palau","Pacific/Pitcairn","Pacific/Pohnpei","Pacific/Port_Moresby","Pacific/Rarotonga","Pacific/Saipan","Pacific/Tahiti","Pacific/Tarawa","Pacific/Tongatapu","Pacific/Wake","Pacific/Wallis"],"type":"string"},"token":{"description":"token properties","properties":{"access":{"$ref":"#/definitions/token.access.result"},"access_type":{"description":"Access mode shorthand summarizing the access object (e.g. 0 standard, 1 master, 2 ACL).","type":"integer"},"accessed":{"$ref":"#/definitions/token.accessed"},"blocked":{"description":"Block reason, 0 - not blocked, any non-zero value means token is currently blocked","format":"uint32","type":"integer"},"cid":{"$ref":"#/definitions/item.cid"},"created":{"$ref":"#/definitions/token.created"},"enabled":{"$ref":"#/definitions/item.enabled"},"expire":{"$ref":"#/definitions/token.expire"},"id":{"$ref":"#/definitions/token.id"},"info":{"$ref":"#/definitions/token.info"},"ips":{"$ref":"#/definitions/token.ips"},"key":{"$ref":"#/definitions/token.key"},"metadata":{"$ref":"#/definitions/metadata"},"mqtt_messages":{"description":"Number of MQTT messages exchanged with this token in last minute.","format":"uint32","type":"integer"},"mqtt_sessions":{"description":"Number of MQTT sessions opened with this token in last minute.","format":"uint32","type":"integer"},"mqtt_traffic":{"description":"MQTT traffic generated by the token in last minute, in bytes.","format":"uint64","type":"integer"},"origins":{"$ref":"#/definitions/token.origins"},"realm_id":{"description":"ID of the realm associated with this token, or 0 when the token is not associated with a realm user.","format":"uint64","minimum":0,"readOnly":true,"type":"integer"},"rest_calls":{"description":"Number of REST API calls made with this token in last minute.","format":"uint32","type":"integer"},"rest_traffic":{"description":"REST traffic generated by the token in last minute, in bytes.","format":"uint64","type":"integer"},"ttl":{"$ref":"#/definitions/token.ttl"},"user_id":{"description":"ID of the realm user associated with this token, or 0 when the token is not associated with a realm user.","format":"uint64","minimum":0,"readOnly":true,"type":"integer"}},"type":"object"},"token.access.acl":{"description":"Standard token with ACL restrictions.","properties":{"acl":{"$ref":"#/definitions/token.acl"},"type":{"const":2,"default":2,"readOnly":true,"type":"integer"}},"required":["type","acl"],"title":"ACL","type":"object","x-view-order":["acl"]},"token.access.master":{"description":"Allow token to acces to all the flespi modules.","properties":{"type":{"const":1,"default":1,"readOnly":true,"type":"integer"}},"required":["type"],"title":"Master","type":"object","x-view-hidden":true},"token.access.post":{"anyOf":[{"$ref":"#/definitions/token.access.standard"},{"$ref":"#/definitions/token.access.master"},{"$ref":"#/definitions/token.access.acl"}],"description":"Token access permissions","x-key-property":"type","x-schema-default":{"type":0},"x-view-type":"buttontoggle"},"token.access.put":{"anyOf":[{"$ref":"#/definitions/token.access.standard"},{"$ref":"#/definitions/token.access.master"},{"$ref":"#/definitions/token.access.acl"}],"description":"Token access permissions","x-key-property":"type","x-view-type":"buttontoggle"},"token.access.result":{"description":"Access permissions assigned to the token","properties":{"acl":{"$ref":"#/definitions/token.acl"},"type":{"$ref":"#/definitions/token.result.flags"}},"type":"object"},"token.access.standard":{"description":"Standard token, can be used for any flespi module except platform, i.e. this\ntoken cannot manage other tokens.\n","properties":{"type":{"const":0,"default":0,"readOnly":true,"type":"integer"}},"required":["type"],"title":"Standard","type":"object","x-view-hidden":true},"token.accessed":{"description":"UNIX timestamp of last REST request using given token","format":"uint32","type":"integer"},"token.ace":{"anyOf":[{"$ref":"#/definitions/token.ace.gw.channels"},{"$ref":"#/definitions/token.ace.gw.devices"},{"$ref":"#/definitions/token.ace.gw.groups"},{"$ref":"#/definitions/token.ace.gw.streams"},{"$ref":"#/definitions/token.ace.gw.modems"},{"$ref":"#/definitions/token.ace.gw.calcs"},{"$ref":"#/definitions/token.ace.gw.plugins"},{"$ref":"#/definitions/token.ace.gw.geofences"},{"$ref":"#/definitions/token.ace.gw.assets"},{"$ref":"#/definitions/token.ace.storage.containers"},{"$ref":"#/definitions/token.ace.storage.cdns"},{"$ref":"#/definitions/token.ace.mqtt"},{"$ref":"#/definitions/token.ace.ai"},{"$ref":"#/definitions/token.ace.ai.mcp"},{"$ref":"#/definitions/token.ace.ai.tools"},{"$ref":"#/definitions/token.ace.ai.agents"},{"$ref":"#/definitions/token.ace.ai.connectors"}],"description":"Access control entry (ACE) - allows to perform specified HTTP methods on the specified module or with the specified items","x-key-property":"uri"},"token.ace.ai":{"properties":{"methods":{"$ref":"#/definitions/token.ace.methods-get-post"},"uri":{"const":"ai","default":"ai","description":"URI affected by ACE (access control entry)","readOnly":true,"title":"uri","type":"string"}},"required":["uri"],"title":"ai","type":"object","x-view-order":["methods"]},"token.ace.ai.agents":{"properties":{"ids":{"$ref":"#/definitions/token.ace.ids.agents"},"methods":{"$ref":"#/definitions/token.ace.methods-all-default"},"submodules":{"$ref":"#/definitions/token.ace.ai.agents.submodules"},"uri":{"const":"ai/agents","default":"ai/agents","description":"URI affected by ACE (access control entry)","readOnly":true,"title":"uri","type":"string"}},"required":["uri"],"title":"ai/agents","type":"object","x-schema-allOf":[{"if":{"additionalProperties":true,"required":["submodules"],"type":"object"},"then":{"additionalProperties":true,"required":["ids"],"type":"object"},"x-schema-errors":{"then":"ids field is required when submodule is selected"}}],"x-view-order":["methods","ids","submodules"]},"token.ace.ai.agents.submodules":{"description":"Per-submodule access overrides. List a submodule with `methods: [...]` to\ngrant exactly those methods on it; submodules NOT listed in this array\nare denied. Omit the array entirely to grant the module-level methods on\nthe entity and all its submodules alike, write methods included - scope\nan ACE with submodule entries whenever its submodules need narrower\nrights than the entity itself.\n","items":{"anyOf":[{"$ref":"#/definitions/token.ace.submodule.logs"},{"properties":{"methods":{"$ref":"#/definitions/token.ace.methods-post-get"},"name":{"const":"approvals","default":"approvals","readOnly":true,"title":"name","type":"string"}},"required":["name"],"title":"approvals","type":"object","x-view-order":["methods"]},{"properties":{"methods":{"$ref":"#/definitions/token.ace.methods-no-patch"},"name":{"const":"connectors","default":"connectors","readOnly":true,"title":"name","type":"string"}},"required":["name"],"title":"connectors","type":"object","x-view-order":["methods"]},{"properties":{"methods":{"$ref":"#/definitions/token.ace.methods-get-post-delete"},"name":{"const":"messages","default":"messages","readOnly":true,"title":"name","type":"string"}},"required":["name"],"title":"messages","type":"object","x-view-order":["methods"]}],"x-key-property":"name"},"maxItems":4,"type":"array"},"token.ace.ai.connectors":{"properties":{"ids":{"$ref":"#/definitions/token.ace.ids.connectors"},"methods":{"$ref":"#/definitions/token.ace.methods-all-default"},"submodules":{"$ref":"#/definitions/token.ace.ai.connectors.submodules"},"uri":{"const":"ai/connectors","default":"ai/connectors","description":"URI affected by ACE (access control entry)","readOnly":true,"title":"uri","type":"string"}},"required":["uri"],"title":"ai/connectors","type":"object","x-schema-allOf":[{"if":{"additionalProperties":true,"required":["submodules"],"type":"object"},"then":{"additionalProperties":true,"required":["ids"],"type":"object"},"x-schema-errors":{"then":"ids field is required when submodule is selected"}}],"x-view-order":["methods","ids","submodules"]},"token.ace.ai.connectors.submodules":{"description":"Per-submodule access overrides. List a submodule with `methods: [...]` to\ngrant exactly those methods on it; submodules NOT listed in this array\nare denied. Omit the array entirely to grant the module-level methods on\nthe entity and all its submodules alike, write methods included - scope\nan ACE with submodule entries whenever its submodules need narrower\nrights than the entity itself.\n","items":{"anyOf":[{"$ref":"#/definitions/token.ace.submodule.logs"}],"x-key-property":"name"},"maxItems":1,"type":"array"},"token.ace.ai.mcp":{"properties":{"methods":{"$ref":"#/definitions/token.ace.methods-get-post"},"uri":{"const":"ai/mcp","default":"ai/mcp","description":"URI affected by ACE (access control entry)","readOnly":true,"title":"uri","type":"string"}},"required":["uri"],"title":"ai/mcp","type":"object","x-view-order":["methods"]},"token.ace.ai.tools":{"properties":{"methods":{"$ref":"#/definitions/token.ace.methods-get-post"},"uri":{"const":"ai/tools","default":"ai/tools","description":"URI affected by ACE (access control entry)","readOnly":true,"title":"uri","type":"string"}},"required":["uri"],"title":"ai/tools","type":"object","x-view-order":["methods"]},"token.ace.gw.assets":{"properties":{"ids":{"$ref":"#/definitions/token.ace.ids.assets"},"methods":{"$ref":"#/definitions/token.ace.methods-all-default"},"submodules":{"$ref":"#/definitions/token.ace.gw.assets.submodules"},"uri":{"const":"gw/assets","default":"gw/assets","description":"URI affected by ACE (access control entry)","readOnly":true,"title":"uri","type":"string"}},"required":["uri"],"title":"gw/assets","type":"object","x-schema-allOf":[{"if":{"additionalProperties":true,"required":["submodules"],"type":"object"},"then":{"additionalProperties":true,"required":["ids"],"type":"object"},"x-schema-errors":{"then":"ids field is required when submodule is selected"}}],"x-view-order":["methods","ids","submodules"]},"token.ace.gw.assets.submodules":{"description":"Per-submodule access overrides. List a submodule with `methods: [...]` to\ngrant exactly those methods on it; submodules NOT listed in this array\nare denied. Omit the array entirely to grant the module-level methods on\nthe entity and all its submodules alike, write methods included - scope\nan ACE with submodule entries whenever its submodules need narrower\nrights than the entity itself.\n","items":{"anyOf":[{"$ref":"#/definitions/token.ace.submodule.logs"},{"properties":{"methods":{"description":"Allowed HTTP methods array for the current URI","items":{"enum":["GET","POST"],"type":"string"},"maxItems":2,"title":"methods","type":"array","uniqueItems":true},"name":{"const":"intervals","default":"intervals","readOnly":true,"title":"name","type":"string"}},"required":["name"],"title":"intervals","type":"object","x-view-order":["methods"]}],"x-key-property":"name"},"maxItems":2,"type":"array"},"token.ace.gw.calcs":{"properties":{"ids":{"$ref":"#/definitions/token.ace.ids.calcs"},"methods":{"$ref":"#/definitions/token.ace.methods-all-default"},"submodules":{"$ref":"#/definitions/token.ace.gw.calcs.submodules"},"uri":{"const":"gw/calcs","default":"gw/calcs","description":"URI affected by ACE (access control entry)","readOnly":true,"title":"uri","type":"string"}},"required":["uri"],"title":"gw/calcs","type":"object","x-schema-allOf":[{"if":{"additionalProperties":true,"required":["submodules"],"type":"object"},"then":{"additionalProperties":true,"required":["ids"],"type":"object"},"x-schema-errors":{"then":"ids field is required when submodule is selected"}}],"x-view-order":["methods","ids","submodules"]},"token.ace.gw.calcs.submodules":{"description":"Per-submodule access overrides. List a submodule with `methods: [...]` to\ngrant exactly those methods on it; submodules NOT listed in this array\nare denied. Omit the array entirely to grant the module-level methods on\nthe entity and all its submodules alike, write methods included - scope\nan ACE with submodule entries whenever its submodules need narrower\nrights than the entity itself.\n","items":{"anyOf":[{"properties":{"methods":{"$ref":"#/definitions/token.ace.methods-no-patch"},"name":{"const":"devices","default":"devices","readOnly":true,"title":"name","type":"string"}},"required":["name"],"title":"devices","type":"object","x-view-order":["methods"]},{"$ref":"#/definitions/token.ace.submodule.logs"},{"$ref":"#/definitions/token.ace.submodule.groups"},{"$ref":"#/definitions/token.ace.submodule.geofences"}],"x-key-property":"name"},"maxItems":4,"type":"array"},"token.ace.gw.channels":{"properties":{"ids":{"$ref":"#/definitions/token.ace.ids.channels"},"methods":{"$ref":"#/definitions/token.ace.methods-all-default"},"submodules":{"$ref":"#/definitions/token.ace.gw.channels.submodules"},"uri":{"const":"gw/channels","default":"gw/channels","description":"URI affected by ACE (access control entry)","readOnly":true,"title":"uri","type":"string"}},"required":["uri"],"title":"gw/channels","type":"object","x-schema-allOf":[{"if":{"additionalProperties":true,"required":["submodules"],"type":"object"},"then":{"additionalProperties":true,"required":["ids"],"type":"object"},"x-schema-errors":{"then":"ids field is required when submodule is selected"}}],"x-view-order":["methods","ids","submodules"]},"token.ace.gw.channels.submodules":{"description":"Per-submodule access overrides. List a submodule with `methods: [...]` to\ngrant exactly those methods on it; submodules NOT listed in this array\nare denied. Omit the array entirely to grant the module-level methods on\nthe entity and all its submodules alike, write methods included - scope\nan ACE with submodule entries whenever its submodules need narrower\nrights than the entity itself.\n","items":{"anyOf":[{"properties":{"methods":{"$ref":"#/definitions/token.ace.methods-get-delete"},"name":{"const":"connections","default":"connections","readOnly":true,"title":"name","type":"string"}},"required":["name"],"title":"connections","type":"object","x-view-order":["methods"]},{"$ref":"#/definitions/token.ace.submodule.logs"},{"properties":{"methods":{"$ref":"#/definitions/token.ace.methods-get-delete"},"name":{"const":"messages","default":"messages","readOnly":true,"title":"name","type":"string"}},"required":["name"],"title":"messages","type":"object","x-view-order":["methods"]},{"properties":{"methods":{"$ref":"#/definitions/token.ace.methods-get"},"name":{"const":"idents","default":"idents","readOnly":true,"title":"name","type":"string"}},"required":["name"],"title":"idents","type":"object","x-view-order":["methods"]}],"x-key-property":"name"},"maxItems":6,"type":"array"},"token.ace.gw.devices":{"properties":{"ids":{"$ref":"#/definitions/token.ace.ids.devices"},"methods":{"$ref":"#/definitions/token.ace.methods-all-default"},"submodules":{"$ref":"#/definitions/token.ace.gw.devices.submodules"},"uri":{"const":"gw/devices","default":"gw/devices","description":"URI affected by ACE (access control entry)","readOnly":true,"title":"uri","type":"string"}},"required":["uri"],"title":"gw/devices","type":"object","x-schema-allOf":[{"if":{"additionalProperties":true,"required":["submodules"],"type":"object"},"then":{"additionalProperties":true,"required":["ids"],"type":"object"},"x-schema-errors":{"then":"ids field is required when submodule is selected"}}],"x-view-order":["methods","ids","submodules"]},"token.ace.gw.devices.submodules":{"description":"Per-submodule access overrides. List a submodule with `methods: [...]` to\ngrant exactly those methods on it; submodules NOT listed in this array\nare denied. Omit the array entirely to grant the module-level methods on\nthe entity and all its submodules alike, write methods included - scope\nan ACE with submodule entries whenever its submodules need narrower\nrights than the entity itself.\n","items":{"anyOf":[{"$ref":"#/definitions/token.ace.submodule.calculate"},{"$ref":"#/definitions/token.ace.submodule.logs"},{"properties":{"methods":{"$ref":"#/definitions/token.ace.methods-post-get"},"name":{"const":"messages","default":"messages","readOnly":true,"title":"name","type":"string"}},"required":["name"],"title":"messages","type":"object","x-view-order":["methods"]},{"properties":{"methods":{"$ref":"#/definitions/token.ace.methods-get-put-delete"},"name":{"const":"settings","default":"settings","readOnly":true,"title":"name","type":"string"}},"required":["name"],"title":"settings","type":"object","x-view-order":["methods"]},{"$ref":"#/definitions/token.ace.submodule.media"},{"properties":{"methods":{"$ref":"#/definitions/token.ace.methods-get-delete"},"name":{"const":"telemetry","default":"telemetry","readOnly":true,"title":"name","type":"string"}},"required":["name"],"title":"telemetry","type":"object","x-view-order":["methods"]},{"properties":{"methods":{"$ref":"#/definitions/token.ace.methods-get"},"name":{"const":"packets","default":"packets","readOnly":true,"title":"name","type":"string"}},"required":["name"],"title":"packets","type":"object","x-view-order":["methods"]},{"properties":{"methods":{"$ref":"#/definitions/token.ace.methods-post"},"name":{"const":"commands","default":"commands","readOnly":true,"title":"name","type":"string"}},"required":["name"],"title":"commands","type":"object","x-view-order":["methods"]},{"properties":{"methods":{"$ref":"#/definitions/token.ace.methods-get-post-delete"},"name":{"const":"commands-queue","default":"commands-queue","readOnly":true,"title":"name","type":"string"}},"required":["name"],"title":"commands-queue","type":"object","x-view-order":["methods"]},{"properties":{"methods":{"$ref":"#/definitions/token.ace.methods-get"},"name":{"const":"commands-result","default":"commands-result","readOnly":true,"title":"name","type":"string"}},"required":["name"],"title":"commands-result","type":"object","x-view-order":["methods"]},{"properties":{"methods":{"$ref":"#/definitions/token.ace.methods-post-get"},"name":{"const":"sms","default":"sms","readOnly":true,"title":"name","type":"string"}},"required":["name"],"title":"sms","type":"object","x-view-order":["methods"]},{"properties":{"methods":{"$ref":"#/definitions/token.ace.methods-get-delete"},"name":{"const":"connections","default":"connections","readOnly":true,"title":"name","type":"string"}},"required":["name"],"title":"connections","type":"object","x-view-order":["methods"]},{"$ref":"#/definitions/token.ace.submodule.geofences-no-put"}],"x-key-property":"name"},"maxItems":13,"type":"array"},"token.ace.gw.geofences":{"properties":{"ids":{"$ref":"#/definitions/token.ace.ids.geofences"},"methods":{"$ref":"#/definitions/token.ace.methods-all-default"},"uri":{"const":"gw/geofences","default":"gw/geofences","description":"URI affected by ACE (access control entry)","readOnly":true,"title":"uri","type":"string"}},"required":["uri"],"title":"gw/geofences","type":"object","x-schema-allOf":[{"if":{"additionalProperties":true,"required":["submodules"],"type":"object"},"then":{"additionalProperties":true,"required":["ids"],"type":"object"},"x-schema-errors":{"then":"ids field is required when submodule is selected"}}],"x-view-order":["methods","ids"]},"token.ace.gw.groups":{"properties":{"ids":{"$ref":"#/definitions/token.ace.ids.groups"},"methods":{"$ref":"#/definitions/token.ace.methods-all-default"},"uri":{"const":"gw/groups","default":"gw/groups","description":"URI affected by ACE (access control entry)","readOnly":true,"title":"uri","type":"string"}},"required":["uri"],"title":"gw/groups","type":"object","x-schema-allOf":[{"if":{"additionalProperties":true,"required":["submodules"],"type":"object"},"then":{"additionalProperties":true,"required":["ids"],"type":"object"},"x-schema-errors":{"then":"ids field is required when submodule is selected"}}],"x-view-order":["methods","ids"]},"token.ace.gw.modems":{"properties":{"ids":{"$ref":"#/definitions/token.ace.ids.modems"},"methods":{"$ref":"#/definitions/token.ace.methods-all-default"},"submodules":{"$ref":"#/definitions/token.ace.gw.modems.submodules"},"uri":{"const":"gw/modems","default":"gw/modems","description":"URI affected by ACE (access control entry)","readOnly":true,"title":"uri","type":"string"}},"required":["uri"],"title":"gw/modems","type":"object","x-schema-allOf":[{"if":{"additionalProperties":true,"required":["submodules"],"type":"object"},"then":{"additionalProperties":true,"required":["ids"],"type":"object"},"x-schema-errors":{"then":"ids field is required when submodule is selected"}}],"x-view-order":["methods","ids","submodules"]},"token.ace.gw.modems.submodules":{"description":"Per-submodule access overrides. List a submodule with `methods: [...]` to\ngrant exactly those methods on it; submodules NOT listed in this array\nare denied. Omit the array entirely to grant the module-level methods on\nthe entity and all its submodules alike, write methods included - scope\nan ACE with submodule entries whenever its submodules need narrower\nrights than the entity itself.\n","items":{"anyOf":[{"$ref":"#/definitions/token.ace.submodule.logs"}],"x-key-property":"name"},"maxItems":1,"type":"array"},"token.ace.gw.plugins":{"properties":{"ids":{"$ref":"#/definitions/token.ace.ids.plugins"},"methods":{"$ref":"#/definitions/token.ace.methods-all-default"},"submodules":{"$ref":"#/definitions/token.ace.gw.plugins.submodules"},"uri":{"const":"gw/plugins","default":"gw/plugins","description":"URI affected by ACE (access control entry)","readOnly":true,"title":"uri","type":"string"}},"required":["uri"],"title":"gw/plugins","type":"object","x-schema-allOf":[{"if":{"additionalProperties":true,"required":["submodules"],"type":"object"},"then":{"additionalProperties":true,"required":["ids"],"type":"object"},"x-schema-errors":{"then":"ids field is required when submodule is selected"}}],"x-view-order":["methods","ids","submodules"]},"token.ace.gw.plugins.submodules":{"description":"Per-submodule access overrides. List a submodule with `methods: [...]` to\ngrant exactly those methods on it; submodules NOT listed in this array\nare denied. Omit the array entirely to grant the module-level methods on\nthe entity and all its submodules alike, write methods included - scope\nan ACE with submodule entries whenever its submodules need narrower\nrights than the entity itself.\n","items":{"anyOf":[{"properties":{"methods":{"$ref":"#/definitions/token.ace.methods-all"},"name":{"const":"devices","default":"devices","readOnly":true,"title":"name","type":"string"}},"required":["name"],"title":"devices","type":"object","x-view-order":["methods"]},{"$ref":"#/definitions/token.ace.submodule.logs"},{"$ref":"#/definitions/token.ace.submodule.groups"},{"$ref":"#/definitions/token.ace.submodule.geofences"}],"x-key-property":"name"},"maxItems":4,"type":"array"},"token.ace.gw.streams":{"properties":{"ids":{"$ref":"#/definitions/token.ace.ids.streams"},"methods":{"$ref":"#/definitions/token.ace.methods-all-default"},"submodules":{"$ref":"#/definitions/token.ace.gw.streams.submodules"},"uri":{"const":"gw/streams","default":"gw/streams","description":"URI affected by ACE (access control entry)","readOnly":true,"title":"uri","type":"string"}},"required":["uri"],"title":"gw/streams","type":"object","x-schema-allOf":[{"if":{"additionalProperties":true,"required":["submodules"],"type":"object"},"then":{"additionalProperties":true,"required":["ids"],"type":"object"},"x-schema-errors":{"then":"ids field is required when submodule is selected"}}],"x-view-order":["methods","ids","submodules"]},"token.ace.gw.streams.submodules":{"description":"Per-submodule access overrides. List a submodule with `methods: [...]` to\ngrant exactly those methods on it; submodules NOT listed in this array\nare denied. Omit the array entirely to grant the module-level methods on\nthe entity and all its submodules alike, write methods included - scope\nan ACE with submodule entries whenever its submodules need narrower\nrights than the entity itself.\n","items":{"anyOf":[{"properties":{"methods":{"$ref":"#/definitions/token.ace.methods-no-patch"},"name":{"const":"devices","default":"devices","readOnly":true,"title":"name","type":"string"}},"required":["name"],"title":"devices","type":"object","x-view-order":["methods"]},{"properties":{"methods":{"$ref":"#/definitions/token.ace.methods-get-post-delete"},"name":{"const":"channels","default":"channels","readOnly":true,"title":"name","type":"string"}},"required":["name"],"title":"channels","type":"object","x-view-order":["methods"]},{"$ref":"#/definitions/token.ace.submodule.groups"},{"$ref":"#/definitions/token.ace.submodule.geofences"},{"$ref":"#/definitions/token.ace.submodule.logs"},{"properties":{"methods":{"description":"Allowed HTTP methods array for the current URI","items":{"enum":["POST","DELETE"],"type":"string"},"maxItems":2,"title":"methods","type":"array","uniqueItems":true},"name":{"const":"messages","default":"messages","readOnly":true,"title":"name","type":"string"}},"required":["name"],"title":"messages","type":"object","x-view-order":["methods"]}],"x-key-property":"name"},"maxItems":6,"type":"array"},"token.ace.ids-base":{"description":"Select which items are affected: by ids or just all\n","title":"ids","x-view-type":"buttontoggle"},"token.ace.ids.agents":{"description":"Select which items are affected: by ids or just all\n","oneOf":[{"const":"all","default":"all","description":"Keyword for all the items IDs accessible by the token","readOnly":true,"title":"all","type":"string"},{"description":"Affected items IDs array","items":{"format":"uint32","minimum":1,"type":"number"},"maxItems":4096,"minItems":1,"title":"list","type":"array","x-view-selector":"agents"}],"title":"ids","x-view-type":"buttontoggle"},"token.ace.ids.all":{"const":"all","default":"all","description":"Keyword for all the items IDs accessible by the token","readOnly":true,"title":"all","type":"string"},"token.ace.ids.assets":{"description":"Select which items are affected: by ids or just all\n","oneOf":[{"const":"all","default":"all","description":"Keyword for all the items IDs accessible by the token","readOnly":true,"title":"all","type":"string"},{"description":"Affected items IDs array","items":{"format":"uint32","minimum":1,"type":"number"},"maxItems":4096,"minItems":1,"title":"list","type":"array","x-view-selector":"assets"}],"title":"ids","x-view-type":"buttontoggle"},"token.ace.ids.calcs":{"description":"Select which items are affected: by ids or just all\n","oneOf":[{"const":"all","default":"all","description":"Keyword for all the items IDs accessible by the token","readOnly":true,"title":"all","type":"string"},{"description":"Affected items IDs array","items":{"format":"uint32","minimum":1,"type":"number"},"maxItems":4096,"minItems":1,"title":"list","type":"array","x-view-selector":"calcs"}],"title":"ids","x-view-type":"buttontoggle"},"token.ace.ids.cdns":{"description":"Select which items are affected: by ids or just all\n","oneOf":[{"const":"all","default":"all","description":"Keyword for all the items IDs accessible by the token","readOnly":true,"title":"all","type":"string"},{"description":"Affected items IDs array","items":{"format":"uint32","minimum":1,"type":"number"},"maxItems":4096,"minItems":1,"title":"list","type":"array","x-view-selector":"cdns"}],"title":"ids","x-view-type":"buttontoggle"},"token.ace.ids.channels":{"description":"Select which items are affected: by ids or just all\n","oneOf":[{"const":"all","default":"all","description":"Keyword for all the items IDs accessible by the token","readOnly":true,"title":"all","type":"string"},{"description":"Affected items IDs array","items":{"format":"uint32","minimum":1,"type":"number"},"maxItems":4096,"minItems":1,"title":"list","type":"array","x-view-selector":"channels"}],"title":"ids","x-view-type":"buttontoggle"},"token.ace.ids.connectors":{"description":"Select which items are affected: by ids or just all\n","oneOf":[{"const":"all","default":"all","description":"Keyword for all the items IDs accessible by the token","readOnly":true,"title":"all","type":"string"},{"description":"Affected items IDs array","items":{"format":"uint32","minimum":1,"type":"number"},"maxItems":4096,"minItems":1,"title":"list","type":"array","x-view-selector":"connectors"}],"title":"ids","x-view-type":"buttontoggle"},"token.ace.ids.containers":{"description":"Select which items are affected: by ids or just all\n","oneOf":[{"const":"all","default":"all","description":"Keyword for all the items IDs accessible by the token","readOnly":true,"title":"all","type":"string"},{"description":"Affected items IDs array","items":{"format":"uint32","minimum":1,"type":"number"},"maxItems":4096,"minItems":1,"title":"list","type":"array","x-view-selector":"containers"}],"title":"ids","x-view-type":"buttontoggle"},"token.ace.ids.devices":{"description":"Select which items are affected: by ids or just all\n","oneOf":[{"const":"all","default":"all","description":"Keyword for all the items IDs accessible by the token","readOnly":true,"title":"all","type":"string"},{"const":"in-groups","default":"in-groups","description":"Keyword for groupped items accessible by the token","readOnly":true,"title":"in-groups","type":"string"},{"description":"Affected items IDs array","items":{"format":"uint32","minimum":1,"type":"number"},"maxItems":4096,"minItems":1,"title":"list","type":"array","x-view-selector":"devices"}],"title":"ids","x-view-type":"buttontoggle"},"token.ace.ids.geofences":{"description":"Select which items are affected: by ids or just all\n","oneOf":[{"const":"all","default":"all","description":"Keyword for all the items IDs accessible by the token","readOnly":true,"title":"all","type":"string"},{"const":"in-groups","default":"in-groups","description":"Keyword for groupped items accessible by the token","readOnly":true,"title":"in-groups","type":"string"},{"description":"Affected items IDs array","items":{"format":"uint32","minimum":1,"type":"number"},"maxItems":4096,"minItems":1,"title":"list","type":"array","x-view-selector":"geofences"}],"title":"ids","x-view-type":"buttontoggle"},"token.ace.ids.groups":{"description":"Select which items are affected: by ids or just all\n","oneOf":[{"const":"all","default":"all","description":"Keyword for all the items IDs accessible by the token","readOnly":true,"title":"all","type":"string"},{"description":"Affected items IDs array","items":{"format":"uint32","minimum":1,"type":"number"},"maxItems":4096,"minItems":1,"title":"list","type":"array","x-view-selector":"groups"}],"title":"ids","x-view-type":"buttontoggle"},"token.ace.ids.in-groups":{"const":"in-groups","default":"in-groups","description":"Keyword for groupped items accessible by the token","readOnly":true,"title":"in-groups","type":"string"},"token.ace.ids.list-base":{"description":"Affected items IDs array","items":{"format":"uint32","minimum":1,"type":"number"},"maxItems":4096,"minItems":1,"title":"list","type":"array"},"token.ace.ids.modems":{"description":"Select which items are affected: by ids or just all\n","oneOf":[{"const":"all","default":"all","description":"Keyword for all the items IDs accessible by the token","readOnly":true,"title":"all","type":"string"},{"description":"Affected items IDs array","items":{"format":"uint32","minimum":1,"type":"number"},"maxItems":4096,"minItems":1,"title":"list","type":"array","x-view-selector":"modems"}],"title":"ids","x-view-type":"buttontoggle"},"token.ace.ids.plugins":{"description":"Select which items are affected: by ids or just all\n","oneOf":[{"const":"all","default":"all","description":"Keyword for all the items IDs accessible by the token","readOnly":true,"title":"all","type":"string"},{"description":"Affected items IDs array","items":{"format":"uint32","minimum":1,"type":"number"},"maxItems":4096,"minItems":1,"title":"list","type":"array","x-view-selector":"plugins"}],"title":"ids","x-view-type":"buttontoggle"},"token.ace.ids.streams":{"description":"Select which items are affected: by ids or just all\n","oneOf":[{"const":"all","default":"all","description":"Keyword for all the items IDs accessible by the token","readOnly":true,"title":"all","type":"string"},{"description":"Affected items IDs array","items":{"format":"uint32","minimum":1,"type":"number"},"maxItems":4096,"minItems":1,"title":"list","type":"array","x-view-selector":"streams"}],"title":"ids","x-view-type":"buttontoggle"},"token.ace.methods-all":{"description":"Allowed HTTP methods array for the current URI","items":{"enum":["GET","POST","PUT","PATCH","DELETE"],"type":"string"},"maxItems":5,"title":"methods","type":"array","uniqueItems":true},"token.ace.methods-all-default":{"default":["GET"],"description":"Allowed HTTP methods array for the current URI","items":{"enum":["GET","POST","PUT","PATCH","DELETE"],"type":"string"},"maxItems":5,"title":"methods","type":"array","uniqueItems":true},"token.ace.methods-get":{"description":"Allowed HTTP methods array for the current URI","items":{"enum":["GET"],"type":"string"},"maxItems":1,"title":"methods","type":"array","uniqueItems":true},"token.ace.methods-get-delete":{"description":"Allowed HTTP methods array for the current URI","items":{"enum":["GET","DELETE"],"type":"string"},"maxItems":2,"title":"methods","type":"array","uniqueItems":true},"token.ace.methods-get-post":{"description":"Allowed HTTP methods array for the current URI","items":{"enum":["GET","POST"],"type":"string"},"maxItems":2,"title":"methods","type":"array","uniqueItems":true},"token.ace.methods-get-post-delete":{"description":"Allowed HTTP methods array for the current URI","items":{"enum":["GET","POST","DELETE"],"type":"string"},"maxItems":3,"title":"methods","type":"array","uniqueItems":true},"token.ace.methods-get-put-delete":{"description":"Allowed HTTP methods array for the current URI","items":{"enum":["GET","PUT","DELETE"],"type":"string"},"maxItems":3,"title":"methods","type":"array","uniqueItems":true},"token.ace.methods-no-patch":{"description":"Allowed HTTP methods array for the current URI","items":{"enum":["GET","PUT","POST","DELETE"],"type":"string"},"maxItems":4,"title":"methods","type":"array","uniqueItems":true},"token.ace.methods-no-patch-default":{"default":["GET"],"description":"Allowed HTTP methods array for the current URI","items":{"enum":["GET","PUT","POST","DELETE"],"type":"string"},"maxItems":4,"title":"methods","type":"array","uniqueItems":true},"token.ace.methods-no-post":{"description":"Allowed HTTP methods array for the current URI","items":{"enum":["GET","PUT","PATCH","DELETE"],"type":"string"},"maxItems":4,"title":"methods","type":"array","uniqueItems":true},"token.ace.methods-post":{"description":"Allowed HTTP methods array for the current URI","items":{"enum":["POST"],"type":"string"},"maxItems":1,"title":"methods","type":"array","uniqueItems":true},"token.ace.methods-post-get":{"description":"Allowed HTTP methods array for the current URI","items":{"enum":["POST","GET"],"type":"string"},"maxItems":2,"title":"methods","type":"array","uniqueItems":true},"token.ace.mqtt":{"properties":{"actions":{"description":"Allowed MQTT actions array for the current topic mask.","items":{"enum":["publish","subscribe"],"type":"string"},"maxItems":2,"minItems":1,"title":"actions","type":"array","uniqueItems":true},"methods":{"$ref":"#/definitions/token.ace.methods-get-post-delete"},"topic":{"description":"Authorize token to publish and subscribe topics matched given mask. Mask has a regular format of MQTT subscriptions.","maxLength":1024,"minLength":1,"pattern":"^(?!flespi$)(?!flespi\\/).*$","type":"string","x-schema-errors":{"pattern":"direct ACL to flespi/ namespace is forbidden"}},"uri":{"const":"mqtt","default":"mqtt","description":"URI affected by ACE (access control entry)","readOnly":true,"title":"uri","type":"string"}},"required":["uri"],"title":"mqtt","type":"object","x-view-order":["topic","actions","methods"]},"token.ace.restrictions":{"x-schema-allOf":[{"if":{"additionalProperties":true,"required":["submodules"],"type":"object"},"then":{"additionalProperties":true,"required":["ids"],"type":"object"},"x-schema-errors":{"then":"ids field is required when submodule is selected"}}]},"token.ace.storage.cdns":{"properties":{"ids":{"$ref":"#/definitions/token.ace.ids.cdns"},"methods":{"$ref":"#/definitions/token.ace.methods-all-default"},"submodules":{"$ref":"#/definitions/token.ace.storage.cdns.submodules"},"uri":{"const":"storage/cdns","default":"storage/cdns","description":"URI affected by ACE (access control entry)","readOnly":true,"title":"uri","type":"string"}},"required":["uri"],"title":"storage/cdns","type":"object","x-schema-allOf":[{"if":{"additionalProperties":true,"required":["submodules"],"type":"object"},"then":{"additionalProperties":true,"required":["ids"],"type":"object"},"x-schema-errors":{"then":"ids field is required when submodule is selected"}}],"x-view-order":["methods","ids","submodules"]},"token.ace.storage.cdns.submodules":{"description":"Per-submodule access overrides. List a submodule with `methods: [...]` to\ngrant exactly those methods on it; submodules NOT listed in this array\nare denied. Omit the array entirely to grant the module-level methods on\nthe entity and all its submodules alike, write methods included - scope\nan ACE with submodule entries whenever its submodules need narrower\nrights than the entity itself.\n","items":{"anyOf":[{"properties":{"methods":{"$ref":"#/definitions/token.ace.methods-get-post-delete"},"name":{"const":"files","default":"files","readOnly":true,"title":"name","type":"string"}},"required":["name"],"title":"files","type":"object","x-view-order":["methods"]},{"$ref":"#/definitions/token.ace.submodule.logs"}],"x-key-property":"name"},"maxItems":2,"type":"array"},"token.ace.storage.containers":{"properties":{"ids":{"$ref":"#/definitions/token.ace.ids.containers"},"methods":{"$ref":"#/definitions/token.ace.methods-all-default"},"submodules":{"$ref":"#/definitions/token.ace.storage.containers.submodules"},"uri":{"const":"storage/containers","default":"storage/containers","description":"URI affected by ACE (access control entry)","readOnly":true,"title":"uri","type":"string"}},"required":["uri"],"title":"storage/containers","type":"object","x-schema-allOf":[{"if":{"additionalProperties":true,"required":["submodules"],"type":"object"},"then":{"additionalProperties":true,"required":["ids"],"type":"object"},"x-schema-errors":{"then":"ids field is required when submodule is selected"}}],"x-view-order":["methods","ids","submodules"]},"token.ace.storage.containers.submodules":{"description":"Per-submodule access overrides. List a submodule with `methods: [...]` to\ngrant exactly those methods on it; submodules NOT listed in this array\nare denied. Omit the array entirely to grant the module-level methods on\nthe entity and all its submodules alike, write methods included - scope\nan ACE with submodule entries whenever its submodules need narrower\nrights than the entity itself.\n","items":{"anyOf":[{"$ref":"#/definitions/token.ace.submodule.calculate"},{"$ref":"#/definitions/token.ace.submodule.logs"},{"properties":{"methods":{"$ref":"#/definitions/token.ace.methods-get-post-delete"},"name":{"const":"messages","default":"messages","readOnly":true,"title":"name","type":"string"}},"required":["name"],"title":"messages","type":"object","x-view-order":["methods"]}],"x-key-property":"name"},"maxItems":3,"type":"array"},"token.ace.submodule.calculate":{"properties":{"methods":{"$ref":"#/definitions/token.ace.methods-post"},"name":{"const":"calculate","default":"calculate","readOnly":true,"title":"name","type":"string"}},"required":["name"],"title":"calculate","type":"object","x-view-order":["methods"]},"token.ace.submodule.geofences":{"properties":{"methods":{"$ref":"#/definitions/token.ace.methods-no-patch"},"name":{"const":"geofences","default":"geofences","readOnly":true,"title":"name","type":"string"}},"required":["name"],"title":"geofences","type":"object","x-view-order":["methods"]},"token.ace.submodule.geofences-no-put":{"properties":{"methods":{"$ref":"#/definitions/token.ace.methods-get-post-delete"},"name":{"const":"geofences","default":"geofences","readOnly":true,"title":"name","type":"string"}},"required":["name"],"title":"geofences","type":"object","x-view-order":["methods"]},"token.ace.submodule.groups":{"properties":{"methods":{"$ref":"#/definitions/token.ace.methods-get-post-delete"},"name":{"const":"groups","default":"groups","readOnly":true,"title":"name","type":"string"}},"required":["name"],"title":"groups","type":"object","x-view-order":["methods"]},"token.ace.submodule.groups-no-patch":{"properties":{"methods":{"$ref":"#/definitions/token.ace.methods-no-patch"},"name":{"const":"groups","default":"groups","readOnly":true,"title":"name","type":"string"}},"required":["name"],"title":"groups","type":"object","x-view-order":["methods"]},"token.ace.submodule.logs":{"properties":{"methods":{"$ref":"#/definitions/token.ace.methods-get"},"name":{"const":"logs","default":"logs","readOnly":true,"title":"name","type":"string"}},"required":["name"],"title":"logs","type":"object","x-view-order":["methods"]},"token.ace.submodule.media":{"properties":{"methods":{"description":"Allowed HTTP methods array for the current URI","items":{"enum":["GET","PUT","DELETE","POST"],"type":"string"},"maxItems":4,"title":"methods","type":"array","uniqueItems":true},"name":{"const":"media","default":"media","readOnly":true,"title":"name","type":"string"}},"required":["name"],"title":"media","type":"object","x-view-order":["methods"]},"token.ace.template.submodule-base":{"description":"Per-submodule access overrides. List a submodule with `methods: [...]` to\ngrant exactly those methods on it; submodules NOT listed in this array\nare denied. Omit the array entirely to grant the module-level methods on\nthe entity and all its submodules alike, write methods included - scope\nan ACE with submodule entries whenever its submodules need narrower\nrights than the entity itself.\n","type":"array"},"token.ace.template.submodule-name":{"readOnly":true,"title":"name","type":"string"},"token.ace.template.uri":{"description":"URI affected by ACE (access control entry)","readOnly":true,"title":"uri","type":"string"},"token.acl":{"description":"Access control list (ACL) - list of granted permissions to work with the specified modules and/or items","items":{"$ref":"#/definitions/token.ace"},"maxItems":32,"type":"array"},"token.created":{"description":"UNIX timestamp of token creation","format":"uint32","type":"integer"},"token.expire":{"description":"UNIX timestamp when token will be automatically removed. Zero value if expiration time is not set.","format":"uint32","maximum":2147483647,"type":"integer","x-view-type":"datetimezero"},"token.id":{"description":"Token's unique ID","type":"integer"},"token.info":{"description":"user defined description typically contains the purpose of token","maxLength":255,"type":"string"},"token.ips":{"description":"CSV list of masks (wildcards are supported) of IP addresses which are\nallowed to use the token. Example: 10.100.*.*,192.168.56.1?,127.0.0.1\n","maxLength":128,"pattern":"^(?:(?:[0-9*?]{1,3}\\.){3}[0-9*?]{1,3})(?:,(?:[0-9*?]{1,3}\\.){3}[0-9*?]{1,3})*$|^$","title":"IPs whitelist","type":"string","x-schema-errors":{"pattern":"invalid list of IP addresses"}},"token.key":{"description":"Token's unique security key that is used to authorize with this token any API operation","type":"string"},"token.origin":{"anyOf":[{"$ref":"#/definitions/token.origin.flespi"},{"$ref":"#/definitions/token.origin.custom"}]},"token.origin.custom":{"description":"Custom origin from where the token is allowed to be used\n","maxLength":128,"pattern":"^[\\w]+://[\\w*?_-]+(?:\\.[\\w*?_-]+)*(?::[\\d]+)?$","title":"custom origin","type":"string","x-view-placeholder":"scheme://hostname OR scheme://hostname:port"},"token.origin.flespi":{"description":"Allow token usage for all the origins related to flespi resources\n","properties":{"preset":{"const":"flespi","default":"flespi","readOnly":true,"type":"string","x-view-hidden":true}},"required":["preset"],"title":"all flespi origins","type":"object"},"token.origins":{"anyOf":[{"$ref":"#/definitions/token.origins.any"},{"$ref":"#/definitions/token.origins.explicit"}],"description":"From which origins this token is allowed to be used in the Web.\nWildcard characters `*` and `?` are supported in custom origins. Asterisk `*` matches to the interdomain dot-character (`.`) as well. Example of custom origins matching:\n  - `http://localhost:1234`\n     * ✓ `http://localhost:1234`\n     * ✗ ~~`https://localhost:1234`~~\n     * ✗ ~~`http://localhost`~~\n  - `https://subdomain1.example.com`\n     * ✓ `https://subdomain1.example.com`\n     * ✗ ~~`http://subdomain1.example.com`~~\n     * ✗ ~~`https://subdomain2.example.com`~~\n     * ✗ ~~`https://example.com`~~\n  - `https://*.example.com`\n     * ✓ `https://subdomain.example.com`\n     * ✓ `https//a.b.example.com`\n     * ✗ ~~`https://example.com`~~\n  - `custom7://te?t.example.com`\n     * ✓ `custom7://test.example.com`\n     * ✓ `custom7://text.example.com`\n     * ✗ ~~`custom7://telnet.example.com`~~\n     * ✗ ~~`custom7://tt.example.com`~~\n  - `super8://sub*.example.com`\n     * ✓ `super8://sub42.example.com`\n     * ✓ `super8://sub1.sub2.example.com`\n     * ✗ ~~`super8://su.example.com`~~","title":"Allowed origins\n","x-view-type":"buttontoggle"},"token.origins.any":{"const":"*","default":"*","readOnly":true,"title":"any","type":"string","x-view-hidden":true},"token.origins.explicit":{"items":{"$ref":"#/definitions/token.origin"},"maxItems":32,"minItems":0,"title":"explicit","type":"array","uniqueItems":true},"token.origins.post":{"anyOf":[{"$ref":"#/definitions/token.origins.any"},{"$ref":"#/definitions/token.origins.explicit"}],"default":"*","description":"From which origins this token is allowed to be used in the Web.\nWildcard characters `*` and `?` are supported in custom origins. Asterisk `*` matches to the interdomain dot-character (`.`) as well. Example of custom origins matching:\n  - `http://localhost:1234`\n     * ✓ `http://localhost:1234`\n     * ✗ ~~`https://localhost:1234`~~\n     * ✗ ~~`http://localhost`~~\n  - `https://subdomain1.example.com`\n     * ✓ `https://subdomain1.example.com`\n     * ✗ ~~`http://subdomain1.example.com`~~\n     * ✗ ~~`https://subdomain2.example.com`~~\n     * ✗ ~~`https://example.com`~~\n  - `https://*.example.com`\n     * ✓ `https://subdomain.example.com`\n     * ✓ `https//a.b.example.com`\n     * ✗ ~~`https://example.com`~~\n  - `custom7://te?t.example.com`\n     * ✓ `custom7://test.example.com`\n     * ✓ `custom7://text.example.com`\n     * ✗ ~~`custom7://telnet.example.com`~~\n     * ✗ ~~`custom7://tt.example.com`~~\n  - `super8://sub*.example.com`\n     * ✓ `super8://sub42.example.com`\n     * ✓ `super8://sub1.sub2.example.com`\n     * ✗ ~~`super8://su.example.com`~~","title":"Allowed origins\n","x-view-type":"buttontoggle"},"token.post":{"properties":{"access":{"$ref":"#/definitions/token.access.post"},"enabled":{"$ref":"#/definitions/item.enabled-default"},"expire":{"$ref":"#/definitions/token.expire"},"info":{"$ref":"#/definitions/token.info"},"ips":{"$ref":"#/definitions/token.ips"},"metadata":{"$ref":"#/definitions/metadata"},"origins":{"$ref":"#/definitions/token.origins.post"},"ttl":{"$ref":"#/definitions/token.ttl"}},"title":"Token","type":"object","x-schema-anyOf":[{"additionalProperties":true,"required":["expire"],"type":"object"},{"additionalProperties":true,"required":["ttl"],"type":"object"}],"x-schema-errors":{"anyOf":"'expire' or 'ttl' properties are required"},"x-view-noselect":true,"x-view-order":["info","expire","ttl","access","origins","ips","metadata","enabled"]},"token.put":{"properties":{"access":{"$ref":"#/definitions/token.access.put"},"enabled":{"$ref":"#/definitions/item.enabled"},"expire":{"$ref":"#/definitions/token.expire"},"info":{"$ref":"#/definitions/token.info"},"ips":{"$ref":"#/definitions/token.ips"},"metadata":{"$ref":"#/definitions/metadata"},"origins":{"$ref":"#/definitions/token.origins"},"ttl":{"$ref":"#/definitions/token.ttl"}},"type":"object","x-view-order":["info","expire","ttl","access","origins","ips","metadata","enabled"]},"token.result.flags":{"description":"Token's internal flags: 0x0 - standard token; 0x1 - token can manage other tokens; 0x2 - enable ACL for the token; 0x3 - NOAPI token(controlled by flespi platform and unavailable to user)","enum":[0,1,2,3],"format":"uint32","title":"Type","type":"integer","x-view-enum-labels":["Standard","Master","ACL","NOAPI"]},"token.ttl":{"description":"Token's time-to-leave. If not zero, specifies interval that is used to automatically update token expiration time with value of current-time + ttl, whenever you are doing any REST request or have active MQTT session with this token.","format":"uint32","maximum":31536000,"minimum":0,"title":"TTL","type":"integer","x-view-divider":60,"x-view-unit":"min."},"token_params":{"properties":{"access":{"$ref":"#/definitions/realm.token.access"},"ips":{"$ref":"#/definitions/token.ips"},"origins":{"$ref":"#/definitions/token.origins"},"ttl":{"$ref":"#/definitions/realm.token.ttl"}},"required":["ttl","access"],"type":"object","x-view-order":["ttl","access","origins","ips"]},"token_params.post":{"properties":{"access":{"$ref":"#/definitions/realm.token.access"},"ips":{"$ref":"#/definitions/token.ips"},"origins":{"$ref":"#/definitions/token.origins.post"},"ttl":{"$ref":"#/definitions/realm.token.ttl.post"}},"required":["access"],"type":"object","x-view-order":["ttl","access","origins","ips"]},"tokens.result":{"properties":{"result":{"description":"tokens with fields included according to request's **fields** parameter","items":{"$ref":"#/definitions/token"},"type":"array"},"warnings":{"description":"warning message(s) about deprecated token usage","items":{"properties":{"reason":{"description":"warning message text","type":"string"}},"type":"object"},"type":"array"}},"type":"object"},"user_account":{"description":"identity provider account linked to a realm user.","properties":{"identity_provider_id":{"$ref":"#/definitions/identity-provider.id"},"realm_id":{"$ref":"#/definitions/realm.id"},"user_id":{"$ref":"#/definitions/realm-user.id"}},"type":"object"},"user_accounts.result":{"properties":{"result":{"description":"User identity provider accounts array\n","items":{"$ref":"#/definitions/user_account"},"type":"array"}},"type":"object"},"webhook":{"description":"Webhook information","properties":{"blocked":{"description":"Block reason, 0 - not blocked","format":"uint32","type":"integer"},"cid":{"description":"webhook's owner ID","type":"integer"},"configuration":{"$ref":"#/definitions/webhook.configuration"},"created":{"$ref":"#/definitions/item.btime"},"enabled":{"$ref":"#/definitions/item.enabled"},"errors":{"description":"Number of webhook delivery errors in last minute.","format":"uint32","type":"integer"},"id":{"description":"webhook's unique ID","type":"integer"},"messages":{"description":"Number of webhook messages delivered in last minute.","format":"uint32","type":"integer"},"metadata":{"$ref":"#/definitions/metadata"},"name":{"$ref":"#/definitions/webhook.name"},"queue_size":{"description":"Current webhook queue size, in KB","format":"uint32","type":"integer"},"queue_ttl":{"$ref":"#/definitions/webhook.queue_ttl"},"traffic":{"description":"Webhook outbound traffic in last minute, in bytes.","format":"uint64","type":"integer"},"triggers":{"$ref":"#/definitions/webhook.triggers"}},"type":"object"},"webhook.configuration":{"anyOf":[{"$ref":"#/definitions/webhook.configuration.custom"},{"$ref":"#/definitions/webhook.configuration.flespi"},{"$ref":"#/definitions/webhook.configuration.chain"}]},"webhook.configuration.chain":{"description":"HTTP requests chain","items":{"anyOf":[{"$ref":"#/definitions/webhook.configuration.custom"},{"$ref":"#/definitions/webhook.configuration.flespi"}]},"maxItems":5,"minItems":1,"title":"HTTP requests chain","type":"array"},"webhook.configuration.custom":{"description":"REST API call to custom HTTP server","properties":{"body":{"description":"HTTP request body template. If the body is omitted, the original MQTT payload will be used instead (equivalent to setting body template value to \"%payload%\").\n\nBody text can contain embedded [flespi expressions](https://flespi.com/kb/expressions).\nThe embedded expressions should be enclosed in the % symbols, for example: template text 'topic=\"%topic%\"' will be substituted to 'topic=\"flespi/message/gw/devices/123\"' if MQTT message topic is flespi/message/gw/devices/123.\n\nInside embedded expressions you may access all standard webhook parameters such as: topic, topics[X], payload, responses[X], etc.\n","format":"percent-template-validated","maxLength":4096,"minLength":0,"type":"string","x-schema-format-validator":{"format":"expression"},"x-view-type":"textarea"},"ca":{"description":"Use your custom CA to validate HTTPS connection if your server uses certificate signed by non-public CA","format":"pem-ca","maxLength":4096,"minLength":1000,"type":"string","x-view-type":"textarea"},"delay":{"$ref":"#/definitions/webhook.configuration.delay"},"headers":{"description":"Custom HTTP headers. For example name - \"Authorization\", value - \"FlespiToken XXXXXXXX\".","items":{"properties":{"name":{"description":"Header name","maxLength":1024,"minLength":1,"type":"string"},"value":{"description":"HTTP header value text template.\n\nHeader value text can contain embedded [flespi expressions](https://flespi.com/kb/expressions).\nThe embedded expressions should be enclosed in the % symbols, for example: template text 'topic=\"%topic%\"' will be substituted to 'topic=\"flespi/message/gw/devices/123\"' if MQTT message topic is flespi/message/gw/devices/123.\n\nInside embedded expressions you may access all standard webhook parameters such as: topic, topics[X], payload, responses[X], etc.\n","format":"percent-template-validated","maxLength":4096,"minLength":1,"type":"string","x-schema-format-validator":{"format":"expression"}}},"required":["name","value"],"title":"Header","type":"object","x-view-shrink-field":"name"},"title":"Headers array","type":"array"},"method":{"default":"POST","description":"HTTP method","enum":["POST","GET","PUT","DELETE","PATCH"],"type":"string"},"type":{"const":"custom-server","default":"custom-server","readOnly":true,"type":"string"},"uri":{"description":"HTTP request URI template, should start from protocol specification - http or https.\n\nURI template text can contain embedded [flespi expressions](https://flespi.com/kb/expressions).\nThe embedded expressions should be enclosed in the % symbols, for example: template text 'topic=\"%topic%\"' will be substituted to 'topic=\"flespi/message/gw/devices/123\"' if MQTT message topic is flespi/message/gw/devices/123.\n\nInside embedded expressions you may access all standard webhook parameters such as: topic, topics[X], payload, responses[X], etc.\n","format":"percent-template-validated","maxLength":1024,"minLength":8,"pattern":"^https?:\\/\\/[-a-zA-Z0-9@:%._\\+~#=/]+","title":"URI","type":"string","x-schema-format-validator":{"format":"expression"},"x-view-placeholder":"https://"},"validate":{"$ref":"#/definitions/webhook.configuration.validate"},"validate_response":{"$ref":"#/definitions/webhook.configuration.validate_response"}},"required":["method","uri","type"],"title":"HTTP server","type":"object","x-view-order":["method","uri","body","ca","headers","validate","validate_response","delay"]},"webhook.configuration.delay":{"description":"The delay parameter specifies the minimum time between consecutive webhook requests.\nKeep in mind that any non-zero delay may slow down the processing of all triggered messages because webhook processes them one by one, not in parallel.\n","maximum":30,"minimum":0,"title":"Delay","type":"number"},"webhook.configuration.flespi":{"description":"REST API call to flespi platform","properties":{"body":{"description":"HTTP request body template. If the body is omitted, the original MQTT payload will be used instead (equivalent to setting body template value to \"%payload%\").\n\nBody text can contain embedded [flespi expressions](https://flespi.com/kb/expressions).\nThe embedded expressions should be enclosed in the % symbols, for example: template text 'topic=\"%topic%\"' will be substituted to 'topic=\"flespi/message/gw/devices/123\"' if MQTT message topic is flespi/message/gw/devices/123.\n\nInside embedded expressions you may access all standard webhook parameters such as: topic, topics[X], payload, responses[X], etc.\n","format":"percent-template-validated","maxLength":4096,"minLength":0,"type":"string","x-schema-format-validator":{"format":"expression"},"x-view-type":"textarea"},"cid":{"description":"Template text for cid value to perform the flespi API call in the specified subaccount. This is equivalent of setting \"f-flespi-cid\" HTTP header when executing the webhook.\n\nTemplate text can contain embedded [flespi expressions](https://flespi.com/kb/expressions).\nThe embedded expressions should be enclosed in the % symbols, for example: template text '%cid%\"' will be substituted to '1234\"' if MQTT message is generated by subaccount with cid 1234.\n\nInside embedded expressions you may access all standard webhook parameters such as: topic, topics[X], payload, responses[X], etc.\n","format":"percent-template-validated","maxLength":1024,"title":"cid","type":"string","x-schema-format-validator":{"format":"expression"}},"delay":{"$ref":"#/definitions/webhook.configuration.delay"},"method":{"default":"POST","description":"HTTP method","enum":["POST","GET","PUT","DELETE","PATCH"],"type":"string"},"type":{"const":"flespi-platform","default":"flespi-platform","readOnly":true,"type":"string"},"uri":{"description":"Request URI template, without protocol specification, starts from slash, e.g. '/gw/devices/all', '/gw/devices/%topics[4]%' or '/platform/customer'.\n\nURI text can contain embedded [flespi expressions](https://flespi.com/kb/expressions).\nThe embedded expressions should be enclosed in the % symbols, for example: template text 'topic=\"%topic%\"' will be substituted to 'topic=\"flespi/message/gw/devices/123\"' if MQTT message topic is flespi/message/gw/devices/123.\n\nInside embedded expressions you may access all standard webhook parameters such as: topic, topics[X], payload, responses[X], etc.\n","format":"percent-template-validated","maxLength":1024,"minLength":3,"pattern":"^/","title":"URI","type":"string","x-schema-format-validator":{"format":"expression"},"x-view-placeholder":"/"},"validate":{"$ref":"#/definitions/webhook.configuration.validate"},"validate_response":{"$ref":"#/definitions/webhook.configuration.validate_response"}},"required":["method","uri","type"],"title":"flespi platform","type":"object","x-view-order":["method","uri","body","cid","validate","validate_response","delay"]},"webhook.configuration.validate":{"description":"Validation is performed before the request is sent. Depending on the validation result, the request can be skipped, retried after a while, or the entire requests chain can be canceled.\n","properties":{"action":{"default":"break","description":"Perform the action.","enum":["break","skip","retry"],"type":"string","x-view-enum-labels":["Deliver the message if the condition is true","Invoke the next request in the chain if the condition is false","Retry message delivery if the condition is false"]},"expression":{"description":"Request validation in [flespi expression format](https://flespi.com/kb/expressions).\n\nInside expression you may access all standard webhook parameters such as: topic, topics[X], payload, responses[X], etc.\n","format":"expression","maxLength":1024,"minLength":1,"type":"string","x-view-type":"expression"}},"required":["expression","action"],"title":"HTTP request validation","type":"object","x-view-order":["expression","action"]},"webhook.configuration.validate_response":{"description":"Validation is performed after the response is received. Depending on the validation result, the request can be retried after a while, or the entire requests chain can be canceled.\n","properties":{"action":{"default":"break","description":"Perform the action.","enum":["break","retry"],"type":"string","x-view-enum-labels":["Skip message delivery if the condition is false","Retry message delivery if the condition is false"]},"expression":{"description":"Expression to validate the HTTP response of server in [flespi expression format](https://flespi.com/kb/expressions).\n\nInside expression you may access all standard webhook parameters such as: topic, topics[X], payload, responses[X], etc.\n","format":"expression","maxLength":1024,"minLength":1,"type":"string","x-view-type":"expression"}},"required":["expression","action"],"title":"HTTP response validation","type":"object"},"webhook.name":{"description":"webhook name","maxLength":255,"minLength":0,"type":"string"},"webhook.post":{"properties":{"configuration":{"$ref":"#/definitions/webhook.configuration"},"enabled":{"$ref":"#/definitions/item.enabled-default"},"metadata":{"$ref":"#/definitions/metadata"},"name":{"$ref":"#/definitions/webhook.name"},"queue_ttl":{"default":86400,"description":"Time to live for messages in the queue before they expire. Expired messages will no longer be delivered","format":"uint32","maximum":864000,"minimum":60,"title":"Queue TTL","type":"integer","x-view-divider":3600,"x-view-unit":"hours"},"triggers":{"$ref":"#/definitions/webhook.triggers"}},"required":["triggers","configuration"],"title":"webhook","type":"object","x-view-order":["name","triggers","configuration","enabled","queue_ttl","metadata"]},"webhook.put":{"properties":{"configuration":{"$ref":"#/definitions/webhook.configuration"},"enabled":{"$ref":"#/definitions/item.enabled"},"metadata":{"$ref":"#/definitions/metadata"},"name":{"$ref":"#/definitions/webhook.name"},"queue_ttl":{"$ref":"#/definitions/webhook.queue_ttl"},"triggers":{"$ref":"#/definitions/webhook.triggers"}},"type":"object","x-view-order":["name","triggers","configuration","enabled","queue_ttl","metadata"]},"webhook.queue_ttl":{"description":"Time to live for messages in the queue before they expire. Expired messages will no longer be delivered","format":"uint32","maximum":864000,"minimum":60,"title":"Queue TTL","type":"integer","x-view-divider":3600,"x-view-unit":"hours"},"webhook.triggers":{"description":"A list of triggers. Webhook will subscribe to the listed triggers.","items":{"description":"trigger configuration","properties":{"filter":{"description":"Extra filter applied to the message","properties":{"cid":{"description":"Skip messages outside given cid","type":"integer"},"payload":{"description":"Payload filter, in [flespi expression format](https://flespi.com/kb/expressions).\nTreat the payload as JSON, string, number, boolean, or null and check if the expression evaluates to a positive result.\nThe expression syntax is the same as any other expression/filter/selector in the system. Use the `$` sign to access the payload without JSON.\n\nExamples:\n- Payload is 10, `$>10` is false, `$<=10` is true.\n- Payload is `{\"abc\":10}`, `abc>10` is false, `abc<=10` is true.\n","format":"expression","maxLength":4096,"minLength":1,"type":"string","x-view-type":"expression"}},"type":"object"},"topic":{"description":"The webhook will subscribe to that topic's filter. You can use any topic. There are many predefined topics that you can use as a trigger:\n - flespi/log/gw/devices/+/+/connected - a device was connected\n - flespi/log/gw/devices/+/settings/{name}/accepted - setting has accepted by the device\n - flespi/log/gw/devices/+/settings/name/rejected - setting has not accepted by the device\n - flespi/state/gw/devices/+/telemetry/{key} - the telemetry has changed\nThe complete list of predefined topics is here: https://flespi.com/kb/mqtt-topics\n","maxLength":1024,"minLength":1,"type":"string","x-view-placeholder":"flespi/","x-view-type":"topic"}},"required":["topic"],"title":"Trigger","type":"object","x-view-order":["topic","filter"],"x-view-shrink-field":"topic"},"maxItems":3,"minItems":1,"title":"Triggers","type":"array"},"webhooks.result":{"properties":{"result":{"description":"reply with webhooks","items":{"$ref":"#/definitions/webhook"},"type":"array"}},"type":"object"}},"host":"flespi.io","info":{"description":"Platform [REST API](https://flespi.com/kb/flespi-api-basics) provides methods to manage your account data and authorization [tokens](https://flespi.com/kb/tokens-access-keys-to-flespi-platform).\n\nTo identify each REST request FlespiToken key has to be passed in the HTTP call via a header: **Authorization: FlespiToken XXXXXXXXXX**.\nThe list of tokens available to you is provided in the [flespi panel](https://flespi.io).\nYou can create other tokens to work with the flespi platform but only \"master\" tokens can be used to authorize these API requests\n(\"master\" tokens have a field \"flag\" = 1, otherwise 403 error will be returned).\n\nThere are auxiliary headers available to set in a REST API request:\n  - x-flespi-cid: Operate as given subaccount.\n  - x-flespi-app: The application name (max 63 characters). It is attached to the log message under the 'app' parameter.\n  - x-flespi-trace: The request ID (max 31 characters). It is attached to the log message under the 'trace' parameter. If omitted, a unique ID is generated.\n\nUsing this API you can automate your [flespi account management](https://flespi.com/kb/account-getting-inside-flespi) actions:\n  - create, list and remove [authorization tokens](https://flespi.com/kb/tokens-access-keys-to-flespi-platform) allowing your applications to properly work with the flespi products;\n  - create, list and remove [subaccounts](https://flespi.com/kb/subaccounts-organizing-dedicated-flespi-accounts-for-telematics-projects) for hierarchical account organization;\n  - create, list and remove [realms and applications](https://flespi.com/kb/realms-create-and-manage-users) to organize users or using your SSO authentification system to provide access to flespi;\n  - create, list and remove [grants](https://flespi.com/kb/grants-sharing-access-between-unrelated-subaccounts) to override strict hierarchical account organization rules;\n  - access via REST API and download all issued invoices (available for commercial users only);\n  - access REST API logs of all your operations;\n\nCheck [this article](https://flespi.com/blog/keeping-accounts-organized) for more information on flespi security terminology.\n","title":"flespi platform REST API","version":"1.0"},"parameters":{"billing-fields":{"collectionFormat":"csv","description":"All possible fields available for the customer billing information. If this parameter is specified in the query path of API call returned customer's billing information will consists only from JSON object with specified fields. If this parameter is not specified customer's billing will be returned as JSON object with default fields.","in":"query","items":{"enum":["id","entity","contract","emails","auto_payment","payment_method","cash_balance","balance","currency","multiplier","tariff","estimated_invoice"],"type":"string"},"name":"fields","required":false,"type":"array","x-flespi-fields-description":{"$ref":"#/definitions/billing"}},"cid-header":{"description":"Operate as given subaccount.","in":"header","name":"x-flespi-cid","type":"integer","x-view-selector":"subaccounts"},"customer-fields":{"collectionFormat":"csv","description":"All possible fields available for the customer information. If this parameter is specified in the query path of API call returned customer information will consists only from JSON object with specified fields. If this parameter is not specified customer information will be returned as JSON object with default fields.","in":"query","items":{"enum":["id","name","email","counters","sla","notify","owner_id","region","created","accessed","metadata","enabled"],"type":"string"},"name":"fields","required":false,"type":"array","x-flespi-fields-description":{"$ref":"#/definitions/customer"}},"deleted-fields":{"collectionFormat":"csv","description":"Comma-separated subset of deleted-item fields to return. Use to minimize response size when you only need specific fields.\n\nEach field description is specified in this API call schema under '#/definitions/deleted.item' definition reference.\n","in":"query","items":{"enum":["id","cid","origin","type","item_id","created","deleted","data"],"type":"string"},"name":"fields","required":false,"type":"array","x-flespi-fields-description":{"$ref":"#/definitions/deleted.item"}},"deleted-selector":{"collectionFormat":"csv","description":"Select deleted items for the API operation. Selector format is \"<field><operand><value>\".\n - <field> you can take any property specified in this API call schema under '#/definitions/deleted.item' definition reference.\n - <operand> can be <(less), >(greater), =(equal), ~= (not equal).\n - <value> - compare with <field> according to <operand>. For string values place them in double quotes and use wildcards: '*' or '?'.\nFor complex selectors, use [filtering expressions](https://flespi.com/kb/expressions) wrapped inside curly braces, e.g. \"{field-filter-rule1 || field-filter-rule2}\" to combine with OR, or \"{field-filter-rule1 && field-filter-rule2}\" to combine with AND.\n\nSome samples you may use in deleted-selector:\n  - **all** - select every deleted item available for the user(token), this is a special selector format\n  - **1,2,3** - select deleted items with given storage IDs 1, 2 and 3\n  - **type=11** - select deleted devices (other common values: 9 for channels, 12 for streams)\n  - **item_id=42** - select deleted items whose original entity ID was 42\n  - **{deleted > (now() - 86400)}** - select items removed within the last 24 hours\n","in":"path","items":{"type":"string"},"name":"deleted-selector","required":true,"type":"array","x-flespi-allowed-fields-in-selectors":{"$ref":"#/definitions/deleted.item"}},"force-header":{"description":"Set to 1 in order to force operation completion ignoring some checks","enum":[0,1],"in":"header","name":"x-flespi-force","type":"integer"},"grant-fields":{"collectionFormat":"csv","description":"All possible fields available for the grant. If this parameter is specified in the query path of API call each returned grant will consists only from JSON object with specified fields. If this parameter is not specified each grant will be returned as JSON object with default fields.","in":"query","items":{"enum":["id","cid","items","name","enabled","blocked","metadata","created"],"type":"string"},"name":"fields","required":false,"type":"array","x-flespi-fields-description":{"$ref":"#/definitions/grant"}},"grant-subaccount-fields":{"collectionFormat":"csv","description":"All possible fields available for the subaccount linked to the grant.\nIf this parameter is specified in the query path of API call each returned subaccount linked to the grant will consists only from JSON object with specified fields.\nIf this parameter is not specified each subaccount linked to the grant grant will be returned as JSON object with default fields.\n","in":"query","items":{"enum":["grant_id","subaccount_id","auto_created","name","email","counters","sla","notify","owner_id","blocked","cid","limit_id","region","created","accessed","metadata","enabled"],"type":"string"},"name":"fields","required":false,"type":"array","x-flespi-fields-description":{"$ref":"#/definitions/grant.subaccount"}},"grant-subaccounts-selector":{"collectionFormat":"csv","description":"Select subaccount linked to the grant for the API operation.\nSelected subaccounts are only within previously selected grants.\n\nSome samples you may use in grant-subaccounts-selector:\n  - **all** - select all subaccounts available for the user(token), this is special selector format\n  - **1,2,3,4** - select subaccount with ID 1,2,3 and 4, this is special selector format\n  - **name=\"XXX\\*\"** - select subaccounts which name starts from XXX, by field 'name' with wildcards\n  - **metadata.clientid=4** - select subaccounts which metadata has parameter 'clientid' with value 4, by [webhook metadata](https://flespi.com/kb/metadata-entitys-custom-info)\n\nSample API calls:\n  - **GET /platform/grants/all/subaccounts/all?fields=id,name** - for all available grants return subaccounts with their id and name\n  - **GET /platform/grants/1/subaccount/all?fields=id,name,email** - select grant with ID 1 and return all its subaccounts with their its id, name and email\n","in":"path","items":{"type":"string"},"name":"grant-subaccounts-selector","required":true,"type":"array","x-flespi-allowed-fields-in-selectors":{"$ref":"#/definitions/grant.subaccount"},"x-view-selector":"subaccounts"},"grants-selector":{"collectionFormat":"csv","description":"Select [grant](https://flespi.com/kb/grants-sharing-access-between-unrelated-subaccounts) for the API operation.\n\nSome samples you may use in grants-selector:\n  - **all** - select all grants available for the user(token), this is special selector format\n  - **1,2,3,4** - select grant with ID 1,2,3 and 4, this is special selector format\n  - **name=\"XXX\\*\"** - select grants which name starts from XXX, by field 'name' with wildcards\n  - **metadata.clientid=4** - select grants which metadata has parameter 'clientid' with value 4, by [webhook metadata](https://flespi.com/kb/metadata-entitys-custom-info)\n  - **{cid=123 || cid=456}** - select grants from subaccounts with id 123 and 456, by using expression and 'cid' field (subaccount assignment)\n\nSample API calls:\n  - **GET /platform/grants/all?fields=id,name** - select all available grants and return their id and name\n  - **GET /platform/grants/1?fields=id,name,items** - select grant with ID 1 and return its id, name and granted items\n","in":"path","items":{"type":"string"},"name":"grants-selector","required":true,"type":"array","x-flespi-allowed-fields-in-selectors":{"$ref":"#/definitions/grant"}},"identity-provider-fields":{"collectionFormat":"csv","description":"All possible fields available for the identity provider.\nIf this parameter is specified in the query path of API call each returned identity provider will consists only from JSON object with specified fields.\nIf this parameter is not specified each identity provider will be returned as JSON object with default fields.\n","in":"query","items":{"enum":["id","cid","type","name","configuration","public_info","blocked","metadata","created"],"type":"string"},"name":"fields","required":false,"type":"array","x-flespi-fields-description":{"$ref":"#/definitions/identity-provider"}},"identity-provider-selector":{"collectionFormat":"csv","description":"Select identity provider for the API operation.\n\nSome samples you may use in identity-provider-selector:\n  - **all** - select all identity providers available for the user(token), this is special selector format\n  - **1,2,3,4** - select identity providers with ID 1,2,3 and 4, this is special selector format\n  - **name=\"XXX\\*\"** - select identity provider which name starts from XXX, by field 'name' with wildcards\n  - **metadata.clientid=4** - select identity providers which metadata has parameter 'clientid' with value 4, by [realms metadata](https://flespi.com/kb/metadata-entitys-custom-info)\n  - **{cid=123 || cid=456}** - select identity providers that belong to accounts with id 123 and 456, by using expression and 'cid' field (subaccount assignment)\n\nSample API calls:\n  - **GET /platform/identity-providers/all?fields=id,name** - select all available identity providers and return their id and name\n  - **GET /platform/identity-providers/1?fields=id,name,configuration,metadata** - select identity provider with ID 1 and return its id, name, configuration and metadata\n","in":"path","items":{"type":"string"},"name":"identity-provider-selector","required":true,"type":"array","x-flespi-allowed-fields-in-selectors":{"$ref":"#/definitions/identity-provider"},"x-view-selector":"identity-providers"},"invoice-fields":{"collectionFormat":"csv","description":"All possible fields available for the invoice. If this parameter is specified in the query path of API call each returned invoice will consists only from JSON object with specified fields. If this parameter is not specified each invoice will be returned as JSON object with default fields.","in":"query","items":{"enum":["id","number","date","period","entity","items","amount","balance","currency","multiplier","statistics","payment","pdf","closed","credits"],"type":"string"},"name":"fields","required":false,"type":"array","x-flespi-fields-description":{"$ref":"#/definitions/invoice"}},"invoices-selector":{"collectionFormat":"csv","default":["all"],"description":"Specify invoices to select for API call.\n\nSome samples you may use in invoices-selector:\n  - **all** - select all invoices issued to customer, this is special selector format\n  - **1,2,3,4** - select invoices with ID 1,2,3 and 4, this is special selector format\n  - **period=\"YYYY-MM-DD\"** - select invoice issued for period YYYY-MM-DD, by field 'period'\n  - **closed=false\"** - select invoice that are not yet closed(not paid)\n\nSample API calls:\n  - **GET /platform/billing/invoices/all?fields=id,period,link** - select all available invoices and return their id, period and payment link\n  - **GET /platform/billing/invoices/closed=false?fields=link** - select unpayed yet invoices and return their payment link\n","in":"path","items":{"type":"string"},"name":"invoices-selector","required":true,"type":"array","x-flespi-allowed-fields-in-selectors":{"$ref":"#/definitions/invoice"}},"limit":{"description":"Maximum number of items to return.\n","in":"query","name":"limit","required":false,"type":"integer"},"limit-fields":{"collectionFormat":"csv","description":"All possible fields available for the limit.\nIf this parameter is specified in the query path of API call each returned limit will consists only from JSON object with specified fields.\nIf this parameter is not specified each limit will be returned as JSON object with default fields.\n","in":"query","items":{"enum":["id","name","description","blocking_duration","api_calls","api_traffic","channels_count","channel_messages","channel_storage","channel_traffic","channel_connections","channel_udp_packets","containers_count","container_storage","cdns_count","cdn_storage","cdn_traffic","devices_count","device_storage","device_media_traffic","device_media_storage","streams_count","stream_storage","stream_traffic","modems_count","mqtt_sessions","mqtt_messages","mqtt_session_storage","mqtt_retained_storage","mqtt_subscriptions","sms_count","ai_credits","ai_calls","agents_count","connectors_count","tokens_count","subaccounts_count","limits_count","realms_count","realm_users_count","calcs_count","calcs_storage","plugins_count","plugin_traffic","plugin_buffered_messages","groups_count","webhooks_count","webhook_storage","webhook_traffic","grants_count","identity_providers_count","geofences_count","assets_count","asset_storage","cid","metadata","created"],"type":"string"},"name":"fields","required":false,"type":"array","x-flespi-fields-description":{"$ref":"#/definitions/limit"}},"limits-selector":{"collectionFormat":"csv","description":"Select [limit](https://flespi.com/kb/subaccounts-organizing-dedicated-flespi-accounts-for-telematics-projects#limits) for the API operation.\n\nSome samples you may use in limits-selector:\n  - **all** - select all limits available for the user(token), this is special selector format\n  - **1,2,3,4** - select limit with ID 1,2,3 and 4, this is special selector format\n  - **name=\"XXX\\*\"** - select limitss which name starts from XXX, by field 'name' with wildcards\n  - **metadata.clientid=4** - select limits which metadata has parameter 'clientid' with value 4, by [limit metadata](https://flespi.com/kb/metadata-entitys-custom-info)\n  - **{cid=123 || cid=456}** - select limits from subaccounts with id 123 and 456, by using expression and 'cid' field (subaccount assignment)\n\nSample API calls:\n  - **GET /platform/limits/all?fields=id,name** - select all available limits and return their id and name\n  - **GET /platform/limits/1?fields=id,name,description** - select limit with ID 1 and return its id, name and description\n","in":"path","items":{"type":"string"},"name":"limits-selector","required":true,"type":"array","x-flespi-allowed-fields-in-selectors":{"$ref":"#/definitions/limit"}},"oauth-fields":{"collectionFormat":"csv","description":"CSV-formatted list of OAuth acount's fields to be returned in reply collection.","in":"query","items":{"enum":["id","key","provider","created"],"type":"string"},"name":"fields","required":false,"type":"array","x-flespi-fields-description":{"$ref":"#/definitions/oauth"}},"oauth-selector":{"collectionFormat":"csv","description":"OAuth selector - CSV-formatted string to filter OAuth account records that have to be listed or removed.\nKeyword **\"all\"** will select all OAuth account records ignoring other filtering parameters,\nCSV-list 1,2,3 will select only records with IDs 1,2 and 3.  Available filtering fields: key, provider.\n","in":"path","items":{"type":"string"},"name":"oauth-selector","required":true,"type":"array","x-flespi-allowed-fields-in-selectors":{"$ref":"#/definitions/oauth"}},"offset":{"description":"Number of items to skip before starting to return results.\n","in":"query","name":"offset","required":false,"type":"integer"},"realm-fields":{"collectionFormat":"csv","description":"All possible fields available for the realm. If this parameter is specified in the query path of API call each returned realm will consists only from JSON object with specified fields. If this parameter is not specified each realm will be returned as JSON object with default fields.","in":"query","items":{"enum":["id","public_id","cid","name","enabled","oauth_server","public_info","role","users_count","roles_count","blocked","metadata","created"],"type":"string"},"name":"fields","required":false,"type":"array","x-flespi-fields-description":{"$ref":"#/definitions/realm"}},"realm-identity-provider-fields":{"collectionFormat":"csv","description":"All possible fields available for the realm identity provider.\nIf this parameter is specified in the query path of API call each returned realm identity provider will consists only from JSON object with specified fields.\nIf this parameter is not specified each realm identity provider will be returned as JSON object with default fields.\n","in":"query","items":{"enum":["realm_id","identity_provider_id","enabled","allow_registration","new_user_name_source","type","name","public_info","blocked"],"type":"string"},"name":"fields","required":false,"type":"array","x-flespi-fields-description":{"$ref":"#/definitions/realm-identity-provider"}},"realm-identity-provider-selector":{"collectionFormat":"csv","default":[],"description":"Select realm identity provider for the API operation.\n\nIdentity providers are selected within specified realms in the path only (using {realm-selector} as first level selector than {realm-identity-provider-selector} is applied).\n\nSome samples you may use in realm-identity-provider-selector:\n  - **all** - select all realm identity providers available for the user(token), this is special selector format\n  - **1,2,3,4** - select realm identity providers with ID 1,2,3 and 4, this is special selector format\n  - **name=\"XXX\\*\"** - select realm identity provider which name starts from XXX, by field 'name' with wildcards\n\nSample API calls:\n  - **GET /platform/realms/all/identity-providers/all?fields=id,name** - select all identity providers linked to all available realms and return their id and name\n  - **GET /platform/realms/1/identity-providers/all?fields=id,name,type** - select all identity providers for realm with ID 1 and return their id, name and type\n","in":"path","items":{"type":"string"},"name":"realm-identity-provider-selector","required":true,"type":"array","x-flespi-allowed-fields-in-selectors":{"$ref":"#/definitions/realm-identity-provider"},"x-view-selector":"realm-identity-providers"},"realm-role-fields":{"collectionFormat":"csv","description":"All possible fields available for the realm role.\nIf this parameter is specified in the query path of the API call then each returned role JSON object contains only specified fields.\nIf this parameter is not specified then each returned role JSON object contains default fields.\n","in":"query","items":{"enum":["id","realm_id","type","parent_id","home","token_params","created","metadata"],"type":"string"},"name":"fields","required":false,"type":"array","x-flespi-fields-description":{"$ref":"#/definitions/realm-role"}},"realm-role-selector":{"collectionFormat":"csv","default":[],"description":"Select realm role for the API operation.\n\nRoles are selected within specified realms in the path only (using {realm-selector} as first level selector then {realm-role-selector} is applied).\n\nSome samples you may use in realm-role-selector:\n  - **all** - select all realm roles available for the user(token), this is special selector format\n  - **1,2,3,4** - select realm roles with ID 1,2,3 and 4, this is special selector format\n  - **name=\"XXX\\*\"** - select realm roles which name starts from XXX, by field 'name' with wildcards\n\nSample API calls:\n  - **GET /platform/realms/all/roles/all?fields=id,type** - select all defined roles for all available realms and return their id and type\n  - **GET /platform/realms/1/roles/all?fields=id,type,token_params** - select all roles for realm with ID 1 and return their id, type and token information\n","in":"path","items":{"type":"string"},"name":"realm-role-selector","required":true,"type":"array","x-flespi-allowed-fields-in-selectors":{"$ref":"#/definitions/realm-role"},"x-view-selector":"realm-roles"},"realm-selector":{"collectionFormat":"csv","default":[],"description":"Select [realm](https://flespi.com/kb/realms-create-and-manage-users) for the API operation.\n\nSome samples you may use in realm-selector:\n  - **all** - select all realms available for the user(token), this is special selector format\n  - **1,2,3,4** - select realms with ID 1,2,3 and 4, this is special selector format\n  - **name=\"XXX\\*\"** - select realm which name starts from XXX, by field 'name' with wildcards\n  - **metadata.clientid=4** - select realms which metadata has parameter 'clientid' with value 4, by [realms metadata](https://flespi.com/kb/metadata-entitys-custom-info)\n  - **{cid=123 || cid=456}** - select realms that belong to accounts with id 123 and 456, by using expression and 'cid' field (subaccount assignment)\n\nSample API calls:\n  - **GET /platform/realms/all?fields=id,name** - select all available realms and return their id and name\n  - **GET /platform/realms/1?fields=id,name,public_info,metadata** - select realm with ID 1 and return its id, name, public info and metadata\n","in":"path","items":{"type":"string"},"name":"realm-selector","required":true,"type":"array","x-flespi-allowed-fields-in-selectors":{"$ref":"#/definitions/realm"},"x-view-selector":"realms"},"realm-user-fields":{"collectionFormat":"csv","description":"All possible fields available for the realm user.\nIf this parameter is specified in the query path of API call each returned realm user will consists only from JSON object with specified fields.\nIf this parameter is not specified each realm user will be returned as JSON object with default fields.\n","in":"query","items":{"enum":["id","realm_id","name","enabled","has_password","subaccount_id","role","token_id","token","created","metadata"],"type":"string"},"name":"fields","required":false,"type":"array","x-flespi-fields-description":{"$ref":"#/definitions/realm-user"}},"realm-user-selector":{"collectionFormat":"csv","default":[],"description":"Select realm user for the API operation.\n\nUsers are selected within specified realms in the path only (using {realm-selector} as first level selector than {realm-user-selector} is applied).\n\nSome samples you may use in realm-user-selector:\n  - **all** - select all realm users available for the user(token), this is special selector format\n  - **1,2,3,4** - select realm identity providers with ID 1,2,3 and 4, this is special selector format\n  - **name=\"XXX\\*\"** - select realm identity provider which name starts from XXX, by field 'name' with wildcards\n\nSample API calls:\n  - **GET /platform/realms/all/users/all?fields=id,name** - select all defined users for all available realms and return their id and name\n  - **GET /platform/realms/1/users/all?fields=id,name,token_id,role** - select all users for realm with ID 1 and return their id, name, token ID and role information\n","in":"path","items":{"type":"string"},"name":"realm-user-selector","required":true,"type":"array","x-flespi-allowed-fields-in-selectors":{"$ref":"#/definitions/realm-user"},"x-view-selector":"realmusers"},"subaccount-fields":{"collectionFormat":"csv","description":"All possible fields available for the subaccount. If this parameter is specified in the query path of API call each returned subaccount will consists only from JSON object with specified fields. If this parameter is not specified each subaccount will be returned as JSON object with default fields.","in":"query","items":{"enum":["id","name","email","counters","sla","notify","owner_id","blocked","limit_id","cid","region","created","accessed","metadata","enabled"],"type":"string"},"name":"fields","required":false,"type":"array","x-flespi-fields-description":{"$ref":"#/definitions/subaccount"}},"subaccounts-selector":{"collectionFormat":"csv","description":"Select [subaccount](https://flespi.com/kb/subaccounts-organizing-dedicated-flespi-accounts-for-telematics-projects) for the API operation.\n\nSome samples you may use in subaccounts-selector:\n  - **all** - select all subaccounts available for the user(token), this is special selector format\n  - **1,2,3,4** - select subaccounts with ID 1,2,3 and 4, this is special selector format\n  - **name=\"XXX\\*\"** - select subaccount which name starts from XXX, by field 'name' with wildcards\n  - **metadata.clientid=4** - select subaccounts which metadata has parameter 'clientid' with value 4, by [subaccounts metadata](https://flespi.com/kb/metadata-entitys-custom-info)\n  - **{cid=123 || cid=456}** - select subaccounts that belong to accounts with id 123 and 456, by using expression and 'cid' field (subaccount assignment)\n\nSample API calls:\n  - **GET /platform/subaccounts/all?fields=id,name** - select all available subaccounts and return their id and name\n  - **GET /platform/subaccounts/1?fields=id,name,email,metadata** - select subaccount with ID 1 and return its id, name, email and metadata\n","in":"path","items":{"type":"string"},"name":"subaccounts-selector","required":true,"type":"array","x-flespi-allowed-fields-in-selectors":{"$ref":"#/definitions/subaccount"},"x-view-selector":"subaccounts"},"token-fields":{"collectionFormat":"csv","description":"All possible fields available for the token. If this parameter is specified in the query path of API call each returned token will consists only from JSON object with specified fields. If this parameter is not specified each token will be returned as JSON object with default fields.","in":"query","items":{"enum":["id","key","expire","info","ttl","accessed","created","blocked","access","access_type","enabled","origins","ips","cid","realm_id","user_id","rest_calls","rest_traffic","mqtt_sessions","mqtt_traffic","mqtt_messages","metadata"],"type":"string"},"name":"fields","required":false,"type":"array","x-flespi-fields-description":{"$ref":"#/definitions/token"}},"tokens-selector":{"collectionFormat":"csv","description":"Select [token](https://flespi.com/kb/tokens-access-keys-to-flespi-platform) for the API operation.\n\nSome samples you may use in tokens-selector:\n  - **all** - select all tokens available for the user, this is special selector format\n  - **1,2,3,4** - select tokens with ID 1,2,3 and 4, this is special selector format\n  - **XXX\"** - select token with XXXX key value, this is special selector format\n  - **metadata.clientid=4** - select tokens which metadata has parameter 'clientid' with value 4, by [subaccounts metadata](https://flespi.com/kb/metadata-entitys-custom-info)\n  - **{cid=123 || cid=456}** - select tkoens that belong to accounts with id 123 and 456, by using expression and 'cid' field (subaccount assignment)\n\nSample API calls:\n  - **GET /platform/tokens/all?fields=id,key** - select all available tokens and return their id and key\n  - **GET /platform/tokens/1?fields=id,key,access,metadata** - select token with ID 1 and return its id, key, access and metadata information\n","in":"path","items":{"type":"string"},"name":"tokens-selector","required":true,"type":"array","x-flespi-allowed-fields-in-selectors":{"$ref":"#/definitions/token"}},"user-identity-provider-fields":{"collectionFormat":"csv","description":"All possible fields available for the realm user identity provider link.\nIf this parameter is specified in the query path of API call each returned realm user identity provider link will consists only from JSON object with specified fields.\nIf this parameter is not specified each realm user identity provider link will be returned as JSON object with default fields.\n","in":"query","items":{"enum":["realm_id","user_id","identity_provider_id"],"type":"string"},"name":"fields","required":false,"type":"array","x-flespi-fields-description":{"$ref":"#/definitions/user_account"}},"user-identity-provider-selector":{"collectionFormat":"csv","default":[],"description":"Selector for identity provider accounts linked to the realm user.\n","in":"path","items":{"type":"string"},"name":"user-identity-provider-selector","required":true,"type":"array","x-flespi-allowed-fields-in-selectors":{"$ref":"#/definitions/user_account"}},"webhook-fields":{"collectionFormat":"csv","description":"All possible fields available for the webhook. If this parameter is specified in the query path of API call each returned webhook will consists only from JSON object with specified fields. If this parameter is not specified each webhook will be returned as JSON object with default fields.","in":"query","items":{"enum":["id","cid","name","triggers","configuration","enabled","queue_ttl","queue_size","blocked","traffic","errors","messages","metadata","created"],"type":"string"},"name":"fields","required":false,"type":"array","x-flespi-fields-description":{"$ref":"#/definitions/webhook"}},"webhooks-selector":{"collectionFormat":"csv","description":"Select [webhook](https://flespi.com/kb/webhooks-actions-triggered-by-specific-events) for the API operation.\n\nSome samples you may use in webhooks-selector:\n  - **all** - select all webhooks available for the user(token), this is special selector format\n  - **1,2,3,4** - select webhook with ID 1,2,3 and 4, this is special selector format\n  - **name=\"XXX\\*\"** - select webhooks which name starts from XXX, by field 'name' with wildcards\n  - **metadata.clientid=4** - select webhooks which metadata has parameter 'clientid' with value 4, by [webhook metadata](https://flespi.com/kb/metadata-entitys-custom-info)\n  - **{cid=123 || cid=456}** - select webhooks from subaccounts with id 123 and 456, by using expression and 'cid' field (subaccount assignment)\n\nSample API calls:\n  - **GET /platform/webhooks/all?fields=id,name** - select all available webhooks and return their id and name\n  - **GET /platform/webhooks/1?fields=id,name,triggers,configuration** - select webhook with ID 1 and return its id, name, triggers and configuration\n","in":"path","items":{"type":"string"},"name":"webhooks-selector","required":true,"type":"array","x-flespi-allowed-fields-in-selectors":{"$ref":"#/definitions/webhook"},"x-view-selector":"webhooks"}},"paths":{"/billing":{"get":{"description":"Access to customer billing configuration and current account balance.\n\nAlso method provides access to estimated invoice for current month that will be issued to customer on the first day of next month.\n\nCall format: **GET /platform/billing?fields=field1,field2,field3**\nwhere fields is optional arguments to minimize the size of returned JSON\n","parameters":[{"$ref":"#/parameters/billing-fields"}],"responses":{"200":{"description":"OK. Return customer's billing data.","schema":{"$ref":"#/definitions/billing.result"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Retrieve customer billing information","tags":["billing"],"x-flespi-extra-parameters":{"grant-access":"operate-as"},"x-view-group":"Billing"},"put":{"description":"Update customer billing configuration - billing emails or enable/disable auto-payment.\n\nAny modifications to customer contract - billing entity(company information), upgrade, downgrade, refundable deposit operations are executed by flespi Support team upon request via flespi chat.\n\nCall format: **PUT /platform/billing?fields=field1,field2,field3**\nwhere fields is optional arguments to minimize the size of returned JSON\n","parameters":[{"$ref":"#/parameters/billing-fields"},{"description":"Modification data","in":"body","name":"data","required":true,"schema":{"$ref":"#/definitions/billing.put"}}],"responses":{"200":{"description":"OK. Return customer's billing data.","schema":{"$ref":"#/definitions/billing.result"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Update customer billing configuration","tags":["billing"],"x-flespi-extra-parameters":{"grant-access":"operate-as"},"x-view-group":"Billing"}},"/billing/invoices/{invoices-selector}":{"get":{"description":"Get collection of invoice issued to customer.\n\nUse special keyword \"all\" to retrieve all invoices. Specify filtering conditions within path in 'invoices-selector' to retrieve only invoices that conforms to specified criterias.\n\nCall format: **GET /platform/billing/invoices/{invoices-selector}?fields=field1,field2,field3&limit=10&offset=0**\nwhere fields, limit and offset are optional arguments to minimize the size of returned JSON\n","parameters":[{"$ref":"#/parameters/invoices-selector"},{"$ref":"#/parameters/invoice-fields"}],"responses":{"200":{"description":"OK. Return customer's invoices data.","schema":{"$ref":"#/definitions/invoices.result"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Retrieve issued invoices","tags":["billing"],"x-flespi-extra-parameters":{"grant-access":"operate-as"},"x-view-group":"Billing"}},"/billing/invoices/{invoices-selector}/charge":{"post":{"description":"Attempt to charge selected invoices according currently stored payment information.\nThis method is useful to understand if auto-payment for configured default payment method will work correctly.\n\nUse special keyword \"closed=false\" to charge all invoices that are not yet paid.\n\nCall format: **POST /platform/billing/invoices/{invoices-selector}/charge**\n","parameters":[{"$ref":"#/parameters/invoices-selector"}],"responses":{"200":{"description":"OK. Return charge operation result for selected invoices.","schema":{"$ref":"#/definitions/invoices.charge.result"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Attempt to charge invoice","tags":["billing"],"x-flespi-extra-parameters":{"grant-access":"operate-as"},"x-view-group":"Billing"}},"/billing/payment_portal":{"get":{"description":"Access to external payment portal for payment methods configuration.\n\nWith this method you are able to add or remove payment methods (cards, SEPA accounts, etc) available for your account.\n\nThis is especially useful for correct configuration of auto-charges. Default payment method configured by that link will be automatically charged when auto-payment is enabled.\n\nCall format: **GET /platform/billing/payment_portal**.\n","responses":{"200":{"description":"OK. Return payment portal data.","schema":{"$ref":"#/definitions/billing.payment_portal.result"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Fetch payment portal link.","tags":["billing"],"x-flespi-extra-parameters":{"grant-access":"operate-as"},"x-view-group":"Billing"}},"/changelog-posts":{"get":{"description":"Retrieve changelog posts accumulated for the flespi platform system, sorted by publication time.\n\nEach post published in a forum changelog topic of the platform system is stored by the platform and available with this method.\nThe 'name' field of the post carries the name of the specific changelog it belongs to, e.g. 'platform-api' or 'panel'.\nNew posts are also published in realtime into 'flespi/message/platform/changelog' MQTT topic.\n\nAll filtering parameters should be wrapped inside data={...} argument, for example to return only the latest post use:\n**GET /platform/changelog-posts?data={\"reverse\":true,\"count\":1}**\n\nCall format: **GET /platform/changelog-posts**\n\nBoth the MQTT topic and this method are accessible with any token of the account, including ACL tokens, no extra permissions required.\n","parameters":[{"in":"query","name":"data","schema":{"$ref":"#/definitions/changelog.get"}}],"responses":{"200":{"description":"Changelog posts array.","schema":{"$ref":"#/definitions/changelog.posts"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Fetch changelog posts of the platform system","tags":["changelog"],"x-view-group":"Changelog"}},"/customer":{"get":{"description":"Get your flespi customer account information - registration data, current usage counters, limits you have according to your plan.\n\nCall format: **GET /platform/customer?fields=field1,field2,field3**\nwhere fields is an optional arguments to minimize the size of returned JSON\n","parameters":[{"$ref":"#/parameters/cid-header"},{"$ref":"#/parameters/customer-fields"}],"responses":{"200":{"description":"OK. Return customer's data.","schema":{"$ref":"#/definitions/customers.result"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Retrieve customer account information","tags":["customer"],"x-view-group":"Account"},"patch":{"description":"Patch your customer account information - such as part of metadata.\n\nCall format: **PATCH /platform/customer**.\n","parameters":[{"$ref":"#/parameters/cid-header"},{"$ref":"#/parameters/customer-fields"},{"in":"body","name":"data","required":true,"schema":{"$ref":"#/definitions/customer.put"}}],"responses":{"200":{"description":"OK. Return customer's data.","schema":{"$ref":"#/definitions/customers.result"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Patch your customer account information","tags":["customer"],"x-flespi-extra-parameters":{"grant-access":"operate-as"},"x-view-group":"Account"},"put":{"description":"Update your customer account information - such as name, consent to receive mailings from flespi and metadata.\n\nTo modify your authorization settings please look at auth REST API.\n\nCall format: **PUT /platform/customer**.\n","parameters":[{"$ref":"#/parameters/cid-header"},{"$ref":"#/parameters/customer-fields"},{"in":"body","name":"data","required":true,"schema":{"$ref":"#/definitions/customer.put"}}],"responses":{"200":{"description":"OK. Return customer's data.","schema":{"$ref":"#/definitions/customers.result"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Modify your customer account information","tags":["customer"],"x-flespi-extra-parameters":{"grant-access":"operate-as"},"x-view-group":"Account"}},"/customer/chat":{"get":{"description":"Platform support is performed via embedded chat. It is possible to access communication history between support and customer with this method.\n\nEach message is also delivered in realtime on the **flespi/message/platform/customer/chat** MQTT topic (with the last message retained), so a subscription can follow the conversation without polling.\n\nCall format: **GET /platform/customer/chat**.\n","parameters":[{"$ref":"#/parameters/cid-header"},{"description":"Parameters to retrieve chat messages.","in":"query","name":"data","required":false,"schema":{"$ref":"#/definitions/chat.get"}}],"responses":{"200":{"description":"Chat messages array","schema":{"properties":{"errors":{"$ref":"#/definitions/errors"},"result":{"description":"chat messages","items":{"$ref":"#/definitions/chat.message"},"type":"array"}},"type":"object"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Retrieve chat communication history between flespi support and customer.","tags":["chat"],"x-flespi-extra-parameters":{"grant-access":"operate-as"}},"post":{"description":"Post new message for flespi support team.\n\nThe posted message is also published in realtime on the **flespi/message/platform/customer/chat** MQTT topic.\n\nCall format: **POST /platform/customer/chat**.\n","parameters":[{"$ref":"#/parameters/cid-header"},{"description":"Message information","in":"body","name":"data","required":true,"schema":{"$ref":"#/definitions/chat.post"}}],"responses":{"200":{"description":"Accepted chats","schema":{"$ref":"#/definitions/id.result"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Post message adressed to flespi support.\n","tags":["chat"],"x-flespi-extra-parameters":{"grant-access":"operate-as"}},"put":{"description":"Indicate that you are typing reply in flespi support chat. The indication is published on the **flespi/message/platform/customer/chat/writing** MQTT topic.\n\nCall format: **PUT /platform/customer/chat**.\n","parameters":[{"$ref":"#/parameters/cid-header"},{"description":"Typing indication","in":"body","name":"data","required":false,"schema":{"$ref":"#/definitions/chat.put"}}],"responses":{"200":{"description":"Accepted chats","schema":{"$ref":"#/definitions/id.result"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Indicate that you are typing reply in flespi support chat.\n","tags":["chat"],"x-flespi-extra-parameters":{"grant-access":"operate-as"}}},"/customer/chat-file":{"post":{"consumes":["multipart/form-data"],"description":"Attach file to flespi support chat.\n\nCall format: **POST /platform/customer/chat-file**.\n","parameters":[{"$ref":"#/parameters/cid-header"},{"description":"upload file binary data, name and content-type","in":"formData","name":"file","required":true,"type":"file"},{"description":"additional parameters","in":"formData","name":"data","required":true,"schema":{"$ref":"#/definitions/chat.file.post"}}],"responses":{"200":{"description":"Accepted chats","schema":{"$ref":"#/definitions/id.result"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Attach file to flespi support chat.\n","tags":["chat"],"x-flespi-extra-parameters":{"grant-access":"operate-as"}}},"/customer/chat/ai-assistant":{"post":{"description":"Control whether flespi's AI assistant answers in the chat. Set \"enable\" to true to make the AI assistant the active responder - while it is on it replies to customer messages automatically - or false to hand the chat back to the human support team.\n\nThe current state is published in the retain MQTT topic **flespi/state/platform/customer/chat/ai_assistant**: the assistant name while it is on, an empty payload while it is off. Subscribe to that topic to read the current responder without calling this method.\n\nCall format: **POST /platform/customer/chat/ai-assistant**.\n","parameters":[{"$ref":"#/parameters/cid-header"},{"description":"AI assistant state","in":"body","name":"data","required":true,"schema":{"$ref":"#/definitions/chat.ai_assistant.post"}}],"responses":{"200":{"description":"Current AI assistant processing status per affected customer chat.","schema":{"properties":{"result":{"description":"operation result","items":{"properties":{"cid":{"$ref":"#/definitions/item.id"},"processing":{"description":"Resulting state after the call - true when the AI assistant is the active responder for this chat, false when the human support team is.","type":"boolean"}},"type":"object"},"type":"array"}},"type":"object"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Control AI assistant\n","tags":["chat"],"x-flespi-extra-parameters":{"grant-access":"operate-as"}}},"/customer/chat/knowledge":{"get":{"description":"Retrieve links to knowledge that is semantically close to a context.\n\nCall format: **GET /platform/customer/chat/knowledge**.\n","parameters":[{"$ref":"#/parameters/cid-header"},{"description":"Parameters to retrieve knowledge links.","in":"query","name":"data","required":true,"schema":{"$ref":"#/definitions/chat.knowledge.get"}}],"responses":{"200":{"description":"Knowledge chunks","schema":{"properties":{"errors":{"$ref":"#/definitions/errors"},"result":{"description":"knowledge chunk","items":{"$ref":"#/definitions/chat.knowledge"},"type":"array"}},"type":"object"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Retrieve knowledge links\n","tags":["chat"],"x-flespi-extra-parameters":{"grant-access":"operate-as"}}},"/customer/logs":{"get":{"description":"Get logs for whole platform. The request without parameters will return all logs records.\n\nCall format: **GET /platform/customer/logs**.\n","parameters":[{"$ref":"#/parameters/cid-header"},{"description":"Parameters to filter retrieved logs","in":"query","name":"data","schema":{"description":"filter returned log records","properties":{"count":{"default":10000000,"description":"limit number of logs to be returned","format":"uint32","maximum":10000000,"minimum":1,"type":"integer"},"fields":{"description":"CSV-formatted list of parameters to be returned in response message list. If message does not contain any of the specified fields, it will be skipped.\n","maxLength":4096,"type":"string"},"filter":{"description":"Optional filter string to return only logs conforming to specific filtering rules. You can use flespi [expressions](https://flespi.com/kb/expressions) and reference log fields inside them.","maxLength":1024,"type":"string"},"from":{"description":"start momemnt's UNIX timestamp to limit log sample from beginning. use 0 to ignore left bound","minimum":0,"type":"number","x-view-type":"datetime"},"item_type":{"description":"You can receive all logs for specific item type by specifying one of the following codes","enum":[33,37,4,29,38,40,43],"type":"number","x-view-enum-labels":["platform/tokens","platform/grants","platform/limits","platform/realms","platform/identity-providers","gw/geofences","ai/logs"]},"reverse":{"default":false,"description":"time sorting parameter (true/false), use false to list logs from end to beginning","type":"boolean"},"to":{"description":"end moment's UNIX timestamp to limit log sample to end. use 0 to ignore right bound","minimum":0,"type":"number","x-view-type":"datetime"}},"type":"object"}}],"responses":{"200":{"description":"Log messages array","schema":{"properties":{"errors":{"$ref":"#/definitions/errors"},"result":{"description":"Logs collection","items":{"$ref":"#/definitions/logmessage"},"type":"array"}},"type":"object"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Get platform log records.\n","tags":["logs"],"x-flespi-extra-parameters":{"grant-access":"operate-as"}}},"/customer/logs/calculate":{"get":{"description":"Calculate intervals from logs for the customer.\n\nCall format: **GET /platform/customer/logs/calculate**.\n","parameters":[{"$ref":"#/parameters/cid-header"},{"description":"Parameters for interval calculation","in":"query","name":"data","required":true,"schema":{"$ref":"#/definitions/container.intervals.calculate"}}],"responses":{"200":{"description":"Calculated intervals","schema":{"properties":{"errors":{"$ref":"#/definitions/errors"},"result":{"description":"Calculated intervals collection","type":"array"}},"type":"object"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Calculate intervals from customer logs\n","tags":["logs"],"x-flespi-extra-parameters":{"grant-access":"operate-as"}},"post":{"deprecated":true,"description":"**Deprecated**: use **GET /platform/customer/logs/calculate** instead.\n\nCalculate intervals from logs for the customer.\n\nCall format: **POST /platform/customer/logs/calculate**.\n","parameters":[{"$ref":"#/parameters/cid-header"},{"description":"Parameters for interval calculation","in":"body","name":"data","required":true,"schema":{"$ref":"#/definitions/container.intervals.calculate"}}],"responses":{"200":{"description":"Calculated intervals","schema":{"properties":{"errors":{"$ref":"#/definitions/errors"},"result":{"description":"Calculated intervals collection","type":"array"}},"type":"object"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Calculate intervals from customer logs\n","tags":["logs"],"x-flespi-extra-parameters":{"grant-access":"operate-as"}}},"/customer/statistics":{"get":{"description":"Platform storing items statistics counters into special container available within this method.\nYou may optionally filter them by \"origin\" or activate generalization algorithm to aggregate counters.\n\nCall format: **GET /platform/customer/statistics**.\n","parameters":[{"$ref":"#/parameters/cid-header"},{"description":"Parameters to retrieve statistical records.\n","in":"query","name":"data","schema":{"properties":{"count":{"default":10000000,"description":"limit number of records to be returned","format":"uint32","maximum":10000000,"minimum":1,"type":"integer"},"fields":{"description":"CSV-formatted list of parameters to be returned in response message list. If message does not contain all specified fields, it will be skipped.\n","maxLength":4096,"type":"string"},"filter":{"description":"optional filter string to return only logs conforming to specific filtering rules","maxLength":1024,"type":"string","x-view-type":"expression"},"from":{"description":"start moment's UNIX timestamp to limit statistics records from beginning. use 0 to ignore left bound","minimum":0,"type":"number","x-view-type":"datetime"},"generalize":{"description":"Generalization interval. Only timestamps that are multiple to specified generalization interval will be returned with recalculated parameter values according to\nspecified generalization method. It may be possible that first returned timestamp will be less than specified 'from' timestamp if 'from' timestamp is not a multiple of generalization interval.\nAll numercial parameter values withing generalization interval will be calculated into one value according to specified method.\n","format":"uint32","maximum":1000000,"minimum":10,"type":"integer"},"method":{"default":"average","description":"Generalization method. Applicable only when valid generalize parameter specified.\n","enum":["average","minimum","maximum","summary","difference"],"type":"string"},"reverse":{"default":false,"description":"time sorting parameter (true/false), use true to list records from end to beginning","type":"boolean"},"to":{"description":"end moment's UNIX timestamp to limit statistics records to end. use 0 to ignore right bound","minimum":0,"type":"number","x-view-type":"datetime"}},"type":"object"}}],"responses":{"200":{"description":"Log messages array","schema":{"properties":{"errors":{"$ref":"#/definitions/errors"},"result":{"description":"Statistical records","items":{"$ref":"#/definitions/customer.statsmessage"},"type":"array"}},"type":"object"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Get platform statistics records.\n","tags":["statistics"],"x-flespi-extra-parameters":{"grant-access":"operate-as"}}},"/customer/unsubscribe":{"get":{"description":"Newslist unsubscription callback. This method is used internally by flespi to provide a callback to unsubscribe from news mailing.\n\nYou should not try to query this API call on your own.\n","parameters":[{"description":"Customer email address","in":"query","name":"email","type":"string"},{"description":"Checksum for unsubscription link","in":"query","name":"checksum","type":"string"}],"responses":{"302":{"description":"Redirect to the root site entry with location containing notification or\nerror code\n"},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"summary":"Newslist unsubscription callback","tags":["customer"],"x-view-group":"System"}},"/deleted/{deleted-selector}":{"get":{"description":"Get customer's deleted items list.\n\nCall format: **GET /platform/deleted/{deleted-selector}**.\n","parameters":[{"$ref":"#/parameters/deleted-fields"},{"$ref":"#/parameters/limit"},{"$ref":"#/parameters/offset"}],"responses":{"200":{"description":"Deleted items list.","schema":{"properties":{"errors":{"description":"Errors list.","items":{"$ref":"#/definitions/error"},"type":"array"},"result":{"description":"Items array.","items":{"$ref":"#/definitions/deleted.item"},"type":"array"}},"type":"object"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Get deleted items list. Deleted items are available for logs analyzer up to one month.\n","tags":["deleted"]},"parameters":[{"$ref":"#/parameters/cid-header"},{"$ref":"#/parameters/deleted-selector"}]},"/deleted/{deleted-selector}/logs":{"get":{"description":"Get logs for specified customer. The request without parameters will return all logs records.\n\nCall format: **GET /platform/deleted/{deleted-selector}/logs**.\n","parameters":[{"description":"Parameters to filter retrieved logs","in":"query","name":"data","schema":{"$ref":"#/definitions/logs.get"}}],"responses":{"200":{"description":"Log records.","schema":{"properties":{"errors":{"description":"Errors array.","items":{"$ref":"#/definitions/error"},"type":"array"},"result":{"description":"Log records array.","items":{"$ref":"#/definitions/logmessage"},"type":"array"}},"type":"object"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Get deleted item logs records.\n","tags":["deleted"]},"parameters":[{"$ref":"#/parameters/cid-header"},{"$ref":"#/parameters/deleted-selector"}]},"/deleted/{deleted-selector}/logs/calculate":{"get":{"description":"Calculate intervals from logs for specified deleted item.\n\nCall format: **GET /platform/deleted/{deleted-selector}/logs/calculate**.\n","parameters":[{"description":"Parameters for interval calculation","in":"query","name":"data","required":true,"schema":{"$ref":"#/definitions/container.intervals.calculate"}}],"responses":{"200":{"description":"Calculated intervals","schema":{"properties":{"errors":{"$ref":"#/definitions/errors"},"result":{"description":"Calculated intervals collection","type":"array"}},"type":"object"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Calculate intervals from deleted item logs","tags":["deleted"]},"parameters":[{"$ref":"#/parameters/cid-header"},{"$ref":"#/parameters/deleted-selector"}],"post":{"deprecated":true,"description":"**Deprecated**: use **GET /platform/deleted/{deleted-selector}/logs/calculate** instead.\n\nCalculate intervals from logs for specified deleted item.\n\nCall format: **POST /platform/deleted/{deleted-selector}/logs/calculate**.\n","parameters":[{"description":"Parameters for interval calculation","in":"body","name":"data","required":true,"schema":{"$ref":"#/definitions/container.intervals.calculate"}}],"responses":{"200":{"description":"Calculated intervals","schema":{"properties":{"errors":{"$ref":"#/definitions/errors"},"result":{"description":"Calculated intervals collection","type":"array"}},"type":"object"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Calculate intervals from deleted item logs","tags":["deleted"]}},"/deleted/{deleted-selector}/restore":{"parameters":[{"$ref":"#/parameters/cid-header"},{"$ref":"#/parameters/deleted-selector"}],"post":{"description":"Returns an array with restored items.\n\nCall format: **POST /platform/deleted/{deleted-selector}/restore**.\n","responses":{"200":{"description":"Restored items list.","schema":{"properties":{"errors":{"description":"Errors list.","items":{"$ref":"#/definitions/error"},"type":"array"},"result":{"description":"Items array.","items":{"type":"object"},"type":"array"}},"type":"object"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Try to restore deleted items.\n","tags":["deleted"]}},"/grantors/{grants-selector}":{"delete":{"description":"Delete externally grants (unlink) that were externally for this subaccount and are providing this subaccount access to external items.\n\nAfter deletion, access to items shared by grant will be lost.\n\nUse special keyword \"all\" to delete all grants. Specify filtering conditions within path in 'grants-selector' to delete only grants that conforms to specified criterias.\n\nCall format: **DELETE /platform/grantors/{grants-selector}**\n","responses":{"200":{"description":"Result contain ID of deleted accounts.","schema":{"$ref":"#/definitions/id.result"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Delete the grantors","tags":["grants"],"x-view-group":"Grantors"},"get":{"description":"Retrieve collection of grants that were externally created for this subaccount and providing subaccount access to external items.\n\nUse special keyword \"all\" to retrieve all grants. Specify filtering conditions within path in 'grants-selector' to retrieve only grants that conforms to specified criterias.\n\nCall format: **GET /platform/grants/{grants-selector}?fields=field1,field2,field3&limit=10&offset=0**\nwhere fields, limit and offset are optional arguments to minimize the size of returned JSON\n","parameters":[{"$ref":"#/parameters/grant-fields"},{"$ref":"#/parameters/limit"},{"$ref":"#/parameters/offset"}],"responses":{"200":{"description":"Result contain selected grants.","schema":{"$ref":"#/definitions/grants.result"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Retrieve grantors","tags":["grants"],"x-view-group":"Grantors"},"parameters":[{"$ref":"#/parameters/cid-header"},{"$ref":"#/parameters/grants-selector"}]},"/grants":{"post":{"description":"Create new grant with specified configuration. You pass JSON array with configuration objects - one object per each grant to create.\n\nGrant configuration defines to which items grant will provide access for assigned subaccounts.\n\nCall format: **POST /platform/grants?fields=field1,field2,field3**\nwhere fields is optional argument to minimize the size of returned JSON for each created grant\n","parameters":[{"$ref":"#/parameters/cid-header"},{"$ref":"#/parameters/grant-fields"},{"description":"New grants","in":"body","name":"data","required":true,"schema":{"items":{"$ref":"#/definitions/grant.post"},"minItems":1,"type":"array"}}],"responses":{"200":{"description":"Result contains the created grants.","schema":{"$ref":"#/definitions/grants.result"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Create grant","tags":["grants"],"x-view-group":"Grantees"}},"/grants/{grants-selector}":{"delete":{"description":"Delete selected grants. Use with caution!\n\nUse special keyword \"all\" to delete all grants. Specify filtering conditions within path in 'grants-selector' to delete only grants that conforms to specified criterias.\n\nBefore the deletion it is recommended to check for grants that will be deleted by calling corresponding GET method.\n\nCall format: **DELETE /platform/grants/{grants-selector}**.\n","responses":{"200":{"description":"Result contain ID of deleted accounts.","schema":{"$ref":"#/definitions/id.result"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Delete grant","tags":["grants"],"x-view-group":"Grantees"},"get":{"description":"Get collection of grants created by the user.\n\nUse special keyword \"all\" to retrieve all grants. Specify filtering conditions within path in 'grants-selector' to retrieve only grants that conforms to specified criterias.\n\nCall format: **GET /platform/grants/{grants-selector}?fields=field1,field2,field3&limit=10&offset=0**\nwhere fields, limit and offset are optional arguments to minimize the size of returned JSON\n","parameters":[{"$ref":"#/parameters/grant-fields"},{"$ref":"#/parameters/limit"},{"$ref":"#/parameters/offset"}],"responses":{"200":{"description":"Result contain selected grants.","schema":{"$ref":"#/definitions/grants.result"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Retrieve grants","tags":["grants"],"x-view-group":"Grantees"},"parameters":[{"$ref":"#/parameters/cid-header"},{"$ref":"#/parameters/grants-selector"}],"patch":{"description":"The patch method is similar to PUT method but it is used to update only specified keys of the item's JSON fields like metadata or configuration.\n\nCall format: **PATCH /platform/grants/{grants-selector}**.\n","parameters":[{"$ref":"#/parameters/grant-fields"},{"in":"body","name":"data","required":true,"schema":{"$ref":"#/definitions/grant.put"}}],"responses":{"200":{"description":"Result contain updated grants.","schema":{"$ref":"#/definitions/grants.result"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Patch item properties","tags":["grants"],"x-view-group":"Grantees"},"put":{"description":"Update selected grants.\n\nUse special keyword \"all\" to update all grants. Specify filtering conditions within path in 'grants-selector' to update only grants that conforms to specified criterias.\n\nBefore the update it is recommended to check for grants that will be updated by calling corresponding GET method.\n\nCall format: **GET /platform/grants/{grants-selector}?fields=field1,field2,field3**\nwhere fields is an optional arguments to minimize the size of returned JSON\n","parameters":[{"$ref":"#/parameters/grant-fields"},{"in":"body","name":"data","required":true,"schema":{"$ref":"#/definitions/grant.put"}}],"responses":{"200":{"description":"Result contain updated grants.","schema":{"$ref":"#/definitions/grants.result"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Update grant configuration","tags":["grants"],"x-view-group":"Grantees"}},"/grants/{grants-selector}/logs":{"get":{"description":"Get specified grant logs. The request without parameters will return all grant logs.\n\n'grants-selector' specifies selection of grants from which to retrieve logs. You may select 'all' grants or select them by ID, name and other criterias specified in grants-selector.\n\nReply contains grants logs sorted by timestamp, in case you request logs from multiple grants sort order is not preserved.\n\nTo improve the performance of the call try always to specify 'from' and 'to' parameters with corresponding UNIX timestamps for which you want to retrieve grant's logs.\nIf you will specify it only inside 'filter' the call will still iterate through all logs in grant which on large volumes may slow down your operation.\n\n'filter' parameter can be used to select only subset of logs. In filter you can utilize powerful [flespi expressions](https://flespi.com/kb/expressions).\n\nCall format: **GET /platform/grants/{grants-selector}/logs**.\n","parameters":[{"description":"Parameters to filter retrieved logs","in":"query","name":"data","schema":{"$ref":"#/definitions/logs.get"}}],"responses":{"200":{"description":"Log messages array","schema":{"properties":{"errors":{"$ref":"#/definitions/errors"},"result":{"description":"Logs collection","items":{"$ref":"#/definitions/logmessage"},"type":"array"}},"type":"object"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Retrieve grant logs","tags":["grants"],"x-view-group":"Utils"},"parameters":[{"$ref":"#/parameters/cid-header"},{"$ref":"#/parameters/grants-selector"}]},"/grants/{grants-selector}/logs/calculate":{"get":{"description":"Calculate intervals from logs for specified grant.\n\nCall format: **GET /platform/grants/{grants-selector}/logs/calculate**.\n","parameters":[{"description":"Parameters for interval calculation","in":"query","name":"data","required":true,"schema":{"$ref":"#/definitions/container.intervals.calculate"}}],"responses":{"200":{"description":"Calculated intervals","schema":{"properties":{"errors":{"$ref":"#/definitions/errors"},"result":{"description":"Calculated intervals collection","type":"array"}},"type":"object"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Calculate intervals from grant logs","tags":["grants"],"x-view-group":"Utils"},"parameters":[{"$ref":"#/parameters/cid-header"},{"$ref":"#/parameters/grants-selector"}],"post":{"deprecated":true,"description":"**Deprecated**: use **GET /platform/grants/{grants-selector}/logs/calculate** instead.\n\nCalculate intervals from logs for specified grant.\n\nCall format: **POST /platform/grants/{grants-selector}/logs/calculate**.\n","parameters":[{"description":"Parameters for interval calculation","in":"body","name":"data","required":true,"schema":{"$ref":"#/definitions/container.intervals.calculate"}}],"responses":{"200":{"description":"Calculated intervals","schema":{"properties":{"errors":{"$ref":"#/definitions/errors"},"result":{"description":"Calculated intervals collection","type":"array"}},"type":"object"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Calculate intervals from grant logs","tags":["grants"],"x-view-group":"Utils"}},"/grants/{grants-selector}/subaccounts/{grant-subaccounts-selector}":{"delete":{"description":"Unlink subaccounts from grant. This effectively removes access from subaccount to items shared by the grant (except cases when same items are shared to this subaccounts by another grant).\n\nYou select for the operation grants with 'grants-selector' and subaccounts with 'grant-subaccounts-selector'.\nUse special keyword \"all\" to select either all grants or all subaccounts for operation. Or specify filtering conditions within path to select grants and/or subaccounts that conform to specified criterias.\n\nCall format: **DELETE /platform/grants/{grants-selector}/subaccounts/{grant-subaccounts-selector}**\n","responses":{"200":{"description":"Subaccount ids.","schema":{"$ref":"#/definitions/id.result"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Revoke items access for subaccount","tags":["grants","subaccounts"]},"get":{"description":"Retrieve subaccounts linked to grant. Items shared by the grant are available for the linked subaccounts.\n\nYou select for the operation grants with 'grants-selector' and subaccounts with 'grant-subaccounts-selector'.\nUse special keyword \"all\" to select either all grants or all subaccounts for operation. Or specify filtering conditions within path to select grants and/or subaccounts that conform to specified criterias.\n\nCall format: **GET /platform/grants/{grants-selector}/subaccounts/{grant-subaccounts-selector}?fields=field1,field2,field3**\nwhere fields is an optional arguments to minimize the size of returned JSON\n","parameters":[{"$ref":"#/parameters/grant-subaccount-fields"},{"$ref":"#/parameters/limit"},{"$ref":"#/parameters/offset"}],"responses":{"200":{"description":"Subaccounts collection.","schema":{"$ref":"#/definitions/grant.subaccounts.list"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Get subaccounts to which items access is granted","tags":["grants","subaccounts"]},"parameters":[{"$ref":"#/parameters/cid-header"},{"$ref":"#/parameters/grants-selector"},{"$ref":"#/parameters/grant-subaccounts-selector"}],"post":{"description":"Link subaccount to grant. After linking items shared by the grant will be available for the subaccount.\n\nYou select for the operation grants with 'grants-selector' and subaccounts with 'grant-subaccounts-selector'.\nUse special keyword \"all\" to select either all grants or all subaccounts for operation. Or specify filtering conditions within path to select grants and/or subaccounts that conform to specified criterias.\n\nCall format: **POST /platform/grants/{grants-selector}/subaccounts/{grant-subaccounts-selector}?fields=field1,field2,field3**\nwhere fields is an optional arguments to minimize the size of returned JSON\n","parameters":[{"$ref":"#/parameters/grant-subaccount-fields"}],"responses":{"200":{"description":"Subaccount collection.","schema":{"$ref":"#/definitions/grant.subaccounts.list"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Grant items access to subaccount","tags":["grants","subaccounts"]}},"/identity-providers":{"post":{"description":"Create new identity provider with specified configuration. You pass JSON array with configuration objects - one object per each odentity provider to create.\n\nCall format: **POST /platform/identity-providers?fields=field1,field2,field3**\nwhere fields is optional argument to minimize the size of returned JSON for each created identity provider\n","parameters":[{"$ref":"#/parameters/cid-header"},{"$ref":"#/parameters/identity-provider-fields"},{"description":"Array of identity providers parameters to create","in":"body","name":"data","required":true,"schema":{"$ref":"#/definitions/identity-providers.post"}}],"responses":{"200":{"description":"Created identity providers data","schema":{"$ref":"#/definitions/identity-providers.result"}},"400":{"description":"Invalid data"}},"summary":"Create Identity Provider","tags":["identity-providers"]}},"/identity-providers/{identity-provider-selector}":{"delete":{"description":"Delete selected identity providers.\n\nUse special keyword \"all\" to delete all identity providers. Specify filtering conditions within path in 'identity-provider-selector' to delete only identity providers that conforms to specified criterias.\n\nBefore the deletion it is recommended to check for identity providers that will be deleted by calling corresponding GET method.\n\nCall format: **DELETE /platform/identity-providers/{identity-provider-selector}**.\n","responses":{"200":{"description":"IDs array of deleted Identity providers\n","schema":{"$ref":"#/definitions/id.result"}},"400":{"description":"Invalid data"}},"summary":"Delete Identity Providers","tags":["identity-providers"]},"get":{"description":"Get collection of identity providers available for user(token).\n\nUse special keyword \"all\" to retrieve all identity providers. Specify filtering conditions within path in 'identity-provider-selector' to retrieve only identity providers that conforms to specified criterias.\n\nCall format: **GET /platform/identity-providers/{identity-provider-selector}?fields=field1,field2,field3&limit=10&offset=0**\nwhere fields, limit and offset are optional arguments to minimize the size of returned JSON\n","parameters":[{"$ref":"#/parameters/identity-provider-fields"},{"$ref":"#/parameters/limit"},{"$ref":"#/parameters/offset"}],"responses":{"200":{"description":"Requested identity providers data","schema":{"$ref":"#/definitions/identity-providers.result"}},"400":{"description":"Invalid data"}},"summary":"Retrieve Identity Provider","tags":["identity-providers"]},"parameters":[{"$ref":"#/parameters/cid-header"},{"$ref":"#/parameters/identity-provider-selector"}],"patch":{"description":"The patch method is similar to PUT method but it is used to update only specified keys of the item's JSON fields like metadata or configuration.\n\nCall format: **PATCH /platform/identity-providers/{identity-provider-selector}**.\n","parameters":[{"$ref":"#/parameters/identity-provider-fields"},{"description":"New parameters of an identity provider","in":"body","name":"data","required":true,"schema":{"$ref":"#/definitions/identity-provider.put"}}],"responses":{"200":{"description":"Modified identity providers data","schema":{"$ref":"#/definitions/identity-providers.result"}},"400":{"description":"Invalid data"}},"summary":"Patch item properties","tags":["identity-providers"]},"put":{"description":"Update selected identity providers.\n\nUse special keyword \"all\" to update all identity providers. Specify filtering conditions within path in 'identity-provider-selector' to update only identity providers that conforms to specified criterias.\n\nBefore the update it is recommended to check for identity providers that will be updated by calling corresponding GET method.\n\nCall format: **PUT /platform/identity-providers/{identity-provider-selector}?fields=field1,field2,field3**\nwhere fields is an optional arguments to minimize the size of returned JSON\n","parameters":[{"$ref":"#/parameters/identity-provider-fields"},{"description":"New parameters of an identity provider","in":"body","name":"data","required":true,"schema":{"$ref":"#/definitions/identity-provider.put"}}],"responses":{"200":{"description":"Modified identity providers data","schema":{"$ref":"#/definitions/identity-providers.result"}},"400":{"description":"Invalid data"}},"summary":"Update Identity Provider configuration","tags":["identity-providers"]}},"/identity-providers/{identity-provider-selector}/logs":{"get":{"description":"Get specified identity provider logs. The request without parameters will return all identity provider logs.\n\n'identity-provider-selector' specifies selection of identity providers from which to retrieve logs. You may select 'all' identity providers or select them by ID, name and other criterias specified in identity-provider-selector.\n\nReply contains identity provider logs sorted by timestamp, in case you request logs from multiple identity providers sort order is not preserved.\n\nTo improve the performance of the call try always to specify 'from' and 'to' parameters with corresponding UNIX timestamps for which you want to retrieve identity provider logs.\nIf you will specify it only inside 'filter' the call will still iterate through all logs in identity provider which on large volumes may slow down your operation.\n\n'filter' parameter can be used to select only subset of logs. In filter you can utilize powerful [flespi expressions](https://flespi.com/kb/expressions).\n\nCall format: **GET /platform/identity-providers/{identity-provider-selector}/logs**.\n","parameters":[{"$ref":"#/parameters/identity-provider-selector"},{"$ref":"#/parameters/cid-header"},{"description":"Parameters to filter retrieved logs","in":"query","name":"data","schema":{"$ref":"#/definitions/logs.get"}}],"responses":{"200":{"description":"Log messages array","schema":{"properties":{"errors":{"$ref":"#/definitions/errors"},"result":{"description":"Logs collection","items":{"$ref":"#/definitions/logmessage"},"type":"array"}},"type":"object"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Retrieve identity provider logs","tags":["identity-providers"],"x-view-group":"Utils"}},"/identity-providers/{identity-provider-selector}/logs/calculate":{"get":{"description":"Calculate intervals from logs for specified identity provider.\n\nCall format: **GET /platform/identity-providers/{identity-provider-selector}/logs/calculate**.\n","parameters":[{"description":"Parameters for interval calculation","in":"query","name":"data","required":true,"schema":{"$ref":"#/definitions/container.intervals.calculate"}}],"responses":{"200":{"description":"Calculated intervals","schema":{"properties":{"errors":{"$ref":"#/definitions/errors"},"result":{"description":"Calculated intervals collection","type":"array"}},"type":"object"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Calculate intervals from identity provider logs","tags":["identity-providers"],"x-view-group":"Utils"},"parameters":[{"$ref":"#/parameters/identity-provider-selector"},{"$ref":"#/parameters/cid-header"}],"post":{"deprecated":true,"description":"**Deprecated**: use **GET /platform/identity-providers/{identity-provider-selector}/logs/calculate** instead.\n\nCalculate intervals from logs for specified identity provider.\n\nCall format: **POST /platform/identity-providers/{identity-provider-selector}/logs/calculate**.\n","parameters":[{"description":"Parameters for interval calculation","in":"body","name":"data","required":true,"schema":{"$ref":"#/definitions/container.intervals.calculate"}}],"responses":{"200":{"description":"Calculated intervals","schema":{"properties":{"errors":{"$ref":"#/definitions/errors"},"result":{"description":"Calculated intervals collection","type":"array"}},"type":"object"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Calculate intervals from identity provider logs","tags":["identity-providers"],"x-view-group":"Utils"}},"/limits":{"post":{"description":"Create new subaccount limit with specified configuration. You pass JSON array with configuration objects - one object per each limit to create.\n\nCall format: **POST /platform/limits?fields=field1,field2,field3**\nwhere fields is optional argument to minimize the size of returned JSON for each created subaccount limit\n","parameters":[{"$ref":"#/parameters/cid-header"},{"$ref":"#/parameters/limit-fields"},{"description":"New limit rules array.","in":"body","name":"data","required":true,"schema":{"items":{"$ref":"#/definitions/limit.post"},"minItems":1,"type":"array"}}],"responses":{"200":{"description":"Result contain created limit rules.","schema":{"$ref":"#/definitions/limits.result"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Create subaccount limit","tags":["subaccounts"],"x-flespi-extra-parameters":{"grant-access":"operate-as"},"x-view-group":"Limits"}},"/limits/{limits-selector}":{"delete":{"description":"Delete selected subaccount limits. Use with caution!\n\nUse special keyword \"all\" to delete all limits. Specify filtering conditions within path in 'limits-selector' to delete only limits that conforms to specified criterias.\n\nBefore the deletion it is recommended to check for limits that will be deleted by calling corresponding GET method.\n\nCall format: **DELETE /platform/limits/{limits-selector}**.\n","responses":{"200":{"description":"Result contain ID of deleted limit rules.","schema":{"$ref":"#/definitions/id.result"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Delete subaccount limits","tags":["subaccounts"],"x-flespi-extra-parameters":{"grant-access":"operate-as"},"x-view-group":"Limits"},"get":{"description":"Get collection of subaccount limits available for user(token).\n\nUse special keyword \"all\" to retrieve all limits. Specify filtering conditions within path in 'limits-selector' to retrieve only limits that conforms to specified criterias.\n\nCall format: **GET /platform/limits/{limits-selector}?fields=field1,field2,field3&limit=10&offset=0**\nwhere fields, limit and offset are optional arguments to minimize the size of returned JSON\n","parameters":[{"$ref":"#/parameters/limit-fields"},{"$ref":"#/parameters/limit"},{"$ref":"#/parameters/offset"}],"responses":{"200":{"description":"Limits collection.","schema":{"$ref":"#/definitions/limits.result"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Retrieve subaccount limits","tags":["subaccounts"],"x-flespi-extra-parameters":{"grant-access":"operate-as"},"x-view-group":"Limits"},"parameters":[{"$ref":"#/parameters/limits-selector"},{"$ref":"#/parameters/cid-header"}],"patch":{"description":"The patch method is similar to PUT method but it is used to update only specified keys of the item's JSON fields like metadata or configuration.\n\nCall format: **PATCH /platform/limits/{limits-selector}**.\n","parameters":[{"$ref":"#/parameters/limit-fields"},{"in":"body","name":"data","required":true,"schema":{"$ref":"#/definitions/limit.put"}}],"responses":{"200":{"description":"Updated limits.","schema":{"$ref":"#/definitions/subaccounts.result"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Update subaccount limit configuration","tags":["subaccounts"],"x-flespi-extra-parameters":{"grant-access":"operate-as"},"x-view-group":"Limits"},"put":{"description":"Update selected subaccount limits.\n\nUse special keyword \"all\" to update all limits. Specify filtering conditions within path in 'limits-selector' to update only limits that conforms to specified criterias.\n\nBefore the update it is recommended to check for limits that will be updated by calling corresponding GET method.\n\nPlatform applies changes to subaccounts assigned to limits being updated within 10 seconds.\n\nCall format: **PUT /platform/limits/{limits-selector}?fields=field1,field2,field3**\nwhere fields is an optional arguments to minimize the size of returned JSON\n","parameters":[{"$ref":"#/parameters/limit-fields"},{"in":"body","name":"data","required":true,"schema":{"$ref":"#/definitions/limit.put"}}],"responses":{"200":{"description":"Updated limits.","schema":{"$ref":"#/definitions/subaccounts.result"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Update subaccount limit configuration","tags":["subaccounts"],"x-flespi-extra-parameters":{"grant-access":"operate-as"},"x-view-group":"Limits"}},"/limits/{limits-selector}/logs":{"get":{"description":"Get specified subaccount limit logs. The request without parameters will return all limit logs.\n\n'limits-selector' specifies selection of subaccount limits from which to retrieve logs. You may select 'all' limits or select them by ID, name and other criterias specified in limits-selector.\n\nReply contains limits logs sorted by timestamp, in case you request logs from multiple limits sort order is not preserved.\n\nTo improve the performance of the call try always to specify 'from' and 'to' parameters with corresponding UNIX timestamps for which you want to retrieve limit's logs.\nIf you will specify it only inside 'filter' the call will still iterate through all logs in limit which on large volumes may slow down your operation.\n\n'filter' parameter can be used to select only subset of logs. In filter you can utilize powerful [flespi expressions](https://flespi.com/kb/expressions).\n\nCall format: **GET /platform/limits/{limits-selector}/logs**.\n","parameters":[{"description":"Parameters to filter retrieved logs","in":"query","name":"data","schema":{"$ref":"#/definitions/logs.get"}}],"responses":{"200":{"description":"Log messages array","schema":{"properties":{"errors":{"$ref":"#/definitions/errors"},"result":{"description":"Logs collection","items":{"$ref":"#/definitions/logmessage"},"type":"array"}},"type":"object"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Retrieve subaccount limit logs","tags":["subaccounts"],"x-view-group":"Limits"},"parameters":[{"$ref":"#/parameters/cid-header"},{"$ref":"#/parameters/limits-selector"}]},"/limits/{limits-selector}/logs/calculate":{"get":{"description":"Calculate intervals from logs for specified limit.\n\nCall format: **GET /platform/limits/{limits-selector}/logs/calculate**.\n","parameters":[{"description":"Parameters for interval calculation","in":"query","name":"data","required":true,"schema":{"$ref":"#/definitions/container.intervals.calculate"}}],"responses":{"200":{"description":"Calculated intervals","schema":{"properties":{"errors":{"$ref":"#/definitions/errors"},"result":{"description":"Calculated intervals collection","type":"array"}},"type":"object"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Calculate intervals from limit logs","tags":["subaccounts"],"x-view-group":"Limits"},"parameters":[{"$ref":"#/parameters/cid-header"},{"$ref":"#/parameters/limits-selector"}],"post":{"deprecated":true,"description":"**Deprecated**: use **GET /platform/limits/{limits-selector}/logs/calculate** instead.\n\nCalculate intervals from logs for specified limit.\n\nCall format: **POST /platform/limits/{limits-selector}/logs/calculate**.\n","parameters":[{"description":"Parameters for interval calculation","in":"body","name":"data","required":true,"schema":{"$ref":"#/definitions/container.intervals.calculate"}}],"responses":{"200":{"description":"Calculated intervals","schema":{"properties":{"errors":{"$ref":"#/definitions/errors"},"result":{"description":"Calculated intervals collection","type":"array"}},"type":"object"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Calculate intervals from limit logs","tags":["subaccounts"],"x-view-group":"Limits"}},"/oauth/{oauth-selector}":{"delete":{"description":"Detach selected OAuth profiles from flespi customer.\n\nCall format: **DELETE /platform/oauth/{oauth-selector}**.\n","responses":{"200":{"description":"Result contain ID of deleted OAuth profiles.","schema":{"$ref":"#/definitions/id.result"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Detach selected OAuth profiles from flespi customer\n","tags":["oauth"],"x-flespi-extra-parameters":{"grant-access":"operate-as"}},"get":{"description":"Get OAuth profiles through which it is possible to authorize customer on the platform.\n\nCall format: **GET /platform/oauth/{oauth-selector}**.\n","parameters":[{"$ref":"#/parameters/oauth-fields"},{"$ref":"#/parameters/limit"},{"$ref":"#/parameters/offset"}],"responses":{"200":{"description":"Result contain selected OAuth profiles.","schema":{"$ref":"#/definitions/oauth.result"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Get customer's OAuth profiles\n","tags":["oauth"],"x-flespi-extra-parameters":{"grant-access":"operate-as"}},"parameters":[{"$ref":"#/parameters/cid-header"},{"$ref":"#/parameters/oauth-selector"}]},"/realms":{"parameters":[{"$ref":"#/parameters/cid-header"}],"post":{"description":"Create new realm with specified configuration. You pass JSON array with configuration objects - one object per each realm to create.\n\nUse the `role` object to configure realm's default role (home, token_params).\n\nCall format: **POST /platform/realms?fields=field1,field2,field3**\nwhere fields is optional argument to minimize the size of returned JSON for each created realm\n","parameters":[{"$ref":"#/parameters/realm-fields"},{"description":"Array of realms to create\n","in":"body","name":"data","required":true,"schema":{"items":{"$ref":"#/definitions/realm.post"},"maxItems":32,"minItems":1,"type":"array"}}],"responses":{"200":{"description":"Created realms\n","schema":{"$ref":"#/definitions/realm.result"}},"400":{"description":"Invalid parameters\n"}},"security":[{"FlespiToken":[]}],"summary":"Create realm","tags":["realms"],"x-flespi-extra-parameters":{"grant-access":"operate-as"},"x-view-group":"Realms management"}},"/realms/{realm-selector}":{"delete":{"description":"Delete selected realms. All users created for given realm will be also permanently deleted. Use with caution!\n\nUse special keyword \"all\" to delete all realms. Specify filtering conditions within path in 'realm-selector' to delete only realms that conforms to specified criterias.\n\nBefore the deletion it is recommended to check for realms that will be deleted by calling corresponding GET method.\n\nCall format: **DELETE /platform/realms/{realm-selector}**.\n","responses":{"200":{"description":"Array of deleted realm(s)\n","schema":{"$ref":"#/definitions/id.result"}},"400":{"description":"Invalid parameters\n"}},"security":[{"FlespiToken":[]}],"summary":"Delete realm","tags":["realms"],"x-view-group":"Realms management"},"get":{"description":"Get collection of realms available for user(token).\n\nUse special keyword \"all\" to retrieve all realms. Specify filtering conditions within path in 'realm-selector' to retrieve only realms that conforms to specified criterias.\n\nCall format: **GET /platform/realms/{realm-selector}?fields=field1,field2,field3&limit=10&offset=0**\nwhere fields, limit and offset are optional arguments to minimize the size of returned JSON\n","parameters":[{"$ref":"#/parameters/realm-fields"},{"$ref":"#/parameters/limit"},{"$ref":"#/parameters/offset"}],"responses":{"200":{"description":"Information about found realm(s)\n","schema":{"$ref":"#/definitions/realm.result"}},"400":{"description":"Invalid parameters\n"}},"security":[{"FlespiToken":[]}],"summary":"Retrieve realm","tags":["realms"],"x-view-group":"Realms management"},"parameters":[{"$ref":"#/parameters/cid-header"},{"$ref":"#/parameters/realm-selector"}],"patch":{"description":"The patch method is similar to PUT method but it is used to update only specified keys of the item's JSON fields like metadata or configuration.\n\nUse the `role` object to update realm's default role properties.\n\nCall format: **PATCH /platform/realms/{realm-selector}**.\n","parameters":[{"$ref":"#/parameters/realm-fields"},{"description":"New parameters for realm(s)\n","in":"body","name":"data","required":true,"schema":{"$ref":"#/definitions/realm.put"}}],"responses":{"200":{"description":"Information about updated realm(s)\n","schema":{"$ref":"#/definitions/realm.result"}},"400":{"description":"Invalid parameters\n"}},"security":[{"FlespiToken":[]}],"summary":"Patch item properties","tags":["realms"],"x-view-group":"Realms management"},"put":{"description":"Update selected realms.\n\nUse special keyword \"all\" to update all realms. Specify filtering conditions within path in 'realm-selector' to update only realms that conforms to specified criterias.\n\nBefore the update it is recommended to check for realms that will be updated by calling corresponding GET method.\n\nUse the `role` object to update realm's default role properties.\n\nCall format: **PUT /platform/realms/{realm-selector}?fields=field1,field2,field3**\nwhere fields is an optional arguments to minimize the size of returned JSON\n","parameters":[{"$ref":"#/parameters/realm-fields"},{"description":"New parameters for realm(s)\n","in":"body","name":"data","required":true,"schema":{"$ref":"#/definitions/realm.put"}}],"responses":{"200":{"description":"Information about updated realm(s)\n","schema":{"$ref":"#/definitions/realm.result"}},"400":{"description":"Invalid parameters\n"}},"security":[{"FlespiToken":[]}],"summary":"Update realm configuration","tags":["realms"],"x-view-group":"Realms management"}},"/realms/{realm-selector}/identity-providers/{realm-identity-provider-selector}":{"delete":{"description":"Remove the bindings of Identity Provider from the realms.\n\nUse special keyword \"all\" to remove identity providers bindings for all realms. Specify filtering conditions within path in 'realm-selector' to remove binded identity providers only for realms that conforms to specified criterias.\n\nBefore actual binding deletion it is recommended to check for realms that will be affected by calling corresponding GET method.\n\nCall format: **DELETE /platform/realms/{realm-selector}/identity-providers/{realm-identity-provider-selector}**\n","responses":{"200":{"description":"IDs array of deleted identity providers\n","schema":{"$ref":"#/definitions/id.result"}},"400":{"description":"Invalid data"}},"summary":"Remove binding of Identity Provider from realms","tags":["realms"],"x-view-group":"Identity Providers binding and management"},"get":{"description":"Retrieve Identity Provider binded to the realms.\n\nUse special keyword \"all\" to retrieve identity providers binded to all realms. Specify filtering conditions within path in 'realm-selector' to retreiev binded identity providers only for realms that conforms to specified criterias.\n\nCall format: **GET /platform/realms/{realm-selector}/identity-providers/{realm-identity-provider-selector}?fields=field1,field2,field3**\nwhere fields is an optional arguments to minimize the size of returned JSON\n","parameters":[{"$ref":"#/parameters/realm-identity-provider-fields"},{"$ref":"#/parameters/limit"},{"$ref":"#/parameters/offset"}],"responses":{"200":{"description":"Requested identity providers data","schema":{"$ref":"#/definitions/realm-identity-providers.result"}},"400":{"description":"Invalid data"}},"summary":"Retrieve Identity Providers binded to realms","tags":["realms"],"x-view-group":"Identity Providers binding and management"},"parameters":[{"$ref":"#/parameters/cid-header"},{"$ref":"#/parameters/realm-selector"},{"$ref":"#/parameters/realm-identity-provider-selector"}],"post":{"description":"Bind Identity Provider to the realms.\n\nUse special keyword \"all\" to bind specified identity providers to all realms. Specify filtering conditions within path in 'realm-selector' to bind identity providers to only realms that conforms to specified criterias.\n\nCall format: **POST /platform/realms/{realm-selector}/identity-providers/{realm-identity-provider-selector}?fields=field1,field2,field3**\nwhere fields is an optional arguments to minimize the size of returned JSON\n","parameters":[{"$ref":"#/parameters/realm-identity-provider-fields"},{"description":"Newly bound identity providers parameters","in":"body","name":"data","required":true,"schema":{"$ref":"#/definitions/realm-identity-provider.parameters"}}],"responses":{"200":{"description":"Created identity providers data","schema":{"$ref":"#/definitions/realm-identity-providers.result"}},"400":{"description":"Invalid data"}},"summary":"Bind Identity Provider to the realm","tags":["realms"],"x-view-group":"Identity Providers binding and management"},"put":{"description":"Modify the bindings of Identity Provider to the realms.\n\nUse special keyword \"all\" to modify identity providers bindings for all realms. Specify filtering conditions within path in 'realm-selector' to modify binded identity providers only for realms that conforms to specified criterias.\n\nBefore actual binding update it is recommended to check for realms that will be affected by calling corresponding GET method.\n\nCall format: **PUT /platform/realms/{realm-selector}/identity-providers/{realm-identity-provider-selector}?fields=field1,field2,field3**\nwhere fields is an optional arguments to minimize the size of returned JSON\n","parameters":[{"$ref":"#/parameters/realm-identity-provider-fields"},{"description":"New parameters of a bound identity provider","in":"body","name":"data","required":true,"schema":{"$ref":"#/definitions/realm-identity-provider.parameters"}}],"responses":{"200":{"description":"Modified identity providers data","schema":{"$ref":"#/definitions/realm-identity-providers.result"}},"400":{"description":"Invalid data"}},"summary":"Modify the binding of Identity Provider to realms","tags":["realms"],"x-view-group":"Identity Providers binding and management"}},"/realms/{realm-selector}/logs":{"get":{"description":"Get specified realm logs. The request without parameters will return all realm logs.\n\n'realm-selector' specifies selection of realms from which to retrieve logs. You may select 'all' realms or select them by ID, name and other criterias specified in realm-selector.\n\nReply contains realms logs sorted by timestamp, in case you request logs from multiple realms sort order is not preserved.\n\nTo improve the performance of the call try always to specify 'from' and 'to' parameters with corresponding UNIX timestamps for which you want to retrieve realm's logs.\nIf you will specify it only inside 'filter' the call will still iterate through all logs in realm which on large volumes may slow down your operation.\n\n'filter' parameter can be used to select only subset of logs. In filter you can utilize powerful [flespi expressions](https://flespi.com/kb/expressions).\n\nCall format: **GET /platform/realms/{realm-selector}/logs**.\n","parameters":[{"description":"Parameters to filter retrieved logs","in":"query","name":"data","schema":{"$ref":"#/definitions/logs.get"}}],"responses":{"200":{"description":"Log messages array","schema":{"properties":{"errors":{"$ref":"#/definitions/errors"},"result":{"description":"Logs collection","items":{"$ref":"#/definitions/logmessage"},"type":"array"}},"type":"object"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Retrieve realm logs","tags":["realms"],"x-view-group":"Utils"},"parameters":[{"$ref":"#/parameters/cid-header"},{"$ref":"#/parameters/realm-selector"}]},"/realms/{realm-selector}/logs/calculate":{"get":{"description":"Calculate intervals from logs for specified realm.\n\nCall format: **GET /platform/realms/{realm-selector}/logs/calculate**.\n","parameters":[{"description":"Parameters for interval calculation","in":"query","name":"data","required":true,"schema":{"$ref":"#/definitions/container.intervals.calculate"}}],"responses":{"200":{"description":"Calculated intervals","schema":{"properties":{"errors":{"$ref":"#/definitions/errors"},"result":{"description":"Calculated intervals collection","type":"array"}},"type":"object"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Calculate intervals from realm logs","tags":["realms"],"x-view-group":"Utils"},"parameters":[{"$ref":"#/parameters/cid-header"},{"$ref":"#/parameters/realm-selector"}],"post":{"deprecated":true,"description":"**Deprecated**: use **GET /platform/realms/{realm-selector}/logs/calculate** instead.\n\nCalculate intervals from logs for specified realm.\n\nCall format: **POST /platform/realms/{realm-selector}/logs/calculate**.\n","parameters":[{"description":"Parameters for interval calculation","in":"body","name":"data","required":true,"schema":{"$ref":"#/definitions/container.intervals.calculate"}}],"responses":{"200":{"description":"Calculated intervals","schema":{"properties":{"errors":{"$ref":"#/definitions/errors"},"result":{"description":"Calculated intervals collection","type":"array"}},"type":"object"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Calculate intervals from realm logs","tags":["realms"],"x-view-group":"Utils"}},"/realms/{realm-selector}/roles":{"parameters":[{"$ref":"#/parameters/cid-header"},{"$ref":"#/parameters/realm-selector"}],"post":{"description":"Create new role(s) in the specified realms.\n\nUse special keyword \"all\" to create roles for all realms. Specify filtering conditions within path in 'realm-selector' to create roles in the realms that conforms to specified criterias.\n\nCall format: **POST /platform/realms/{realm-selector}/roles?fields=field1,field2,field3**\nwhere fields is an optional argument to minimize the size of returned JSON\n","parameters":[{"$ref":"#/parameters/realm-role-fields"},{"description":"Information about newly created role(s)\n","in":"body","name":"data","required":true,"schema":{"$ref":"#/definitions/realm-roles.post"}}],"responses":{"200":{"description":"Created role(s) data\n","schema":{"$ref":"#/definitions/realm-roles.result"}},"400":{"description":"Invalid parameters\n"}},"security":[{"FlespiToken":[]}],"summary":"Create new role","tags":["realms"],"x-view-group":"Roles management"}},"/realms/{realm-selector}/roles/{realm-role-selector}":{"delete":{"description":"Delete realm roles. Use with caution!\n\nSpecify filtering conditions within path in 'realm-selector' to delete roles from only those realms that conform to specified criterias.\nAlso you may specify filtering conditions within path in 'realm-role-selector' to delete only roles that conform to specified criterias.\n\nBefore actual deletion it is recommended to check for realm roles that will be affected by calling corresponding GET method.\n\nCall format: **DELETE /platform/realms/{realm-selector}/roles/{realm-role-selector}**\n","responses":{"200":{"description":"Array of IDs of deleted role(s)\n","schema":{"$ref":"#/definitions/id.result"}},"400":{"description":"Invalid parameters\n"}},"security":[{"FlespiToken":[]}],"summary":"Delete realm roles","tags":["realms"],"x-view-group":"Roles management"},"get":{"description":"Retrieve realm roles.\n\nUse special keyword \"all\" to retrieve roles for all realms. Specify filtering conditions within path in 'realm-selector' to retrieve roles only from realms that conforms to specified criterias.\nAdditionally you may specify filtering conditions within path in 'realm-role-selector' to retrieve only roles that conforms to specified criterias.\n\nCall format: **GET /platform/realms/{realm-selector}/roles/{realm-role-selector}?fields=field1,field2,field3**\nwhere fields is an optional argument to minimize the size of returned JSON\n","parameters":[{"$ref":"#/parameters/realm-role-fields"},{"$ref":"#/parameters/limit"},{"$ref":"#/parameters/offset"}],"responses":{"200":{"description":"Found role(s) data\n","schema":{"$ref":"#/definitions/realm-roles.result"}},"400":{"description":"Invalid paramaters\n"}},"security":[{"FlespiToken":[]}],"summary":"Retrieve realm roles","tags":["realms"],"x-view-group":"Roles management"},"parameters":[{"$ref":"#/parameters/cid-header"},{"$ref":"#/parameters/realm-selector"},{"$ref":"#/parameters/realm-role-selector"}],"patch":{"description":"The patch method is similar to PUT method but it is used to update only specified keys of the item's JSON fields like metadata or configuration.\n\nCall format: **PATCH /platform/realms/{realm-selector}/roles/{realm-role-selector}**.\n","parameters":[{"$ref":"#/parameters/realm-role-fields"},{"in":"body","name":"data","required":true,"schema":{"$ref":"#/definitions/realm-role.put"}}],"responses":{"200":{"description":"Updated role(s) data\n","schema":{"$ref":"#/definitions/realm-roles.result"}},"400":{"description":"Invalid parameters\n"}},"security":[{"FlespiToken":[]}],"summary":"Modify realm role","tags":["realms"],"x-view-group":"Roles management"},"put":{"description":"Update realm roles.\n\nSpecify filtering conditions within path in 'realm-selector' to modify roles from only those realms that conform to specified criterias.\nAlso you may specify filtering conditions within path in 'realm-role-selector' to modify only roles that conform to specified criterias.\n\nBefore actual update it is recommended to check for realm roles that will be affected by calling corresponding GET method.\n\nCall format: **PUT /platform/realms/{realm-selector}/roles/{realm-role-selector}?fields=field1,field2,field3**\nwhere fields is an optional argument to minimize the size of returned JSON\n","parameters":[{"$ref":"#/parameters/realm-role-fields"},{"in":"body","name":"data","required":true,"schema":{"$ref":"#/definitions/realm-role.put"}}],"responses":{"200":{"description":"Updated role(s) data\n","schema":{"$ref":"#/definitions/realm-roles.result"}},"400":{"description":"Invalid parameters\n"}},"security":[{"FlespiToken":[]}],"summary":"Modify realm role","tags":["realms"],"x-view-group":"Roles management"}},"/realms/{realm-selector}/users":{"parameters":[{"$ref":"#/parameters/cid-header"},{"$ref":"#/parameters/realm-selector"}],"post":{"description":"Create new user(s) for specified realms.\n\nUse special keyword \"all\" to create users for all realms. Specify filtering conditions within path in 'realm-selector' to create users to only realms that conforms to specified criterias.\n\nUse the `role` object to configure user's role assignment and parameters.\n\nCall format: **POST /platform/realms/{realm-selector}/users?fields=field1,field2,field3**\nwhere fields is an optional arguments to minimize the size of returned JSON\n","parameters":[{"$ref":"#/parameters/realm-user-fields"},{"description":"Information about newly created user(s)\n","in":"body","name":"data","required":true,"schema":{"items":{"$ref":"#/definitions/realm-user.post"},"maxItems":32,"minItems":1,"type":"array"}}],"responses":{"200":{"description":"Created user(s) data\n","schema":{"$ref":"#/definitions/realm-user.result"}},"400":{"description":"Invalid parameters\n"}},"security":[{"FlespiToken":[]}],"summary":"Create new realm user","tags":["realms"],"x-view-group":"Users management"}},"/realms/{realm-selector}/users/{realm-user-selector}":{"delete":{"description":"Delete realm users. Use with caution!\n\nSpecify filtering conditions within path in 'realm-selector' to delete users from only those realms that conform to specified criterias.\nAlso you specify filtering conditions within path in 'realm-user-selector' to delete only users that conform to specified criterias.\n\nBefore actual deletion it is recommended to check for realm users that will be affected by calling corresponding GET method.\n\nCall format: **DELETE /platform/realms/{realm-selector}/users/{realm-user-selector}**\n","responses":{"200":{"description":"Array of IDs of deleted user(s)\n","schema":{"$ref":"#/definitions/id.result"}},"400":{"description":"Invalid parameters\n"}},"security":[{"FlespiToken":[]}],"summary":"Delete realm users","tags":["realms"],"x-view-group":"Users management"},"get":{"description":"Retrieve realm users.\n\nUse special keyword \"all\" to retrieve users for all realms. Specify filtering conditions within path in 'realm-selector' to retrieve users only from realms that conforms to specified criterias.\nAdditionally you may specify filtering conditions within path in 'realm-user-selector' to retrieve only users that conforms to specified criterias.\n\nCall format: **GET /platform/realms/{realm-selector}/users/{realm-user-selector}?fields=field1,field2,field3**\nwhere fields is an optional arguments to minimize the size of returned JSON\n","parameters":[{"$ref":"#/parameters/realm-user-fields"},{"$ref":"#/parameters/limit"},{"$ref":"#/parameters/offset"}],"responses":{"200":{"description":"Found user(s) data\n","schema":{"$ref":"#/definitions/realm-user.result"}},"400":{"description":"Invalid paramaters\n"}},"security":[{"FlespiToken":[]}],"summary":"Retrieve realm users","tags":["realms"],"x-view-group":"Users management"},"parameters":[{"$ref":"#/parameters/cid-header"},{"$ref":"#/parameters/realm-selector"},{"$ref":"#/parameters/realm-user-selector"}],"patch":{"description":"The patch method is similar to PUT method but it is used to update only specified keys of the item's JSON fields like metadata or configuration.\n\nUse the `role` object to update user's role assignment and parameters.\n\nCall format: **PATCH /platform/realms/{realm-selector}/users/{realm-user-selector}**.\n","parameters":[{"$ref":"#/parameters/realm-user-fields"},{"in":"body","name":"data","required":true,"schema":{"$ref":"#/definitions/realm-user.put"}}],"responses":{"200":{"description":"Updated user(s) data\n","schema":{"$ref":"#/definitions/realm-user.result"}},"400":{"description":"Invalid parameters\n"}},"security":[{"FlespiToken":[]}],"summary":"Modify realm user","tags":["realms"],"x-view-group":"Users management"},"put":{"description":"Update realm users.\n\nSpecify filtering conditions within path in 'realm-selector' to modify users from only those realms that conform to specified criterias.\nAlso you specify filtering conditions within path in 'realm-user-selector' to modify only users that conform to specified criterias.\n\nBefore actual update it is recommended to check for realm users that will be affected by calling corresponding GET method.\n\nUse the `role` object to update user's role assignment and parameters.\n\nCall format: **PUT /platform/realms/{realm-selector}/users/{realm-user-selector}?fields=field1,field2,field3**\nwhere fields is an optional arguments to minimize the size of returned JSON\n","parameters":[{"$ref":"#/parameters/realm-user-fields"},{"in":"body","name":"data","required":true,"schema":{"$ref":"#/definitions/realm-user.put"}}],"responses":{"200":{"description":"Updated user(s) data\n","schema":{"$ref":"#/definitions/realm-user.result"}},"400":{"description":"Invalid parameters\n"}},"security":[{"FlespiToken":[]}],"summary":"Modify realm user","tags":["realms"],"x-view-group":"Users management"}},"/realms/{realm-selector}/users/{realm-user-selector}/confirmation/password":{"get":{"description":"Retrieve confirmation code for the user.\n\nSpecify filtering conditions within path in 'realm-selector' to select realm, in 'realm-user-selector' to select user for the operation.\n\nCall format: **GET /platform/realms/{realm-selector}/users/{realm-user-selector}/confirmation/password**\n","parameters":[{"description":"Confirmation code data\n","in":"query","name":"data","required":true,"schema":{"properties":{"ttl":{"default":3600,"description":"Confirmation code time-to-live in seconds\n","maximum":86400,"minimum":60,"title":"Code TTL","type":"integer","x-view-type":"seconds"}},"type":"object","x-view-order":["ttl"]}}],"responses":{"200":{"description":"Confirmation code\n","schema":{"properties":{"errors":{"$ref":"#/definitions/errors"},"result":{"items":{"properties":{"confirmation":{"description":"Encrypted confirmation token bound to this realm/user with the requested TTL.","type":"string"},"user_id":{"$ref":"#/definitions/realm-user.id"}},"type":"object"},"type":"array"}},"type":"object"}},"default":{"description":"Failed to get confirmation code\n"}},"security":[{"FlespiToken":[]}],"summary":"Retrieve user confirmation code","tags":["realms"],"x-view-group":"Users management"},"parameters":[{"$ref":"#/parameters/cid-header"},{"$ref":"#/parameters/realm-selector"},{"$ref":"#/parameters/realm-user-selector"}]},"/realms/{realm-selector}/users/{realm-user-selector}/identity-providers/{user-identity-provider-selector}":{"delete":{"description":"Unlink from the user linked identity providers.\n\nSpecify filtering conditions within path in 'realm-selector' to select realm, in 'realm-user-selector' to select user, in 'user-identity-provider-selector' to select identity provider for the operation.\n\nCall format: **DELETE /platform/realms/{realm-selector}/users/{realm-user-selector}/identity-providers/{user-identity-provider-selector}**\n","responses":{"200":{"description":"Unlinked accounts IDs array\n","schema":{"$ref":"#/definitions/id.result"}},"400":{"description":"Invalid parameters\n"}},"security":[{"FlespiToken":[]}],"summary":"Unlink identity provider accounts from user","tags":["realms"],"x-view-group":"Users' 3rd-party accounts management\n"},"get":{"description":"Retrieve the identity providers linked to the user.\n\nSpecify filtering conditions within path in 'realm-selector' to select realm, in 'realm-user-selector' to select user, in 'user-identity-provider-selector' to select identity provider for the operation.\n\nCall format: **GET /platform/realms/{realm-selector}/users/{realm-user-selector}/identity-providers/{user-identity-provider-selector}?fields=field1,field2,field3**\nwhere fields is an optional arguments to minimize the size of returned JSON\n","parameters":[{"$ref":"#/parameters/user-identity-provider-fields"},{"$ref":"#/parameters/limit"},{"$ref":"#/parameters/offset"}],"responses":{"200":{"description":"Linked identity provider accounts\n","schema":{"$ref":"#/definitions/user_accounts.result"}},"400":{"description":"Invalid parameters\n"}},"security":[{"FlespiToken":[]}],"summary":"Get linked identity provider accounts to user","tags":["realms"],"x-view-group":"Users' 3rd-party accounts management\n"},"parameters":[{"$ref":"#/parameters/cid-header"},{"$ref":"#/parameters/realm-selector"},{"$ref":"#/parameters/realm-user-selector"},{"$ref":"#/parameters/user-identity-provider-selector"}]},"/realms/{realm-selector}/users/{realm-user-selector}/identity-providers/{user-identity-provider-selector}/confirmation":{"get":{"description":"Retrieve confirmation link when binding identity provider to realm user account.\n\nSpecify filtering conditions within path in 'realm-selector' to select realm, in 'realm-user-selector' to select user, in 'user-identity-provider-selector' to select identity provider for the operation.\n\nCall format: **GET /platform/realms/{realm-selector}/users/{realm-user-selector}/identity-providers/{user-identity-provider-selector}/confirmation**\n","parameters":[{"description":"Link parameters\n","in":"query","name":"data","required":true,"schema":{"properties":{"ttl":{"default":3600,"description":"Link time-to-live in seconds\n","maximum":86400,"minimum":60,"title":"Link TTL","type":"integer"}},"type":"object","x-view-order":["ttl"]}}],"responses":{"200":{"description":"3rd-party account linkage link\n","schema":{"properties":{"errors":{"$ref":"#/definitions/errors"},"result":{"items":{"properties":{"url":{"description":"Authentication URL at the identity provider that completes the binding when followed.","type":"string"},"user_id":{"$ref":"#/definitions/realm-user.id"}},"type":"object"},"type":"array"}},"type":"object"}},"default":{"description":"Failed to generate confirmation link\n"}},"security":[{"FlespiToken":[]}],"summary":"Get confirmation link for third-party Identity Provider account binding","tags":["realms"],"x-view-group":"Users' 3rd-party accounts management\n"},"parameters":[{"$ref":"#/parameters/cid-header"},{"$ref":"#/parameters/realm-selector"},{"$ref":"#/parameters/realm-user-selector"},{"$ref":"#/parameters/user-identity-provider-selector"}]},"/realms/{realm-selector}/users/{realm-user-selector}/login":{"parameters":[{"$ref":"#/parameters/cid-header"},{"$ref":"#/parameters/realm-selector"},{"$ref":"#/parameters/realm-user-selector"}],"post":{"description":"Log in as user and get its token.\n\nSpecify filtering conditions within path in 'realm-selector' to select realm, in 'realm-user-selector' to select user for the operation.\n\nCall format: **POST /platform/realms/{realm-selector}/users/{realm-user-selector}/login**\nwhere fields is an optional arguments to minimize the size of returned JSON\n","responses":{"200":{"description":"User has been successfully logged in.\n","schema":{"properties":{"errors":{"$ref":"#/definitions/errors"},"result":{"items":{"properties":{"id":{"$ref":"#/definitions/realm-user.id"},"token":{"description":"Newly issued flespi token key for the user; use it as `Authorization: FlespiToken <key>`.\n","type":"string"}},"type":"object"},"type":"array"}},"type":"object"}},"default":{"description":"Failed to log in as the user\n"}},"security":[{"FlespiToken":[]}],"summary":"Log in as user","tags":["realms"],"x-view-group":"Users management"}},"/realms/{realm-selector}/users/{realm-user-selector}/logout":{"parameters":[{"$ref":"#/parameters/cid-header"},{"$ref":"#/parameters/realm-selector"},{"$ref":"#/parameters/realm-user-selector"}],"post":{"description":"Log out user and delete its token.\n\nSpecify filtering conditions within path in 'realm-selector' to select realm, in 'realm-user-selector' to select user for the operation.\n\nCall format: **POST /platform/realms/{realm-selector}/users/{realm-user-selector}/logout?fields=field1,field2,field3**\nwhere fields is an optional arguments to minimize the size of returned JSON\n","parameters":[{"$ref":"#/parameters/realm-user-fields"}],"responses":{"200":{"description":"IDs of the users that were logged out.\n","schema":{"$ref":"#/definitions/id.result"}},"default":{"description":"Failed to log out the user\n"}},"security":[{"FlespiToken":[]}],"summary":"Log out user","tags":["realms"],"x-view-group":"Users management"}},"/realms/{realm-selector}/users/{realm-user-selector}/password":{"delete":{"description":"Reset password for the user.\n\nSpecify filtering conditions within path in 'realm-selector' to select realm, in 'realm-user-selector' to select user for the operation.\n\nCall format: **DELETE /platform/realms/{realm-selector}/users/{realm-user-selector}/password**\n","parameters":[{"$ref":"#/parameters/realm-user-fields"}],"responses":{"200":{"description":"User's password has been successfully reset; the user is returned with `has_password=false`.\n","schema":{"$ref":"#/definitions/realm-user.result"}},"default":{"description":"Failed to reset user's password\n"}},"security":[{"FlespiToken":[]}],"summary":"Reset user's password","tags":["realms"],"x-view-group":"Users management"},"parameters":[{"$ref":"#/parameters/cid-header"},{"$ref":"#/parameters/realm-selector"},{"$ref":"#/parameters/realm-user-selector"}]},"/subaccounts":{"post":{"description":"Create new subaccount with specified configuration. You pass JSON array with configuration objects - one object per each subaccount to create.\n\nName and metadata of subaccount you use for your own identification purposes.\n\nCall format: **POST /platform/subaccounts?fields=field1,field2,field3**\nwhere fields is optional argument to minimize the size of returned JSON for each created subaccount\n","parameters":[{"$ref":"#/parameters/cid-header"},{"$ref":"#/parameters/subaccount-fields"},{"description":"New subaccounts","in":"body","name":"data","required":true,"schema":{"items":{"$ref":"#/definitions/subaccount.post"},"minItems":1,"type":"array"}}],"responses":{"200":{"description":"Result contain created subaccounts.","schema":{"$ref":"#/definitions/subaccounts.result"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Create subaccount","tags":["subaccounts"],"x-flespi-extra-parameters":{"grant-access":"operate-as"},"x-view-group":"Subaccounts"}},"/subaccounts/{subaccounts-selector}":{"delete":{"description":"Delete selected subaccounts. Use with caution!\n\nUse special keyword \"all\" to delete all subaccounts. Specify filtering conditions within path in 'subaccounts-selector' to delete only subaccounts that conforms to specified criterias.\n\nBefore the deletion it is recommended to check for subaccounts that will be deleted by calling corresponding GET method.\n\nCall format: **DELETE /platform/subaccounts/{subaccounts-selector}**.\n\nSubaccount deletion can returns 409 Conflict if the target subaccount still has REST operations in flight (long-running device commands, ongoing analytics, etc.).\n\nRetry the DELETE after the in-flight requests on that subaccount complete. Once the subaccount is idle, deletion proceeds normally.\n","responses":{"200":{"description":"Result contain ID of deleted accounts.","schema":{"$ref":"#/definitions/id.result"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Delete subaccount","tags":["subaccounts"],"x-flespi-extra-parameters":{"grant-access":"operate-as"},"x-view-group":"Subaccounts"},"get":{"description":"Get collection of subaccounts available for user(token).\n\nUse special keyword \"all\" to retrieve all subaccounts. Specify filtering conditions within path in 'subaccounts-selector' to retrieve only subaccounts that conforms to specified criterias.\n\nCall format: **GET /platform/subaccounts/{subaccounts-selector}?fields=field1,field2,field3&limit=10&offset=0**\nwhere fields, limit and offset are optional arguments to minimize the size of returned JSON\n","parameters":[{"$ref":"#/parameters/subaccount-fields"},{"$ref":"#/parameters/limit"},{"$ref":"#/parameters/offset"}],"responses":{"200":{"description":"Result contain selected subaccounts.","schema":{"$ref":"#/definitions/subaccounts.result"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Retrieve subaccounts","tags":["subaccounts"],"x-view-group":"Subaccounts"},"parameters":[{"$ref":"#/parameters/subaccounts-selector"},{"$ref":"#/parameters/cid-header"}],"patch":{"description":"The patch method is similar to PUT method but it is used to update only specified keys of the item's JSON fields like metadata or configuration.\n\nCall format: **PATCH /platform/subaccounts/{subaccounts-selector}**.\n","parameters":[{"$ref":"#/parameters/subaccount-fields"},{"in":"body","name":"data","required":true,"schema":{"$ref":"#/definitions/subaccount.put"}}],"responses":{"200":{"description":"Result contain updated subaccounts.","schema":{"$ref":"#/definitions/subaccounts.result"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Patch item properties","tags":["subaccounts"],"x-flespi-extra-parameters":{"grant-access":"operate-as"},"x-view-group":"Subaccounts"},"put":{"description":"Update selected subaccounts.\n\nUse special keyword \"all\" to update all subaccounts. Specify filtering conditions within path in 'subaccounts-selector' to update only subaccounts that conforms to specified criterias.\n\nBefore the update it is recommended to check for subaccounts that will be updated by calling corresponding GET method.\n\nCall format: **GET /platform/subaccounts/{subaccounts-selector}?fields=field1,field2,field3**\nwhere fields is an optional arguments to minimize the size of returned JSON\n","parameters":[{"$ref":"#/parameters/subaccount-fields"},{"in":"body","name":"data","required":true,"schema":{"$ref":"#/definitions/subaccount.put"}}],"responses":{"200":{"description":"Result contain updated subaccounts.","schema":{"$ref":"#/definitions/subaccounts.result"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Update subaccount configuration","tags":["subaccounts"],"x-flespi-extra-parameters":{"grant-access":"operate-as"},"x-view-group":"Subaccounts"}},"/subaccounts/{subaccounts-selector}/logs":{"get":{"description":"Get logs for subaccount. The request without parameters will return all logs records.\n\nCall format: **GET /platform/subaccounts/{subaccounts-selector}/logs**.\n","parameters":[{"$ref":"#/parameters/cid-header"},{"description":"Parameters to filter retrieved logs","in":"query","name":"data","schema":{"$ref":"#/definitions/logs.get"}}],"responses":{"200":{"description":"Log messages array","schema":{"properties":{"errors":{"$ref":"#/definitions/errors"},"result":{"description":"Logs collection","items":{"$ref":"#/definitions/logmessage"},"type":"array"}},"type":"object"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Get subaccount log records.\n","tags":["logs"],"x-flespi-extra-parameters":{"grant-access":"operate-as"}},"parameters":[{"$ref":"#/parameters/subaccounts-selector"}]},"/subaccounts/{subaccounts-selector}/logs/calculate":{"get":{"description":"Calculate intervals from logs for specified subaccounts.\n\nCall format: **GET /platform/subaccounts/{subaccounts-selector}/logs/calculate**.\n","parameters":[{"$ref":"#/parameters/cid-header"},{"description":"Parameters for interval calculation","in":"query","name":"data","required":true,"schema":{"$ref":"#/definitions/container.intervals.calculate"}}],"responses":{"200":{"description":"Calculated intervals","schema":{"properties":{"errors":{"$ref":"#/definitions/errors"},"result":{"description":"Calculated intervals collection","type":"array"}},"type":"object"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Calculate intervals from subaccount logs\n","tags":["logs"],"x-flespi-extra-parameters":{"grant-access":"operate-as"}},"parameters":[{"$ref":"#/parameters/subaccounts-selector"}],"post":{"deprecated":true,"description":"**Deprecated**: use **GET /platform/subaccounts/{subaccounts-selector}/logs/calculate** instead.\n\nCalculate intervals from logs for specified subaccounts.\n\nCall format: **POST /platform/subaccounts/{subaccounts-selector}/logs/calculate**.\n","parameters":[{"$ref":"#/parameters/cid-header"},{"description":"Parameters for interval calculation","in":"body","name":"data","required":true,"schema":{"$ref":"#/definitions/container.intervals.calculate"}}],"responses":{"200":{"description":"Calculated intervals","schema":{"properties":{"errors":{"$ref":"#/definitions/errors"},"result":{"description":"Calculated intervals collection","type":"array"}},"type":"object"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Calculate intervals from subaccount logs\n","tags":["logs"],"x-flespi-extra-parameters":{"grant-access":"operate-as"}}},"/tokens":{"post":{"description":"Create new token with specified configuration. You pass JSON array with configuration objects - one object per each token to create.\n\nIn each token configuration either 'expire' or 'ttl' should be specified for correct token expiration time detection.\n\nCall format: **POST /platform/tokens?fields=field1,field2,field3**\nwhere fields is optional argument to minimize the size of returned JSON for each created token\n","parameters":[{"$ref":"#/parameters/cid-header"},{"$ref":"#/parameters/token-fields"},{"description":"New tokens parameters. At least 'expire' or 'ttl' field should be set.","in":"body","name":"data","required":true,"schema":{"items":{"$ref":"#/definitions/token.post"},"maxItems":1000,"minItems":1,"type":"array"}}],"responses":{"200":{"description":"Result contain created tokens.","schema":{"$ref":"#/definitions/tokens.result"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Create token","tags":["tokens"],"x-flespi-extra-parameters":{"grant-access":"operate-as"}}},"/tokens/{tokens-selector}":{"delete":{"description":"Delete selected tokens. Use with caution!\n\nUse special keyword \"all\" to delete all tokens. Specify filtering conditions within path in 'tokens-selector' to delete only tokens that conforms to specified criterias.\n\nBefore the deletion it is recommended to check for tokens that will be deleted by calling corresponding GET method.\n\nCall format: **DELETE /platform/tokens/{tokens-selector}**.\n","responses":{"200":{"description":"Return list of ID of deleted tokens.","schema":{"$ref":"#/definitions/id.result"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Delete token","tags":["tokens"],"x-flespi-extra-parameters":{"grant-access":"operate-as"}},"get":{"description":"Get collection of tokens available for user.\n\nUse special keyword \"all\" to retrieve all tokens. Specify filtering conditions within path in 'tokens-selector' to retrieve only tokens that conforms to specified criterias.\n\nCall format: **GET /platform/tokens/{tokens-selector}?fields=field1,field2,field3&limit=10&offset=0**\nwhere fields, limit and offset are optional arguments to minimize the size of returned JSON\n","parameters":[{"$ref":"#/parameters/token-fields"},{"$ref":"#/parameters/limit"},{"$ref":"#/parameters/offset"}],"responses":{"200":{"description":"Result contain selected tokens.","schema":{"$ref":"#/definitions/tokens.result"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Retrieve tokens","tags":["tokens"],"x-flespi-extra-parameters":{"grant-access":"operate-as"}},"parameters":[{"$ref":"#/parameters/cid-header"},{"$ref":"#/parameters/tokens-selector"}],"patch":{"description":"The patch method is similar to PUT method but it is used to update only specified keys of the item's JSON fields like metadata or configuration.\n\nCall format: **PATCH /platform/tokens/{tokens-selector}**.\n","parameters":[{"$ref":"#/parameters/token-fields"},{"description":"Properties to change.","in":"body","name":"data","required":true,"schema":{"$ref":"#/definitions/token.put"}}],"responses":{"200":{"description":"Return list of ID of deleted tokens.","schema":{"$ref":"#/definitions/id.result"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Patch item properties","tags":["tokens"],"x-flespi-extra-parameters":{"grant-access":"operate-as"}},"put":{"description":"Update selected tokens.\n\nUse special keyword \"all\" to update all tokens. Specify filtering conditions within path in 'tokens-selector' to update only tokens that conforms to specified criterias.\n\nBefore the update it is recommended to check for tokens that will be updated by calling corresponding GET method.\n\nCall format: **GET /platform/tokens/{tokens-selector}?fields=field1,field2,field3**\nwhere fields is an optional arguments to minimize the size of returned JSON\n","parameters":[{"$ref":"#/parameters/token-fields"},{"description":"Properties to change.","in":"body","name":"data","required":true,"schema":{"$ref":"#/definitions/token.put"}}],"responses":{"200":{"description":"Return list of ID of deleted tokens.","schema":{"$ref":"#/definitions/id.result"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Update token configuration","tags":["tokens"],"x-flespi-extra-parameters":{"grant-access":"operate-as"}}},"/tokens/{tokens-selector}/logs":{"get":{"description":"Get specified token logs. The request without parameters will return all token logs.\n\n'tokens-selector' specifies selection of tokens from which to retrieve logs. You may select 'all' tokens or select them by ID, name and other criterias specified in tokens-selector.\n\nReply contains token logs sorted by timestamp, in case you request logs from multiple tokens sort order is not preserved.\n\nTo improve the performance of the call try always to specify 'from' and 'to' parameters with corresponding UNIX timestamps for which you want to retrieve token logs.\nIf you will specify it only inside 'filter' the call will still iterate through all logs in token which on large volumes may slow down your operation.\n\n'filter' parameter can be used to select only subset of logs. In filter you can utilize powerful [flespi expressions](https://flespi.com/kb/expressions).\n\nCall format: **GET /platform/tokens/{tokens-selector}/logs**.\n","parameters":[{"$ref":"#/parameters/tokens-selector"},{"$ref":"#/parameters/cid-header"},{"description":"Parameters to filter retrieved logs","in":"query","name":"data","schema":{"$ref":"#/definitions/logs.get"}}],"responses":{"200":{"description":"Log messages array","schema":{"properties":{"errors":{"$ref":"#/definitions/errors"},"result":{"description":"Logs collection","items":{"$ref":"#/definitions/logmessage"},"type":"array"}},"type":"object"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Retrieve token logs","tags":["tokens"],"x-view-group":"Utils"}},"/tokens/{tokens-selector}/logs/calculate":{"get":{"description":"Calculate intervals from logs for specified token.\n\nCall format: **GET /platform/tokens/{tokens-selector}/logs/calculate**.\n","parameters":[{"description":"Parameters for interval calculation","in":"query","name":"data","required":true,"schema":{"$ref":"#/definitions/container.intervals.calculate"}}],"responses":{"200":{"description":"Calculated intervals","schema":{"properties":{"errors":{"$ref":"#/definitions/errors"},"result":{"description":"Calculated intervals collection","type":"array"}},"type":"object"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Calculate intervals from token logs","tags":["tokens"],"x-flespi-extra-parameters":{"grant-access":"operate-as"},"x-view-group":"Utils"},"parameters":[{"$ref":"#/parameters/tokens-selector"},{"$ref":"#/parameters/cid-header"}],"post":{"deprecated":true,"description":"**Deprecated**: use **GET /platform/tokens/{tokens-selector}/logs/calculate** instead.\n\nCalculate intervals from logs for specified token.\n\nCall format: **POST /platform/tokens/{tokens-selector}/logs/calculate**.\n","parameters":[{"description":"Parameters for interval calculation","in":"body","name":"data","required":true,"schema":{"$ref":"#/definitions/container.intervals.calculate"}}],"responses":{"200":{"description":"Calculated intervals","schema":{"properties":{"errors":{"$ref":"#/definitions/errors"},"result":{"description":"Calculated intervals collection","type":"array"}},"type":"object"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Calculate intervals from token logs","tags":["tokens"],"x-flespi-extra-parameters":{"grant-access":"operate-as"},"x-view-group":"Utils"}},"/webhooks":{"post":{"description":"Create new webhook with specified configuration. You pass JSON array with configuration objects - one object per each webhook to create.\n\nConfiguration defines webhook triggers and actions to perform.\n\nCall format: **POST /platform/webhooks?fields=field1,field2,field3**\nwhere fields is optional argument to minimize the size of returned JSON for each created webhook\n","parameters":[{"$ref":"#/parameters/cid-header"},{"$ref":"#/parameters/webhook-fields"},{"description":"New webhooks","in":"body","name":"data","required":true,"schema":{"items":{"$ref":"#/definitions/webhook.post"},"maxItems":1000,"minItems":1,"type":"array"}}],"responses":{"200":{"description":"created webhooks collection","schema":{"$ref":"#/definitions/webhooks.result"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Create webhook","tags":["webhooks"],"x-flespi-extra-parameters":{"grant-access":"operate-as"},"x-view-group":"Manage"}},"/webhooks/{webhooks-selector}":{"delete":{"description":"Delete selected webhooks. Use with caution!\n\nUse special keyword \"all\" to delete all webhooks. Specify filtering conditions within path in 'webhooks-selector' to delete only webhooks that conforms to specified criterias.\n\nBefore the deletion it is recommended to check for webhooks that will be deleted by calling corresponding GET method.\n\nCall format: **DELETE /platform/webhooks/{webhooks-selector}**.\n","responses":{"200":{"description":"Result contain ID of deleted webhooks.","schema":{"$ref":"#/definitions/id.result"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Delete webhook","tags":["webhooks"],"x-flespi-extra-parameters":{"grant-access":"operate-as"},"x-view-group":"Manage"},"get":{"description":"Get collection of webhooks available for user(token).\n\nUse special keyword \"all\" to retrieve all webhooks. Specify filtering conditions within path in 'webhooks-selector' to retrieve only webhooks that conforms to specified criterias.\n\nCall format: **GET /platform/webhooks/{webhooks-selector}?fields=field1,field2,field3&limit=10&offset=0**\nwhere fields, limit and offset are optional arguments to minimize the size of returned JSON\n","parameters":[{"$ref":"#/parameters/webhook-fields"},{"$ref":"#/parameters/limit"},{"$ref":"#/parameters/offset"}],"responses":{"200":{"description":"Result contains retrieved webhooks.","schema":{"$ref":"#/definitions/webhooks.result"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Retrieve webhooks","tags":["webhooks"],"x-flespi-extra-parameters":{"grant-access":"operate-as"},"x-view-group":"Manage"},"parameters":[{"$ref":"#/parameters/cid-header"},{"$ref":"#/parameters/webhooks-selector"}],"patch":{"description":"The patch method is similar to PUT method but it is used to update only specified keys of the item's JSON fields like metadata or configuration.\n\nCall format: **PATCH /platform/webhooks/{webhooks-selector}**.\n","parameters":[{"$ref":"#/parameters/webhook-fields"},{"in":"body","name":"data","required":true,"schema":{"$ref":"#/definitions/webhook.put"}}],"responses":{"200":{"description":"Result contain updated webhooks.","schema":{"$ref":"#/definitions/webhooks.result"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Patch item properties","tags":["webhooks"],"x-flespi-extra-parameters":{"grant-access":"operate-as"},"x-view-group":"Manage"},"put":{"description":"Update selected webhooks.\n\nUse special keyword \"all\" to update all webhooks. Specify filtering conditions within path in 'webhooks-selector' to update only webhooks that conforms to specified criterias.\n\nBefore the update it is recommended to check for webhooks that will be updated by calling corresponding GET method.\n\nCall format: **GET /platform/webhooks/{webhooks-selector}?fields=field1,field2,field3**\nwhere fields is an optional arguments to minimize the size of returned JSON\n","parameters":[{"$ref":"#/parameters/webhook-fields"},{"in":"body","name":"data","required":true,"schema":{"$ref":"#/definitions/webhook.put"}}],"responses":{"200":{"description":"Result contain updated webhooks.","schema":{"$ref":"#/definitions/webhooks.result"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Update webhook configuration","tags":["webhooks"],"x-flespi-extra-parameters":{"grant-access":"operate-as"},"x-view-group":"Manage"}},"/webhooks/{webhooks-selector}/logs":{"get":{"description":"Get specified webhook logs. The request without parameters will return all webhook logs.\n\n'webhooks-selector' specifies selection of webhooks from which to retrieve logs. You may select 'all' webhooks or select them by ID, name and other criterias specified in webhooks-selector.\n\nReply contains webhook logs sorted by timestamp, in case you request logs from multiple webhooks sort order is not preserved.\n\nTo improve the performance of the call try always to specify 'from' and 'to' parameters with corresponding UNIX timestamps for which you want to retrieve webhook logs.\nIf you will specify it only inside 'filter' the call will still iterate through all logs in webhook which on large volumes may slow down your operation.\n\n'filter' parameter can be used to select only subset of logs. In filter you can utilize powerful [flespi expressions](https://flespi.com/kb/expressions).\n\nCall format: **GET /platform/webhooks/{webhooks-selector}/logs**.\n","parameters":[{"description":"Parameters to filter retrieved logs","in":"query","name":"data","schema":{"$ref":"#/definitions/logs.get"}}],"responses":{"200":{"description":"Log messages array","schema":{"properties":{"errors":{"$ref":"#/definitions/errors"},"result":{"description":"Logs collection","items":{"$ref":"#/definitions/logmessage"},"type":"array"}},"type":"object"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Retrieve webhook logs","tags":["webhooks"],"x-flespi-extra-parameters":{"grant-access":"operate-as"},"x-view-group":"Utils"},"parameters":[{"$ref":"#/parameters/cid-header"},{"$ref":"#/parameters/webhooks-selector"}]},"/webhooks/{webhooks-selector}/logs/calculate":{"get":{"description":"Calculate intervals from logs for specified webhook.\n\nCall format: **GET /platform/webhooks/{webhooks-selector}/logs/calculate**.\n","parameters":[{"description":"Parameters for interval calculation","in":"query","name":"data","required":true,"schema":{"$ref":"#/definitions/container.intervals.calculate"}}],"responses":{"200":{"description":"Calculated intervals","schema":{"properties":{"errors":{"$ref":"#/definitions/errors"},"result":{"description":"Calculated intervals collection","type":"array"}},"type":"object"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Calculate intervals from webhook logs","tags":["webhooks"],"x-flespi-extra-parameters":{"grant-access":"operate-as"},"x-view-group":"Utils"},"parameters":[{"$ref":"#/parameters/cid-header"},{"$ref":"#/parameters/webhooks-selector"}],"post":{"deprecated":true,"description":"**Deprecated**: use **GET /platform/webhooks/{webhooks-selector}/logs/calculate** instead.\n\nCalculate intervals from logs for specified webhook.\n\nCall format: **POST /platform/webhooks/{webhooks-selector}/logs/calculate**.\n","parameters":[{"description":"Parameters for interval calculation","in":"body","name":"data","required":true,"schema":{"$ref":"#/definitions/container.intervals.calculate"}}],"responses":{"200":{"description":"Calculated intervals","schema":{"properties":{"errors":{"$ref":"#/definitions/errors"},"result":{"description":"Calculated intervals collection","type":"array"}},"type":"object"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"401":{"description":"Header \"Authorization: FlespiToken XXXXXXXX\" required.\n","schema":{"$ref":"#/definitions/errors.result"}},"403":{"description":"Token or customer is blocked by the platform due to variety of reasons.\n","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Calculate intervals from webhook logs","tags":["webhooks"],"x-flespi-extra-parameters":{"grant-access":"operate-as"},"x-view-group":"Utils"}},"/webhooks/{webhooks-selector}/packets":{"get":{"description":"Retrieve raw HTTP traffic packets for actions performed by webhook. Raw traffic packets are returned in base64 format.\nRaw traffic is a valuable source of information when you need to diagnose any problem with webhook actions and understand the structure of HTTP request webhook generates towards your server.\n\nIn flespi.io we suggest to use integrated utility available in webhook 'Logs & Messages' tab under TRAFFIC button.\nThere you can investigate traffic between webhook and your server in HEX/TEXT modes and conveniently export it.\n\nThis method is intended for diagnostics usage only and not guarantee to always return latest webhook traffic. Traffic is available in limited volume and for limited time only.\n\n'webhooks-selector' specifies selection of webhooks from which to fetch the raw traffic. You should select only single webhook in selector, preferable to use its ID.\n\nCall format: **GET /platform/webhooks/{webhooks-selector}/packets**.\n","parameters":[{"in":"query","name":"data","required":false,"schema":{"$ref":"#/definitions/item.packets.get"}}],"responses":{"200":{"description":"Result array with packets","schema":{"properties":{"result":{"description":"Array of packets","items":{"$ref":"#/definitions/item.packets"},"type":"array"}},"type":"object"}},"400":{"description":"Incorrect parameters.","schema":{"$ref":"#/definitions/errors.result"}},"500":{"description":"Server is unable to process request at the moment, try again later.\n"}},"security":[{"FlespiToken":[]}],"summary":"Retrieve raw traffic of actions performed by webhook","tags":["webhooks"],"x-view-group":"Utils"},"parameters":[{"$ref":"#/parameters/cid-header"},{"$ref":"#/parameters/webhooks-selector"}]}},"produces":["application/json"],"schemes":["https","http"],"securityDefinitions":{"FlespiToken":{"description":"Authorization through FlespiToken","in":"header","name":"Authorization","type":"apiKey"}},"swagger":"2.0","tags":[{"description":"[Webhooks](https://flespi.com/kb/webhooks-actions-triggered-by-specific-events) are used to transmit events to third-party systems through HTTP requests or perform REST API actions in your flespi account.\nThe trigger for the webhook is an MQTT message received by the broker.\nFiltering by topic, content, and other message fields is available. Before delivery, the HTTP request can be flexibly configured, including URI, headers, and request body.\n\nWebhooks are delivered in a first-in-first-out order.\n\nWebhook can perform a single HTTP request or chain of connected HTTP requests to source response from one request to another.\n\nOnce MQTT message was catched and validated by the trigger you will be able to see result of its processing by the webhook in its logs.\nOne log record will correspond to one message catched by webhook. In the log record event_code parameter defines the result of action:\nEvent code | Description\n-----|------\n1100|webhook successfully delivery the message\n1101|message delivery failed for some reason\n1102|webhook message delivery was skipped\n1103|response payload was too large\n\nEach log message from webhook contains full information about trigger message and actions performed by webhook.\nIn the log message you will see properties presented as Array with same count of elements inside as number of actions you configured for webhook.\nIf this is single action webhook - these properties will contain one element only. If there are multiple actions in your webhook chain - these properties will contain same number of items in Array.\nNext properties are available in webhook log message:\n * message - array with source messages ingested to webhook actions. You may find there payload, topics, user_properties, cid and timestamp for detailed investigation;\n * request_uri, request_headers, request_body - three arrays with request URI, headers and body for each webhook action;\n * response_code, response, response_size - three arrays with response code, its parsed JSON data and size for each webhook action performed;\n * reason - array with information on the error for each request, filled for failed requests only;\n\nWhenever you need to troubleshoot webhook operation you can investigate either logs or raw traffic generated by webhook towards configured servers.\nYou can fetch traffic packets via API or just use flespi.io panel for this. On 'Logs' tab there is TRAFFIC button and also from each log record you can navigate to associated raw traffic exchange via context menu command.\n","name":"webhooks"},{"description":"Customer's OAuth accounts on third-party authorization platforms (such as Google, Facebook, etc.) that can be used to authorize with the flespi platform.\n","name":"oauth"},{"description":"Support [chat](https://flespi.com/tools/helpbox) (helpbox) between the customer and the flespi support team. Use it to GET the conversation history, POST a new message to flespi support, PUT a typing indicator, and attach files via the chat-file method. Each message has a \"direction\" (true - from the customer, false - from the flespi support team) and a \"name\" identifying the author.\n\nThe flespi support team includes flespi's AI assistant, which can answer immediately around the clock. Use **POST /platform/customer/chat/ai-assistant** to turn the AI assistant on or off for the chat; while it is on it replies to customer messages automatically, and the messages it writes appear as ordinary flespi-team messages under the assistant's name.\n\nReal-time access via [MQTT](https://flespi.com/kb/how-to-consume-telematics-hub-messages-via-mqtt):\n  * each chat message is published on the **flespi/message/platform/customer/chat** topic with the message JSON as payload; the last message is retained, so a fresh subscription receives it immediately.\n  * the AI assistant on/off state is published into the retain topic **flespi/state/platform/customer/chat/ai_assistant** - the assistant name while it is on, an empty payload while it is off; subscribe to it to stay current with the active responder.\n  * a typing indicator is published on the **flespi/message/platform/customer/chat/writing** topic.\n","name":"chat"},{"description":"[Realms](https://flespi.com/kb/realms-create-and-manage-users) provide functionality to manage customer's own set of users.\n\nCustomer may specify [token](https://flespi.com/kb/tokens-access-keys-to-flespi-platform) parameters for the whole realm or for each separate user.\n\nWhen a user successfully logs in the specific realm then corresponding token is created. User may log in using these methods:\n  - name (unique for each realm) and password\n  - linked 3rd-party account via OAuth or OpendID Connect\n\nThe minimum password length is set to 16 characters to encourage password hashing before sending their values to flespi. By default, flespi uses SHA-512 (in lowercase HEX format) for all passwords set via the flespi panel.\n\nAll log messages in realms contain specific 'reason_code' field which clarifies why this or that event happened.\nSame 'reason_code' value is attached to MQTT messages as a user property to understand the reason of this or that event.\nList of possible reason codes:\n\n  Reason code | Description\n  -----|------\n  1200|attempt to log in using invalid user name and/or password\n  1201|failed to register new user\n  1202|valid OAuth client metadata URL is not allowed by the realm\n  1220|new identity provider has been added to the realm\n  1221|identity provider has been removed from the realm\n  1222|identity provider has been updated in the realm\n  1225|an error has occurred during receiving or processing response from the identity provider\n  1226|identity provider is not configured properly\n  1251|new role has been created by realm owner\n  1252|role has been updated by realm owner\n  1253|role has been deleted by realm owner\n  1301|new user has been created by realm owner\n  1302|user has been updated by realm owner\n  1303|user has been deleted by realm owner\n  1305|new user has registered using 3rd-party account\n  1310|user's password has been re-set by realm owner\n  1311|user has been logged out by realm owner\n  1312|user has been logged out because the realm is blocked\n  1313|user has been logged out because identity provider is blocked\n  1314|realm owner has logged in as the user\n  1315|user has been logged out because the realm is disabled\n  1320|user's 3rd-party account has beed successfully linked\n  1321|user's 3rd-party account has been removed by realm owner\n  1322|user has logged in using 3rd-party account\n  1350|user has logged in using password\n  1351|failed to create a token after successful log in\n  1352|login was terminated because the token does not have an explicit list of allowed origins\n  1353|attempt to log in as disabled user\n\nFor more information please read [Realms article in flespi KB](https://flespi.com/kb/realms-create-and-manage-users).\n","name":"realms"},{"description":"Access to invoices and billing configuration. Available to commercial flespi customers only.\n","name":"billing"},{"description":"Platform keeps all customer log records about each bit of activity with customer items. Logs are stored for a limited number of days depending on your account type (see details on the [pricing](https://flespi.com/pricing#restrictions) page). For more information about each type of log codes and log record fields please check the corresponding module page.\n\n Field | Description\n  --------|----------\n    timestamp | Event generation time\n    event_origin | Event owner, equal with topmost REST API item path\n    event_code | Event code, numerical representation of type of event\n    event_text | Event text, textual representation of type of event\n    origin_type | Owner type\n    origin_id | Owner ID\n    [param name] | Extra event parameters, depending on event_code\n\nTable with the list of existing event codes:\n\n  Event code | Description\n  -----|------\n  1|item was created via REST API, see below\n  2|item was updated via REST API, see below\n  3|item was deleted via REST API, see below\n  4|item was removed from account(moved to account)\n  5|item was restored from recycle bin via REST API\n  20|item was blocked, see [customer](/docs/#/platform/customer) for more information\n  21|item was unblocked, see [customer](/docs/#/platform/customer) for more information\n  100|channel has accepted connection, see [gw/connections](/docs/#/gw/connections) for more information\n  101|channel connection was identified, see [gw/connections](/docs/#/gw/connections) for more information\n  102|channel connection was closed, see [gw/connections](/docs/#/gw/connections) for more information\n  103|channel data processing error\n  104|channel data processing warning\n  114|channel configuration is invalid, see [gw/channels](/docs/#/gw/channels) for more information\n  115|the command has been sent into the transport connection\n  200|SMS(delivery receipt) was received via modem, see [gw/modems](/docs/#/gw/modems) for more information\n  201|SMS was sent via modem, see [gw/modems](/docs/#/gw/modems) for more information\n  202|modem has successfully connected to SMPP server, see [gw/modems](/docs/#/gw/modems) for more information\n  203|modem has lost connection to SMPP server, see [gw/modems](/docs/#/gw/modems) for more information\n  204|failed to connect to SMPP server, see [gw/modems](/docs/#/gw/modems) for more information\n  300|device connected, see [gw/devices](/docs/#/gw/devices) for more information\n  301|device disconnected, see [gw/devices](/docs/#/gw/devices) for more information\n  302|received SMS from device, see [gw/devices](/docs/#/gw/devices) for more information\n  303|sent SMS to device, see [gw/devices](/docs/#/gw/devices) for more information\n  304|device data processing error\n  305|device data processing warning\n  306|device secondary connection opened\n  307|device secondary connection closed\n  308|mediastream from device started\n  309|mediastream uploading stopped\n  308|media uploaded\n  310|Received a new setting value from the device, see [gw/devices](/docs/#/gw/devices) for more information\n  311|REST API (PUT) request: the system accepted new setting value, see [gw/devices](/docs/#/gw/devices) for more information\n  312|Device confirmed the acceptance of the new setting value, see [gw/devices](/docs/#/gw/devices) for more information\n  313|Device rejected the new setting value, see [gw/devices](/docs/#/gw/devices) for more information\n  314|REST API (DELETE) request: the sending of new setting value was cancelled by user, see [gw/devices](/docs/#/gw/devices) for more information\n  315|REST API (DELETE) request: current setting value was cleared from the system by user, see [gw/devices](/docs/#/gw/devices) for more information\n  316|the system marked the setting as unreadable due to exceeded retries limit\n  317|the command to request or change the setting has been sent\n  318|the command to request or change the setting has been expired\n  320|plugin was activated, see [plugins](/docs/#/gw/plugins) for more information\n  321|plugin was updated, see [plugins](/docs/#/gw/plugins) for more information\n  322|plugin was deactivated, see [plugins](/docs/#/gw/plugins) for more information\n  323|plugin processing error\n  330|device command added to the queue\n  331|device command removed from the queue\n  332|device command processed\n  333|device command expired\n  334|device command sent\n  340|tacho communication\n  401|stream connected successfully, see [gw/streams](/docs/#/gw/streams) for more information\n  402|stream has lost connection, see [gw/streams](/docs/#/gw/streams) for more information\n  403|stream failed to connect, see [gw/streams](/docs/#/gw/streams) for more information\n  404|stream has sent messages, see [gw/streams](/docs/#/gw/streams) for more information\n  405|stream successfully sent the message, see [gw/streams](/docs/#/gw/streams) for more information\n  406|stream skipped the message, see [gw/streams](/docs/#/gw/streams) for more information\n  407|stream connecting, see [gw/streams](/docs/#/gw/streams) for more information\n  420|stream was subscribed for device messages, see [gw/streams](/docs/#/gw/streams) for more information\n  422|stream was unsubscribed from device messages, see [gw/streams](/docs/#/gw/streams) for more information\n  430|stream was subscribed for channel messages, see [gw/streams](/docs/#/gw/streams) for more information\n  432|stream was unsubscribed from channel messages, see [gw/streams](/docs/#/gw/streams) for more information\n  433|stream subscribed to group, see [gw/streams](/docs/#/gw/streams) for more information\n  434|stream unsubscribed from group, see [gw/streams](/docs/#/gw/streams) for more information\n  500|MQTT session connection was accepted, see [mqtt/sessions](/docs/#/mqtt/sessions) for more information\n  501|MQTT session connection was blocked, see [mqtt/sessions](/docs/#/mqtt/sessions) for more information\n  502|MQTT session connection was rejected, see [mqtt/sessions](/docs/#/mqtt/sessions) for more information\n  503|MQTT session connection was closed, see [mqtt/sessions](/docs/#/mqtt/sessions) for more information\n  504|persistent MQTT session was overflowed and deleted, see [mqtt/sessions](/docs/#/mqtt/sessions) for more information\n  510|new subscription was created for MQTT session via REST API, see [mqtt/sessions](/docs/#/mqtt/sessions) for more information\n  511|MQTT session subscription was updated via REST API, see [mqtt/sessions](/docs/#/mqtt/sessions) for more information\n  512|MQTT session subscription was deleted via REST API, see [mqtt/sessions](/docs/#/mqtt/sessions) for more information\n  600|token expired\n  601|new device assigned to calculator\n  602|device was unassigned from calculator\n  603|device parameters were changed\n  604|device was blocked by calculator\n  605|device was unblocked by calculator\n  606|analytics system synced device calculator state, performed initial calculations and tracking its changes\n  607|analytics system stopped to track device calculator state\n  608|last calculated interval for device calculator became active\n  609|last calculated interval for device calculator became inactive\n  610|new interval created for device calculator\n  611|device calculator interval was updated\n  612|device calculator interval was deleted\n  613|user requested device intervals recalculation\n  614|calculated device interval counter overflown\n  615|calculated device maximum interval size overflown\n  620|group was assigned to calculator\n  621|group was unassigned from calculator\n  622|geofence was added to calculator\n  623|geofence was removed from calculator\n  803|geofence was added to group\n  804|geofence was removed from group\n  1000|REST API request was executed\n  1400|access was granted to the subaccount\n  1401|access was revoked for the subaccount\n  1700|AI tool call\n  1710|AI calls were blocked\n  1711|AI calls were unblocked\n\n For created, updated, deleted events that were generated due to user actions via REST the following additional parameters can be specified:\n\n Field name | Description\n  --------|----------\n    http_data | original request parameters supplied by the caller; applicable for POST, PUT and PATCH operations\n    new | item's data with default fields after operation; applicable for POST, PUT and PATCH operations\n    old | item's data with default fields prior to operation; applicable for DELETE, PUT and PATCH operations\n    token_id | token ID which was used for authorize HTTP request\n    host | IP address from which HTTP request was received\n\nTable with the list of existing origin types:\n\n  Origin type | Description\n  -----|------\n  1|platform/customer\n  2|platform/oauth/ID\n  3|platform/tokens/ID\n  4|platform/limits/ID\n  5|platform/subaccounts/ID\n  6|storage/containers/ID\n  7|storage/cdns/ID\n  9|gw/channels/ID\n  10|gw/modems/ID\n  11|gw/devices/ID\n  12|gw/streams/ID\n  13|gw/calcs/ID\n  14|mqtt/sessions/ID\n","name":"logs"},{"description":"Each minute the platform retrieves [customer's counters](/docs/#/platform/customer) and stores them in a special container.\n\nYou can access this container to fetch information about your flespi platform usage at the specified moment in time.\n\nAfter a certain period of time the data is generalized into one message with daily average staistics.\n","name":"statistics"},{"description":"Review your registration data: name, email, [access control list](https://flespi.com/blog/take-control-of-token-access-permissions-with-flexible-acls), billing (if applicable) and counters.\n\nTo stay current with flespi platform updates, subscribe to 'flespi/message/platform/customer/announce' MQTT topic.\nEach announcement is a JSON object with the 'type' field defining its kind:\n\nType      | Announcement\n----------|-------------\nnoc       | Operational notification from the flespi NOC team, e.g. about an incident or maintenance\nnews      | flespi news and product updates\npanel     | New [flespi panel](https://flespi.io) version is available\n\nThe topic is accessible with any token of the account, including ACL tokens, no extra permissions required.\nPosts of the flespi systems [changelogs](https://forum.flespi.com/t/changelog) are delivered separately into the per-system 'flespi/message/{gw|storage|mqtt|platform|ai}/changelog' topics, see the changelog section of the corresponding API documentation.\n\nCounters contain information about yours resources, their current usage and [limits](https://flespi.com/terms-of-use#restrictions). When the use of a certain resource exceeds its limits, this resource is automatically blocked by the platform with the corresponding block code. Log entries with event_code=20 (item was blocked) will also contain the \"block_code\" parameter.\nLog entries with event_code=21 (item was unblocked) do not contain any extra parameters. See [logs](/docs/#/platform/logs) for more information.\n\n###### Block reasons\n\nPossible 'blocked' code values:\n\n Block code | Description | Example\n  --------|----------|---------\n    1 | too many items in timeframe | simultaneous connections in channel per minute, AI agents when the AI credits left cannot pay for a step\n    2 | platform data consumption overflow | messages or API calls per minute\n    3 | item traffic overflow | channels, streams or API traffic per minute\n    4 | item storage overflow | channel or stream buffer, device messages container, retained storage etc.\n    5 | items count exceeds the current limit | channels or devices for free account, modems for commercial account, etc\n    6 | item configuration is invalid | There are two devices with the same ident and device type. Newly created device will be blocked.\n    7 | customer was moved to another region | Temporary status for customer's migration between regions.\n    8 | item is disabled | Item, its owner or one of its ancestors is disabled manually or automatically.\n    9 | item is being deleted | Item is being deleted and cannot be used\n","name":"customer"},{"description":"Changelog posts of the flespi platform system and related applications.\n\nTo stay current with platform updates, subscribe to 'flespi/message/platform/changelog' MQTT topic delivering any new posts published in the system [changelog](https://forum.flespi.com/t/changelog) topics on the forum.\n\nThe accumulated history of such posts is available with the 'GET /platform/changelog-posts' request. Each post carries the 'title', 'url' and 'author' of the original forum post, its 'text' in markdown, the publication 'timestamp', and the 'name' of the specific changelog it belongs to:\n\nname | changelog | posts to expect\n-----|-----------|----------------\nplatform-api | [flespi platform API](https://forum.flespi.com/d/143-changelog-flespi-platform-api) | Changes in flespi REST API\npanel | [flespi panel](https://forum.flespi.com/d/6-changelog-flespi-panel) | flespi panel release notes\n","name":"changelog"},{"description":"Identity Provider is a 3rd-party entity that manages identities information\nand provides authentication service (only OAuth 2.0 protocol is supported for\nnow). Identity Provider are used in pair with a [realm](https://flespi.com/kb/realms-create-and-manage-users) to organize work with\nflespi via 3rd-party user accounting.\n","name":"identity-providers"},{"description":"When an item is deleted from flespi it moves to a per-account recycle bin that preserves its last-known configuration and its full log history. Retention is 30 days; permanent removal happens afterwards.\n\nDeleted items are addressable by a new storage `id` distinct from the original `item_id`, and typed by `type` - an origin-type code identifying the kind of entity that was deleted:\n\n| type | entity                       |\n|------|------------------------------|\n| 5    | platform/subaccounts         |\n| 6    | storage/containers           |\n| 7    | storage/cdns                 |\n| 9    | gw/channels                  |\n| 10   | gw/modems                    |\n| 11   | gw/devices                   |\n| 12   | gw/streams                   |\n| 13   | gw/calcs                     |\n| 25   | gw/plugins                   |\n| 29   | platform/realms              |\n| 31   | gw/groups                    |\n| 33   | platform/tokens              |\n| 36   | platform/webhooks            |\n| 37   | platform/grants              |\n| 38   | platform/identity-providers  |\n| 40   | gw/geofences                 |\n| 41   | gw/assets                    |\n\nWithin the retention window you can list items via **GET /platform/deleted/{deleted-selector}**, read their preserved logs via **GET /platform/deleted/{deleted-selector}/logs**, recompute intervals from those logs via **GET /platform/deleted/{deleted-selector}/logs/calculate**, and restore items via **POST /platform/deleted/{deleted-selector}/restore**. Restoration is possible 10 seconds after deletion and reinstates the item with its stored data - a restored device keeps its ID, configuration and messages.\n\nSee [Recycle bin](https://flespi.com/kb/recycle-bin) (for details).\n","name":"deleted"},{"description":"[Subaccounts](https://flespi.com/kb/subaccounts-organizing-dedicated-flespi-accounts-for-telematics-projects) are used to create hierarchical structure of dedicated flespi accounts with specified [limits](https://flespi.com/kb/limits-restrictions-on-the-use-of-the-flespi-platform-resources). Subaccounts allow creating dependent but dedicated flespi child accounts and manage their [limits and restrictions](https://flespi.com/terms-of-use#restrictions) from the top level account.\nIn order to access the child account from the parent apart from counters and such properties as name & e-mail parent account can create tokens and use them for authorization as a child.\n\nIn terms of platform usage, subaccounts activity is summed up with the owner's activity. Thus too much activity in a subaccount can cause blockage of the owner account.\nTo avoid such blockage the owner can create limits with stricter restriction rules than he has. The same limit rule can be assigned to multiple subaccounts.\n","name":"subaccounts"},{"description":"[Token](https://flespi.com/kb/tokens-access-keys-to-flespi-platform) is an identification string that is added to the REST API request to tell flespi products who the author of the request is.\nRequests from this API (Platform API section) can be autorized only by \"master\" tokens. Such tokens are marked with the field \"flag\" = 1.\n\nA token has time validity options: **expire** and/or **ttl**. These two fields define the token validity period independently.\nIt means that if according to one field the token is not valid anymore but according to another field the token is still valid, the token will be considered valid.\nExpired tokens will be cleared automatically and can no longer be used.\n\n**expire** field, if not zero, contains explicitly provided UNIX timestamp until which the token is considered valid.\n\n**ttl** field, if not zero, specifies the interval in seconds during which the token is automatically considered valid since creation (**created** field) or last time used (**accessed** field).\n**accessed** field is automatically updated whenever you are making any REST request or having an active MQTT session.\n\nRead more about tokens and how to use them in a [dedicated article](https://flespi.com/blog/take-control-of-token-access-permissions-with-flexible-acls).\nAll token modification operations are recorded to the common [logs subsystem](/docs/#/platform/logs) with the following possible event codes:\n\n  Event code | Description\n  -----|------\n  1|token was created via REST API\n  2|token was updated via REST API\n  3|token was deleted via REST API\n  600|token expired and has been deleted\n  1501|attempt to use token from forbidden web origin\n  1502|attempt to use token from forbidden IP address\n\n**{tokens-selector}** - CSV-formatted string to filter tokens that have to be listed or removed.\nKeyword **\"all\"** will select all tokens ignoring other filtering parameters, CSV-list 1,2,3 will select only tokens with IDs 1,2 and 3.\nAvailable filtering fields applied with logical **AND** condition include: key, expire, ttl, accessed, realm_id, user_id.\n\nE.g. request\n~~~\n  GET /platform/tokens/1,2,3,accessed>1488179997,ttl=3600\n~~~\nwill list all tokens with IDs 1,2 or 3, accessed later than timestamp 1488179997 with ttl equal to 3600 seconds.\n~~~\n  DELETE /platform/tokens/key=123456789abcd\n~~~\nwill remove the token with key 123456789abcd\n\nTo obtain information about a non-master token, perform a GET request to /auth/info URI with this token in \"Authorization\" header (Authorization: FlespiToken XXXXXXXX).\n","name":"tokens"},{"description":"\n[Grants](https://flespi.com/kb/grants-sharing-access-between-unrelated-subaccounts) provide access to items between accounts that are not directly linked.\nTypically, a grant is created by a common parent who has access to both subaccounts. Also parent account is able to create a grant for its own items to subaccounts down the hierarchy.\nThe parent can assign multiple subaccounts to a single grant. The grant can be enabled or disabled at any time.\n\nGrants can be configured with different access levels.\n  Access level | Description\n  -----|------\n  | By default read only access to the item and its messages is granted\n  edit|Read and write access to the item, its messages, and its logs\n  delete|Grant access to delete items\n  command|Grant access to send commands to the devices or disconnect its connections\n  create-devices|Allows the creation of devices under a granted subaccount\n  create-channels|Allows the creation of channels under a granted subaccount\n  create-calcs|Allows the creation of calcs under a granted subaccount\n  create-plugins|Allows the creation of plugins under a granted subaccount\n  create-streams|Allows the creation of streams under a granted subaccount\n  create-modems|Allows the creation of modems under a granted subaccount\n  create-groups|Allows the creation of groups under a granted subaccount\n  create-geofences|Allows the creation of geofences under a granted subaccount\n  create-containers|Allows the creation of containers under a granted subaccount\n  create-cdns|Allows the creation of cdns under a granted subaccount\n  create-assets|Allows the creation of assets under a granted subaccount\n  create-agents|Allows the creation of ai agents under a granted subaccount\n  create-connectors|Allows the creation of ai connectors under a granted subaccount\n  operate-as|Operate as a granted subaccount\n\nThe granted items can be combined with owned items, for example, an owned device can be assigned to a granted plugin or calculator.\n","name":"grants"}]}