airbyte-ci/connectors/metadata_service/docs/external_documentation_urls.md
This guide explains how to identify, scrape, and maintain externalDocumentationUrls in connector metadata.yaml files. These URLs point to official vendor documentation that helps users understand API changes, authentication requirements, rate limits, and other critical information.
External documentation URLs serve several key purposes:
The schema is defined in airbyte-ci/connectors/metadata_service/lib/metadata_service/models/src/ConnectorMetadataDefinitionV0.yaml.
The externalDocumentationUrls field is an optional array where each entry contains:
title (required): Display title for the documentation linkurl (required): URL to the external documentationtype (optional): Category of documentation (see taxonomy below)requiresLogin (optional, default: false): Whether the URL requires authentication to accessDescription: Changelogs, release notes, API version history, and out-of-cycle changes.
Typical URL patterns:
*/changelog**/release-notes**/api/versions**/whats-new*Examples:
https://airtable.com/developers/web/api/changeloghttps://developers.google.com/google-ads/api/docs/release-noteshttps://help.salesforce.com/s/articleView?id=release-notes.salesforce_release_notes.htmhttps://developers.facebook.com/docs/marketing-api/marketing-api-changelogDescription: API documentation, versioning docs, technical references, and API specifications.
Typical URL patterns:
*/api/reference**/api/docs**/developers/api**/api-reference*Examples:
https://docs.gitlab.com/ee/api/rest/https://apidocs.chargebee.com/docs/api/versioninghttps://learn.microsoft.com/en-us/rest/api/storageservices/https://docs.pinecone.io/reference/api/introductionDescription: Deprecation notices, future breaking changes, and migration timelines.
Typical URL patterns:
*/deprecations**/breaking-changes**/sunset**/migration*Examples:
https://docs.gitlab.com/ee/api/rest/deprecations.htmlhttps://developers.facebook.com/docs/marketing-api/out-of-cycle-changes/https://stripe.com/docs/upgrades#api-versionsDescription: Official OAuth/API key setup, consent flows, and authentication methods.
Typical URL patterns:
*/oauth**/authentication**/auth**/api-keys**/credentials*Examples:
https://airtable.com/developers/web/api/oauth-referencehttps://cloud.google.com/iam/docs/service-accountshttps://help.salesforce.com/s/articleView?id=sf.connected_app_create.htmhttps://docs.snowflake.com/en/user-guide/key-pair-authDescription: Required roles, permissions, OAuth scopes, or database GRANTs.
Typical URL patterns:
*/permissions**/scopes**/roles**/access-control**/grants*Examples:
https://cloud.google.com/bigquery/docs/access-controlhttps://help.salesforce.com/s/articleView?id=sf.connected_app_create_api_integration.htmhttps://developers.google.com/google-ads/api/docs/oauth/overviewhttps://www.postgresql.org/docs/current/sql-grant.htmlDescription: Rate limits, quotas, throttling behavior, and concurrency limits.
Typical URL patterns:
*/rate-limits**/quotas**/limits**/throttling*Examples:
https://cloud.google.com/bigquery/quotashttps://docs.github.com/en/rest/overview/resources-in-the-rest-api#rate-limitinghttps://developer.salesforce.com/docs/atlas.en-us.salesforce_app_limits_cheatsheet.meta/salesforce_app_limits_cheatsheet/https://stripe.com/docs/rate-limitsDescription: Vendor status/uptime pages for incident tracking.
Typical URL patterns:
status.**/status**/system-status*Examples:
https://status.snowflake.com/https://status.cloud.google.com/https://status.salesforce.com/https://www.githubstatus.com/Description: Object/field/endpoint reference for SaaS APIs (what tables/fields exist).
Typical URL patterns:
*/object-reference**/data-model**/schema**/objects*Examples:
https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/https://developers.hubspot.com/docs/api/crm/understanding-the-crmhttps://docs.github.com/en/rest/overview/resources-in-the-rest-apiDescription: SQL dialect/reference docs for databases and warehouses.
Typical URL patterns:
*/sql-reference**/sql/reference**/language-reference*Examples:
https://cloud.google.com/bigquery/docs/reference/standard-sqlhttps://docs.snowflake.com/en/sql-referencehttps://www.postgresql.org/docs/current/sql.htmlhttps://docs.aws.amazon.com/redshift/latest/dg/c_SQL_reference.htmlDescription: Vendor migration/breaking-change guides between versions.
Typical URL patterns:
*/migration**/upgrade**/version-migration*Examples:
https://stripe.com/docs/upgradeshttps://www.elastic.co/guide/en/elasticsearch/reference/current/breaking-changes.htmlDescription: Official forums/communities for vendor Q&A and technical discussions.
Typical URL patterns:
community.**/community**/forum**/discussions*Examples:
https://community.airtable.com/development-apis-11https://developer.salesforce.com/forumshttps://community.snowflake.com/Description: Catch-all for documentation that doesn't fit other categories. Use sparingly.
Note: Since type is optional, prefer omitting the type field rather than using "other" when a link doesn't fit neatly into a category.
docs.vendor.com, developers.vendor.com)blog.vendor.com, developers.vendor.com/blog)community.vendor.com)Use these search patterns to find appropriate documentation:
# Release notes / changelogs
site:<vendor-domain> "release notes"
site:<vendor-domain> "changelog"
site:<vendor-domain> "API changelog"
# API reference
site:<vendor-domain> "API reference"
site:<vendor-domain> "API documentation"
# Authentication
site:<vendor-domain> "OAuth"
site:<vendor-domain> "authentication"
site:<vendor-domain> "API key"
# Permissions
site:<vendor-domain> "permissions"
site:<vendor-domain> "scopes"
site:<vendor-domain> "access control"
# Rate limits
site:<vendor-domain> "rate limits"
site:<vendor-domain> "quotas"
site:<vendor-domain> "API limits"
# Status page
site:status.<vendor-domain>
"<vendor>" status page
# SQL reference (for databases/warehouses)
site:<vendor-domain> "SQL reference"
site:<vendor-domain> "language reference"
Prefer canonical, version-agnostic URLs that are updated over time rather than version-specific pages
https://docs.vendor.com/api/changeloghttps://docs.vendor.com/v2.3/api/changelogAvoid locale-specific paths when generic URLs exist
https://docs.vendor.com/api/referencehttps://docs.vendor.com/en-us/api/referencePrefer stable root pages over deep-linked anchors that may change
https://docs.vendor.com/rate-limitshttps://docs.vendor.com/api#rate-limits-sectionAlways use official vendor domains - never third-party mirrors or documentation aggregators
Set requiresLogin: true when the URL requires authentication to access
Priority types to include:
sql_reference (required) - SQL dialect documentationauthentication_guide - Service account, key pair, or IAM authpermissions_scopes - Required roles and grantsapi_release_history - Release notes for API/driver changesstatus_page - Service status monitoringrate_limits - Query limits, concurrency limits (if applicable)Example (BigQuery):
externalDocumentationUrls:
- title: Release notes
url: https://cloud.google.com/bigquery/docs/release-notes
type: api_release_history
- title: Standard SQL reference
url: https://cloud.google.com/bigquery/docs/reference/standard-sql
type: sql_reference
- title: Service account authentication
url: https://cloud.google.com/iam/docs/service-accounts
type: authentication_guide
- title: Access control and permissions
url: https://cloud.google.com/bigquery/docs/access-control
type: permissions_scopes
- title: Quotas and limits
url: https://cloud.google.com/bigquery/quotas
type: rate_limits
- title: Google Cloud Status
url: https://status.cloud.google.com/
type: status_page
Priority types to include:
sql_reference (for SQL databases) - SQL dialect documentationauthentication_guide - Connection and authentication methodspermissions_scopes - User permissions and grantsapi_release_history - Version release notes (if applicable)Example (Postgres):
externalDocumentationUrls:
- title: PostgreSQL documentation
url: https://www.postgresql.org/docs/current/
type: api_reference
- title: SQL reference
url: https://www.postgresql.org/docs/current/sql.html
type: sql_reference
- title: Authentication methods
url: https://www.postgresql.org/docs/current/auth-methods.html
type: authentication_guide
- title: GRANT permissions
url: https://www.postgresql.org/docs/current/sql-grant.html
type: permissions_scopes
Priority types to include:
api_release_history (required) - Changelogs and release notesapi_reference - API documentationapi_deprecations - Deprecation schedules (if available)authentication_guide - OAuth or API key setuppermissions_scopes - Required scopes or permissionsrate_limits - API rate limitsdata_model_reference - Object/field referencedeveloper_community - Developer forumsstatus_page - Service statusExample (Salesforce):
externalDocumentationUrls:
- title: API release notes
url: https://help.salesforce.com/s/articleView?id=release-notes.salesforce_release_notes.htm
type: api_release_history
- title: REST API reference
url: https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/
type: api_reference
- title: Connected app OAuth
url: https://help.salesforce.com/s/articleView?id=sf.connected_app_create.htm
type: authentication_guide
- title: OAuth scopes
url: https://help.salesforce.com/s/articleView?id=sf.remoteaccess_oauth_tokens_scopes.htm
type: permissions_scopes
- title: API rate limits
url: https://developer.salesforce.com/docs/atlas.en-us.salesforce_app_limits_cheatsheet.meta/salesforce_app_limits_cheatsheet/
type: rate_limits
- title: Object reference
url: https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/
type: data_model_reference
- title: Salesforce Status
url: https://status.salesforce.com/
type: status_page
Priority types to include:
api_reference (required) - API documentationrate_limits - Request limits and quotasauthentication_guide - API key or authentication setupapi_release_history - Release notes (if available)status_page - Service status (if available)migration_guide - Version migration guides (if versions differ significantly)Example (Pinecone):
externalDocumentationUrls:
- title: API reference
url: https://docs.pinecone.io/reference/api/introduction
type: api_reference
- title: Authentication
url: https://docs.pinecone.io/guides/get-started/authentication
type: authentication_guide
- title: Rate limits
url: https://docs.pinecone.io/troubleshooting/rate-limits
type: rate_limits
- title: Release notes
url: https://docs.pinecone.io/release-notes
type: api_release_history
Periodically validate that external documentation URLs are still accessible:
requiresLogin: true when appropriate to avoid false positivesSimple validation script:
# Check a single URL
curl -I -L -s -o /dev/null -w "%{http_code}" "https://docs.vendor.com/api/changelog"
# Expected: 200, 301, 302
# Action needed: 404, 403, 500
api_deprecations links when vendors announce breaking changesWhen updating broken or outdated links:
When reviewing PRs that add or modify external documentation URLs:
type field matches the contentHere's a canonical example showing multiple types:
externalDocumentationUrls:
- title: Release notes
url: https://cloud.google.com/bigquery/docs/release-notes
type: api_release_history
- title: Standard SQL reference
url: https://cloud.google.com/bigquery/docs/reference/standard-sql
type: sql_reference
- title: Service account authentication
url: https://cloud.google.com/iam/docs/service-accounts
type: authentication_guide
- title: Access control and permissions
url: https://cloud.google.com/bigquery/docs/access-control
type: permissions_scopes
- title: Quotas and limits
url: https://cloud.google.com/bigquery/quotas
type: rate_limits
- title: Google Cloud Status
url: https://status.cloud.google.com/
type: status_page
requiresLogin: false
Before submitting a PR with external documentation URLs:
poetry run metadata_service validate <metadata.yaml> <doc.md>)requiresLogin: true is set)type field rather than forcing itexternalDocumentationUrls:
- title: Release notes
url: https://docs.snowflake.com/en/release-notes
type: api_release_history
- title: SQL reference
url: https://docs.snowflake.com/en/sql-reference
type: sql_reference
- title: Key pair authentication
url: https://docs.snowflake.com/en/user-guide/key-pair-auth
type: authentication_guide
- title: Access control
url: https://docs.snowflake.com/en/user-guide/security-access-control
type: permissions_scopes
- title: Snowflake Status
url: https://status.snowflake.com/
type: status_page
externalDocumentationUrls:
- title: API changelog
url: https://stripe.com/docs/upgrades#api-changelog
type: api_release_history
- title: API reference
url: https://stripe.com/docs/api
type: api_reference
- title: API versioning and upgrades
url: https://stripe.com/docs/upgrades
type: migration_guide
- title: Authentication
url: https://stripe.com/docs/keys
type: authentication_guide
- title: Rate limits
url: https://stripe.com/docs/rate-limits
type: rate_limits
- title: Stripe Status
url: https://status.stripe.com/
type: status_page
externalDocumentationUrls:
- title: PostgreSQL documentation
url: https://www.postgresql.org/docs/current/
type: api_reference
- title: SQL commands
url: https://www.postgresql.org/docs/current/sql-commands.html
type: sql_reference
- title: Client authentication
url: https://www.postgresql.org/docs/current/client-authentication.html
type: authentication_guide
- title: Database roles and privileges
url: https://www.postgresql.org/docs/current/user-manag.html
type: permissions_scopes
If you modify the schema enum in ConnectorMetadataDefinitionV0.yaml, regenerate the generated models:
cd airbyte-ci/connectors/metadata_service/lib
poetry install
poetry run poe generate-models
This will update:
metadata_service/models/generated/ConnectorMetadataDefinitionV0.jsonmetadata_service/models/generated/ConnectorMetadataDefinitionV0.py