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
| Field | Type | Description |
|---|---|---|
platform_name | string | Platform name |
platform_url | string | Base API URL |
auth_config | object | Authentication 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
| Field | Type | Description |
|---|---|---|
enabled | boolean | Enable/disable endpoint |
analyst_notes | string | Notes about the endpoint |
category | string | Category classification |
forensically_relevant | boolean | Mark as forensically relevant |
friendly_name | string | Human-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"
}
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.