Jens Mostaert
07/10/2025, 10:29 AMDhiraj Bhalerao
07/10/2025, 10:50 AMSunil Jimenez
07/10/2025, 7:25 PMDamon Gudaitis
07/10/2025, 10:35 PMExample with the header value encoded into
base64-string
```--- secret_header_manifest.yml
+++ secret_header_manifest.yml
spec:
https://yourconnectorservice.com/oauth/consent?client_id={{client_id_value}}&redirect_uri={{
redirect_uri_value }}&state={{ state }}
access_token_url: >-
- https://yourconnectorservice.com/oauth/token?client_id={{client_id_value}}&client_secret={{client_secret_value}}&code={{auth_code_value}}
+ https://yourconnectorservice.com/oauth/token?client_id={{client_id_value}}&code={{auth_code_value}}
+ access_token_headers:
- SECRETHEADER: "{{ client_secret_value }}"
+ SECRETHEADER: "{{ (client_id_value ~ ':' ~ client_secret_value) | b64encode }}"
complete_oauth_output_specification:
required:```I've tried that code and various variations on it including just hard-coding an authorization header,
Authorization : testval
, no matter what I do, I can't get any custom header to appear.
base_requester:
type: HttpRequester
url_base: <snip>
authenticator:
type: OAuthAuthenticator
client_id: "{{ config[\"client_id\"] }}"
grant_type: client_credentials
client_secret: "{{ config[\"client_secret\"] }}"
access_token_value: "{{ config[\"client_access_token\"] }}"
refresh_request_body: {}
token_refresh_endpoint: <https://api-platform.cvent.com/ea/oauth2/token>
access_token_headers:
Authorization: >-
Basic {{ (config[\"client_id\"] ~ ':' ~ config[\"client_secret\"] ) |
b64encode }}
Regardless of what I put in access_token_headers
, nothing below changes.
{
"url": "<snip although I don't think anyone cares>",
"body": "grant_type=client_credentials&client_id=****&client_secret=****",
"headers": {
"User-Agent": "python-requests/2.32.4",
"Accept-Encoding": "gzip, deflate",
"Accept": "*/*",
"Connection": "keep-alive",
"Content-Length": "139",
"Content-Type": "application/x-www-form-urlencoded"
},
"http_method": "POST"
}
The values were first populated by the OAuth Legacy connector since that one is the closest to what I want to do.
I must be misunderstanding something with the Declarative OAuth2.0.Morgan Kerle
07/10/2025, 11:41 PMBohdan Stadnyk
07/11/2025, 3:39 PMapi_budget
doesn't work or my confusion around its functionality. Considering the bitbucket rate limits which are 1k requests per 1h rolling window, you would expect this config never hit rate limits
requester:
type: HttpRequester
url_base: "<https://api.bitbucket.org/2.0/>"
http_method: GET
authenticator:
type: BasicHttpAuthenticator
username: "{{ config['email'] }}"
password: "{{ config['api_token'] }}"
error_handler:
type: DefaultErrorHandler
max_retries: 100
backoff_strategies:
- type: ExponentialBackoffStrategy
factor: 5
response_filters:
- type: HttpResponseFilter
action: RETRY
http_codes: [429, 500, 502, 503, 504]
....
api_budget:
type: HTTPAPIBudget
status_codes_for_ratelimit_hit: [429]
policies:
- type: MovingWindowCallRatePolicy
rates:
- limit: 15
interval: "PT1M"
- limit: 900
interval: "PT1H"
matchers:
- method: "GET"
url_base: "<https://api.bitbucket.org/2.0/>"
concurrency_level:
type: ConcurrencyLevel
default_concurrency: 1
max_concurrency: 1
However in output logs you can clearly see that airbyte hits rate limits
{"type":"LOG","log":{"level":"INFO","message":"Retrying. Sleeping for 10.0 seconds"}}
{"type":"LOG","log":{"level":"INFO","message":"Backing off _send(...) for 0.0s (airbyte_cdk.sources.streams.http.exceptions.UserDefinedBackoffException: Too many requests.)"}}
{"type":"LOG","log":{"level":"INFO","message":"Retrying. Sleeping for 10.0 seconds"}}
{"type":"LOG","log":{"level":"INFO","message":"Backing off _send(...) for 0.0s (airbyte_cdk.sources.streams.http.exceptions.UserDefinedBackoffException: Too many requests.)"}}
{"type":"LOG","log":{"level":"INFO","message":"Retrying. Sleeping for 20.0 seconds"}}
{"type":"LOG","log":{"level":"INFO","message":"Backing off _send(...) for 0.0s (airbyte_cdk.sources.streams.http.exceptions.UserDefinedBackoffException: Too many requests.)"}}
{"type":"LOG","log":{"level":"INFO","message":"Retrying. Sleeping for 40.0 seconds"}}
{"type":"LOG","log":{"level":"INFO","message":"Backing off _send(...) for 0.0s (airbyte_cdk.sources.streams.http.exceptions.UserDefinedBackoffException: Too many requests.)"}}
{"type":"LOG","log":{"level":"INFO","message":"Retrying. Sleeping for 20.0 seconds"}}
{"type":"LOG","log":{"level":"INFO","message":"Backing off _send(...) for 0.0s (airbyte_cdk.sources.streams.http.exceptions.UserDefinedBackoffException: Too many requests.)"}}
{"type":"LOG","log":{"level":"INFO","message":"Retrying. Sleeping for 10.0 seconds"}}
{"type":"LOG","log":{"level":"INFO","message":"Backing off _send(...) for 0.0s (airbyte_cdk.sources.streams.http.exceptions.UserDefinedBackoffException: Too many requests.)"}}
{"type":"LOG","log":{"level":"INFO","message":"Retrying. Sleeping for 160.0 seconds"}}
Does anyone knows what can be wrong? or this is expected behaviour? I found a few relevant threads on the relevant topic, but all them left unanswered, any help would appreciated. Yes, I read the docs, and I searched the repo for examples but couldn't find what is the reason behind this.James Carter
07/11/2025, 11:49 PMAnudhyan Datta LT-23
07/14/2025, 4:30 AMForrest Hicks
07/14/2025, 5:33 PMVictor K.
07/14/2025, 7:22 PMBlake
07/14/2025, 9:06 PMAlex Johnson
07/15/2025, 3:39 AMEric Hendrickson
07/15/2025, 7:18 PMjuhani connolly
07/16/2025, 6:09 AMThe above exception was the direct cause of the
following exception:
╭──────── Traceback (most recent call last) ─────────╮
│ in invoke:48 │
│ │
│ in invoke:1485 │
│ │
│ in invoke:824 │
│ │
│ in build:74 │
│ │
│ in run_connectors_pipelines:107 │
│ in start:12 │
│ │
│ in start:7334 │
│ │
│ in execute:162 │
╰────────────────────────────────────────────────────╯
QueryError: resolve: failed to resolve image
<http://docker.io/library/docker:24-dind|docker.io/library/docker:24-dind>: failed to resolve
source metadata for <http://docker.io/library/docker:24-dind|docker.io/library/docker:24-dind>:
failed to get credentials: error getting credentials -
err: exec: "docker-credential-desktop.exe": executable
file not found in $PATH, out: ``
INFO pipelines: Dagger logs saved to dagger_pipeline_command.py:56
/mnt/c/Users/A12527/Workspaces/airbyte/airbyte-ci/conn
ectors/pipelines/pipeline_reports/airbyte-ci/connector
s/build/manual/main/1752612580/105533dd3155234b7294c50
deb62060decf051bc/dagger.log
Any ideas as to the cause(kind of long shot as I guess wsl + podman really weirds things outKamil Maruta
07/16/2025, 1:44 PM/admin/workspaces/modified
. The API response is a simple JSON object:
{
"status": 200,
"body": [
{ "id": "abc-123" },
{ "id": "def-456" }
],
"headers" : {
}
}
My goal is to extract the array of objects from the body
field in the API response and collect all id
values into a single list. I don’t want each id
to be treated as a separate partition.
Instead, I want to group the `id`s into batches (e.g., 80 per request) and pass each batch as an array in the request body to downstream endpoints like getInfo
and scanResult
.
I attempted to use the following record_selector
:
record_selector:
type: RecordSelector
field_path: ["body"]
or body.*
However, this results an empty list.
And I got a warning "No records could be extracted from the response. Check the Response tab to see the raw response. If this looks correct, make sure the Record Selector is configured correctly."
What is the correct and schema-compliant way to extract a top-level array (like body
) from the JSON response?
Any working example would be greatly appreciated.
ThanksJens Mostaert
07/17/2025, 11:28 AMPOST /api/v1/sources/update
{
"message": "Internal Server Error: io.grpc.StatusRuntimeException: ALREADY_EXISTS: Secret [projects/332657581931/secrets/airbyte_workspace_67db3dcd-eb80-424c-9ae2-e42d654f28bc_secret_78eadfdf-dde2-45e9-b287-d3f37b8c5ee3_v7084] already exists.",
"exceptionClassName": "com.google.api.gax.rpc.AlreadyExistsException",
"exceptionStack": [],
"rootCauseExceptionStack": []
}
Martin Andonov
07/17/2025, 6:54 PMLorenzo
07/17/2025, 10:21 PMPaul Houghton
07/18/2025, 12:52 PMMukesh Kumar
07/19/2025, 5:18 AMBilal Mubasher
07/21/2025, 8:48 AMBilal Mubasher
07/21/2025, 8:57 AMBilal Mubasher
07/21/2025, 1:33 PMRafael Capelo
07/21/2025, 5:59 PMLorenzo
07/23/2025, 4:02 AMGergely Imreh
07/23/2025, 7:33 AM2025-06-01
, and from there I have to run requests with the query parameters: from_date
set to 2025-06-01
and the to_date
set to 2025-06-02
; after this I have to query again, but setting 2025-06-02
and 2025-06-03
, and so on up until today
• is this possible with incremental sync (if there's no cursor on the API, but it would keep its own "up to this date" value? (this would be the best, probably, meaning fastest sync)
• or, is it possible through the possible though pagination?
Or would I need to built a more custom connector for this?
Cheers!Rubén Laguna
07/24/2025, 7:34 AMAnder Aranburu
07/25/2025, 7:59 AMState message does not contain idIf anyone is familiar with how/why this issue arises, I’d really appreciate your insight. A few specific questions I’m trying to figure out: • Was this issue introduced by a recent change in the Airbyte Protocol or CDK? • Is it related to the source connector at all, or only to how the destination handles state messages? • Why don’t other destinations using CDK 6.x (e.g. destination-sqlite) seem to be affected? Thanks in advance for any help you can share! 🙏
Alexei Kozhushkov
07/25/2025, 9:05 AMairbyte
install and it works great with mysql, mssql and postgres.
But I can't make connector builder
to work, e.g. even simples unauthenticated <https://restcountries.com/v3.1/all?fields=name>
fails with Draft can't be saved
error.
Please advise 🙏Michael Hernandez
07/25/2025, 5:28 PMissue_remote_links
only supports full_refresh which makes sense as Atlassian didn't include a date or ID column that could be used for incrementally syncing.
If I could use the keys from the issues
stream sync, I could achieve something similar by fetching only for particular issues.