Rate Limits (Hard limits)

Rate Limits (Hard limits)

When executing requests to TagoIO, you will have a limit on the number of requests that can be made during a certain time period. These limits are applied in short intervals every minute, allowing us to provide a reliable and scalable API that our developer community can count on when building their applications, as well as prevent cyber attacks on our servers such as DDOS.

Rate limits are applied to a wide range of interactions within the platform, including but not limited to API endpoints, data sent from IoT devices via network protocols (MQTT, LoRaWAN, HTTP), data exports, dashboard visualizations, user interactions, and more. These limits are also known as hard limits.

Note that hard limits are used in order to prevent high frequency usage beyond a healthy acceptable level, this is different from TagoIO services that are reset monthly. You still need to make sure that you have enough resources to run your application.
TagoIO also has limits applied to the number of resources you can have and the data displayed on your dashboards. Read more about Resource Limits and Data Output for Dashboards.

How it works

Rate limits or hard limits are enforced based on your accounts plan, each account tier has different rate limits for each API resource. The maximum number of requests that are allowed are based on a time interval, with a retry time window when the requests exceed the limit. 

The limit of each request is applied every minute. If a user reaches their rate limit during a specific minute, they will need to wait until the next minute for the limit to be reset before making additional requests. So if you reach the maximum rate at 12:45:09 PM, the next request can only be done after 12:46:00 PM.

The system will aggregate all the requests performed inside a Profile for each route. Therefore, if you reach the limit for a route, all future requests to that Profile and route will be denied during the period.  For some specific routes, such as the Post and Get data from devices, you can configure the rate limit for each device separately.
Check our our Control Tower add-on.

Request Rate Limits

The following table lists the API resources for which the hard limit applies, the corresponding endpoint route, functions associated with the route, and limits for each plan. The values are given in RPM - request per minute.

Maximum number of requests per minute allowed in each Profile

ResourceRouteFunctionFreeStarterScale
DEVICEPOST /DeviceCreate Device102505,000
DEVICEDEL /Device/:device_idDelete Device102505,000
DEVICEGET /deviceList Devices50100500
DEVICEGET /device/:device_id
GET /device/token/:device_id
GET /device/:device_id/data_amount
GET /device/:device_id/chunk
Info Device
List Device Tokens
Device Data Amount
Get Device Chunk
1001.00015,000
DEVICE PARAMETERSGET /device/params
GET /device/params/:device_id
Get Device Params1001,0005,000
DEVICEPUT /device/:device_id
POST /device/token
DEL device/token/:token
POST /device/:device_id/convert
POST /device/:device_id/empty
POST /device/:device_id/chunk/copy
DEL /device/:device_id/chunk/:chunk_id
Edit Device
Create Device Token
Delete Device Token
Convert Device
Empty Device
Export Device Chunk
Delete Device Chunk
502502,000
DEVICE PARAMETERSPOST & PUT /device/:device_id/params
POST & PUT /device/params
DEL /device/params
Create
Edit
Delete Device Params
1005005,000
DATAGET /dataGet Device Data [*]2505,00015,000
DATAPOST /dataSend Device Data [*]2505,00015,000
DATAPUT /dataEdit Device Data2501,0005,000
DATADEL /dataDelete Device Data1001,0005,000
DATAGET /data?query=aggregateGet Device Data with Query Aggregate510100
ACCOUNT
PUT /account
GET PUT /account
GET /account/confirm/:token
GET /account/billing
PUT /account/billing
POST /account/otp/:otp_type/enable
POST /account/otp/:otp_type/confirm
POST /account/otp/:otp_type/disable
POST /account/allocation
PUT /account/allocation
GET /account/allocation
Edit TagoIO Account
Get TagoIO Account
Confirm TagoIO Account
Get TagoIO Account Billing
Edit TagoIO Account Billing
Enable TagoIO Account OTP
Confirm TagoIO Account OTP
Disable TagoIO Account OTP
Create TagoIO Account Resource Allocation
Edit TagoIO Account Resource Allocation
Get TagoIO Account Resource Allocation
50100500
ANALYSISPOST /analysis
PUT /analysis/:analysis_id
DEL /analysis/:analysis_id
POST /analysis/:analysis_id/upload
Create Analysis
Edit Analysis
Remove Analysis
Analysis Upload Script
601001,000
ANALYSISPOST /analysis
PUT /analysis/:analysis_id
DEL /analysis/:analysis_id
POST /analysis/:analysis_id/upload
Create Analysis
Edit Analysis
Remove Analysis
Analysis Upload Script
601001,000
ANALYSIS

