Template Tags
Template tags provide a flexible way to organize, categorize, and filter both source templates and connection templates. Tags enable you to control which templates are available to different users, implement tier-based access, and organize templates by use case, industry, or any custom criteria.
Overview
The Template Tags API allows you to:
- Create and manage tags centrally for your organization
 - Tag source templates to control which data sources are available
 - Tag connection templates to control sync configurations
 - Filter templates by tags when generating widget tokens or listing templates
 - Implement access control using tag-based filtering
 
Use cases
Tier-based access control
Implement different feature tiers by tagging templates:
Tags: "free-tier", "pro-tier", "enterprise"
Example:
- Basic connectors: tagged with "free-tier"
- Advanced connectors: tagged with "pro-tier"
- Premium connectors: tagged with "enterprise"
Industry-specific organization
Organize templates by industry or compliance requirements:
Tags: "healthcare", "hipaa-compliant", "finance", "retail"
Example:
- HIPAA-compliant connectors: tagged with "healthcare", "hipaa-compliant"
- Financial connectors: tagged with "finance", "pci-compliant"
Feature staging
Manage connector rollout with stability tags:
Tags: "stable", "beta", "experimental"
Example:
- Production-ready: tagged with "stable"
- Beta features: tagged with "beta"
- Experimental features: tagged with "experimental"
Use-case categorization
Group templates by business function:
Tags: "crm", "analytics", "marketing", "sales", "support"
Example:
- Salesforce, HubSpot: tagged with "crm", "sales"
- Google Analytics, Mixpanel: tagged with "analytics"
Tag selection modes
When filtering templates by tags, you can control matching behavior with Tag Selection Modes:
| Mode | Behavior | Example | 
|---|---|---|
any | Template must have at least one of the specified tags | Tags: ["crm", "sales"] matches templates with "crm" OR "sales" | 
all | Template must have all of the specified tags | Tags: ["crm", "sales"] matches only templates with both "crm" AND "sales" | 
Tag management API
Create tag
Create a new tag for your organization.
Endpoint
POST https://api.airbyte.ai/api/v1/integrations/templates/tags
Authentication
Requires Operator Bearer Token or Scoped Token
Request body
| Field | Type | Required | Description | 
|---|---|---|---|
name | string | Yes | Tag name (max 255 characters) | 
Request example
curl -X POST https://api.airbyte.ai/api/v1/integrations/templates/tags \
  -H 'Authorization: Bearer <your_operator_token>' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "pro-tier"
  }'
Response example
{
  "id": "a1b2c3d4-e5f6-7890-ab12-cd34ef567890",
  "name": "pro-tier",
  "organization_id": "12345678-1234-1234-1234-123456789012",
  "created_at": "2025-10-08T10:30:00Z",
  "updated_at": "2025-10-08T10:30:00Z"
}
List tags
Retrieve all tags for your organization.
Endpoint
GET https://api.airbyte.ai/api/v1/integrations/templates/tags
Authentication
Requires Operator Bearer Token or Scoped Token
Request example
curl https://api.airbyte.ai/api/v1/integrations/templates/tags \
  -H 'Authorization: Bearer <your_operator_token>'
