Declarative: Multi-token authenticator with rate-limit-aware rotation
Maintainers usually reply within 1 day
@aaronsteers is already working on this.
Since Nov 9, 2025.
Assessment
This issue has not been assessed yet.
Description
Problem
Many API connectors need to rotate through multiple authentication tokens to increase effective rate limits and avoid hitting API quotas. Currently, this requires custom Python code and cannot be implemented in declarative manifest-only connectors.
Current Workaround
Connectors like source-github implement custom authenticators in Python. See source-github/utils.py:53-186 which implements MultipleTokenAuthenticatorWithRateLimiter that:
- Cycles through multiple tokens automatically
- Tracks separate rate limits per token per API type (REST vs GraphQL)
- Automatically switches tokens when limits are reached
- Sleeps until reset if all tokens are exhausted
Proposed Solution
Add a declarative MultiTokenAuthenticator component that supports:
- Token rotation: Accept multiple tokens and cycle through them
- Rate limit tracking: Monitor rate limits per token via response headers or dedicated endpoints
- Separate counters: Support different rate limit buckets (e.g., REST vs GraphQL)
- Automatic switching: Switch to next token when current token is rate-limited
- Sleep/retry logic: Wait until rate limit reset when all tokens are exhausted
Example Configuration
authenticator:
type: MultiTokenAuthenticator
tokens:
- "{{ config.tokens[0] }}"
- "{{ config.tokens[1] }}"
- "{{ config.tokens[2] }}"
rate_limit_tracking:
- resource: "core" # REST API
header_prefix: "x-ratelimit-"
- resource: "graphql" # GraphQL API
header_prefix: "x-ratelimit-"
max_wait_time: "{{ config.max_waiting_time }}"
Impact
This would enable connectors like source-github, source-gitlab, and others to be fully declarative while maintaining their multi-token rate limiting capabilities.
Related
- airbytehq/airbyte-python-cdk#714 - Survey showing 74.3% of certified manifest-only connectors require custom components
- Requested by @aaronsteers in https://airbytehq-team.slack.com/archives/C08BHPUMEPJ/p1762665961303909
Code References
source-github/utils.py:53-186-MultipleTokenAuthenticatorWithRateLimiterimplementationsource-github/spec.json:57-62- Multi-token input configuration
- Dominant language
- Python
- Stars
- 27
- Forks
- 56
- Avg merge
- 3d 18h
- Merged PRs (30d)
- 30
Getting set up
- Ships a Dockerfile or Docker Compose file
- No pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from airbytehq/airbyte-python-cdk
-
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
airbytehq/airbyte-python-cdk#1080 ·
Maintainers usually reply within 1 day
-
community
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
airbytehq/airbyte-python-cdk#782 ·
Maintainers usually reply within 1 day
-
community
Difficulty 5/5 Over a week Newbie friendliness 35/100
airbytehq/airbyte-python-cdk#1148 · 1 comment ·
Maintainers usually reply within 1 day
-
community
Difficulty 2/5 1-3 hours Newbie friendliness 45/100
airbytehq/airbyte-python-cdk#1146 · 1 comment · 3 reactions ·
Maintainers usually reply within 1 day
-
enhancement
Difficulty 4/5 3-5 days Newbie friendliness 48/100
airbytehq/airbyte-python-cdk#1120 · 2 comments ·
Maintainers usually reply within 1 day
All issues in airbytehq/airbyte-python-cdk
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
aws-samples/sample-per-model-bedrock#243 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 66/100
FuRongJun-1999/dsh-memory#404 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Maintainers usually reply within 1 day
-
bug frontend
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
PennyLaneAI/catalyst#3337 ·
Maintainers usually reply within 1 day
-
Workflow.schedule stops when a cron deadline passes before sleepPossibly taken @HuaTNA claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
Maintainers usually reply within 1 day