GET /analysis
GET /analysis/:analysis_id
GET /analysis/:analysis_id/token
GET /analysis/:analysis_id/download
Get Analysis List
Get Analysis Info
Get Analysis Token
Get Analysis Script
601,0002,000
ANALYSISPOST /analysis/:analysis_id/run
GET /analysis/:analysis_id/run
Analysis Run601,0002,000
ANALYSISPOST /analysis/services/console/:methodAnalysis Services Console60250500
ANALYSISPOST /analysis/services/mqtt/publishAnalysis Services MQTT Publish602501000
ANALYSISPOST /analysis/services/email/sendAnalysis Services Email60250500
ANALYSISPOST /analysis/services/sms/sendAnalysis Services SMS60250500
ANALYSISPOST /analysis/services/notification/sendAnalysis Services Notification Profile60250500
ANALYSISPOST /analysis/services/attachment/uploadAnalysis Services Attachment60250500
ACTIONPOST /action
PUT /action/:action_id
DEL /action/:action_id
Create Action
Edit Action
Remove Action
601001,000
ACTIONGET /action
GET /analysis/:action_id
Get Action List
Get Action Info
601,0002,000
DASHBOARDPOST /dashboard
PUT /dashboard/:dashboard_id
DEL /dashboard/:dashboard_id
POST /dashboard/:dashboard_id/duplicate
POST /dashboard/:dashboard_id/widget
PUT /dashboard/:dashboard_id/widget/:widget_id
DEL /dashboard/:dashboard_id/widget/:widget_id
Create Dashboard
Edit Dashboard
Remove Dashboard
Duplicate Dashboard
Create Widget
Edit Widget
Remove Widget
60
1001,000
DASHBOARDGET /dashboard
GET /dashboard/:dashboard_id
GET /dashboard/:dashboard_id/widget/:widget_id
Get Dashboard List
Get Dashboard Info
Get Widget Info
601,0005,000
FILESPOST /files
PUT /files
DEL /files
PUT /files/permission
PUT /files/copy
Create Files
Edit Files
Remove Files
Change Files Permission
Copy Files
60100200
FILESGET /files
GET /file/:file_path
GET /files/permission
Get Files List
Get Files Info
Get Files Permission
601001,000
PROFILEPOST /profile
PUT /profile/:profile_id
DEL /profile/:profile_id
POST /profile/:id/token
DEL /profile/:id/token/:token
Create Profile
Edit Profile
Remove Profile
Create Profile Token
Delete Profile Token
60100200
PROFILEGET /profile
GET /profile/:profile_id
GET /profile/:id/auditlog
GET /profile/:id/token
Get Profile List
Get Profile Info
Get Profile AuditLogs
Get Profile Token
601001,000
PROFILEGET /profile/:id/statisticsGet Profile Statistics601001,000
PROFILEGET /profile/:id/summaryGet Profile Summary601001,000
PROFILEGET /profile/:id/limitsGet Profile Limits601001,000
NOTIFICATIONPOST /notification
PUT /notification/:notification_id/:btn_id
PUT /notification/read
PUT /notification/markallread
DEL /notification/:notification_id
GET /notification
Create Notification
Edit Notification
Read Notification
Radl All Notification
Remove Notification
Get Notification
601001,000
RUN NOTIFICATIONPOST run/notification
PUT /run/notification/:notification_id
DEL /run/notification/:notification_id
GET /run/notification/:run_user
PUT /run/:run_url/notification
PUT /run/:run_url/notification/markallread
PUT /run/:run_url/notification/:notification_id/:btn_id
DEL /run/:run_url/notification/:notification_id
GET /run/:run_url/notification
Create RUN Notification
Edit RUN Notification
Remove RUN Notification
Get RUN Notification
Read RUN Notification By Run User
Real All RUN Notification By Run User
Edit RUN Notification By Run User
Remove Run Notification By Run User
Get Run Notification By Run User
601001,000
RUNPUT /run
PUT /run/sso/saml
POST /run/email_test
POST /run/customdomain/:profile_id
PUT /run/customdomain/regenerate/:profile_id
DEL /run/customdomain/:profile_id
GET /run/customdomain/:profile_id
Edit TagoRUN data
Edit TagoRUN SSO
Test TagoRUN Email
Create TagoRUN Custom Domain
Regenerate TagoRUN Custom Domain
Remove TagoRUN Custom Domain
Get TagoRUN Custom Domain
60100200
RUNGET /run
GET /run/:run_domain
GET /run/sso/saml
GET /run/customdomain/:profile_id
Get TagoRUN info
Get TagoRUN info
Get TagoRUN SSO Info
Get TagoRUN Custom Domain
605002,000
RUN USERPOST /run/users
PUT /run/users/:user_id
DEL /run/users/:user_id
PUT Get Run User Info
DEL /run/:run_url/delete
POST /run/:run_url/passwordreset
POST /run/:run_url/otp/:otp_type/enable
POST /run/:run_url/otp/:otp_type/confirm
POST /run/:run_url/otp/:otp_type/disable
Create Run User
Edit Run User
Remove Run User
Edit Run User
Remove Run User
Change Run User Password
Run User OTP Enable
Run User OTP Confirm
Run User OTP Disable
601001,000
RUN USERGET /run/users
GET /run/users/:user_id
GET /run/users/:user_id/login
GET /run/:run_url/info
GET /run/:run_url/confirm/:token
Get Run User List
Get Run User Info
Login as Run User
Get Run User Info
Confirm Run User Account
601,0005,000
AMPOST /am
PUT /am/:am_id
DEL /am/:am_id
Create Access Management
Edit Access Management
Remove Access Management
60100200
AMGET /am
GET /am/:am_id
Get Access Management List
Get Access Management Info
60100500
TAGSGET /tags/keys/:typeGet Tags Resource601001,000
TOKEN INFOGET /infoGet Token Info605,00010,000
INTEGRATIONPOST /integration/network
POST /integration/connector
PUT /integration/network/:network_id
PUT /integration/connector/:connector_id
DEL /integration/network/:network_id
DEL /integration/connector/:connector_id
POST integration/network/token
DEL /integration/network/token/:token
GET /integration/network/token/:network_id
Create Integration Network
Create Integration Connector
Edit Integration Network
Edit Integration Connector
Remove Integration Network
Remove Integration Connector
Create Network Token
Remove Network Token
List Network Token
60100500
INTEGRATIONGET /integration/network
GET /integration/connector
GET /integration/network/:network_id
GET /integration/connector/:connector_id
GET /integration/network/:connector_id/devices
Get Access Integration Network List
Get Access Integration Connector List
Get Access Integration Network Info
Get Access Integration Connector Info
Get Integration Network Devices
605001,000
INTEGRATIONGET /integration/network/resolve/:serie_number
GET/integration/network/resolve/:serie_number/:authorization_code
Resolve Device Token
Resolve Device Token with AuthorizationCode
605,00015,000
AUTHORIZATIONPOST /serviceauth
PUT /serviceauth/:token
DEL /serviceauth/:token
Create Authorization Code
Edit Authorization Code
Remove Authorization Code
60100200
AUTHORIZATIONGET /serviceauthGet Authorization Code List601001,000
DICTIONARYPOST /dictionary
PUT /dictionary/:dictionary_id
DEL /dictionary/:dictionary_id
PUT /dictionary/:dictionary_id/:language
DEL /dictionary/:dictionary_id/:language
Create Dictionary
Edit Dictionary
Remove Dictionary
Edit Dictionary Language
Remove Dictionary Language
60100200
DICTIONARYGET /dictionary
GET /dictionary/:dictionary_id
GET /dictionary/:slug_or_dictionary_id/:language
Get Dictionary List
Get Dictionary Info
Get Dicionary Language
601001,000
TEMPLATEPOST /template
POST /template/:template_id
Create Template
Install Template
60100100
TCOREPOST /tcore/instance
PUT /tcore/instance/:tcore_id
DEL /tcore/instance/:tcore_id
GET /tcore/instance
GET /tcore/instance/:tcore_id
GET /tcore/instance/:tcore_id/token
POST /tcore/cluster
PUT /tcore/cluster/:id
GET tcore/cluster
GET tcore/cluster/:id
GET /tcore/cluster/:id/token
Create TCore
Edit TCore
Remove TCore
Get TCore List
Get TCore Info
Create TCore Token
Create TCore Cluster
Edit TCore Cluster
Remove TCore Cluster
Get TCore Cluster List
Get TCore Cluster Info
Create TCore Cluster Token
60100100
MQTT Publish-Publish MQTT payload to TagoIO broker2505,00015,000
MQTT Subscribe-Receive MQTT payload from TagoIO broker2505,00015,000
MQTT Connection-Connect to TagoIO broker20100200