Response example
{
  "data": [
    {
      "id": "a1b2c3d4-e5f6-7890-ab12-cd34ef567890",
      "name": "free-tier",
      "organization_id": "12345678-1234-1234-1234-123456789012",
      "created_at": "2025-10-01T10:00:00Z",
      "updated_at": "2025-10-01T10:00:00Z"
    },
    {
      "id": "b2c3d4e5-f6g7-8901-bc23-de45fg678901",
      "name": "pro-tier",
      "organization_id": "12345678-1234-1234-1234-123456789012",
      "created_at": "2025-10-05T14:20:00Z",
      "updated_at": "2025-10-05T14:20:00Z"
    },
    {
      "id": "c3d4e5f6-g7h8-9012-cd34-ef56gh789012",
      "name": "healthcare",
      "organization_id": "12345678-1234-1234-1234-123456789012",
      "created_at": "2025-10-07T09:15:00Z",
      "updated_at": "2025-10-07T09:15:00Z"
    }
  ]
}
Update tag
Update an existing tag's name.
Endpoint
PUT https://api.airbyte.ai/api/v1/integrations/templates/tags/{name}
Authentication
Requires Operator Bearer Token or Scoped Token
Path parameters
| Parameter | Type | Required | Description | 
|---|---|---|---|
name | string | Yes | Current name of the tag | 
Request body
| Field | Type | Required | Description | 
|---|---|---|---|
name | string | Yes | New name for the tag (max 255 characters) | 
Request example
curl -X PUT https://api.airbyte.ai/api/v1/integrations/templates/tags/pro-tier \
  -H 'Authorization: Bearer <your_operator_token>' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "professional-tier"
  }'
Response example
{
  "id": "a1b2c3d4-e5f6-7890-ab12-cd34ef567890",
  "name": "professional-tier",
  "organization_id": "12345678-1234-1234-1234-123456789012",
  "created_at": "2025-10-08T10:30:00Z",
  "updated_at": "2025-10-08T16:45:00Z"
}
Important notes
- Updating a tag name automatically updates all associations with source and connection templates
 - The tag name is used as the identifier in the URL path parameter
 
Delete tag
Delete a tag from your organization.
Endpoint
DELETE https://api.airbyte.ai/api/v1/integrations/templates/tags/{name}
Authentication
Requires Operator Bearer Token or Scoped Token
Path parameters
| Parameter | Type | Required | Description | 
|---|---|---|---|
name | string | Yes | Name of the tag to delete | 
Request example
curl -X DELETE https://api.airbyte.ai/api/v1/integrations/templates/tags/experimental \
  -H 'Authorization: Bearer <your_operator_token>'
Response example
{
  "id": "a1b2c3d4-e5f6-7890-ab12-cd34ef567890",
  "deleted_at": "2025-10-08T17:00:00Z"
}
Important notes
- Deleting a tag removes all associations with source and connection templates
 - This operation cannot be undone
 - Templates will remain but will no longer have this tag
 
Tagging source templates
Add tag to source template
Add a tag to a specific source template.
Endpoint
POST https://api.airbyte.ai/api/v1/integrations/templates/sources/{id}/tags
Authentication
Requires Operator Bearer Token or Scoped Token
Path parameters
| Parameter | Type | Required | Description | 
|---|---|---|---|
id | UUID | Yes | Source template ID | 
Request body
| Field | Type | Required | Description | 
|---|---|---|---|
tag | string | Yes | Name of the tag to add | 
Request example
curl -X POST https://api.airbyte.ai/api/v1/integrations/templates/sources/a1b2c3d4-e5f6-7890-ab12-cd34ef567890/tags \
  -H 'Authorization: Bearer <your_operator_token>' \
  -H 'Content-Type: application/json' \
  -d '{
    "tag": "pro-tier"
  }'
Response example
{
  "id": "a1b2c3d4-e5f6-7890-ab12-cd34ef567890",
  "name": "Salesforce Source",
  "actor_definition_id": "def123-...",
  "organization_id": "12345678-1234-1234-1234-123456789012",
  "tags": ["crm", "sales", "pro-tier"],
  "created_at": "2025-10-01T10:00:00Z",
  "updated_at": "2025-10-08T17:15:00Z"
}
Remove tag from source template
Remove a tag from a specific source template.
Endpoint
DELETE https://api.airbyte.ai/api/v1/integrations/templates/sources/{id}/tags/{tag_name}
Authentication
Requires Operator Bearer Token or Scoped Token
Path parameters
| Parameter | Type | Required | Description | 
|---|---|---|---|
id | UUID | Yes | Source template ID | 
tag_name | string | Yes | Name of the tag to remove | 
Request example
curl -X DELETE https://api.airbyte.ai/api/v1/integrations/templates/sources/a1b2c3d4-e5f6-7890-ab12-cd34ef567890/tags/beta \
  -H 'Authorization: Bearer <your_operator_token>'
