Overview
To ensure fair usage and protect the platform, MoneyKit enforces per-endpoint rate limits. Limits may apply at the client, user, link, or app level as specified below. When a limit is exceeded, the API will return a429 Too Many Requests
response and include aRetry-After
header indicating when you may retry (either as the number of seconds to wait or as an HTTP-date after which the request is allowed).
Refresh Products Rate Limits
Most endpoints follow the standard rate limits listed below. For the POST /links/{id}/products
endpoint, you may receive a 429 Too Many Requests
response if a particular product has been refreshed too recently. We allow hourly refreshes for accounts and daily refreshes for all other products. Additionally, some institutions only support data refreshes at specific times of day; attempting to refresh outside those windows will also result in a 429 Too Many Requests
response.
Rate Limits
Endpoint | Limit | Scope |
---|---|---|
POST /auth/token | 300 calls per minute | per client |
GET /institutions | 30 calls per minute | per app |
GET /institutions/{institution_id} | 400 calls per minute | per app |
POST /link-session | 20 calls per minute | per user |
POST /link-session | 1,200 calls per minute | per app |
GET /links | 600 calls per minute | per app |
POST /links/import | 60 calls per minute | per app |
GET /links/{id} | 15 calls per minute | per link |
GET /links/{id} | 1,000 calls per minute | per app |
PATCH /links/{id} | 4 calls per minute | per link |
PATCH /links/{id} | 600 calls per minute | per app |
DELETE /links/{id} | 600 calls per minute | per app |
GET /links/{id}/accounts | 4 calls per minute | per link |
GET /links/{id}/accounts | 600 calls per minute | per app |
GET /links/{id}/accounts/numbers | 3 calls per minute | per link |
GET /links/{id}/accounts/numbers | 600 calls per minute | per app |
GET /links/{id}/accounts/{account_id} | 15 calls per minute | per link |
GET /links/{id}/accounts/{account_id} | 600 calls per minute | per app |
GET /links/{id}/identity | 3 calls per minute | per link |
GET /links/{id}/identity | 600 calls per minute | per app |
POST /links/{id}/import/transactions | 120 calls per minute | per app |
GET /links/{id}/investments/holdings | 4 calls per minute | per link |
GET /links/{id}/investments/holdings | 600 calls per minute | per app |
GET /links/{id}/investments/transactions | 4 calls per minute | per link |
GET /links/{id}/investments/transactions | 600 calls per minute | per app |
GET /links/{id}/transactions | 10 calls per minute | per link |
GET /links/{id}/transactions | 2,000 calls per minute | per app |
GET /links/{id}/transactions/sync | 10 calls per minute | per link |
GET /links/{id}/transactions/sync | 2,000 calls per minute | per app |
POST /links/{id}/transactions/{txn_id}/enrichment | 10 calls per minute | per link |
POST /links/{id}/transactions/{txn_id}/enrichment | 2,000 calls per minute | per app |
POST /webhooks/test/link/{id} | 5 calls per minute | per link |
POST /webhooks/test/link/{id} | 20 calls per minute | per app |