Catalog API

Package discovery, installation, publishing, and registry management.

Endpoints

MethodPathDescription
GET/catalog/searchSearch packages
GET/catalog/packages/{name}Package details
GET/catalog/packages/{name}/versionsList versions
POST/catalog/installInstall a package
POST/catalog/uninstallUninstall a package
GET/catalog/installedList installed packages
POST/catalog/publishPublish a package
POST/catalog/yankYank a version
GET/catalog/registriesList registries
POST/catalog/registriesAdd a registry
PUT/catalog/registries/{name}Update a registry
DELETE/catalog/registries/{name}Remove a registry
POST/catalog/registries/{name}/testTest connectivity
GET/catalog/collectionsList collections
POST/catalog/collectionsCreate a collection
GET/catalog/collections/{name}Get collection details
PUT/catalog/collections/{name}Update a collection
DELETE/catalog/collections/{name}Delete a collection
POST/catalog/collections/{name}/installInstall a collection

GET /catalog/search

curl "http://localhost:4200/catalog/search?q=claims&type=competency&region=us"

Query Parameters

ParamTypeDescription
qstringSearch query
typestringPackage type filter
domainstringTaxonomy domain filter
regionstringRegion filter

Response (200)

{
  "results": [
    {
      "name": "claims-intake",
      "type": "competency",
      "version": "1.2.0",
      "description": "FNOL processing for auto/property"
    }
  ]
}

GET /catalog/packages/{name}

curl http://localhost:4200/catalog/packages/claims-intake

Response (200)

{
  "name": "claims-intake",
  "type": "competency",
  "latest_version": "1.2.0",
  "description": "First Notice of Loss processing",
  "license": "MIT",
  "author": {"name": "Insurance Corp", "email": "platform@company.com"},
  "dependencies": {"document-ocr": "^1.0", "postgresql-connector": "^2.0"},
  "keywords": ["insurance", "claims", "fnol"],
  "regions": ["us", "uk"]
}

POST /catalog/install

curl -X POST http://localhost:4200/catalog/install \
  -H "Content-Type: application/json" \
  -d '{"package": "claims-intake", "version": "1.2.0"}'

Request Body

FieldTypeRequiredDescription
packagestringYesPackage name
versionstringNoSpecific version (latest if omitted)

Response (200)

{
  "installed": "claims-intake@1.2.0",
  "dependencies_installed": ["document-ocr@1.4.0", "postgresql-connector@2.1.0"]
}

POST /catalog/uninstall

curl -X POST http://localhost:4200/catalog/uninstall \
  -H "Content-Type: application/json" \
  -d '{"package": "claims-intake"}'

Response (200)

{"uninstalled": "claims-intake@1.2.0"}

GET /catalog/installed

curl http://localhost:4200/catalog/installed

Response (200)

{
  "packages": [
    {"name": "claims-intake", "type": "competency", "version": "1.2.0"},
    {"name": "document-ocr", "type": "tool", "version": "1.4.0"},
    {"name": "postgresql-connector", "type": "tool", "version": "2.1.0"}
  ]
}

POST /catalog/publish

Publish a package to a registry.

curl -X POST http://localhost:4200/catalog/publish \
  -H "Content-Type: application/json" \
  -d '{"path": "/tmp/claims-intake-1.2.0.hpkg", "registry": "internal"}'

Response (200)

{"published": "claims-intake@1.2.0", "registry": "internal"}

POST /catalog/yank

Deprecate a published version (won't be installed by new users).

curl -X POST http://localhost:4200/catalog/yank \
  -H "Content-Type: application/json" \
  -d '{"package": "claims-intake", "version": "1.0.0"}'

Response (200)

{"yanked": "claims-intake@1.0.0"}

GET /catalog/registries

curl http://localhost:4200/catalog/registries

Response (200)

{
  "registries": [
    {"name": "default", "url": "https://catalog.hoziron.com", "priority": 100, "enabled": true},
    {"name": "internal", "url": "https://packages.internal.company.com", "priority": 50, "enabled": true}
  ]
}

POST /catalog/registries

curl -X POST http://localhost:4200/catalog/registries \
  -H "Content-Type: application/json" \
  -d '{
    "name": "internal",
    "url": "https://packages.internal.company.com",
    "priority": 50,
    "auth_token_env": "INTERNAL_REGISTRY_TOKEN"
  }'

Response (201)

{"name": "internal", "added": true}

POST /catalog/registries/{name}/test

curl -X POST http://localhost:4200/catalog/registries/internal/test

Response (200)

{"name": "internal", "reachable": true, "latency_ms": 45}