Public interface
Context Factory API
Use ordinary HTTP to find public context artifacts or inspect an ordered collection. Responses contain metadata and source links, never file bodies.
Base URL
https://api.contextfactory.dev/v1Send public GET requests. No account, no API key, and no Authorization header.
Your first request
curl "https://api.contextfactory.dev/v1/artifacts?q=agent+guidance&type=skill&limit=10"{
"artifacts": [{
"id": "123456789ABC",
"name": "Context Factory",
"description": "Search the public Context Factory catalog.",
"type": "skill",
"canonicalUrl": "https://contextfactory.dev/a/123456789ABC",
"source": {
"kind": "github_repository",
"owner": "Context-Factory",
"repository": "context-factory-skill",
"path": "SKILL.md",
"ref": "main",
"containerUrl": "https://github.com/Context-Factory/context-factory-skill",
"directoryUrl": "https://github.com/Context-Factory/context-factory-skill",
"fileUrl": "https://github.com/Context-Factory/context-factory-skill/blob/main/SKILL.md",
"rawUrl": "https://raw.githubusercontent.com/Context-Factory/context-factory-skill/main/SKILL.md"
},
"attributes": { "license": "MIT" }
}],
"page": { "cursor": null, "hasMore": false }
}Endpoints
GET /artifacts: search or browse artifacts.GET /artifacts/:artifactId: resolve one artifact.GET /collections/:collectionId: resolve a collection and its ordered artifacts.
Search and filter
Filters are q, type, owner, and exact repository in owner/repository form. Search results are relevance ordered; browsing without q returns newest first. Treat cursors as opaque and reuse the same filters to page.
curl "https://api.contextfactory.dev/v1/artifacts?cursor=CURSOR&limit=10"An empty result is successful and returns {"artifacts":[]}.
Resolve one artifact
curl "https://api.contextfactory.dev/v1/artifacts/123456789ABC"{
"id": "123456789ABC",
"name": "Context Factory",
"description": "Search the public Context Factory catalog.",
"type": "skill",
"canonicalUrl": "https://contextfactory.dev/a/123456789ABC",
"source": {
"kind": "github_repository",
"owner": "Context-Factory",
"repository": "context-factory-skill",
"path": "SKILL.md",
"ref": "main",
"containerUrl": "https://github.com/Context-Factory/context-factory-skill",
"directoryUrl": "https://github.com/Context-Factory/context-factory-skill",
"fileUrl": "https://github.com/Context-Factory/context-factory-skill/blob/main/SKILL.md",
"rawUrl": "https://raw.githubusercontent.com/Context-Factory/context-factory-skill/main/SKILL.md"
},
"attributes": { "license": "MIT" }
}Resolve a collection
curl "https://api.contextfactory.dev/v1/collections/ABCDEFGHJKLM?type=skill&limit=20"{
"id": "ABCDEFGHJKLM",
"name": "Web Skills",
"canonicalUrl": "https://contextfactory.dev/u/123456789ABC/c/ABCDEFGHJKLM",
"owner": {
"id": "123456789ABC",
"name": "Example owner",
"githubHandle": "example",
"canonicalUrl": "https://contextfactory.dev/u/123456789ABC"
},
"artifactCount": 8,
"artifacts": [ ... ],
"page": { "cursor": null, "hasMore": false }
}Collection artifacts keep the owner-defined order. The same filters narrow the returned page without changing that order.
Errors
{
"error": {
"code": "invalid_request",
"message": "Request parameters are invalid.",
"details": { "issues": [ ... ] }
}
}Invalid filters, IDs, limits, or cursors return 400. Missing artifacts and collections return 404. Temporary server failures return 500.
OpenAPI and Postman
The OpenAPI 3.1 document is the source of truth. Import the Postman collection and set its baseUrl variable to the base URL above.