Hi @Bismeet_Singh,
Welcome to the community and thank you for your patience
There’s currently no way to have different rate limits per endpoint in a Single Tyk API.
However, you can achieve it using URL Rewriting and API Level Rate Limits, just as you’ve referenced. You would need a few API definitions though, and I’ll share sample files in this post.
You’d need a wrapper API, which will be the main/only one that users call. This wrapper API will use URL rewrite (with looping) to call internal APIs which have rate limits defined on the API level for them.
Essentially, you would have as many internal APIs as the number of unique rate-limited endpoints you require.
3 API definitions below: The Wrapper/Main API, Endpoint1 and Endpoint2 APIs.
Note: Observe the need to include query param, check_limits, in the URL rewrite so that Rate Limit is enforced.
#Wrapper/Main API
{
"id": "64d0d1ef458fd70001d5b2df",
"name": "main",
"slug": "main",
"api_id": "3b1ef7dd95a54b736d13d93d8f543d98",
"org_id": "64ca4c545cf4060001966aef",
"use_standard_auth": true,
"base_identity_provided_by": "",
"version_data": {
"not_versioned": true,
"default_version": "",
"versions": {
"Default": {
"name": "Default",
"expires": "",
"use_extended_paths": true,
"extended_paths": {
"url_rewrites": [
{
"path": "endpoint2",
"method": "POST",
"match_pattern": "endpoint2",
"rewrite_to": "tyk://e2233cf905684b517f6ce24a501f82c2/?check_limits=true",
"triggers": []
},
{
"path": "endpoint1",
"method": "GET",
"match_pattern": "endpoint1",
"rewrite_to": "tyk://23785433bdd848bb7204b2ab3be823b9/?check_limits=true",
"triggers": []
}
]
}
}
}
},
"proxy": {
"preserve_host_header": false,
"listen_path": "/main/",
"target_url": "http://host.docker.internal:7070/",
"disable_strip_slash": true,
"strip_listen_path": true
},
"active": true,
"internal": false
}
…
#Endpoint1 API
{
"name": "dummy1",
"slug": "dummy1",
"api_id": "23785433bdd848bb7204b2ab3be823b9",
"org_id": "64ca4c545cf4060001966aef",
"use_keyless": true,
"base_identity_provided_by": "",
"version_data": {
"not_versioned": true,
"default_version": "",
"versions": {
"Default": {
"name": "Default",
"expires": ""
}
}
},
"proxy": {
"listen_path": "/dummy1/",
"target_url": "http://host.docker.internal:7070/anything/dummy1",
"disable_strip_slash": true,
"strip_listen_path": true
},
"active": true,
"internal": true,
"global_rate_limit": {
"rate": 100,
"per": 1
}
}
…
#Endpoint 2 API
{
"name": "dummy2",
"slug": "dummy2",
"api_id": "e2233cf905684b517f6ce24a501f82c2",
"org_id": "64ca4c545cf4060001966aef",
"use_keyless": true,
"base_identity_provided_by": "",
"version_data": {
"not_versioned": true,
"default_version": "",
"versions": {
"Default": {
"name": "Default",
"expires": ""
}
}
},
"proxy": {
"listen_path": "/dummy2/",
"target_url": "http://host.docker.internal:7070/anything/dummy2",
"disable_strip_slash": true,
"strip_listen_path": true
},
"active": true,
"internal": true,
"global_rate_limit": {
"rate": 20,
"per": 1
}
}
…
Hope this helps!