Skip to main content

Source Systems API

Manage source-system inventory, access roles, and masked credentials.

info

All endpoints are mounted under /api/v1.0. Paths below omit that prefix for readability.

Endpoints

MethodEndpointDescription
GET/spaces/{slug}/source-systemsList source systems
POST/spaces/{slug}/source-systemsCreate source system
GET/spaces/{slug}/source-systems/{source_system_id}Get source system details
PATCH/spaces/{slug}/source-systems/{source_system_id}Update source system
DELETE/spaces/{slug}/source-systems/{source_system_id}Delete source system
GET/source-systems/resolve/{source_system_id}Resolve owning space slug
POST/spaces/{slug}/source-systems/{source_system_id}/rolesCreate role
GET/spaces/{slug}/source-systems/{source_system_id}/roles/{role_id}Get role details
PATCH/spaces/{slug}/source-systems/{source_system_id}/roles/{role_id}Update role
DELETE/spaces/{slug}/source-systems/{source_system_id}/roles/{role_id}Delete role
GET/spaces/{slug}/source-systems/{source_system_id}/credentialsList credentials
POST/spaces/{slug}/source-systems/{source_system_id}/credentialsCreate credential
PATCH/spaces/{slug}/source-systems/{source_system_id}/credentials/{credential_id}Update credential
DELETE/spaces/{slug}/source-systems/{source_system_id}/credentials/{credential_id}Delete credential

Source Systems

List Source Systems

GET /spaces/{slug}/source-systems

Response: 200 OK

[
{
"id": "source-system-uuid",
"space_id": "space-uuid",
"space_name": "Marketing Analytics",
"space_slug": "marketing-analytics",
"name": "Production Snowflake",
"platform_type": "snowflake",
"description_markdown": "Primary analytics warehouse",
"documentation_url": "https://docs.example.com/warehouse",
"runbook_url": "https://docs.example.com/runbooks/warehouse",
"business_purpose": "Analytics reporting",
"system_owner": "Data Platform",
"system_owner_email": "data-platform@example.com",
"support_channel": "#data-platform",
"contact_persons": [],
"icon": "snowflake",
"role_count": 2,
"connector_count": 3
}
]

Create Source System

POST /spaces/{slug}/source-systems
{
"name": "Production Snowflake",
"platform_type": "snowflake",
"description_markdown": "Primary analytics warehouse",
"documentation_url": "https://docs.example.com/warehouse",
"runbook_url": "https://docs.example.com/runbooks/warehouse",
"business_purpose": "Analytics reporting",
"system_owner": "Data Platform",
"system_owner_email": "data-platform@example.com",
"support_channel": "#data-platform",
"contact_persons": [
{
"name": "Jane Smith",
"email": "jane@example.com"
}
],
"icon": "snowflake"
}

Response: 201 Created

Returns a SourceSystemResponse.

Get Source System

GET /spaces/{slug}/source-systems/{source_system_id}

Response: 200 OK

Returns a SourceSystemResponse including roles, connector summaries, and connector_count.

Update Source System

PATCH /spaces/{slug}/source-systems/{source_system_id}
{
"system_owner_email": "new-owner@example.com",
"support_channel": "#data-help"
}

Response: 200 OK

Returns the updated SourceSystemResponse.

Delete Source System

DELETE /spaces/{slug}/source-systems/{source_system_id}

Response: 204 No Content

Deleting a source system unlinks associated connectors.

Resolve Source System Space

GET /source-systems/resolve/{source_system_id}

Response: 200 OK

{
"space_slug": "marketing-analytics"
}

Roles

Create Role

POST /spaces/{slug}/source-systems/{source_system_id}/roles
{
"name": "Analytics Reader",
"description": "Read access to analytics schemas",
"role_identifier": "ANALYTICS_READER",
"access_level": "read",
"workflow_id": "workflow-uuid",
"workflow_definition_id": "workflow-definition-uuid"
}

Response: 201 Created

Returns a SourceSystemRoleResponse.

Get Role Details

GET /spaces/{slug}/source-systems/{source_system_id}/roles/{role_id}

Response: 200 OK

Returns role metadata plus users with active access.

Update Role

PATCH /spaces/{slug}/source-systems/{source_system_id}/roles/{role_id}
{
"access_level": "admin"
}

Response: 200 OK

Returns the updated SourceSystemRoleResponse.

Delete Role

DELETE /spaces/{slug}/source-systems/{source_system_id}/roles/{role_id}

Response: 204 No Content

Credentials

Credentials are stored separately from source-system metadata. Secret values can be supplied on create or update, but responses only indicate whether a secret exists.

List Credentials

GET /spaces/{slug}/source-systems/{source_system_id}/credentials

Response: 200 OK

[
{
"id": "credential-uuid",
"source_system_id": "source-system-uuid",
"name": "Read-only service account",
"description": "Used by catalog sync",
"credential_type": "service_account",
"connection_config": {
"warehouse": "ANALYTICS"
},
"is_active": true,
"created_by_id": "user-uuid",
"created_by_name": "Jane Smith",
"created_at": "2026-01-10T00:00:00Z",
"updated_at": "2026-01-10T00:00:00Z",
"has_secret": true
}
]

Create Credential

POST /spaces/{slug}/source-systems/{source_system_id}/credentials
{
"name": "Read-only service account",
"description": "Used by catalog sync",
"credential_type": "service_account",
"connection_config": {
"warehouse": "ANALYTICS"
},
"secret": "redacted-secret",
"is_active": true
}

Response: 201 Created

Returns a CredentialResponse with secret omitted.

Update Credential

PATCH /spaces/{slug}/source-systems/{source_system_id}/credentials/{credential_id}
{
"name": "Rotated service account",
"secret": "new-redacted-secret",
"is_active": true
}

Response: 200 OK

Returns the updated CredentialResponse.

Delete Credential

DELETE /spaces/{slug}/source-systems/{source_system_id}/credentials/{credential_id}

Response: 204 No Content