Response example
{
  "id": "a1b2c3d4-e5f6-7890-ab12-cd34ef567890",
  "name": "Salesforce Source",
  "actor_definition_id": "def123-...",
  "organization_id": "12345678-1234-1234-1234-123456789012",
  "tags": ["crm", "sales", "pro-tier"],
  "created_at": "2025-10-01T10:00:00Z",
  "updated_at": "2025-10-08T17:20:00Z"
}
Tagging connection templates
Add tag to connection template
Add a tag to a specific connection template.
Endpoint
POST https://api.airbyte.ai/api/v1/integrations/templates/connections/{id}/tags
Authentication
Requires Operator Bearer Token
Path parameters
| Parameter | Type | Required | Description | 
|---|---|---|---|
id | UUID | Yes | Connection template ID | 
Request body
| Field | Type | Required | Description | 
|---|---|---|---|
tag | string | Yes | Name of the tag to add | 
Request example
curl -X POST https://api.airbyte.ai/api/v1/integrations/templates/connections/b2c3d4e5-f6g7-8901-bc23-de45fg678901/tags \
  -H 'Authorization: Bearer <your_operator_token>' \
  -H 'Content-Type: application/json' \
  -d '{
    "tag": "standard-sync"
  }'
Response example
{
  "id": "b2c3d4e5-f6g7-8901-bc23-de45fg678901",
  "name": "Standard BigQuery Sync",
  "destination_actor_definition_id": "dest456-...",
  "organization_id": "12345678-1234-1234-1234-123456789012",
  "tags": ["analytics", "standard-sync"],
  "created_at": "2025-10-02T11:00:00Z",
  "updated_at": "2025-10-08T17:25:00Z"
}
Remove tag from connection template
Remove a tag from a specific connection template.
Endpoint
DELETE https://api.airbyte.ai/api/v1/integrations/templates/connections/{id}/tags/{tag_name}
Authentication
Requires Operator Bearer Token
Path parameters
| Parameter | Type | Required | Description | 
|---|---|---|---|
id | UUID | Yes | Connection template ID | 
tag_name | string | Yes | Name of the tag to remove | 
Request example
curl -X DELETE https://api.airbyte.ai/api/v1/integrations/templates/connections/b2c3d4e5-f6g7-8901-bc23-de45fg678901/tags/beta \
  -H 'Authorization: Bearer <your_operator_token>'
Response example
{
  "id": "b2c3d4e5-f6g7-8901-bc23-de45fg678901",
  "name": "Standard BigQuery Sync",
  "destination_actor_definition_id": "dest456-...",
  "organization_id": "12345678-1234-1234-1234-123456789012",
  "tags": ["analytics", "standard-sync"],
  "created_at": "2025-10-02T11:00:00Z",
  "updated_at": "2025-10-08T17:30:00Z"
}
Filtering templates by tags
Widget token with tag filtering
When generating a widget token, you can filter which templates are available by specifying tags:
curl -X POST https://api.airbyte.ai/api/v1/embedded/widget-token \
  -H 'Authorization: Bearer <your_operator_token>' \
  -H 'Content-Type: application/json' \
  -d '{
    "workspace_name": "customer_workspace",
    "allowed_origin": "https://yourapp.com",
    "selected_source_template_tags": ["pro-tier", "enterprise"],
    "selected_source_template_tags_mode": "any",
    "selected_connection_template_tags": ["standard-sync"],
    "selected_connection_template_tags_mode": "all"
  }'
In this example:
- Source templates: Must have "pro-tier" OR "enterprise" tag (
anymode) - Connection templates: Must have "standard-sync" tag (
allmode with single tag) 
List templates with tag filtering
Both source and connection template list endpoints support tag filtering:
Source templates:
curl https://api.airbyte.ai/api/v1/integrations/templates/sources?tags=crm&tags=sales&tags_mode=any \
  -H 'Authorization: Bearer <your_operator_token>'
