Developer Documentation

Integrate with MuleHub programmatically — search, download, and publish assets via REST API, CLI, or MCP server.

Base URL

https://mulehub.vercel.app/api/v1

All endpoints are prefixed with /api/v1.

Response Format

All responses follow this shape:

// Success
{
  "success": true,
  "data": { ... },
  "meta": { "total": 42, "page": 1, "limit": 20, "totalPages": 3 }
}

// Error
{
  "success": false,
  "error": "Human-readable error message"
}

Authentication

Public endpoints (search, details, download) require no authentication. Management endpoints require an API key passed as a Bearer token:

Authorization: Bearer mh_your_api_key_here

Generate API keys from your Profile > API Keys tab.

Public Endpoints

No authentication required.

GET /api/v1/assets

Search and browse all published assets.

Query Parameters

ParameterTypeDefaultDescription
qstringSearch query (matches name and description)
categorystringFilter by category (e.g., "API Specs")
tagsstringComma-separated tag filter (e.g., "rest,oauth")
sortstringnewestSort order: newest, oldest, downloads, rating
pagenumber1Page number
limitnumber20Results per page (max 50)

Example

curl "https://mulehub.vercel.app/api/v1/assets?q=salesforce&category=Connectors&sort=downloads&limit=5"

Response

{
  "success": true,
  "data": [
    {
      "name": "Salesforce CRM Connector",
      "slug": "salesforce-crm-connector",
      "category": "Connectors",
      "description": "Full-featured Salesforce connector with CRUD and Bulk API",
      "author": "Test User",
      "tags": ["salesforce", "crm", "connector"],
      "averageRating": 4.5,
      "reviewCount": 8,
      "downloadCount": 120,
      "latestVersion": "3.0.0",
      "createdAt": "2026-01-15T10:00:00.000Z"
    }
  ],
  "meta": { "total": 12, "page": 1, "limit": 5, "totalPages": 3 }
}

GET /api/v1/assets/:slug

Get full details of a specific asset including all versions, readme, and AI summary.

Example

curl "https://mulehub.vercel.app/api/v1/assets/salesforce-crm-connector"

Response Fields

FieldTypeDescription
namestringAsset display name
slugstringURL-friendly identifier
categorystringAsset category
descriptionstringShort description
readmestring | nullFull markdown readme
aiSummaryobject | nullAI-generated summary with steps and diagrams
authorstringPublisher's display name
tagsstring[]Asset tags
versionsarrayAll approved versions with files, size, changelog
averageRatingnumberAverage star rating (0-5)
downloadCountnumberTotal downloads across all versions
sourceRepoUrlstring | nullSource repository or guide URL

GET /api/v1/assets/:slug/download

Download an asset's files. Returns a single file directly or a zip archive if multiple files.

Query Parameters

ParameterTypeDescription
versionstringSpecific version ID (default: latest approved version)

Example

# Download latest version
curl -O -J "https://mulehub.vercel.app/api/v1/assets/salesforce-crm-connector/download"

# Download specific version
curl -O -J "https://mulehub.vercel.app/api/v1/assets/salesforce-crm-connector/download?version=abc123"

Authenticated Endpoints

Require Authorization: Bearer mh_... header.

POST /api/v1/assets

Create and publish a new asset. Accepts JSON (with base64 files) or multipart form data.

JSON Body

FieldRequiredTypeDescription
nameYesstringAsset display name
categoryYesstringOne of the valid categories
descriptionYesstringShort description
versionLabelYesstringVersion label (e.g., "1.0.0")
filesYesarray[{ filename, content (base64) }]
tagsNostring[]Tags for discoverability
readmeNostringMarkdown readme content
changelogNostringVersion changelog
sourceRepoUrlNostringSource repository URL

Example (JSON)

curl -X POST https://mulehub.vercel.app/api/v1/assets \
  -H "Authorization: Bearer mh_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Order API Spec",
    "category": "API Specs",
    "description": "OpenAPI 3.0 spec for order management",
    "versionLabel": "1.0.0",
    "tags": ["openapi", "orders", "rest"],
    "files": [{
      "filename": "order-api.json",
      "content": "eyJvcGVuYXBpIjoiMy4wLjAi...base64..."
    }]
  }'

Example (multipart)

curl -X POST https://mulehub.vercel.app/api/v1/assets \
  -H "Authorization: Bearer mh_your_key_here" \
  -F "name=Order API Spec" \
  -F "category=API Specs" \
  -F "description=OpenAPI 3.0 spec for order management" \
  -F "versionLabel=1.0.0" \
  -F "tags=openapi,orders,rest" \
  -F "files=@./order-api.json"

Response

{
  "success": true,
  "data": {
    "slug": "order-api-spec",
    "status": "APPROVED",
    "suggestedTags": ["json", "openapi"],
    "scanResult": null
  }
}

If credentials are detected in uploaded files, status will be "REJECTED" and scanResult will contain the findings.

POST /api/v1/assets/:slug/versions

Add a new version to an asset you own. Same body format as create (versionLabel + files required).

Example

curl -X POST https://mulehub.vercel.app/api/v1/assets/order-api-spec/versions \
  -H "Authorization: Bearer mh_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "versionLabel": "2.0.0",
    "changelog": "Added fulfillment endpoints",
    "files": [{ "filename": "order-api-v2.json", "content": "...base64..." }]
  }'

GET /api/v1/me/assets

List your own assets, including those with rejected scans or pending status.

Example

curl -H "Authorization: Bearer mh_your_key_here" \
  "https://mulehub.vercel.app/api/v1/me/assets?page=1&limit=10"

Error Codes

StatusMeaning
400Bad request — missing required fields or invalid input
401Unauthorized — invalid or missing API key
403Forbidden — you don't own this asset
404Asset or version not found
409Conflict — duplicate URL already shared
500Server error

Categories

Valid category values for the category parameter:

API Specs
MuleSoft Projects
Connectors
DataWeave Libraries
Policies
CI/CD Pipelines
Test Suites
Environment Configs
Agent Tooling
Skills & Rules
AI Agents
Guides & Tutorials
Other