specification: API Commons Rate Limits specificationVersion: '0.1' schema: https://raw.githubusercontent.com/api-evangelist/interface-research/main/schema/api-commons.yml#/$defs/RateLimits provider: MATLAB providerId: matlab created: '2026-05-04' modified: '2026-09-14' generated: '2026-09-14' method: searched source: >- https://thingspeak.mathworks.com/pages/license_faq, https://thingspeak.mathworks.com/prices, https://www.mathworks.com/help/thingspeak/error-codes.html, https://www.mathworks.com/help/thingspeak/get-a-channel-feed.html, https://www.mathworks.com/help/thingspeak/mqtt-basics.html note: >- Replaces the 2026-05-04 generated scaffold, which invented X-RateLimit-* headers, a 10 req/min free tier and a 1,000 req/month quota and applied them to all thirteen apis[] entries. None of that was published by MathWorks. The real published limits are ThingSpeak's, they are expressed as a minimum interval between channel updates plus an annual message allowance, and MathWorks documents NO rate-limit response headers at all. Most of the apis[] entries are in-process language bindings with no HTTP surface and therefore no rate limit. headers: limit: null remaining: null reset: null retryAfter: null policy: null headers_note: >- Checked, nothing to record. No X-RateLimit-*, RateLimit-* or Retry-After header is documented on any MathWorks HTTP surface. A client discovers throttling only from the status code, which means an agent cannot pace itself — it can only react after being refused. responseCodes: throttled: 429 quotaExceeded: 402 note: >- ThingSpeak splits these deliberately: 429 error_too_many_requests means "you called too fast, back off", 402 error_payment_required means "your licence's annual message allowance is spent". Same family of failure, completely different remedy. limits: - id: thingspeak-free-update-interval api: ThingSpeak REST API tier: free name: Channel update interval (free licence) scope: per-channel metric: seconds_between_updates limit: 15 unit: seconds source: https://thingspeak.mathworks.com/pages/license_faq - id: thingspeak-paid-update-interval api: ThingSpeak REST API tier: paid name: Channel update interval (paid licence) scope: per-channel metric: seconds_between_updates limit: 1 unit: seconds source: https://thingspeak.mathworks.com/prices - id: thingspeak-free-messages api: ThingSpeak REST API tier: free name: Annual message allowance (free licence) scope: per-account metric: messages limit: 3000000 timeFrame: year source: https://thingspeak.mathworks.com/pages/license_faq - id: thingspeak-paid-messages api: ThingSpeak REST API tier: paid name: Annual message allowance (per purchased unit) scope: per-account metric: messages limit: 33000000 timeFrame: year source: https://thingspeak.mathworks.com/prices - id: thingspeak-free-storage api: ThingSpeak REST API tier: free name: Stored message ceiling (free licence) scope: per-account metric: messages_stored limit: 10000000 source: https://thingspeak.mathworks.com/pages/license_faq - id: thingspeak-free-channels api: ThingSpeak REST API tier: free name: Channels (free licence) scope: per-account metric: channels limit: 4 source: https://thingspeak.mathworks.com/pages/license_faq - id: thingspeak-paid-channels api: ThingSpeak REST API tier: paid name: Channels (per purchased standard unit) scope: per-account metric: channels limit: 250 source: https://thingspeak.mathworks.com/prices - id: thingspeak-read-results api: ThingSpeak REST API tier: all name: Maximum entries per read scope: per-request metric: results limit: 8000 source: https://www.mathworks.com/help/thingspeak/get-a-channel-feed.html note: Hard ceiling on the results parameter. There is no cursor, so larger reads must page by moving the start/end window. - id: thingspeak-mqtt-channels-per-device api: ThingSpeak MQTT API tier: all name: Authorized channels per MQTT device scope: per-device metric: channels limit: 10 source: https://www.mathworks.com/help/thingspeak/mqtt-basics.html - id: thingspeak-mqtt-devices api: ThingSpeak MQTT API tier: all name: MQTT devices per user scope: per-account metric: devices limit: 100 source: https://www.mathworks.com/help/thingspeak/mqtt-basics.html - id: thingspeak-mqtt-idle-timeout api: ThingSpeak MQTT API tier: all name: MQTT connection idle timeout scope: per-connection metric: minutes_idle limit: 60 source: https://www.mathworks.com/help/thingspeak/mqtt-basics.html billing_unit: name: message definition: >- "A write of up to 8 fields of data to a ThingSpeak channel." REST writes, MQTT writes, MATLAB Analysis outputs and React/TimeControl triggers all count. An image write costs 100 messages. source: https://thingspeak.mathworks.com/pages/license_faq undocumented: - api: MATLAB Production Server RESTful API reason: >- Customer-hosted. Throughput is bounded by the worker pool the operator configures (see MATLABProductionServerSizer), not by a MathWorks-published limit. - api: MATLAB Engine API for Python / Java / C++ / C and Fortran / .NET reason: In-process language bindings. No HTTP surface, therefore no rate limit. - api: MATLAB MEX API reason: In-process. No HTTP surface. - api: MATLAB Data API for C++ reason: In-process. No HTTP surface. - api: MATLAB Compiler SDK API reason: Build-time API. No HTTP surface. - api: MATLAB HTTP Interface reason: A client library for calling other people's APIs; it is not itself a rate-limited service. - api: MATLAB Web App Server reason: Customer-hosted. No MathWorks-published limit. limit_count: 11