Featherlane AI
ReferenceHTTP API

Redteam

POST
/v1/agents/{id}/redteam/plan

Path Parameters

id*string

Agent identifier

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Body of POST /v1/agents/{id}/redteam/plan. Names the saved plan; the generated vectors are persisted under it so it can be re-selected later.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/v1/agents/string/redteam/plan" \  -H "Content-Type: application/json" \  -d '{}'
{  "agent_id": "string",  "generated_at": "string",  "id": "string",  "name": "string",  "paths": [    {      "sink_category": "string",      "sink_node": "string",      "sink_type": "string",      "source_category": "string",      "source_node": "string",      "source_type": "string"    }  ],  "unmapped_node_types": [    "string"  ],  "vectors": [    {      "goal": "string",      "injection_payload": "string",      "source_path": null,      "target_operation": "string",      "technique": "string"    }  ]}
GET
/v1/agents/{id}/redteam/plans

Path Parameters

id*string

Agent identifier

Response Body

application/json

application/json

curl -X GET "https://example.com/v1/agents/string/redteam/plans"
{  "plans": [    {      "agent_id": "string",      "generated_at": "string",      "id": "string",      "name": "string",      "paths": [        {          "sink_category": "string",          "sink_node": "string",          "sink_type": "string",          "source_category": "string",          "source_node": "string",          "source_type": "string"        }      ],      "unmapped_node_types": [        "string"      ],      "vectors": [        {          "goal": "string",          "injection_payload": "string",          "source_path": null,          "target_operation": "string",          "technique": "string"        }      ]    }  ]}
curl -X POST "https://example.com/v1/agents/string/redteam/static-policies"
{  "generated": [    {      "description": "string",      "enabled": true,      "family": "content",      "id": "string",      "severity": "low",      "source_yaml": "string"    }  ]}
GET
/v1/redteam/attacks

Query Parameters

attack?string

Filter by attack name

outcome?string

Filter by outcome (landed|blocked|clean|error)

limit?integer

Maximum records to return, capped at 100

Range1 <= value

Response Body

application/json

application/json

curl -X GET "https://example.com/v1/redteam/attacks"
{  "records": [    {      "attack": "string",      "created_at": "string",      "goal": "string",      "job_id": "string",      "landed": true,      "outcome": "string",      "profile": "string",      "prompt": "string",      "reply": "string",      "seq": 0,      "target": "string",      "trace_id": "string"    }  ]}
POST
/v1/redteam/dispatch

Registered runs must exactly match the selected workspace agent's stored target. Without agent_id, only the fixed local demo adapter is accepted.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Body of POST /v1/redteam/dispatch.

Response Body

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/v1/redteam/dispatch" \  -H "Content-Type: application/json" \  -d '{    "profile": "string",    "target_url": "string"  }'
{  "agent_id": "string",  "attacks": 0,  "blocked": 0,  "created_at": "string",  "environment_id": "string",  "error": "string",  "id": "string",  "landed": 0,  "profile": "string",  "status": "queued",  "target": "string",  "updated_at": "string",  "workspace_id": "string"}
GET
/v1/redteam/jobs

Query Parameters

agent_id?string

Filter by associated agent id

limit?integer

Maximum jobs to return, capped at 100

Range1 <= value

Response Body

application/json

application/json

curl -X GET "https://example.com/v1/redteam/jobs"
{  "jobs": [    {      "agent_id": "string",      "attacks": 0,      "blocked": 0,      "created_at": "string",      "environment_id": "string",      "error": "string",      "id": "string",      "landed": 0,      "profile": "string",      "status": "queued",      "target": "string",      "updated_at": "string",      "workspace_id": "string"    }  ]}
GET
/v1/redteam/jobs/{id}

Path Parameters

id*string

Job id

Response Body

application/json

application/json

application/json

curl -X GET "https://example.com/v1/redteam/jobs/string"
{  "job": {    "agent_id": "string",    "attacks": 0,    "blocked": 0,    "created_at": "string",    "environment_id": "string",    "error": "string",    "id": "string",    "landed": 0,    "profile": "string",    "status": "queued",    "target": "string",    "updated_at": "string",    "workspace_id": "string"  },  "sessions": [    {      "attack": "string",      "case_id": "string",      "error": "string",      "events": [        {          "actor": "string",          "content_text": "string",          "created_at": "string",          "event_id": "string",          "kind": "string",          "label": "string",          "payload": null,          "seq": 0,          "trace_id": "string"        }      ],      "goal": "string",      "kind": "string",      "landed": true,      "outcome": "string",      "runner_session_id": "string",      "seq": 0,      "session_id": "string",      "status": "string",      "trace_id": "string",      "track": "string",      "trial_index": 0    }  ]}
POST
/v1/redteam/jobs/{id}/cancel

