Featherlane AI
ReferenceHTTP API

Agents

curl -X GET "https://example.com/v1/agents"
{  "agents": [    {      "agent_id": "string",      "authority": {        "can_promise": [          "string"        ],        "cannot_promise": [          "string"        ]      },      "display_name": "string",      "escalation_triggers": [        "string"      ],      "knowledge_sources": [        {          "description": "string",          "kb_id": "string",          "kind": "local",          "url": "string"        }      ],      "scope": {        "in_scope": [          "string"        ],        "out_of_scope": [          "string"        ]      },      "system_prompt": "string",      "target_url": "string",      "tone": {        "forbidden": [          "string"        ],        "target": "string"      },      "workflow_definition": null,      "workflow_requirements": [        {          "name": "string",          "required_before": [            "string"          ],          "sensitive_steps": [            "string"          ]        }      ]    }  ]}
POST
/v1/agents

Request Body

application/yaml

Agent profile, YAML or JSON

TypeScript Definitions

Use the request body type in TypeScript.

What an agent is, what it may claim, and how it should sound.

Authored as YAML by the customer (see policies/agents/*.yaml), parsed by tl-policy::load_agent_str, persisted in Postgres, cached in process, and consulted by Tier 2 (out-of-scope embedding lookup) and Tier 3 (LLM judge ground truth).

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/v1/agents" \  -H "Content-Type: application/yaml" \  -d '<agent_id>string</agent_id>  <authority/>  <display_name>string</display_name>  <scope/>  <tone>    <target>string</target>  </tone>'
{  "agent_id": "string",  "authority": {    "can_promise": [      "string"    ],    "cannot_promise": [      "string"    ]  },  "display_name": "string",  "escalation_triggers": [    "string"  ],  "knowledge_sources": [    {      "description": "string",      "kb_id": "string",      "kind": "local",      "url": "string"    }  ],  "scope": {    "in_scope": [      "string"    ],    "out_of_scope": [      "string"    ]  },  "system_prompt": "string",  "target_url": "string",  "tone": {    "forbidden": [      "string"    ],    "target": "string"  },  "workflow_definition": null,  "workflow_requirements": [    {      "name": "string",      "required_before": [        "string"      ],      "sensitive_steps": [        "string"      ]    }  ]}
GET
/v1/agents/{id}

Path Parameters

id*string

Agent identifier

Response Body

application/json

application/json

application/json

curl -X GET "https://example.com/v1/agents/string"
{  "agent_id": "string",  "authority": {    "can_promise": [      "string"    ],    "cannot_promise": [      "string"    ]  },  "display_name": "string",  "escalation_triggers": [    "string"  ],  "knowledge_sources": [    {      "description": "string",      "kb_id": "string",      "kind": "local",      "url": "string"    }  ],  "scope": {    "in_scope": [      "string"    ],    "out_of_scope": [      "string"    ]  },  "system_prompt": "string",  "target_url": "string",  "tone": {    "forbidden": [      "string"    ],    "target": "string"  },  "workflow_definition": null,  "workflow_requirements": [    {      "name": "string",      "required_before": [        "string"      ],      "sensitive_steps": [        "string"      ]    }  ]}
DELETE
/v1/agents/{id}

Path Parameters

id*string

Agent identifier

Response Body

application/json

application/json

application/json

curl -X DELETE "https://example.com/v1/agents/string"
Empty
curl -X GET "https://example.com/v1/agents/string/guardrails"
{  "policies": [    {      "action": "string",      "description": "string",      "enabled": true,      "family": "content",      "id": "string",      "owner_agent_id": "string",      "severity": "low"    }  ]}
POST
/v1/agents/{id}/guardrails/generate

Callers review the set and flip individual policies on via PATCH /v1/policies/{id}/enabled. Runtime checks never see these policies until that happens (because runtime event evaluation filters by enabled).

Path Parameters

id*string

Agent identifier

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/v1/agents/string/guardrails/generate"
{  "generated": [    {      "description": "string",      "enabled": true,      "family": "content",      "id": "string",      "severity": "low",      "source_yaml": "string"    }  ]}