Documentation Index
Fetch the complete documentation index at: https://noorle.com/docs/llms.txt
Use this file to discover all available pages before exploring further.
Upload a new plugin or new version of existing plugin.
Request
Method: POST
Endpoint: /v1/capabilities/upload
Content-Type: multipart/form-data
curl -X POST "https://api.noorle.com/v1/capabilities/upload" \
-H "X-API-Key: ak-a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4s9t0u1v2w3x4y5z6" \
-F "plugin=@my-plugin.npack"
| Parameter | Type | Required | Description |
|---|
plugin | file | Yes | The .npack plugin archive file |
Response
{
"capability_id": "550e8400-e29b-41d4-a716-446655440000",
"capability_name": "my-plugin",
"version": 1,
"files_processed": [
"plugin.wasm",
"noorle.yaml",
"world.wit"
],
"schema_warnings": []
}
Status Codes
| Code | Meaning |
|---|
| 200 | Success |
| 400 | Invalid file format or missing noorle.yaml |
| 401 | Unauthorized |
| 413 | File too large (>10MB) |
Response Fields
- capability_id: Unique ID for this plugin
- capability_name: Name from noorle.yaml
- version: Version number (auto-incremented for updates)
- files_processed: Files extracted from archive
- schema_warnings: Validation warnings (non-fatal)
Examples
First Upload
# Build plugin locally
noorle plugin build
# Upload
curl -X POST "https://api.noorle.com/v1/capabilities/upload" \
-H "X-API-Key: ak-a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4s9t0u1v2w3x4y5z6" \
-F "plugin=@my-plugin.npack"
# Response:
# {
# "capability_id": "550e8400-...",
# "capability_name": "my-plugin",
# "version": 1
# }
Update Plugin
# Modify code and rebuild
noorle plugin build
# Upload again (same file name)
curl -X POST "https://api.noorle.com/v1/capabilities/upload" \
-H "X-API-Key: ak-a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4s9t0u1v2w3x4y5z6" \
-F "plugin=@my-plugin.npack"
# Response:
# {
# "capability_id": "550e8400-...",
# "capability_name": "my-plugin",
# "version": 2
# }
Plugin must be .npack (tar.gz archive) containing:
plugin.wasm (required)
noorle.yaml (optional, but recommended)
world.wit (optional)
.env (optional)
Error Examples
Invalid Archive
{
"error": {
"code": "invalid_archive",
"message": "Invalid archive format. Must be gzip-compressed tar"
}
}
Missing WASM File
{
"error": {
"code": "missing_wasm",
"message": "Archive must contain plugin.wasm"
}
}
File Too Large
{
"error": {
"code": "file_too_large",
"message": "Plugin size exceeds 10MB limit"
}
}