[*] You may also be able to adjust the limit individually per device depending on your plan. Check out our Control Tower add-on.
If, for some special reason, your requirements exceed the limits in the table, consider upgrading your plan to Scale. If you are already on the Scale plan, please contact us through the Help Center.

Response code

When a hard limit has been exceeded, TagoIO will return a HTTP 429 "Too Many Requests" error. Additionally, you can examine the response body to check the remaining retry window in seconds '(Retry-After : seconds)'. The following error will be returned in the response body:
  1. { "status": false, "message": "Too many requests (Retry-After: 8)" }



When using the Admin, the following error will be displayed:


Need help adapting your project to these hard limits? Try our Community

Rate limits usage monitoring

You can monitor the hard limits for each function by accessing the account menu located in the top right corner of your Admin page and selecting the "Hard Limits" option. If the Control Tower add-on is active in your account, you will have the ability to view historical and detailed statistics of your usage for Hard Limits, providing insights into your requests per minute. Learn more about the Control Tower add-on.









    • Related Articles

    • Resource Limits

      TagoIO implements multi-tenancy as a cost-effective and performance-enhancing approach. This architectural choice brings a lot of benefits but it must have mechanisms to avoid service disruptions when other users utilizing the shared resources have ...
    • Control Tower

      The Control Tower is an add-on designed to enhance your profile by providing access to features that increase your visibility and control over your data input and output. Additionally, it offers advanced statistics on the usage of your Hard Limits ...
    • Entities

      The Entity feature is an excellent tool for storing data in a tabular format. Unlike the Devices feature, which is optimized for storing sensor data with high-frequency write operations, the Entity feature offers a versatile solution for managing a ...
    • Python SDK

      You can access our SDK documentation on: https://py.sdk.tago.io/ When executing requests to TagoIO, you will have a limit on the number of requests that can be made during a certain time period. Read more about our Rate Limits.
    • Usage Policy

      When executing API requests to TagoIO by posting (data input) or to getting (data output) data, your account may face a limit policy based on the limits defined by you in the My Billing settings. The limits are based on the number of transactions ...