Connection templates:
curl https://api.airbyte.ai/api/v1/integrations/templates/connections?tags=analytics&tags=standard-sync&tags_mode=all \
  -H 'Authorization: Bearer <your_operator_token>'
Common workflows
Workflow 1: set up tier-based access
# 1. Create tier tags
curl -X POST https://api.airbyte.ai/api/v1/integrations/templates/tags \
  -H "Authorization: Bearer $OPERATOR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "free-tier"}'
curl -X POST https://api.airbyte.ai/api/v1/integrations/templates/tags \
  -H "Authorization: Bearer $OPERATOR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "pro-tier"}'
curl -X POST https://api.airbyte.ai/api/v1/integrations/templates/tags \
  -H "Authorization: Bearer $OPERATOR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "enterprise"}'
# 2. Tag source templates
curl -X POST https://api.airbyte.ai/api/v1/integrations/templates/sources/$BASIC_SOURCE_ID/tags \
  -H "Authorization: Bearer $OPERATOR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"tag": "free-tier"}'
curl -X POST https://api.airbyte.ai/api/v1/integrations/templates/sources/$PREMIUM_SOURCE_ID/tags \
  -H "Authorization: Bearer $OPERATOR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"tag": "enterprise"}'
# 3. Generate widget tokens with tier filtering
# Free tier customer
curl -X POST https://api.airbyte.ai/api/v1/embedded/widget-token \
  -H "Authorization: Bearer $OPERATOR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "workspace_name": "free_customer",
    "allowed_origin": "https://yourapp.com",
    "selected_source_template_tags": ["free-tier"],
    "selected_source_template_tags_mode": "any"
  }'
# Enterprise tier customer
curl -X POST https://api.airbyte.ai/api/v1/embedded/widget-token \
  -H "Authorization: Bearer $OPERATOR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "workspace_name": "enterprise_customer",
    "allowed_origin": "https://yourapp.com",
    "selected_source_template_tags": ["free-tier", "pro-tier", "enterprise"],
    "selected_source_template_tags_mode": "any"
  }'
Workflow 2: organize by industry
# 1. Create industry tags
for industry in "healthcare" "finance" "retail" "technology"; do
  curl -X POST https://api.airbyte.ai/api/v1/integrations/templates/tags \
    -H "Authorization: Bearer $OPERATOR_TOKEN" \
    -H "Content-Type: application/json" \
    -d "{\"name\": \"$industry\"}"
done
# 2. Tag healthcare-specific templates
curl -X POST https://api.airbyte.ai/api/v1/integrations/templates/sources/$EMR_SOURCE_ID/tags \
  -H "Authorization: Bearer $OPERATOR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"tag": "healthcare"}'
# 3. Also tag with compliance tags
curl -X POST https://api.airbyte.ai/api/v1/integrations/templates/tags \
  -H "Authorization: Bearer $OPERATOR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "hipaa-compliant"}'
curl -X POST https://api.airbyte.ai/api/v1/integrations/templates/sources/$EMR_SOURCE_ID/tags \
  -H "Authorization: Bearer $OPERATOR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"tag": "hipaa-compliant"}'
# 4. Filter for healthcare customer with compliance requirements
curl -X POST https://api.airbyte.ai/api/v1/embedded/widget-token \
  -H "Authorization: Bearer $OPERATOR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "workspace_name": "healthcare_customer",
    "allowed_origin": "https://yourapp.com",
    "selected_source_template_tags": ["healthcare", "hipaa-compliant"],
    "selected_source_template_tags_mode": "all"
  }'
Workflow 3: feature staging
# 1. Create stability tags
curl -X POST https://api.airbyte.ai/api/v1/integrations/templates/tags \
  -H "Authorization: Bearer $OPERATOR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "stable"}'
curl -X POST https://api.airbyte.ai/api/v1/integrations/templates/tags \
  -H "Authorization: Bearer $OPERATOR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "beta"}'
