FoxCue API: Collections and Legacy knowledge documents and Sources, transcripts and business context
Request examples, parameters, scopes and response statuses for FoxCue API collections and legacy knowledge documents and sources, transcripts and business context.
These operations are copied from the live OpenAPI schema at GET /api/v1/openapi.json (2026-10-28, 297 operations). Each example request is built from that operation's schema: required fields, and optional fields when the object is small. Response bodies are not in that schema. Where the JSON shape is known, it is listed below with an example. Shared errors are on Limits and errors.
Send Authorization: Bearer <workspace API key>. Base URL: https://app.foxcue.com/api/v1.
Collections
GET /collections
List collections in this workspace
Scope: sources:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
project_id | query | no | string | |
script_id | query | no | string | |
collection_id | query | no | string | |
scope_type | query | no | string | |
scope_id | query | no | string | |
kind | query | no | string | |
limit | query | no | string | |
offset | query | no | string |
Example request
curl -X GET "https://app.foxcue.com/api/v1/collections?project_id=example&script_id=example&collection_id=example&scope_type=example&scope_id=example&kind=example" \
-H "Authorization: Bearer <workspace API key>"Response
The body is a JSON array of these fields. limit is 1–100 (default 50) and offset starts at 0. The array has no total.
| Field | Type |
|---|---|
id | string |
org_id | string |
project_id | string |
name | string |
slug | string |
description | string |
mode | string |
created_at | string |
updated_at | string |
angle | string |
source_type | string |
source_url | string |
source_brief | string |
[
{
"id": "id",
"org_id": "workspace_id",
"project_id": "id",
"name": "example",
"slug": "example",
"description": "example",
"mode": "example",
"created_at": "2026-10-28T00:00:00.000Z",
"updated_at": "2026-10-28T00:00:00.000Z",
"angle": "example",
"source_type": "example",
"source_url": "https://example.com",
"source_brief": "example"
}
]| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
POST /collections
Create collections
Scope: sources:write.
Example request
{
"project_id": "example",
"name": "example",
"mode": "promo",
"source_type": "reddit"
}Required fields: project_id, name.
curl -X POST "https://app.foxcue.com/api/v1/collections" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
The body is a JSON object with these fields.
| Field | Type |
|---|---|
id | string |
org_id | string |
project_id | string |
name | string |
slug | string |
description | string |
mode | string |
created_at | string |
updated_at | string |
angle | string |
source_type | string |
source_url | string |
source_brief | string |
{
"id": "id",
"org_id": "workspace_id",
"project_id": "id",
"name": "example",
"slug": "example",
"description": "example",
"mode": "example",
"created_at": "2026-10-28T00:00:00.000Z",
"updated_at": "2026-10-28T00:00:00.000Z",
"angle": "example",
"source_type": "example",
"source_url": "https://example.com",
"source_brief": "example"
}| Status | Meaning |
|---|---|
201 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
GET /collections/{id}
Get collections
Scope: sources:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
curl -X GET "https://app.foxcue.com/api/v1/collections/example" \
-H "Authorization: Bearer <workspace API key>"Response
The body is a JSON object with these fields.
| Field | Type |
|---|---|
id | string |
org_id | string |
project_id | string |
name | string |
slug | string |
description | string |
mode | string |
created_at | string |
updated_at | string |
angle | string |
source_type | string |
source_url | string |
source_brief | string |
{
"id": "id",
"org_id": "workspace_id",
"project_id": "id",
"name": "example",
"slug": "example",
"description": "example",
"mode": "example",
"created_at": "2026-10-28T00:00:00.000Z",
"updated_at": "2026-10-28T00:00:00.000Z",
"angle": "example",
"source_type": "example",
"source_url": "https://example.com",
"source_brief": "example"
}| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
PATCH /collections/{id}
Update collections
Scope: sources:write.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
{
"name": "example",
"mode": "promo",
"source_type": "reddit"
}curl -X PATCH "https://app.foxcue.com/api/v1/collections/example" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
The body is a JSON object with these fields.
| Field | Type |
|---|---|
id | string |
org_id | string |
project_id | string |
name | string |
slug | string |
description | string |
mode | string |
created_at | string |
updated_at | string |
angle | string |
source_type | string |
source_url | string |
source_brief | string |
{
"id": "id",
"org_id": "workspace_id",
"project_id": "id",
"name": "example",
"slug": "example",
"description": "example",
"mode": "example",
"created_at": "2026-10-28T00:00:00.000Z",
"updated_at": "2026-10-28T00:00:00.000Z",
"angle": "example",
"source_type": "example",
"source_url": "https://example.com",
"source_brief": "example"
}| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
DELETE /collections/{id}
Delete collections
Scope: sources:write.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
curl -X DELETE "https://app.foxcue.com/api/v1/collections/example" \
-H "Authorization: Bearer <workspace API key>"Response
Success returns no JSON body.
| Status | Meaning |
|---|---|
204 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
Legacy knowledge documents
GET /knowledge
List knowledge in this workspace
Scope: sources:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
project_id | query | no | string | |
script_id | query | no | string | |
collection_id | query | no | string | |
scope_type | query | no | string | |
scope_id | query | no | string | |
kind | query | no | string | |
limit | query | no | string | |
offset | query | no | string |
Example request
curl -X GET "https://app.foxcue.com/api/v1/knowledge?project_id=example&script_id=example&collection_id=example&scope_type=example&scope_id=example&kind=example" \
-H "Authorization: Bearer <workspace API key>"Response
The body is a JSON array of these fields. limit is 1–100 (default 50) and offset starts at 0. The array has no total.
| Field | Type |
|---|---|
id | string |
org_id | string |
scope_type | string |
scope_id | string |
kind | string |
title | string |
content | string |
content_format | string |
source_url | string |
fetched_at | string |
created_at | string |
category | string |
[
{
"id": "id",
"org_id": "workspace_id",
"scope_type": "example",
"scope_id": "id",
"kind": "example",
"title": "example",
"content": "example",
"content_format": "example",
"source_url": "https://example.com",
"fetched_at": "2026-10-28T00:00:00.000Z",
"created_at": "2026-10-28T00:00:00.000Z",
"category": "example"
}
]| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
POST /knowledge
Create knowledge
Scope: sources:write.
Example request
{
"scope_type": "project",
"scope_id": "example",
"kind": "md",
"category": "reference",
"title": "example",
"content": "example",
"visibility": "internal"
}Required fields: scope_type, scope_id, kind, title.
curl -X POST "https://app.foxcue.com/api/v1/knowledge" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
201 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
GET /knowledge/{id}
Get knowledge
Scope: sources:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
curl -X GET "https://app.foxcue.com/api/v1/knowledge/example" \
-H "Authorization: Bearer <workspace API key>"Response
The body is a JSON object with these fields.
| Field | Type |
|---|---|
id | string |
org_id | string |
scope_type | string |
scope_id | string |
kind | string |
title | string |
content | string |
content_format | string |
source_url | string |
fetched_at | string |
created_at | string |
category | string |
{
"id": "id",
"org_id": "workspace_id",
"scope_type": "example",
"scope_id": "id",
"kind": "example",
"title": "example",
"content": "example",
"content_format": "example",
"source_url": "https://example.com",
"fetched_at": "2026-10-28T00:00:00.000Z",
"created_at": "2026-10-28T00:00:00.000Z",
"category": "example"
}| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
PATCH /knowledge/{id}
Update knowledge
Scope: sources:write.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
{
"title": "example",
"category": "reference",
"content": "example",
"visibility": "internal"
}curl -X PATCH "https://app.foxcue.com/api/v1/knowledge/example" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
DELETE /knowledge/{id}
Delete knowledge
Scope: sources:write.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
curl -X DELETE "https://app.foxcue.com/api/v1/knowledge/example" \
-H "Authorization: Bearer <workspace API key>"Response
Success returns no JSON body.
| Status | Meaning |
|---|---|
204 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
Sources, transcripts and business context
GET /knowledge-hub/source-library
Read a canonical source library page with availability, revision and separate indexing status
Scope: knowledge:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
project_id | query | no | string | minLength 1; maxLength 100 |
after_document_id | query | no | string | minLength 1; maxLength 100 |
limit | query | no | integer | minimum 1; maximum 500 |
compact | query | no | ||
q | query | no | string | maxLength 500 |
collection | query | no | string | minLength 1; maxLength 200 |
Example request
curl -X GET "https://app.foxcue.com/api/v1/knowledge-hub/source-library?project_id=example&after_document_id=example&limit=example&compact=example&q=example&collection=example" \
-H "Authorization: Bearer <workspace API key>"Response
The body is a JSON object with these fields.
| Field | Type |
|---|---|
items | array |
next_cursor | null |
{
"items": [],
"next_cursor": null
}| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
GET /knowledge-hub/source-manifest
Read full-scope fingerprint and paginated current source manifest; silo selection additionally requires strategy:read
Scope: knowledge:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
project_id | query | yes | string | minLength 1; maxLength 100 |
silo_id | query | no | string | minLength 1; maxLength 100 |
purpose | query | yes | string | one of internal_planning, public_writing |
after_document_id | query | no | string | minLength 1; maxLength 100 |
limit | query | no | integer | minimum 1; maximum 500 |
Example request
curl -X GET "https://app.foxcue.com/api/v1/knowledge-hub/source-manifest?project_id=example&silo_id=example&purpose=example&after_document_id=example&limit=example" \
-H "Authorization: Bearer <workspace API key>"Response
The body is a JSON object with these fields.
| Field | Type |
|---|---|
sources | JSON |
next_cursor | JSON |
fingerprint | JSON |
total | number |
{
"sources": "example",
"next_cursor": "example",
"fingerprint": "example",
"total": 0
}| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
POST /knowledge-hub/transcripts
Import an idempotent original internal call; optional silo link requires strategy:write
Scope: knowledge:write.
Example request
{
"project_id": "example",
"title": "example",
"content": "example",
"idempotency_key": "example-",
"silo_id": "example",
"silo_expected_revision": 1,
"call_date": "example"
}Required fields: project_id, title, content, idempotency_key.
curl -X POST "https://app.foxcue.com/api/v1/knowledge-hub/transcripts" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
201 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
GET /knowledge-hub/transcripts/{id}
Read original call, genuine turn locators and current index status
Scope: knowledge:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
curl -X GET "https://app.foxcue.com/api/v1/knowledge-hub/transcripts/example" \
-H "Authorization: Bearer <workspace API key>"Response
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
POST /knowledge-hub/sources/{id}/index
Index a current approved public learning or original call through the existing bounded owner; additionally requires generation:write
Scope: knowledge:write.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
{
"expected_revision": 1,
"idempotency_key": "example-",
"max_chunks": 1,
"max_embedding_calls": 1,
"after_chunk_id": "example"
}Required fields: expected_revision, idempotency_key.
curl -X POST "https://app.foxcue.com/api/v1/knowledge-hub/sources/example/index" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
The body is a JSON object with these fields.
| Field | Type |
|---|---|
projectId | JSON |
revisionId | JSON |
grant | JSON |
claimed | JSON |
{
"projectId": "example",
"revisionId": "example",
"grant": "example",
"claimed": "example"
}| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
POST /knowledge-hub/transcripts/{id}/index
Explicitly index a bounded current transcript through the existing embedding owner; requires generation:write
Scope: knowledge:write.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
{
"expected_revision": 1,
"idempotency_key": "example-",
"max_chunks": 1,
"max_embedding_calls": 1,
"after_chunk_id": "example"
}Required fields: expected_revision, idempotency_key.
curl -X POST "https://app.foxcue.com/api/v1/knowledge-hub/transcripts/example/index" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
POST /knowledge-hub/transcripts/{id}/public-learnings
Approve a separate de-identified learning with exact current raw evidence; customer calls cannot prove product capability
Scope: knowledge:write.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
{
"expected_revision": 1,
"title": "example",
"content": "example-va",
"classification": "customer_operation",
"deidentified": true,
"review_note": "example-va",
"evidence": [
{
"chunk_id": "example",
"start_offset": 0,
"end_offset": 1,
"quote": "example"
}
],
"silo_id": "example",
"silo_expected_revision": 1
}Required fields: expected_revision, title, content, classification, deidentified, review_note, evidence.
curl -X POST "https://app.foxcue.com/api/v1/knowledge-hub/transcripts/example/public-learnings" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
201 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
POST /knowledge-hub/specific-evidence
Retrieve authorized exact and optionally semantic evidence with genuine locators, neighbors, coverage and honest index warnings; semantic requires generation:write
Scope: knowledge:read.
Example request
{
"project_id": "example",
"query": "example",
"purpose": "internal_qa",
"silo_id": "example",
"source_ids": [
"example"
],
"limit": 1,
"semantic": true,
"max_embedding_calls": 1
}Required fields: project_id, query.
curl -X POST "https://app.foxcue.com/api/v1/knowledge-hub/specific-evidence" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
GET /knowledge-hub/business-map
Read the current source-backed product graph, coverage and applicability basis
Scope: knowledge:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
project_id | query | yes | string | minLength 1 |
Example request
curl -X GET "https://app.foxcue.com/api/v1/knowledge-hub/business-map?project_id=example" \
-H "Authorization: Bearer <workspace API key>"Response
The body is a JSON object with these fields.
| Field | Type |
|---|---|
map | JSON |
latest_run | JSON |
{
"map": "example",
"latest_run": "example"
}| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
GET /knowledge-hub/business-model
Read brand-authored positioning and declared model branches separately from website evidence
Scope: knowledge:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
project_id | query | yes | string | minLength 1 |
Example request
curl -X GET "https://app.foxcue.com/api/v1/knowledge-hub/business-model?project_id=example" \
-H "Authorization: Bearer <workspace API key>"Response
The body is a JSON object with these fields.
| Field | Type |
|---|---|
project_id | JSON |
revision | number |
positioning | JSON |
audience | JSON |
nodes | array |
edges | array |
entity_overrides | JSON |
source_link_overrides | array |
updated_at | null |
{
"project_id": "id",
"revision": 0,
"positioning": "example",
"audience": "example",
"nodes": [],
"edges": [],
"entity_overrides": "example",
"source_link_overrides": [],
"updated_at": null
}| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
PUT /knowledge-hub/business-model
Save brand-authored contextual model with optimistic revision; additionally requires brands:write
Scope: knowledge:write.
Example request
{
"project_id": "example",
"expected_revision": 0,
"positioning": "example",
"audience": "example",
"nodes": [
{
"id": "example",
"kind": "product",
"name": "example",
"description": "example",
"area": "front_office",
"parent_id": "example",
"problem": "example",
"solution": "example",
"workflows": [
"example"
],
"benefits": [
"example"
]
}
],
"edges": [
{
"from_id": "example",
"to_id": "example",
"relation": "contains",
"rationale": "example"
}
],
"entity_overrides": {},
"source_link_overrides": [
{
"entity_id": "example",
"document_id": "example",
"action": "include"
}
]
}Required fields: project_id, expected_revision, positioning, audience, nodes, edges.
curl -X PUT "https://app.foxcue.com/api/v1/knowledge-hub/business-model" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
POST /knowledge-hub/business-map/build
Extract a source-backed product map with bounded, cached model calls; additionally requires generation:write
Scope: knowledge:write.
Example request
{
"project_id": "example",
"idempotency_key": "example-"
}Required fields: project_id, idempotency_key.
curl -X POST "https://app.foxcue.com/api/v1/knowledge-hub/business-map/build" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
202 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
GET /knowledge-hub/business-map/runs/{id}
Read product-map job progress
Scope: knowledge:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
curl -X GET "https://app.foxcue.com/api/v1/knowledge-hub/business-map/runs/example" \
-H "Authorization: Bearer <workspace API key>"Response
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
POST /knowledge-hub/business-map/runs/{id}/cancel
Stop product-map publication
Scope: knowledge:write.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
{}curl -X POST "https://app.foxcue.com/api/v1/knowledge-hub/business-map/runs/example/cancel" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
GET /knowledge-hub/catalogue/status
Read cheap mapping progress, source fingerprint and model revision without loading the full graph
Scope: knowledge:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
project_id | query | yes | string | minLength 1 |
Example request
curl -X GET "https://app.foxcue.com/api/v1/knowledge-hub/catalogue/status?project_id=example" \
-H "Authorization: Bearer <workspace API key>"Response
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
GET /knowledge-hub/catalogue
Read the current editable source catalogue and mapping coverage
Scope: knowledge:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
project_id | query | yes | string | minLength 1 |
Example request
curl -X GET "https://app.foxcue.com/api/v1/knowledge-hub/catalogue?project_id=example" \
-H "Authorization: Bearer <workspace API key>"Response
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
POST /knowledge-hub/catalogue/build
Queue bounded source-content extraction; additionally requires generation:write
Scope: knowledge:write.
Example request
{
"project_id": "example",
"idempotency_key": "example-"
}Required fields: project_id, idempotency_key.
curl -X POST "https://app.foxcue.com/api/v1/knowledge-hub/catalogue/build" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
202 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
GET /knowledge-hub/catalogue/runs/{id}
Read durable source-mapping progress
Scope: knowledge:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
curl -X GET "https://app.foxcue.com/api/v1/knowledge-hub/catalogue/runs/example" \
-H "Authorization: Bearer <workspace API key>"Response
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
POST /knowledge-hub/catalogue/runs/{id}/cancel
Cancel source mapping and fence publication
Scope: knowledge:write.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
{}curl -X POST "https://app.foxcue.com/api/v1/knowledge-hub/catalogue/runs/example/cancel" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
GET /knowledge-hub/catalogue/entities/{id}
Read current edited entity facts, citations and selected relationships on demand
Scope: knowledge:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string | |
project_id | query | yes | string | minLength 1; maxLength 200 |
audience_id | query | no | string | minLength 1; maxLength 200 |
Example request
curl -X GET "https://app.foxcue.com/api/v1/knowledge-hub/catalogue/entities/example?project_id=example&audience_id=example" \
-H "Authorization: Bearer <workspace API key>"Response
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
PATCH /knowledge-hub/catalogue/entities/{id}
Edit or clear a generated entity override with model revision CAS; additionally requires brands:write
Scope: knowledge:write.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
{
"project_id": "example",
"expected_revision": 0,
"name": "example",
"description": "example",
"aliases": [
"example"
]
}Required fields: project_id, expected_revision.
curl -X PATCH "https://app.foxcue.com/api/v1/knowledge-hub/catalogue/entities/example" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
GET /knowledge-hub/catalogue/entities/{id}/sources
List current related source pages by content type with mapping basis and pagination; include_excluded reveals restorable current-source associations
Scope: knowledge:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string | |
project_id | query | yes | string | minLength 1; maxLength 200 |
type | query | no | string | one of all, website, documentation, blog, case_study, other |
audience_id | query | no | string | minLength 1; maxLength 200 |
include_excluded | query | no | boolean | |
limit | query | no | integer | minimum 1; maximum 200 |
cursor | query | no | string | maxLength 200 |
Example request
curl -X GET "https://app.foxcue.com/api/v1/knowledge-hub/catalogue/entities/example/sources?project_id=example&type=example&audience_id=example&include_excluded=example&limit=example&cursor=example" \
-H "Authorization: Bearer <workspace API key>"Response
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
PUT /knowledge-hub/catalogue/source-links
Include, exclude or reset a source association override with model revision CAS; additionally requires brands:write
Scope: knowledge:write.
Example request
{
"entity_id": "example",
"document_id": "example",
"action": "include",
"project_id": "example",
"expected_revision": 0
}Required fields: entity_id, document_id, action, project_id, expected_revision.
curl -X PUT "https://app.foxcue.com/api/v1/knowledge-hub/catalogue/source-links" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
GET /knowledge-hub/catalogue/collections
Read origin collections and custom folders without copying sources
Scope: knowledge:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
project_id | query | yes | string | minLength 1 |
Example request
curl -X GET "https://app.foxcue.com/api/v1/knowledge-hub/catalogue/collections?project_id=example" \
-H "Authorization: Bearer <workspace API key>"Response
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
POST /knowledge-hub/catalogue/collections
Create a custom source folder in this brand
Scope: knowledge:write.
Example request
{
"project_id": "example",
"name": "example",
"parent_id": "example"
}Required fields: project_id, name.
curl -X POST "https://app.foxcue.com/api/v1/knowledge-hub/catalogue/collections" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
201 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
PUT /knowledge-hub/catalogue/collections/{id}/members
Replace same-brand folder membership using the current folder revision
Scope: knowledge:write.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
{
"expected_revision": 1,
"document_ids": [
"example"
]
}Required fields: expected_revision, document_ids.
curl -X PUT "https://app.foxcue.com/api/v1/knowledge-hub/catalogue/collections/example/members" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
GET /knowledge-hub/business-research/config
Read managed industry-research availability
Scope: knowledge:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
project_id | query | no | string | minLength 1 |
Example request
curl -X GET "https://app.foxcue.com/api/v1/knowledge-hub/business-research/config?project_id=example" \
-H "Authorization: Bearer <workspace API key>"Response
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
GET /knowledge-hub/business-research
List industry research separately from verified product support
Scope: knowledge:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
project_id | query | yes | string | minLength 1 |
Example request
curl -X GET "https://app.foxcue.com/api/v1/knowledge-hub/business-research?project_id=example" \
-H "Authorization: Bearer <workspace API key>"Response
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
POST /knowledge-hub/business-research
Research a current public capability/industry cell; additionally requires generation:write
Scope: knowledge:write.
Example request
{
"project_id": "example",
"capability_id": "example",
"industry_id": "example",
"idempotency_key": "example-"
}Required fields: project_id, capability_id, industry_id, idempotency_key.
curl -X POST "https://app.foxcue.com/api/v1/knowledge-hub/business-research" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
202 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
GET /knowledge-hub/business-research/runs/{id}
Read industry research job and cited result
Scope: knowledge:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
curl -X GET "https://app.foxcue.com/api/v1/knowledge-hub/business-research/runs/example" \
-H "Authorization: Bearer <workspace API key>"Response
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
POST /knowledge-hub/business-research/runs/{id}/cancel
Stop industry research publication
Scope: knowledge:write.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
{}curl -X POST "https://app.foxcue.com/api/v1/knowledge-hub/business-research/runs/example/cancel" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
GET /knowledge-hub/sources
List revisioned sources; optional project_id
Scope: knowledge:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
project_id | query | no | string | minLength 1 |
Example request
curl -X GET "https://app.foxcue.com/api/v1/knowledge-hub/sources?project_id=example" \
-H "Authorization: Bearer <workspace API key>"Response
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
POST /knowledge-hub/sources
Import source text or an individual public URL; use connections for complete website/docs intake
Scope: knowledge:write.
Example request
{
"project_id": "example",
"title": "example",
"content": "example",
"source_type": "note",
"source_url": "example",
"visibility": "internal"
}Required fields: project_id, title.
curl -X POST "https://app.foxcue.com/api/v1/knowledge-hub/sources" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
201 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
POST /knowledge-hub/source-pages
Import one canonical source page without AI generation; optional silo attachment also requires strategy:write and silo revision
Scope: knowledge:write.
Example request
{
"project_id": "example",
"url": "example",
"title": "example",
"markdown": "example",
"fetched_at": "example",
"extraction_version": "example",
"origin": "manual_url",
"visibility": "internal",
"requested_url": "example",
"connection_id": "example",
"etag": "example"
}Required fields: project_id, url, title, markdown, fetched_at, extraction_version, origin, visibility.
curl -X POST "https://app.foxcue.com/api/v1/knowledge-hub/source-pages" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
The body is a JSON object with these fields.
| Field | Type |
|---|---|
page_id | JSON |
document_id | JSON |
revision | JSON |
outcome | string |
review_reason | JSON |
{
"page_id": "id",
"document_id": "id",
"revision": "example",
"outcome": "example",
"review_reason": "example"
}| Status | Meaning |
|---|---|
201 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
GET /knowledge-hub/sources/{id}
Read source and revision history
Scope: knowledge:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
curl -X GET "https://app.foxcue.com/api/v1/knowledge-hub/sources/example" \
-H "Authorization: Bearer <workspace API key>"Response
The body is a JSON object with these fields.
| Field | Type |
|---|---|
source | JSON |
revisions | JSON |
{
"source": "example",
"revisions": "example"
}| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
PATCH /knowledge-hub/sources/{id}
Update source with revision precondition
Scope: knowledge:write.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
{
"expected_revision": 0,
"project_id": "example",
"title": "example",
"content": "example",
"source_type": "note",
"visibility": "internal"
}Required fields: expected_revision.
curl -X PATCH "https://app.foxcue.com/api/v1/knowledge-hub/sources/example" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
DELETE /knowledge-hub/sources/{id}
Move a source to Trash while preserving immutable revisions
Scope: knowledge:write.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
{
"expected_revision": 1
}Required fields: expected_revision.
curl -X DELETE "https://app.foxcue.com/api/v1/knowledge-hub/sources/example" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
204 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
GET /knowledge-hub/sources/{id}/revisions/{revision}
Read an immutable source revision
Scope: knowledge:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string | |
revision | path | yes | string |
Example request
curl -X GET "https://app.foxcue.com/api/v1/knowledge-hub/sources/example/revisions/example" \
-H "Authorization: Bearer <workspace API key>"Response
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
POST /knowledge-hub/search
Search current source passages using PostgreSQL full-text search; legacy semantic flags are accepted without model or embedding calls
Scope: knowledge:read.
Example request
{
"project_id": "example",
"query": "example",
"silo_id": "example",
"limit": 1,
"public_only": true,
"source_ids": [
"example"
],
"semantic": true,
"max_embedding_calls": 1
}Required fields: project_id, query.
curl -X POST "https://app.foxcue.com/api/v1/knowledge-hub/search" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
GET /knowledge-hub/context
List business context and review states
Scope: knowledge:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
project_id | query | no | string | minLength 1 |
Example request
curl -X GET "https://app.foxcue.com/api/v1/knowledge-hub/context?project_id=example" \
-H "Authorization: Bearer <workspace API key>"Response
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
POST /knowledge-hub/context
Propose source-backed business context
Scope: knowledge:write.
Example request
{
"project_id": "example",
"title": "example",
"kind": "company",
"content": "example",
"source_ids": [
"example"
]
}Required fields: project_id, title, kind, content.
curl -X POST "https://app.foxcue.com/api/v1/knowledge-hub/context" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
201 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
PATCH /knowledge-hub/context/{id}
Edit context and return it to review
Scope: knowledge:write.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
{
"title": "example",
"kind": "company",
"content": "example",
"source_ids": [
"example"
],
"expected_revision": 0
}Required fields: expected_revision.
curl -X PATCH "https://app.foxcue.com/api/v1/knowledge-hub/context/example" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
POST /knowledge-hub/context/{id}/approve
Approve human-reviewed context with current revision
Scope: knowledge:write.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
{
"expected_revision": 1
}Required fields: expected_revision.
curl -X POST "https://app.foxcue.com/api/v1/knowledge-hub/context/example/approve" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
GET /knowledge-hub/people
List content people and expertise
Scope: knowledge:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
project_id | query | no | string | minLength 1 |
Example request
curl -X GET "https://app.foxcue.com/api/v1/knowledge-hub/people?project_id=example" \
-H "Authorization: Bearer <workspace API key>"Response
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
POST /knowledge-hub/people
Add a content person
Scope: knowledge:write.
Example request
{
"project_id": "example",
"name": "example",
"role": "example",
"bio": "example",
"expertise": "example",
"speaking_preferences": "example"
}Required fields: project_id, name.
curl -X POST "https://app.foxcue.com/api/v1/knowledge-hub/people" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
201 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
PATCH /knowledge-hub/people/{id}
Update a content person with revision check
Scope: knowledge:write.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
{
"name": "example",
"role": "example",
"bio": "example",
"expertise": "example",
"speaking_preferences": "example",
"expected_revision": 0
}Required fields: expected_revision.
curl -X PATCH "https://app.foxcue.com/api/v1/knowledge-hub/people/example" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
POST /knowledge-hub/understand
Compatibility source mapping without model or embedding calls; website/docs intake uses connections and silo creation uses strategy routes
Scope: knowledge:write.
Example request
{
"project_id": "example",
"website_url": "example",
"docs_urls": [
"example"
],
"silo_names": [
"example"
],
"idempotency_key": "example-"
}Required fields: project_id, idempotency_key.
curl -X POST "https://app.foxcue.com/api/v1/knowledge-hub/understand" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
202 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
GET /knowledge-hub/understand/{id}
Read durable understanding progress and safe errors
Scope: knowledge:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
curl -X GET "https://app.foxcue.com/api/v1/knowledge-hub/understand/example" \
-H "Authorization: Bearer <workspace API key>"Response
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
POST /knowledge-hub/understand/{id}/cancel
Cancel catalogue mapping; historical analysis runs remain read only
Scope: knowledge:write.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
{}curl -X POST "https://app.foxcue.com/api/v1/knowledge-hub/understand/example/cancel" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
GET /knowledge-hub/business-context
Read automatically generated business context, citations, freshness and latest run
Scope: knowledge:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
project_id | query | yes | string | minLength 1 |
Example request
curl -X GET "https://app.foxcue.com/api/v1/knowledge-hub/business-context?project_id=example" \
-H "Authorization: Bearer <workspace API key>"Response
The body is a JSON object with these fields.
| Field | Type |
|---|---|
context | JSON |
latest_run | JSON |
{
"context": "example",
"latest_run": "example"
}| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
POST /knowledge-hub/context-preview
Assemble relevant public-safe business context for a brand/silo/question
Scope: knowledge:read.
Example request
{
"project_id": "example",
"script_id": "example",
"query": "example",
"silo_id": "example",
"source_ids": [
"example"
]
}Required fields: project_id, query.
curl -X POST "https://app.foxcue.com/api/v1/knowledge-hub/context-preview" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
GET /knowledge-hub/crawler
Read Jina Reader configuration availability
Scope: knowledge:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
project_id | query | no | string | minLength 1 |
Example request
curl -X GET "https://app.foxcue.com/api/v1/knowledge-hub/crawler?project_id=example" \
-H "Authorization: Bearer <workspace API key>"Response
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
GET /knowledge-hub/connections
List refreshable website, blog and documentation connections
Scope: knowledge:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
project_id | query | no | string | minLength 1 |
Example request
curl -X GET "https://app.foxcue.com/api/v1/knowledge-hub/connections?project_id=example" \
-H "Authorization: Bearer <workspace API key>"Response
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
POST /knowledge-hub/connections
Connect a website/sitemap and queue resumable crawling and cheap catalogue mapping without model or embedding calls; observed brand identity imports additionally require brands:write
Scope: knowledge:write.
Example request
{
"project_id": "example",
"url": "example",
"kind": "website",
"idempotency_key": "example",
"name": "example",
"refresh_interval_hours": 0,
"seed_urls": [
"example"
]
}Required fields: project_id, url, kind, idempotency_key.
curl -X POST "https://app.foxcue.com/api/v1/knowledge-hub/connections" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
201 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
GET /knowledge-hub/connections/{id}
Read connection, imported pages and durable refresh history
Scope: knowledge:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
curl -X GET "https://app.foxcue.com/api/v1/knowledge-hub/connections/example" \
-H "Authorization: Bearer <workspace API key>"Response
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
PATCH /knowledge-hub/connections/{id}
Update scope/cadence or pause/resume with revision guard; remembered initiator permissions are checked
Scope: knowledge:write.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
{
"expected_revision": 1,
"refresh_interval_hours": 0,
"include_paths": [
"example"
],
"exclude_paths": [
"example"
],
"status": "active",
"seed_urls": [
"example"
],
"allowed_origins": [
"example"
],
"visibility": "internal",
"generation_budget": 0
}Required fields: expected_revision.
curl -X PATCH "https://app.foxcue.com/api/v1/knowledge-hub/connections/example" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
POST /knowledge-hub/connections/{id}/refresh
Queue an idempotent resumable crawl and cheap source mapping without model or embedding calls
Scope: knowledge:write.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
{
"idempotency_key": "example",
"retry_failed": true
}Required fields: idempotency_key.
curl -X POST "https://app.foxcue.com/api/v1/knowledge-hub/connections/example/refresh" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
202 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
GET /knowledge-hub/connection-runs/{id}
Read refresh progress and safe errors
Scope: knowledge:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
curl -X GET "https://app.foxcue.com/api/v1/knowledge-hub/connection-runs/example" \
-H "Authorization: Bearer <workspace API key>"Response
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
POST /knowledge-hub/bootstrap
Create or fill a brand from observed website name, description, colors, fonts and assets without AI or embedding calls; additionally requires brands:write
Scope: knowledge:write.
Example request
{
"asset_purposes": [
"logo"
],
"url": "example",
"project_id": "example",
"idempotency_key": "example-"
}Required fields: url, idempotency_key.
curl -X POST "https://app.foxcue.com/api/v1/knowledge-hub/bootstrap" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
The body is a JSON object with these fields.
| Field | Type |
|---|---|
project_id | JSON |
connection | JSON |
run | JSON |
{
"project_id": "id",
"connection": "example",
"run": "example"
}| Status | Meaning |
|---|---|
202 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
GET /knowledge-hub/brand-import
Read website-import provenance, manual override suggestions and owned imported image assets
Scope: brands:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
project_id | query | yes | string | minLength 1 |
Example request
curl -X GET "https://app.foxcue.com/api/v1/knowledge-hub/brand-import?project_id=example" \
-H "Authorization: Bearer <workspace API key>"Response
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
GET /knowledge-hub/source-connections
List shared source connections
Scope: knowledge:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
project_id | query | no | string | minLength 1 |
Example request
curl -X GET "https://app.foxcue.com/api/v1/knowledge-hub/source-connections?project_id=example" \
-H "Authorization: Bearer <workspace API key>"Response
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
POST /knowledge-hub/source-connections
Connect website/sitemap/URL list without hidden AI; include/exclude patterns are path prefixes
Scope: knowledge:write.
Example request
{
"project_id": "example",
"kind": "website",
"seed_urls": [
"example"
],
"allowed_origins": [
"example"
],
"name": "example",
"include_patterns": [
"example"
],
"exclude_patterns": [
"example"
]
}Required fields: project_id, kind, seed_urls, allowed_origins.
curl -X POST "https://app.foxcue.com/api/v1/knowledge-hub/source-connections" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
The body is a JSON object with these fields.
| Field | Type |
|---|---|
id | JSON |
revision | JSON |
connection | JSON |
run | JSON |
{
"id": "id",
"revision": "example",
"connection": "example",
"run": "example"
}| Status | Meaning |
|---|---|
201 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
GET /knowledge-hub/source-connections/{id}
Read shared connection pages and resumable progress
Scope: knowledge:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
curl -X GET "https://app.foxcue.com/api/v1/knowledge-hub/source-connections/example" \
-H "Authorization: Bearer <workspace API key>"Response
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
PATCH /knowledge-hub/source-connections/{id}
Update shared source configuration or pause/resume using revision CAS
Scope: knowledge:write.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
{
"expected_revision": 1,
"seed_urls": [
"example"
],
"allowed_origins": [
"example"
],
"include_patterns": [
"example"
],
"exclude_patterns": [
"example"
],
"interval_hours": 1,
"visibility": "internal",
"generation_budget": 0,
"status": "active"
}Required fields: expected_revision.
curl -X PATCH "https://app.foxcue.com/api/v1/knowledge-hub/source-connections/example" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
DELETE /knowledge-hub/source-connections/{id}
Disconnect and fence refresh while retaining imported source/run history
Scope: knowledge:write.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
{
"expected_revision": 1
}Required fields: expected_revision.
curl -X DELETE "https://app.foxcue.com/api/v1/knowledge-hub/source-connections/example" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
POST /knowledge-hub/source-connections/{id}/sync
Queue a coalesced idempotent source sync
Scope: knowledge:write.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
{
"idempotency_key": "example",
"retry_failed": true
}Required fields: idempotency_key.
curl -X POST "https://app.foxcue.com/api/v1/knowledge-hub/source-connections/example/sync" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
202 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
GET /knowledge-hub/source-sync-runs/{id}
Read inventory completeness, remaining work and safe errors
Scope: knowledge:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
curl -X GET "https://app.foxcue.com/api/v1/knowledge-hub/source-sync-runs/example" \
-H "Authorization: Bearer <workspace API key>"Response
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
GET /knowledge-hub/source-connections/{id}/subscriptions
List connection-to-silo subscriptions
Scope: knowledge:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
curl -X GET "https://app.foxcue.com/api/v1/knowledge-hub/source-connections/example/subscriptions" \
-H "Authorization: Bearer <workspace API key>"Response
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
POST /knowledge-hub/source-connections/{id}/subscriptions
Subscribe/unsubscribe a same-brand silo; additionally requires strategy:write and silo revision
Scope: knowledge:write.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
{
"silo_id": "example",
"expected_revision": 1,
"active": true
}Required fields: silo_id, expected_revision.
curl -X POST "https://app.foxcue.com/api/v1/knowledge-hub/source-connections/example/subscriptions" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
GET /knowledge-hub/sources/{id}/revisions/{revision}/markdown
Export the saved immutable source revision as Markdown and .md filename
Scope: knowledge:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string | |
revision | path | yes | string |
Example request
curl -X GET "https://app.foxcue.com/api/v1/knowledge-hub/sources/example/revisions/example/markdown" \
-H "Authorization: Bearer <workspace API key>"Response
The body is a JSON object with these fields.
| Field | Type |
|---|---|
filename | string |
content_type | string |
content | JSON |
{
"filename": "example",
"content_type": "example",
"content": "example"
}| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
GET /knowledge-hub/sources/{id}/revisions/{revision}/export.md
Download a saved immutable source revision as .md
Scope: knowledge:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string | |
revision | path | yes | string |
Example request
curl -X GET "https://app.foxcue.com/api/v1/knowledge-hub/sources/example/revisions/example/export.md" \
-H "Authorization: Bearer <workspace API key>"Response
The body is a JSON object with these fields.
| Field | Type |
|---|---|
filename | string |
content_type | string |
content | JSON |
{
"filename": "example",
"content_type": "example",
"content": "example"
}| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |