> For the complete documentation index, see [llms.txt](https://docs.rootcause.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.rootcause.ai/api-and-integrations/rest-api-reference/connectors.md).

# Connectors

## List connectors

> Returns all data connectors for the organisation. Credentials are never returned; only metadata (name, type, status, etc.). Results are filtered by organisationId from the auth context.

```json
{"openapi":"3.1.0","info":{"title":"RootCause Public API","version":"1.0.0"},"tags":[{"name":"Connectors"}],"servers":[{"url":"https://sandbox.rootcause.ai","description":"Sandbox"},{"url":"https://platform.rootcause.ai","description":"Production"},{"url":"http://localhost:3000","description":"Local development"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"API Key","description":"An API key (pk_...) created on the Organisation API page, or an OAuth access token. Every operation requires one."}},"schemas":{"ConnectorListEnvelope":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Connector"}}},"required":["data"]},"Connector":{"type":"object","properties":{"id":{"type":["string","null"]},"organisationId":{"type":"string"},"name":{"type":"string"},"type":{"anyOf":[{"$ref":"#/components/schemas/connectorTypesEnum"},{"type":"null"}]},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"status":{"type":"string","enum":["connected","error","unconfigured"],"default":"unconfigured"},"errorMessage":{"type":["string","null"]}},"required":["organisationId","name","createdAt","updatedAt"]},"connectorTypesEnum":{"type":"string","enum":["PostgreSQL","MySQL","ClickHouse","MongoDB","REST API","Snowflake","S3","Azure Data Lake","Google Cloud Storage","Google Drive","Redshift","BigQuery","Databricks","Azure Synapse","Salesforce","Hubspot","NetSuite","Kafka"]}},"responses":{"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"429":{"description":"Too Many Requests; the response carries Retry-After","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}}}},"paths":{"/api/v1/connectors":{"get":{"operationId":"get-api-v1-connectors","summary":"List connectors","description":"Returns all data connectors for the organisation. Credentials are never returned; only metadata (name, type, status, etc.). Results are filtered by organisationId from the auth context.","tags":["Connectors"],"parameters":[],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectorListEnvelope"}}}},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}}}}
```

## Create connector

> Creates a new connector with name, type, and optional credentials. Stored in platform MongoDB; credentials are encrypted at rest. Connector starts in status "unconfigured" until used with browse/import/test.

```json
{"openapi":"3.1.0","info":{"title":"RootCause Public API","version":"1.0.0"},"tags":[{"name":"Connectors"}],"servers":[{"url":"https://sandbox.rootcause.ai","description":"Sandbox"},{"url":"https://platform.rootcause.ai","description":"Production"},{"url":"http://localhost:3000","description":"Local development"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"API Key","description":"An API key (pk_...) created on the Organisation API page, or an OAuth access token. Every operation requires one."}},"schemas":{"CreateConnectorInput":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"},"credentials":{"type":["object","null"],"additionalProperties":{}}},"required":["name","type"]},"ConnectorEnvelope":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Connector"}},"required":["data"]},"Connector":{"type":"object","properties":{"id":{"type":["string","null"]},"organisationId":{"type":"string"},"name":{"type":"string"},"type":{"anyOf":[{"$ref":"#/components/schemas/connectorTypesEnum"},{"type":"null"}]},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"status":{"type":"string","enum":["connected","error","unconfigured"],"default":"unconfigured"},"errorMessage":{"type":["string","null"]}},"required":["organisationId","name","createdAt","updatedAt"]},"connectorTypesEnum":{"type":"string","enum":["PostgreSQL","MySQL","ClickHouse","MongoDB","REST API","Snowflake","S3","Azure Data Lake","Google Cloud Storage","Google Drive","Redshift","BigQuery","Databricks","Azure Synapse","Salesforce","Hubspot","NetSuite","Kafka"]}},"responses":{"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"429":{"description":"Too Many Requests; the response carries Retry-After","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}}}},"paths":{"/api/v1/connectors":{"post":{"operationId":"post-api-v1-connectors","summary":"Create connector","description":"Creates a new connector with name, type, and optional credentials. Stored in platform MongoDB; credentials are encrypted at rest. Connector starts in status \"unconfigured\" until used with browse/import/test.","tags":["Connectors"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateConnectorInput"}}}},"responses":{"201":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectorEnvelope"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"422":{"$ref":"#/components/responses/422"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}}}}
```

## Get connector

> Returns a single connector by id. Credentials are stripped from the response. 404 if not in this organisation.

```json
{"openapi":"3.1.0","info":{"title":"RootCause Public API","version":"1.0.0"},"tags":[{"name":"Connectors"}],"servers":[{"url":"https://sandbox.rootcause.ai","description":"Sandbox"},{"url":"https://platform.rootcause.ai","description":"Production"},{"url":"http://localhost:3000","description":"Local development"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"API Key","description":"An API key (pk_...) created on the Organisation API page, or an OAuth access token. Every operation requires one."}},"schemas":{"ConnectorEnvelope":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Connector"}},"required":["data"]},"Connector":{"type":"object","properties":{"id":{"type":["string","null"]},"organisationId":{"type":"string"},"name":{"type":"string"},"type":{"anyOf":[{"$ref":"#/components/schemas/connectorTypesEnum"},{"type":"null"}]},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"status":{"type":"string","enum":["connected","error","unconfigured"],"default":"unconfigured"},"errorMessage":{"type":["string","null"]}},"required":["organisationId","name","createdAt","updatedAt"]},"connectorTypesEnum":{"type":"string","enum":["PostgreSQL","MySQL","ClickHouse","MongoDB","REST API","Snowflake","S3","Azure Data Lake","Google Cloud Storage","Google Drive","Redshift","BigQuery","Databricks","Azure Synapse","Salesforce","Hubspot","NetSuite","Kafka"]}},"responses":{"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"429":{"description":"Too Many Requests; the response carries Retry-After","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}}}},"paths":{"/api/v1/connectors/{id}":{"get":{"operationId":"get-api-v1-connectors-{id}","summary":"Get connector","description":"Returns a single connector by id. Credentials are stripped from the response. 404 if not in this organisation.","tags":["Connectors"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Path parameter: id"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectorEnvelope"}}}},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}}}}
```

## Delete connector

> Permanently deletes the connector. Requires full permission. Does not delete sources or jobs created from prior imports.

```json
{"openapi":"3.1.0","info":{"title":"RootCause Public API","version":"1.0.0"},"tags":[{"name":"Connectors"}],"servers":[{"url":"https://sandbox.rootcause.ai","description":"Sandbox"},{"url":"https://platform.rootcause.ai","description":"Production"},{"url":"http://localhost:3000","description":"Local development"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"API Key","description":"An API key (pk_...) created on the Organisation API page, or an OAuth access token. Every operation requires one."}},"responses":{"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"429":{"description":"Too Many Requests; the response carries Retry-After","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}}}},"paths":{"/api/v1/connectors/{id}":{"delete":{"operationId":"delete-api-v1-connectors-{id}","summary":"Delete connector","description":"Permanently deletes the connector. Requires full permission. Does not delete sources or jobs created from prior imports.","tags":["Connectors"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Path parameter: id"}],"responses":{"204":{"description":"No Content"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}}}}
```

## Update connector

> Updates connector name and/or credentials. Other fields (type, status) are managed by the system. updatedAt is set automatically.

```json
{"openapi":"3.1.0","info":{"title":"RootCause Public API","version":"1.0.0"},"tags":[{"name":"Connectors"}],"servers":[{"url":"https://sandbox.rootcause.ai","description":"Sandbox"},{"url":"https://platform.rootcause.ai","description":"Production"},{"url":"http://localhost:3000","description":"Local development"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"API Key","description":"An API key (pk_...) created on the Organisation API page, or an OAuth access token. Every operation requires one."}},"schemas":{"UpdateConnectorInput":{"type":"object","properties":{"name":{"type":"string"},"credentials":{"type":["object","null"],"additionalProperties":{}}}},"ConnectorEnvelope":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Connector"}},"required":["data"]},"Connector":{"type":"object","properties":{"id":{"type":["string","null"]},"organisationId":{"type":"string"},"name":{"type":"string"},"type":{"anyOf":[{"$ref":"#/components/schemas/connectorTypesEnum"},{"type":"null"}]},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"status":{"type":"string","enum":["connected","error","unconfigured"],"default":"unconfigured"},"errorMessage":{"type":["string","null"]}},"required":["organisationId","name","createdAt","updatedAt"]},"connectorTypesEnum":{"type":"string","enum":["PostgreSQL","MySQL","ClickHouse","MongoDB","REST API","Snowflake","S3","Azure Data Lake","Google Cloud Storage","Google Drive","Redshift","BigQuery","Databricks","Azure Synapse","Salesforce","Hubspot","NetSuite","Kafka"]}},"responses":{"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"429":{"description":"Too Many Requests; the response carries Retry-After","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}}}},"paths":{"/api/v1/connectors/{id}":{"patch":{"operationId":"patch-api-v1-connectors-{id}","summary":"Update connector","description":"Updates connector name and/or credentials. Other fields (type, status) are managed by the system. updatedAt is set automatically.","tags":["Connectors"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Path parameter: id"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateConnectorInput"}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectorEnvelope"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"422":{"$ref":"#/components/responses/422"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}}}}
```

## Browse connector resources

> Returns the browse options at one level of the connector's hierarchy (e.g. databases, then tables, then columns). Pass the current level via \`level\` and the selected ancestors as additional query parameters (e.g. \`?level=tables\&database=sales\`, then \`?level=columns\&database=sales\&table=orders\`; PostgreSQL uses \`schema\` instead of \`database\`). Any query parameter other than \`level\` and \`search\` is forwarded as browse context. Connector must exist and belong to the organisation.

```json
{"openapi":"3.1.0","info":{"title":"RootCause Public API","version":"1.0.0"},"tags":[{"name":"Connectors"}],"servers":[{"url":"https://sandbox.rootcause.ai","description":"Sandbox"},{"url":"https://platform.rootcause.ai","description":"Production"},{"url":"http://localhost:3000","description":"Local development"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"API Key","description":"An API key (pk_...) created on the Organisation API page, or an OAuth access token. Every operation requires one."}},"schemas":{"UnspecifiedEnvelope":{"type":"object","properties":{"data":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"object","additionalProperties":{}},{"type":"array","items":{}}],"description":"Payload not declared in this repo"}},"required":["data"]}},"responses":{"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"429":{"description":"Too Many Requests; the response carries Retry-After","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}}}},"paths":{"/api/v1/connectors/{id}/browse":{"get":{"operationId":"get-api-v1-connectors-{id}-browse","summary":"Browse connector resources","description":"Returns the browse options at one level of the connector's hierarchy (e.g. databases, then tables, then columns). Pass the current level via `level` and the selected ancestors as additional query parameters (e.g. `?level=tables&database=sales`, then `?level=columns&database=sales&table=orders`; PostgreSQL uses `schema` instead of `database`). Any query parameter other than `level` and `search` is forwarded as browse context. Connector must exist and belong to the organisation.","tags":["Connectors"],"parameters":[{"in":"query","name":"level","required":true,"schema":{"type":"string","enum":["warehouses","databases","schemas","tables","columns","containers","buckets","folders","files","collections"],"description":"Hierarchy level to list, from the connector's browse hierarchy."},"description":"Hierarchy level to list, from the connector's browse hierarchy."},{"in":"query","name":"search","required":false,"schema":{"type":"string","description":"Case-insensitive filter on option values/labels."},"description":"Case-insensitive filter on option values/labels."},{"in":"query","name":"database","required":false,"schema":{"type":"string","description":"Browse context: parent database (MySQL/ClickHouse/Snowflake)."},"description":"Browse context: parent database (MySQL/ClickHouse/Snowflake)."},{"in":"query","name":"schema","required":false,"schema":{"type":"string","description":"Browse context: parent schema (PostgreSQL/Snowflake)."},"description":"Browse context: parent schema (PostgreSQL/Snowflake)."},{"in":"query","name":"table","required":false,"schema":{"type":"string","description":"Browse context: parent table, for level=columns."},"description":"Browse context: parent table, for level=columns."},{"in":"query","name":"warehouse","required":false,"schema":{"type":"string","description":"Browse context: warehouse (Snowflake)."},"description":"Browse context: warehouse (Snowflake)."},{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Path parameter: id"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnspecifiedEnvelope"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}}}}
```

## Create a directly-queried source

> Creates a source that reads the connector at query time instead of importing a copy of it — the API equivalent of the platform's direct-query (federated) option. Nothing is ingested and no pipeline runs: the schema is probed from the remote catalogue and the source is created synchronously, so this returns 201 with the source rather than a job to poll. Supported on PostgreSQL, MySQL, Snowflake, ClickHouse, S3, Google Cloud Storage and Azure Data Lake; every other connector must be imported. Body: optional workspaceId (required only for an organisation-wide credential; a workspace-scoped one supplies it), datasetName, config (the connector-specific selection: {table} or {query} plus database/schema/warehouse for SQL connectors, {path} for storage — connectorId and type are filled in from the route), orderingColumn, and optional relation, appendOnly, statementTimeoutSeconds, maxRowsScanned and parentId. A SQL source may name a table or a hand-written query, never both: the query is probed as a derived table, so a pivot, a join or an aggregate is a direct-query source in its own right and orderingColumn must name a column it returns. A directly-queried source cannot also be on a sync schedule, and cannot be narrowed by a data selection — filter it in the workspace instead. Ontology analysis is queued in the background; poll the source until its schema is annotated. Storage connectors are read in place as Parquet, so maxRowsScanned, a recursive read and any format other than parquet are refused rather than ignored.

```json
{"openapi":"3.1.0","info":{"title":"RootCause Public API","version":"1.0.0"},"tags":[{"name":"Connectors"}],"servers":[{"url":"https://sandbox.rootcause.ai","description":"Sandbox"},{"url":"https://platform.rootcause.ai","description":"Production"},{"url":"http://localhost:3000","description":"Local development"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"API Key","description":"An API key (pk_...) created on the Organisation API page, or an OAuth access token. Every operation requires one."}},"schemas":{"ConnectorDirectQueryInput":{"type":"object","properties":{"workspaceId":{"type":["string","null"],"description":"Workspace the source lands in. Optional for a workspace-scoped credential, which supplies it; required for an organisation-wide credential, which can reach several"},"datasetName":{"type":"string","minLength":1,"description":"Name for the created source"},"config":{"type":"object","additionalProperties":{},"description":"Connector-specific selection: {table} or {query} plus database/schema/warehouse for SQL connectors, {path} for storage; connectorId, type and the direct-query settings below are filled in from the route. A SQL source names one of the two, never both: {query} is probed as a derived table, so a pivot, a join or an aggregate can be read directly instead of imported, and the source's columns are the statement's own output. Storage sources are read in place as Parquet and take no query: {path} must name a location inside the bucket rather than its root, {formats} may only say parquet, and {recursive} must not be true — the read covers the path and its partition folders, so anything deeper would never be read"},"orderingColumn":{"type":"string","minLength":1,"description":"Column rows are paged by. Required: a directly-queried source has no injected row index, so without a stable sort the same row can appear on two pages or none"},"relation":{"type":["string","null"],"description":"Relation to read, when it is not the config's table (SQL connectors) or resolved from the bucket and path (storage)"},"appendOnly":{"type":["boolean","null"],"description":"Declare that rows are only ever added, never updated or deleted. Lets a digital twin pin its training window by watermark instead of copying the rows; undeclared sources are copied"},"statementTimeoutSeconds":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}],"description":"Cap on how long a single remote statement may run"},"maxRowsScanned":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}],"description":"Cap on how many rows a single remote statement may scan. SQL connectors only — a row cap has no file analogue, so S3, Google Cloud Storage and Azure Data Lake refuse it rather than ignore it"},"parentId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"description":"Folder to create the source under. Must be a folder already in this workspace; omit it to file the source at the workspace root"}},"required":["datasetName","config","orderingColumn"]},"DirectQuerySourceEnvelope":{"type":"object","properties":{"data":{"type":"object","properties":{"sourceId":{"type":"string","description":"Id of the created source"},"workspaceId":{"type":"string"},"name":{"type":"string"},"droppedColumns":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"type":{"type":"string","description":"The source's own type name, which the platform has no column type for"}},"required":["field","type"]},"description":"Columns the source has that its schema here does not. An object store leaves out columns whose type the platform cannot represent, and a source silently short a column is what the caller has to be able to see"}},"required":["sourceId","workspaceId","name","droppedColumns"],"description":"A source created over a connector and read at query time. Creation is synchronous — the schema is probed from the remote catalogue, not scanned — but ontology analysis is queued and its results appear later"}},"required":["data"]}},"responses":{"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"429":{"description":"Too Many Requests; the response carries Retry-After","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}}}},"paths":{"/api/v1/connectors/{id}/direct-query":{"post":{"operationId":"post-api-v1-connectors-{id}-direct-query","summary":"Create a directly-queried source","description":"Creates a source that reads the connector at query time instead of importing a copy of it — the API equivalent of the platform's direct-query (federated) option. Nothing is ingested and no pipeline runs: the schema is probed from the remote catalogue and the source is created synchronously, so this returns 201 with the source rather than a job to poll. Supported on PostgreSQL, MySQL, Snowflake, ClickHouse, S3, Google Cloud Storage and Azure Data Lake; every other connector must be imported. Body: optional workspaceId (required only for an organisation-wide credential; a workspace-scoped one supplies it), datasetName, config (the connector-specific selection: {table} or {query} plus database/schema/warehouse for SQL connectors, {path} for storage — connectorId and type are filled in from the route), orderingColumn, and optional relation, appendOnly, statementTimeoutSeconds, maxRowsScanned and parentId. A SQL source may name a table or a hand-written query, never both: the query is probed as a derived table, so a pivot, a join or an aggregate is a direct-query source in its own right and orderingColumn must name a column it returns. A directly-queried source cannot also be on a sync schedule, and cannot be narrowed by a data selection — filter it in the workspace instead. Ontology analysis is queued in the background; poll the source until its schema is annotated. Storage connectors are read in place as Parquet, so maxRowsScanned, a recursive read and any format other than parquet are refused rather than ignored.","tags":["Connectors"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Path parameter: id"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectorDirectQueryInput"}}}},"responses":{"201":{"description":"Created; the source is queryable immediately","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DirectQuerySourceEnvelope"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"422":{"$ref":"#/components/responses/422"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}}}}
```

## Import data from connector

> Starts an import job from the connector into a workspace. Body: optional workspaceId (required only for an organisation-wide credential; a workspace-scoped one supplies it), config (the connector-specific selection: {table} or a custom {query} for SQL connectors like Snowflake/PostgreSQL/MySQL/ClickHouse, {path} for storage, {object, fields} for CRM connectors — connectorId and type are filled in from the route), optional datasetName, ontologyMode (auto | manual, default auto), and webhookUrl for a completion callback. Returns 202 with jobId and links.self; import runs asynchronously — poll the linked job, or sources, to track progress. The job id is the pipeline run the data service started, so it always resolves; a response carrying no run id is a 500 rather than a 202 you cannot poll. Use preview-query to validate custom SQL before importing.

```json
{"openapi":"3.1.0","info":{"title":"RootCause Public API","version":"1.0.0"},"tags":[{"name":"Connectors"}],"servers":[{"url":"https://sandbox.rootcause.ai","description":"Sandbox"},{"url":"https://platform.rootcause.ai","description":"Production"},{"url":"http://localhost:3000","description":"Local development"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"API Key","description":"An API key (pk_...) created on the Organisation API page, or an OAuth access token. Every operation requires one."}},"schemas":{"ConnectorImportInput":{"type":"object","properties":{"workspaceId":{"type":["string","null"],"description":"Workspace the imported source lands in. Optional for a workspace-scoped credential, which supplies it; required for an organisation-wide credential, which can reach several"},"config":{"type":"object","additionalProperties":{},"description":"Connector-specific selection: {table} or {query} for SQL connectors, {path} for storage, {object, fields} for CRM connectors; connectorId and type are filled in from the route"},"datasetName":{"type":["string","null"],"description":"Name for the created source (defaults to the table/query name)"},"ontologyMode":{"anyOf":[{"type":"string","enum":["auto","manual"]},{"type":"null"}],"description":"Whether ontology analysis runs automatically after import (default auto)"},"webhookUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}],"description":"Optional URL called once when the import completes"}},"required":["config"]},"AsyncJobAccepted":{"type":"object","properties":{"data":{"type":"object","properties":{"jobId":{"type":"string"},"status":{"type":"string","description":"pending until the job reaches a terminal status"},"createdAt":{"type":"string"},"links":{"type":"object","properties":{"self":{"type":"string","description":"Poll this until the status is terminal"},"cancel":{"type":"string"}},"required":["self"]}},"required":["jobId","status","links"],"description":"Envelope for asynchronous pipeline work. Poll links.self until the job reaches a terminal status."}},"required":["data"]}},"responses":{"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"429":{"description":"Too Many Requests; the response carries Retry-After","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}}}},"paths":{"/api/v1/connectors/{id}/import":{"post":{"operationId":"post-api-v1-connectors-{id}-import","summary":"Import data from connector","description":"Starts an import job from the connector into a workspace. Body: optional workspaceId (required only for an organisation-wide credential; a workspace-scoped one supplies it), config (the connector-specific selection: {table} or a custom {query} for SQL connectors like Snowflake/PostgreSQL/MySQL/ClickHouse, {path} for storage, {object, fields} for CRM connectors — connectorId and type are filled in from the route), optional datasetName, ontologyMode (auto | manual, default auto), and webhookUrl for a completion callback. Returns 202 with jobId and links.self; import runs asynchronously — poll the linked job, or sources, to track progress. The job id is the pipeline run the data service started, so it always resolves; a response carrying no run id is a 500 rather than a 202 you cannot poll. Use preview-query to validate custom SQL before importing.","tags":["Connectors"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Path parameter: id"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectorImportInput"}}}},"responses":{"202":{"description":"Accepted; poll the linked resource for completion","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AsyncJobAccepted"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"422":{"$ref":"#/components/responses/422"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}}}}
```

## Preview a connector dataset

> Reads the first rows of a connector dataset and returns them, or the underlying error verbatim — what to call before committing to a full import. Point it at a browsed dataset ({table} plus database/schema/warehouse for SQL connectors, {database, collection} for MongoDB, {path} for storage), or pass {query} to preview custom SQL instead; connectorId and type are filled in from the route. Optional limit defaults to 50 and is capped at 1000. Storage previews read only the head of the object, so previewing a large file is cheap. Read-only against the external system; nothing is stored.

```json
{"openapi":"3.1.0","info":{"title":"RootCause Public API","version":"1.0.0"},"tags":[{"name":"Connectors"}],"servers":[{"url":"https://sandbox.rootcause.ai","description":"Sandbox"},{"url":"https://platform.rootcause.ai","description":"Production"},{"url":"http://localhost:3000","description":"Local development"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"API Key","description":"An API key (pk_...) created on the Organisation API page, or an OAuth access token. Every operation requires one."}},"schemas":{"PreviewQueryInput":{"type":"object","properties":{"config":{"type":"object","additionalProperties":{},"description":"Connector-specific selection: {table} plus database/schema/warehouse for SQL connectors, {database, collection} for MongoDB, {path} for storage, or {query} to preview custom SQL instead; connectorId and type are filled in from the route"},"limit":{"anyOf":[{"type":"integer","minimum":1,"maximum":1000},{"type":"null"}],"description":"Row cap for the preview (default 50, max 1000)"}},"required":["config"]},"UnspecifiedEnvelope":{"type":"object","properties":{"data":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"object","additionalProperties":{}},{"type":"array","items":{}}],"description":"Payload not declared in this repo"}},"required":["data"]}},"responses":{"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"429":{"description":"Too Many Requests; the response carries Retry-After","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}}}},"paths":{"/api/v1/connectors/{id}/preview-query":{"post":{"operationId":"post-api-v1-connectors-{id}-preview-query","summary":"Preview a connector dataset","description":"Reads the first rows of a connector dataset and returns them, or the underlying error verbatim — what to call before committing to a full import. Point it at a browsed dataset ({table} plus database/schema/warehouse for SQL connectors, {database, collection} for MongoDB, {path} for storage), or pass {query} to preview custom SQL instead; connectorId and type are filled in from the route. Optional limit defaults to 50 and is capped at 1000. Storage previews read only the head of the object, so previewing a large file is cheap. Read-only against the external system; nothing is stored.","tags":["Connectors"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Path parameter: id"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreviewQueryInput"}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnspecifiedEnvelope"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"422":{"$ref":"#/components/responses/422"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}}}}
```

## Test connector connection

> Proxies to data-service integrations test. Validates that the connector's credentials and configuration can reach the external source. Does not modify data. Use before import to avoid failed jobs.

```json
{"openapi":"3.1.0","info":{"title":"RootCause Public API","version":"1.0.0"},"tags":[{"name":"Connectors"}],"servers":[{"url":"https://sandbox.rootcause.ai","description":"Sandbox"},{"url":"https://platform.rootcause.ai","description":"Production"},{"url":"http://localhost:3000","description":"Local development"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"API Key","description":"An API key (pk_...) created on the Organisation API page, or an OAuth access token. Every operation requires one."}},"schemas":{"UnspecifiedEnvelope":{"type":"object","properties":{"data":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"object","additionalProperties":{}},{"type":"array","items":{}}],"description":"Payload not declared in this repo"}},"required":["data"]}},"responses":{"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"429":{"description":"Too Many Requests; the response carries Retry-After","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail"]}}}}}},"paths":{"/api/v1/connectors/{id}/test":{"post":{"operationId":"post-api-v1-connectors-{id}-test","summary":"Test connector connection","description":"Proxies to data-service integrations test. Validates that the connector's credentials and configuration can reach the external source. Does not modify data. Use before import to avoid failed jobs.","tags":["Connectors"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Path parameter: id"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnspecifiedEnvelope"}}}},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}}}}
```
