Skip to main content

Connector Drafts

Review and modify generated connector drafts before finalizing.

Get Draft

GET /api/connectors/drafts/{id}

Authorization

  • Analyst: Required

Response

{
"id": "draft_abc123",
"platform_name": "Slack",
"platform_url": "https://slack.com/api",
"documentation_url": "https://api.slack.com/methods",
"spec_type": "openapi3",
"auth_config": {
"type": "oauth2",
"header_name": "Authorization",
"token_prefix": "Bearer"
},
"endpoints": [
{
"id": "ep_conv_list",
"path": "/conversations.list",
"method": "GET",
"friendly_name": "List Conversations",
"description": "Lists all channels in a Slack workspace",
"category": "conversations",
"forensically_relevant": true,
"modifies_data": false,
"llm_recommendation": "keep",
"llm_reasoning": "Contains channel metadata and membership information useful for investigations",
"enabled": true,
"analyst_notes": null,
"pagination_config": {
"type": "cursor",
"cursor_param": "cursor",
"cursor_path": "$.response_metadata.next_cursor"
},
"parameter_extraction": []
}
],
"credential_guide": "To set up Slack OAuth:\n1. Create a Slack app at https://api.slack.com/apps\n2. Add required OAuth scopes...",
"status": "review",
"created_at": "2024-01-15T10:00:00Z",
"updated_at": "2024-01-15T12:30:00Z"
}

Update Draft

PATCH /api/connectors/drafts/{id}

Update draft metadata.

Request Body

FieldTypeDescription
platform_namestringPlatform name
platform_urlstringBase API URL
auth_configobjectAuthentication settings

Request Example

{
"platform_name": "Slack Enterprise",
"auth_config": {
"type": "oauth2",
"required_scopes": ["admin.conversations:read"]
}
}

Response

{
"message": "Draft updated successfully"
}

Update Endpoint

PATCH /api/connectors/drafts/{id}/endpoints/{endpointId}

Modify a single endpoint in the draft.

Request Body

FieldTypeDescription
enabledbooleanEnable/disable endpoint
analyst_notesstringNotes about the endpoint
categorystringCategory classification
forensically_relevantbooleanMark as forensically relevant
friendly_namestringHuman-readable name

Request Example

{
"enabled": false,
"analyst_notes": "Disabled - requires admin privileges not available to customers"
}

Response

{
"message": "Endpoint updated successfully",
"endpoint": {
"id": "ep_admin_users",
"enabled": false,
"analyst_notes": "Disabled - requires admin privileges..."
}
}

Test Endpoint in Draft

POST /api/connectors/drafts/{id}/endpoints/{endpointId}/test

Test an endpoint from the draft. Like the published endpoint-test route, credentials are not passed in the body — the request uses the draft's stored test credential and a parameter/pagination payload (parameter_values, query_parameter_values, pagination_config, max_pages, etc.). See Test Endpoints for the full body schema.

Response

Returns a TestEndpointResponse (representative):

{
"success": true,
"statusCode": 200,
"responseTimeMs": 234,
"data": { "...": "..." }
}

Store Test Credentials

POST /api/connectors/drafts/{id}/test-credentials

Temporarily store credentials for testing the draft. The body matches the connector test-auth shape: { credential_type, credentials: {...} } (with credentials fields varying by type — token for bearer, api_key for api_key, query_params for query_params, token_exchange config, etc.).

Request Body

{
"credential_type": "bearer",
"credentials": {
"token": "xoxb-123456789-abcdefghij"
}
}

Response

{
"expires_at": "2024-01-15T14:00:00Z"
}

Read Stored Credential

GET /api/connectors/drafts/{id}/test-credentials

Returns { "exists": false } when none/expired, otherwise the single stored credential's metadata (exists, credential_type, expires_at, ...). Note this differs from the published connector route, which returns { slots: [...] } (multi-slot).


Get Dependencies

GET /api/connectors/drafts/{id}/dependencies

Get saved dependency mappings.

Response

{
"mappings": [
{
"id": "dep_001",
"source_endpoint_id": "ep_conv_list",
"source_json_path": "$.channels[*].id",
"target_endpoint_id": "ep_conv_history",
"target_parameter": "channel",
"target_parameter_location": "query",
"mode": "iterate"
}
],
"pagination_configs": {
"ep_conv_list": {
"type": "cursor",
"cursor_param": "cursor"
}
}
}

Save Dependencies

PUT /api/connectors/drafts/{id}/dependencies

Save dependency mappings and pagination configs.

Request Body

{
"mappings": [
{
"source_endpoint_id": "ep_conv_list",
"source_json_path": "$.channels[*].id",
"target_endpoint_id": "ep_conv_history",
"target_parameter": "channel",
"target_parameter_location": "query",
"mode": "iterate"
}
],
"pagination_configs": {
"ep_conv_list": {
"type": "cursor",
"cursor_param": "cursor",
"cursor_path": "$.response_metadata.next_cursor"
}
}
}

Response

{
"message": "Dependencies saved successfully"
}
note

Additional draft sub-routes exist that are not documented here: POST /api/connectors/drafts/{id}/endpoints (add endpoints), GET/POST .../suggestions, and PATCH .../metadata. There is no test-chain route — chain testing happens per-endpoint via the endpoint test route with dependency mappings applied.