Dhara
Registry

Registry API

REST API for the Dhara extension registry — search, publish, and manage packages.

Registry API

The Dhara Registry exposes a REST API for programmatic access to package management.

Base URL

https://registry.dhara.zosma.ai/api/v1

Authentication

Include your auth token in the Authorization header:

Authorization: Bearer <token>

Generate tokens from your account settings at registry.dhara.zosma.ai.

Endpoints

Search Packages

GET /packages?query=<search-term>&category=<category>&limit=<number>

Query Parameters:

ParameterTypeDescription
querystringSearch term (name, description, tool name)
categorystringFilter by category
limitnumberMax results (default: 20, max: 100)
offsetnumberPagination offset

Response:

{
  "packages": [
    {
      "name": "web-tools",
      "version": "2.1.0",
      "description": "Web scraping and search tools for AI agents",
      "author": "zosmaai",
      "verified": true,
      "downloads": 15234,
      "category": "web",
      "tools": ["fetch_url", "web_search", "code_search"]
    }
  ],
  "total": 42,
  "limit": 20,
  "offset": 0
}

Get Package Details

GET /packages/<name>

Response:

{
  "name": "web-tools",
  "version": "2.1.0",
  "description": "Web scraping and search tools for AI agents",
  "author": "zosmaai",
  "verified": true,
  "license": "MIT",
  "repository": "https://github.com/zosmaai/dhara-web-tools",
  "downloads": 15234,
  "capabilities": ["network:fetch", "network:dns"],
  "tools": [
    {
      "name": "fetch_url",
      "description": "Fetch URL and extract markdown content",
      "inputSchema": {
        "type": "object",
        "properties": {
          "url": { "type": "string" }
        },
        "required": ["url"]
      }
    }
  ],
  "versions": ["2.1.0", "2.0.0", "1.9.0"],
  "createdAt": "2025-06-01T00:00:00Z",
  "updatedAt": "2026-05-01T00:00:00Z"
}

Get Specific Version

GET /packages/<name>/<version>

Returns the manifest for a specific version.

List Versions

GET /packages/<name>/versions

Response:

{
  "versions": [
    {
      "version": "2.1.0",
      "publishedAt": "2026-05-01T00:00:00Z",
      "deprecated": false
    },
    {
      "version": "2.0.0",
      "publishedAt": "2026-04-01T00:00:00Z",
      "deprecated": false
    }
  ]
}

Publish Package

PUT /packages/<name>
Content-Type: application/json
Authorization: Bearer <token>

Request Body: Full manifest.json content

Response:

{
  "success": true,
  "name": "my-extension",
  "version": "1.0.0",
  "url": "https://registry.dhara.zosma.ai/packages/my-extension"
}

Delete Version

DELETE /packages/<name>/<version>
Authorization: Bearer <token>

Response:

{
  "success": true,
  "message": "Version 1.0.0 of my-extension was unpublished"
}

Deprecate Version

PATCH /packages/<name>/<version>
Content-Type: application/json
Authorization: Bearer <token>

Request Body:

{
  "deprecated": true,
  "message": "Use v2.0.0 instead"
}

Download Package

GET /packages/<name>/<version>/download

Returns a .tgz tarball of the package.

Rate Limits

EndpointLimit
Search60 requests/minute
Package details120 requests/minute
Publish30 requests/minute
Download300 requests/minute

Rate limit headers are included in every response:

X-RateLimit-Limit: 60
X-RateLimit-Remaining: 45
X-RateLimit-Reset: 1715789400

Error Responses

Status CodeMeaning
400Invalid request (bad JSON, missing fields)
401Unauthorized (missing or invalid token)
403Forbidden (insufficient permissions)
404Package not found
409Conflict (version already exists)
429Rate limit exceeded
500Internal server error

Error Format:

{
  "error": {
    "code": "PACKAGE_NOT_FOUND",
    "message": "Package 'my-extension' does not exist"
  }
}

SDK Usage

TypeScript

import { RegistryClient } from "@zosmaai/dhara-registry";

const client = new RegistryClient({ token: process.env.DHARA_REGISTRY_TOKEN });

// Search packages
const results = await client.search("web scraping");

// Get package details
const pkg = await client.getPackage("web-tools");

// Publish
await client.publish("./manifest.json");

Python

from dhara_registry import RegistryClient

client = RegistryClient(token="your-token")

# Search
results = client.search("web scraping")

# Get package details
pkg = client.get_package("web-tools")