Lucas Segers
12/23/2025, 3:08 PMkapa.ai
12/23/2025, 3:09 PMredirect_uri part, not from the OAuth template variables themselves. In the example docs, the access_token_url is kept simple, without filters, e.g.: yaml access_token_url: >- <https://yourconnectorservice.com/oauth/token?client_id={{client_id_value}}&client_secret={{client_secret_value}}&code={{auth_code_value}}> and the redirect_uri is used as {{ redirect_uri_value }} directly in the URL or moved into access_token_params if needed. [[Basic OAuth](https://docs.airbyte.com/platform/connector-development/config-based/advanced-topics/oauth#basic-oauth-flow); [Template vars](https://docs.airbyte.com/platform/connector-development/config-based/advanced-topics/oauth#available-template-variables)] Your current snippet: text ...&{{redirect_uri_key}}={{> {{ redirect_uri_value }} | urlEncoder }} is invalid Jinja: - {{> {{ redirect_uri_value }} | urlEncoder }} has an extra { and > and is missing a closing }} in the right place. - The parser error Error parsing '{{ redirect_uri_value': syntax error at position ..., encountered '}', expected ':' is exactly from this malformed expression. To fix it, remove the extra characters and filter usage, and follow the pattern from the docs. For a basic flow: yaml access_token_url: >- <https://auth.host.com/oauth2/token?{{client_id_key}}={{client_id_value}}&{{client_secret_key}}={{client_secret_value}}&{{auth_code_key}}={{auth_code_value}}&{{redirect_uri_key}}={{redirect_uri_value}}> If your provider requires JSON‑encoded parameters in the body instead of query params, move them into access_token_params as shown in the advanced example: [[JSON-encoded params](https://docs.airbyte.com/platform/connector-development/config-based/advanced-topics/oauth#advanced-case-access-token-url-query-parameters-should-be-json-encoded)] yaml access_token_url: >- <https://auth.host.com/oauth2/token> access_token_params: "{{ client_id_key }}": "{{ client_id_value }}" "{{ client_secret_key }}": "{{ client_secret_value }}" "{{ auth_code_key }}": "{{ auth_code_value }}" "{{ redirect_uri_key }}": "{{ redirect_uri_value }}" There is no mention in the docs of using a urlEncoder filter in these templates, so if you need URL encoding, the knowledge sources do not describe a supported way to do that declaratively.Lucas Segers
12/23/2025, 3:25 PMkapa.ai
12/23/2025, 3:25 PMkapa.ai
12/23/2025, 3:25 PMclient_id:client_secret looks like this: [[Advanced header](https://docs.airbyte.com/platform/connector-development/config-based/advanced-topics/oauth#advanced-case-client-secret-is-a-request-header-not-a-query-parameter)] yaml access_token_headers: SECRETHEADER: "{{ (client_id_value ~ ':' ~ client_secret_value) | b64encode }}" Adapting that pattern to your Authorization header, you should write: yaml access_token_headers: Authorization: "{{ (client_id_value ~ ':' ~ client_secret_value) | b64encode }}" Key points based on the docs: - Use {{ ... }} only once around the whole expression. - Concatenate strings with ~, e.g. (client_id_value ~ ':' ~ client_secret_value). - Apply the base64 filter (b64encode in the example) after the expression with |. [[Advanced header](https://docs.airbyte.com/platform/connector-development/config-based/advanced-topics/oauth#advanced-case-client-secret-is-a-request-header-not-a-query-parameter)] The knowledge sources don’t show a base64Encoder filter name; they use b64encode in the example, so if base64Encoder is failing, prefer the documented b64encode form.Lucas Segers
12/23/2025, 3:28 PMkapa.ai
12/23/2025, 3:28 PMkapa.ai
12/23/2025, 3:28 PMclient_id in the OAuth config, even if the field exists in the connector’s connection_specification. From the docs, the recommended pattern is: 1. Expose client_id in the spec (what the user fills in): yaml spec: connection_specification: type: object required: - client_id - client_secret properties: client_id: type: string client_secret: type: string 2. Wire it into the authenticator using config[...]: yaml definitions: base_requester: type: HttpRequester url_base: <https://example.com> authenticator: type: OAuthAuthenticator refresh_request_body: {} client_id: "{{ config['client_id'] }}" client_secret: "{{ config['client_secret'] }}" 3. **In the advanced_auth block, use the template variables (client_id_value, etc.), not `config[...]`:** yaml advanced_auth: auth_flow_type: oauth2.0 oauth_config_specification: oauth_connector_input_specification: consent_url: >- <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}}> Here, {{ client_id_value }} is automatically resolved from the config field you wired via client_id in the authenticator; you do not use {{ config["client_id"] }} inside the OAuth flow templates. [[Basic OAuth flow](https://docs.airbyte.com/platform/connector-development/config-based/advanced-topics/oauth#basic-oauth-flow); [Template variables](https://docs.airbyte.com/platform/connector-development/config-based/advanced-topics/oauth#available-template-variables)] So if you currently have something like this in your OAuth section: yaml access_token_url: >- <https://auth.host.com/oauth2/token?client_id={{> config["client_id"] }}&... change it to: yaml access_token_url: >- <https://auth.host.com/oauth2/token?client_id={{> client_id_value }}&... and ensure: - client_id is in connection_specification.required and properties. - The authenticator’s client_id field is set to {{ config['client_id'] }} (or the correct nested path). - The OAuth templates only use the documented variables (client_id_value, client_secret_value, etc.). [[Template variables](https://docs.airbyte.com/platform/connector-development/config-based/advanced-topics/oauth#available-template-variables)] If after that you still see “Undefined parameter '{{ config["client_id"] }}'”, it likely means there is still at least one {{ config["client_id"] }} reference inside the oauth_config_specification block; replace all of those with the corresponding *_value variables.Lucas Segers
12/23/2025, 8:21 PMkapa.ai
12/23/2025, 8:21 PMkapa.ai
12/23/2025, 8:21 PMb64encode is a valid interpolation method for OAuth flows, but they do not explicitly state that all template filters are available in every context (e.g., OAuthAuthenticator.refresh_request_headers).[[Template methods](https://docs.airbyte.com/platform/connector-development/config-based/advanced-topics/oauth#available-template-variables-pipe-methods)] Because of that, I can’t be fully certain, but the error strongly suggests that b64encode is not available (or not enabled) in that specific context. A few concrete points based on the docs: 1. Where b64encode is shown as supported The docs list b64encode as an available pipe method for “Declarative OAuth 2.0” templates, and use it in the OAuth flow example for `access_token_headers`: yaml access_token_headers: SECRETHEADER: "{{ (client_id_value ~ ':' ~ client_secret_value) | b64encode }}" [[Advanced header](https://docs.airbyte.com/platform/connector-development/config-based/advanced-topics/oauth#advanced-case-client-secret-is-a-request-header-not-a-query-parameter)] 2. Your failing usage is in OAuthAuthenticator (refresh) headers Your snippet: json { "Content-Type": "application/x-www-form-urlencoded", "Authorization": "Basic {{ (config['client_id'] ~ ':' ~ config['client_secret']) | b64encode }}" } is inside refresh_request_headers of OAuthAuthenticator (the component used by the declarative HttpRequester).[[OAuthAuthenticator](https://docs.airbyte.com/platform/connector-development/config-based/understanding-the-yaml-file/reference#/definitions/OAuthAuthenticator)] The docs show that refresh_request_headers is an object and that its values can be templated with config[...], but they do not show any example using pipe methods like b64encode there—only in the OAuth flow (access_token_headers) examples.[[OAuthAuthenticator](https://docs.airbyte.com/platform/connector-development/config-based/understanding-the-yaml-file/reference#/definitions/OAuthAuthenticator); [Advanced header](https://docs.airbyte.com/platform/connector-development/config-based/advanced-topics/oauth#advanced-case-client-secret-is-a-request-header-not-a-query-parameter)] Given your error: > No filter named 'b64encode' the most defensible interpretation is: the Jinja environment used for OAuthAuthenticator headers does not have b64encode registered, even though the OAuth flow templates do. 3. What you can safely do with the info we have From the docs, we can say with confidence: - b64encode is supported in OAuth flow templates (e.g., access_token_headers).[[Template methods](https://docs.airbyte.com/platform/connector-development/config-based/advanced-topics/oauth#available-template-variables-pipe-methods); [Advanced header](https://docs.airbyte.com/platform/connector-development/config-based/advanced-topics/oauth#advanced-case-client-secret-is-a-request-header-not-a-query-parameter)] - refresh_request_headers supports templating with config[...] variables, but the docs do not explicitly confirm that pipe methods like b64encode are available there.[[OAuthAuthenticator](https://docs.airbyte.com/platform/connector-development/config-based/understanding-the-yaml-file/reference#/definitions/OAuthAuthenticator)] Because the knowledge sources don’t document b64encode in refresh_request_headers, I cannot reliably propose a fully supported workaround that still uses that filter in this context. --- Summary - Your syntax for the header expression is correct Jinja. - The error is due to b64encode not being recognized in the OAuthAuthenticator.refresh_request_headers context. - The docs only demonstrate b64encode in OAuth flow templates (access_token_headers), not in the refresh-token headers of OAuthAuthenticator, so there is no documented way (in these sources) to base64‑encode the header value in that specific place.Lucas Segers
12/23/2025, 8:24 PMkapa.ai
12/23/2025, 8:24 PMkapa.ai
12/23/2025, 8:24 PMaccess_token_headers) Here, Airbyte explicitly documents pipe methods like b64encode and shows them in use: yaml access_token_headers: SECRETHEADER: "{{ (client_id_value ~ ':' ~ client_secret_value) | b64encode }}" [[Advanced header](https://docs.airbyte.com/platform/connector-development/config-based/advanced-topics/oauth#advanced-case-client-secret-is-a-request-header-not-a-query-parameter); [Pipe methods](https://docs.airbyte.com/platform/connector-development/config-based/advanced-topics/oauth#available-template-variables-pipe-methods)] 2. OAuthAuthenticator fields (e.g. refresh_request_headers) The reference only states that these can use config[...] variables; it does not show any example using filters like b64encode there, nor does it say that the OAuth pipe methods are available in this context.[[OAuthAuthenticator](https://docs.airbyte.com/platform/connector-development/config-based/understanding-the-yaml-file/reference#/definitions/OAuthAuthenticator)] Given your error (No filter named 'b64encode') and the absence of any example or statement that b64encode works in refresh_request_headers, the safest conclusion from the docs is: - The special OAuth pipe methods (like b64encode) are documented and supported in OAuth flow templates, but the knowledge sources do not confirm they’re available in `OAuthAuthenticator`’s refresh headers. So yes, from a user perspective it is unintuitive; but based on the documentation we have, it’s also not clearly specified that these filters should work in that particular place, which matches the behavior you’re seeing.