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.

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 Devices1001,0005,000
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
60
100
1,000
ANALYSIS
POST /analysis
PUT /analysis/:analysis_id
DEL /analysis/:analysis_id
POST /analysis/:analysis_id/upload
Create Analysis
Edit Analysis
Remove Analysis
Analysis Upload Script
60
100
1,000
ANALYSIS
POST /analysis
PUT /analysis/:analysis_id
DEL /analysis/:analysis_id
POST /analysis/:analysis_id/upload
Create Analysis
Edit Analysis
Remove Analysis
Analysis Upload Script
60
100
1,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
60
1,000
2,000
ANALYSIS
POST /analysis/:analysis_id/run
GET /analysis/:analysis_id/run
Analysis Run
60
1,000
2,000
ANALYSIS
POST /analysis/services/console/:method
Analysis Services Console
60
250
500
ANALYSIS
POST /analysis/services/mqtt/publish
Analysis Services MQTT Publish
60
250
500
ANALYSIS
POST /analysis/services/email/send
Analysis Services Email
60
250
500
ANALYSIS
POST /analysis/services/sms/send
Analysis Services SMS
60
250
500
ANALYSIS
POST /analysis/services/notification/send
Analysis Services Notification Profile
60
250
500
ANALYSIS
POST /analysis/services/attachment/upload
Analysis Services Attachment
60
250
500
ACTION
POST /action
PUT /action/:action_id
DEL /action/:action_id
Create Action
Edit Action
Remove Action
60
100
1,000
ACTION
GET /action
GET /analysis/:action_id
Get Action List
Get Action Info
60
1,000
2,000
DASHBOARD
POST /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
100
1,000
DASHBOARD
GET /dashboard
GET /dashboard/:dashboard_id
GET /dashboard/:dashboard_id/widget/:widget_id
Get Dashboard List
Get Dashboard Info
Get Widget Info
60
1,000
5,000
FILES
POST /files
PUT /files
DEL /files
PUT /files/permission
PUT /files/copy
Create Files
Edit Files
Remove Files
Change Files Permission
Copy Files
60
100
200
FILES
GET /files
GET /file/:file_path
GET /files/permission
Get Files List
Get Files Info
Get Files Permission
60
100
1,000
PROFILE
POST /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
60
100
200
PROFILE
GET /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
60
100
1,000
PROFILE
GET /profile/:id/statistics
Get Profile Statistics
60
100
1,000
PROFILE
GET /profile/:id/summary
Get Profile Summary
60
100
1,000
PROFILE
GET /profile/:id/limits
Get Profile Limits
60
100
1,000
NOTIFICATION
POST /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
60
100
1,000
RUN NOTIFICATION
POST 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
60
100
1,000
RUN
PUT /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
60
100
200
RUN
GET /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
60
500
2,000
RUN USER
POST /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
60
100
1,000
RUN USER
GET /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
60
1,000
5,000
AM
POST /am
PUT /am/:am_id
DEL /am/:am_id
Create Access Management
Edit Access Management
Remove Access Management
60
100
200
AM
GET /am
GET /am/:am_id
Get Access Management List
Get Access Management Info
60
100
500
TAGS
GET /tags/keys/:type
Get Tags Resource
60
100
1,000
TOKEN INFO
GET /info
Get Token Info
60
5,000
10,000
INTEGRATION
POST /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
60
100
500
INTEGRATION
GET /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
60
500
1,000
INTEGRATION
GET /integration/network/resolve/:serie_number
GET/integration/network/resolve/:serie_number/:authorization_code
Resolve Device Token
Resolve Device Token with AuthorizationCode
60
5,000
15,000
AUTHORIZATION
POST /serviceauth
PUT /serviceauth/:token
DEL /serviceauth/:token
Create Authorization Code
Edit Authorization Code
Remove Authorization Code
60
100
200
AUTHORIZATION
GET /serviceauth
Get Authorization Code List
60
100
1,000
DICTIONARY
POST /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
60
100
200
DICTIONARY
GET /dictionary
GET /dictionary/:dictionary_id
GET /dictionary/:slug_or_dictionary_id/:language
Get Dictionary List
Get Dictionary Info
Get Dicionary Language
60
100
1,000
TEMPLATE
POST /template
POST /template/:template_id
Create Template
Install Template
60
100
100
TCORE
POST /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
60
100
100

[*] You may also be able to adjust the limit individually per device depending on your plan. Check out our Control Tower add-on.

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
If for some special reason your requirements exceed the limits in the table, please contact us through the Help Center.


Rate limits usage monitoring

You can monitor your hard limits for each function by accessing the account menu in the top right corner of your Admin and selecting the "Hard Limits" option.



    • 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 that enhances your profile allowing you to access features that give you more visibility and control over your data input and output. With Control Tower, you can: View data input and output statistics for each device ...
    • 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 ...
    • Node.js SDK

      You can access our SDK documentation on: https://js.sdk.tago.io If you are looking for documentation for old version (9.x.x) you access it on: https://tago-sdk-js-documentation.rtfd.io/ The old SDK will be discontinued at 2030. When executing ...