# 2. Tag production-ready templates
curl -X POST https://api.airbyte.ai/api/v1/integrations/templates/sources/$PROD_SOURCE_ID/tags \
  -H "Authorization: Bearer $OPERATOR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"tag": "stable"}'
# 3. Tag beta features
curl -X POST https://api.airbyte.ai/api/v1/integrations/templates/sources/$BETA_SOURCE_ID/tags \
  -H "Authorization: Bearer $OPERATOR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"tag": "beta"}'
# 4. Prod customers see only stable
curl -X POST https://api.airbyte.ai/api/v1/embedded/widget-token \
  -H "Authorization: Bearer $OPERATOR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "workspace_name": "prod_customer",
    "allowed_origin": "https://yourapp.com",
    "selected_source_template_tags": ["stable"],
    "selected_source_template_tags_mode": "any"
  }'
# 5. Beta testers see both
curl -X POST https://api.airbyte.ai/api/v1/embedded/widget-token \
  -H "Authorization: Bearer $OPERATOR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "workspace_name": "beta_tester",
    "allowed_origin": "https://yourapp.com",
    "selected_source_template_tags": ["stable", "beta"],
    "selected_source_template_tags_mode": "any"
  }'
Error responses
404 tag not found
{
  "detail": "Template tag with name 'invalid-tag' not found."
}
Cause: Attempting to update or delete a tag that doesn't exist
Solution: Verify the tag name and ensure it exists in your organization
404 tag not found on template
{
  "detail": "Tag 'pro-tier' not found on this template."
}
Cause: Attempting to remove a tag that isn't associated with the template
Solution: List the template's tags to verify which tags are attached
422 validation error
{
  "detail": [
    {
      "loc": ["body", "name"],
      "msg": "ensure this value has at most 255 characters",
      "type": "value_error.any_str.max_length"
    }
  ]
}
Cause: Tag name exceeds maximum length
Solution: Use a tag name with 255 characters or fewer
Integration examples
Multi-tenant SaaS with tiered access
// Backend: Generate widget token based on customer tier
async function generateCustomerWidgetToken(customerId) {
  const customer = await db.customers.get(customerId);
  // Map customer tier to tags
  const tierTagsMap = {
    'free': ['free-tier'],
    'pro': ['free-tier', 'pro-tier'],
    'enterprise': ['free-tier', 'pro-tier', 'enterprise']
  };
  const response = await fetch('https://api.airbyte.ai/api/v1/embedded/widget-token', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${process.env.AIRBYTE_OPERATOR_TOKEN}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      workspace_name: `customer_${customerId}`,
      allowed_origin: 'https://yourapp.com',
      selected_source_template_tags: tierTagsMap[customer.tier],
      selected_source_template_tags_mode: 'any'
    })
  });
  return await response.json();
}
Industry-specific applications
# Backend: Healthcare application with compliance filtering
def get_compliant_widget_token(customer_id, compliance_requirements):
    customer = db.customers.get(customer_id)
    # Build tags based on compliance needs
    tags = ['healthcare']
    if 'HIPAA' in compliance_requirements:
        tags.append('hipaa-compliant')
    if 'GDPR' in compliance_requirements:
        tags.append('gdpr-compliant')
    response = requests.post(
        'https://api.airbyte.ai/api/v1/embedded/widget-token',
        headers={
            'Authorization': f'Bearer {OPERATOR_TOKEN}',
            'Content-Type': 'application/json'
        },
        json={
            'workspace_name': f'customer_{customer_id}',
            'allowed_origin': 'https://healthcare-app.com',
            'selected_source_template_tags': tags,
            'selected_source_template_tags_mode': 'all'  # Must have all compliance tags
        }
    )
    return response.json()
Related documentation
- Authentication - Learn about widget tokens and tag filtering
 - Source Templates - Create and manage source templates
 - Connection Templates - Create and manage connection templates
 - Widget Integration - Embed the Airbyte widget with tag filtering