Path Parameters

id*string

Job id

Response Body

application/json

application/json

application/json

curl -X POST "https://example.com/v1/redteam/jobs/string/cancel"
{  "agent_id": "string",  "attacks": 0,  "blocked": 0,  "created_at": "string",  "environment_id": "string",  "error": "string",  "id": "string",  "landed": 0,  "profile": "string",  "status": "queued",  "target": "string",  "updated_at": "string",  "workspace_id": "string"}
POST
/v1/redteam/jobs/{id}/harden

Path Parameters

id*string

Job id

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Body of POST /v1/redteam/jobs/{id}/harden.

Response Body

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/v1/redteam/jobs/string/harden" \  -H "Content-Type: application/json" \  -d '{}'
{  "candidates": [    {      "evidence_seqs": [        0      ],      "existing_policy_id": "string",      "operation": "create",      "policy": {        "description": "string",        "enabled": true,        "family": "content",        "id": "string",        "severity": "low",        "source_yaml": "string"      },      "source": "string",      "substrate": "string",      "verify": {        "blocked_landed": 0,        "blocked_variants": 0,        "control_total": 0,        "false_blocks": 0,        "landed_total": 0,        "passed": true,        "variant_total": 0      }    }  ],  "generated_at": "string",  "rejections": [    {      "evidence_seqs": [        0      ],      "message": "string",      "reason": "no_target_reply",      "substrate": "string",      "verify": null    }  ],  "unreachable": [    "string"  ]}
GET
/v1/redteam/jobs/{id}/report

Path Parameters

id*string

Job id

Query Parameters

compare?string

Second same-agent job id to compare against

Response Body

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/v1/redteam/jobs/string/report"
{  "aggregates": {    "attacks": 0,    "blocked": 0,    "clean": 0,    "errored": 0,    "landed": 0,    "risk_level": "critical",    "success_rate": 0.1,    "total": 0  },  "comparison": null,  "findings": [    {      "attack": "string",      "category": "string",      "evidence": "string",      "goal": "string",      "landed": true,      "outcome": "string",      "prompt": "string",      "seq": 0,      "severity": "critical",      "trace_id": "string"    }  ],  "generated_at": "string",  "job": {    "agent_id": "string",    "attacks": 0,    "blocked": 0,    "created_at": "string",    "environment_id": "string",    "error": "string",    "id": "string",    "landed": 0,    "profile": "string",    "status": "queued",    "target": "string",    "updated_at": "string",    "workspace_id": "string"  }}
DELETE
/v1/redteam/plans/{id}

Path Parameters

id*string

Saved plan id

Response Body

application/json

application/json

curl -X DELETE "https://example.com/v1/redteam/plans/string"
Empty
POST
/v1/redteam/reports

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Body of POST /v1/redteam/reports — mint a shareable report link.

Response Body

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/v1/redteam/reports" \  -H "Content-Type: application/json" \  -d '{    "job_id": "string"  }'
{  "compare_job_id": "string",  "created_at": "string",  "expires_at": "string",  "job_id": "string",  "path": "string",  "token": "string"}
GET
/v1/redteam/reports/{token}

Unauthenticated by design: the token is the bearer capability. The job lookup is scoped to the token's stored workspace, never the request, so a token cannot reach another workspace's data.

Path Parameters

token*string

Report share token

Response Body

application/json

application/json

application/json

curl -X GET "https://example.com/v1/redteam/reports/string"
{  "aggregates": {    "attacks": 0,    "blocked": 0,    "clean": 0,    "errored": 0,    "landed": 0,    "risk_level": "critical",    "success_rate": 0.1,    "total": 0  },  "comparison": null,  "findings": [    {      "attack": "string",      "category": "string",      "evidence": "string",      "goal": "string",      "landed": true,      "outcome": "string",      "prompt": "string",      "seq": 0,      "severity": "critical",      "trace_id": "string"    }  ],  "generated_at": "string",  "job": {    "agent_id": "string",    "attacks": 0,    "blocked": 0,    "created_at": "string",    "environment_id": "string",    "error": "string",    "id": "string",    "landed": 0,    "profile": "string",    "status": "queued",    "target": "string",    "updated_at": "string",    "workspace_id": "string"  }}
POST
/v1/redteam/reports/{token}/revoke

Path Parameters

token*string

Report share token

Response Body

application/json

application/json

curl -X POST "https://example.com/v1/redteam/reports/string/revoke"
Empty