Templates

Bank templates and template sources.

GET
/ext/hindclaw/me/template-sources

List the caller's personal template sources.

Scoped to the caller's user_id — only returns sources with scope='personal' owned by the authenticated principal.

Args: _auth: Authenticated principal (users and SAs allowed).

Returns: List of SourceResponse for the caller's personal sources.

Authorization

HTTPBearer
AuthorizationBearer <token>

In: header

Response Body

application/json

curl -X GET "https://example.com/ext/hindclaw/me/template-sources"
[  {    "name": "string",    "url": "string",    "scope": "server",    "owner": "string",    "has_auth": true,    "description": "string",    "created_at": "string",    "updated_at": "string"  }]
POST
/ext/hindclaw/me/template-sources

Register a personal template source for the caller.

Source is created with scope='personal' and owner set to the caller's user_id. Name is derived from the URL unless an alias is provided.

Args: request: CreateSourceRequest with url and optional alias/auth_token. _auth: Authenticated principal (users and SAs allowed).

Returns: SourceResponse for the newly created personal source.

Raises: HTTPException: 422 if the source name cannot be derived from the URL. HTTPException: 409 if a personal source with that name already exists.

Authorization

HTTPBearer
AuthorizationBearer <token>

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Request to register a marketplace source.

Response Body

application/json

application/json

curl -X POST "https://example.com/ext/hindclaw/me/template-sources" \  -H "Content-Type: application/json" \  -d '{    "url": "string"  }'
{  "name": "string",  "url": "string",  "scope": "server",  "owner": "string",  "has_auth": true,  "description": "string",  "created_at": "string",  "updated_at": "string"}
DELETE
/ext/hindclaw/me/template-sources/{name}

Remove a personal template source owned by the caller.

Only deletes sources with scope='personal' that belong to the caller — cannot affect other users' sources or server-scope sources.

Args: name: Template source name to delete. _auth: Authenticated principal (users and SAs allowed).

Raises: HTTPException: 404 if the source is not found in the caller's personal sources.

Authorization

HTTPBearer
AuthorizationBearer <token>

In: header

Path Parameters

name*Name

Response Body

application/json

curl -X DELETE "https://example.com/ext/hindclaw/me/template-sources/string"
Empty
GET
/ext/hindclaw/me/templates

Authorization

HTTPBearer
AuthorizationBearer <token>

In: header

Query Parameters

category?string|null
tag?string|null

Response Body

application/json

application/json

curl -X GET "https://example.com/ext/hindclaw/me/templates"
{  "templates": [    {      "id": "string",      "name": "string",      "description": "string",      "category": "string",      "integrations": [        "string"      ],      "tags": [        "string"      ],      "scope": "server",      "owner": "string",      "source_name": "string",      "source_scope": "server",      "source_owner": "string",      "source_revision": "string",      "installed_at": "2019-08-24T14:15:22Z",      "updated_at": "2019-08-24T14:15:22Z",      "manifest": {}    }  ]}
POST
/ext/hindclaw/me/templates

Authorization

HTTPBearer
AuthorizationBearer <token>

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Request to create a personal template by inlining an upstream manifest.

Response Body

application/json

application/json

curl -X POST "https://example.com/ext/hindclaw/me/templates" \  -H "Content-Type: application/json" \  -d '{    "id": "string",    "name": "string",    "manifest": {      "version": "string"    }  }'
{  "id": "string",  "name": "string",  "description": "string",  "category": "string",  "integrations": [    "string"  ],  "tags": [    "string"  ],  "scope": "server",  "owner": "string",  "source_name": "string",  "source_scope": "server",  "source_owner": "string",  "source_revision": "string",  "installed_at": "2019-08-24T14:15:22Z",  "updated_at": "2019-08-24T14:15:22Z",  "manifest": {}}
GET
/ext/hindclaw/me/templates/{template_id}

Authorization

HTTPBearer
AuthorizationBearer <token>

In: header

Path Parameters

template_id*Template Id

Response Body

application/json

application/json

curl -X GET "https://example.com/ext/hindclaw/me/templates/string"
{  "id": "string",  "name": "string",  "description": "string",  "category": "string",  "integrations": [    "string"  ],  "tags": [    "string"  ],  "scope": "server",  "owner": "string",  "source_name": "string",  "source_scope": "server",  "source_owner": "string",  "source_revision": "string",  "installed_at": "2019-08-24T14:15:22Z",  "updated_at": "2019-08-24T14:15:22Z",  "manifest": {}}
PATCH
/ext/hindclaw/me/templates/{template_id}

Authorization

HTTPBearer
AuthorizationBearer <token>

In: header

Path Parameters

template_id*Template Id

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Partial update for hand-edited templates. Every field is optional.

Response Body

application/json

application/json

curl -X PATCH "https://example.com/ext/hindclaw/me/templates/string" \  -H "Content-Type: application/json" \  -d '{}'
{  "id": "string",  "name": "string",  "description": "string",  "category": "string",  "integrations": [    "string"  ],  "tags": [    "string"  ],  "scope": "server",  "owner": "string",  "source_name": "string",  "source_scope": "server",  "source_owner": "string",  "source_revision": "string",  "installed_at": "2019-08-24T14:15:22Z",  "updated_at": "2019-08-24T14:15:22Z",  "manifest": {}}
DELETE
/ext/hindclaw/me/templates/{template_id}

Authorization

HTTPBearer
AuthorizationBearer <token>

In: header

Path Parameters

template_id*Template Id

Response Body

application/json

curl -X DELETE "https://example.com/ext/hindclaw/me/templates/string"
Empty
POST
/ext/hindclaw/me/templates/{template_id}/install

Authorization

HTTPBearer
AuthorizationBearer <token>

In: header

Path Parameters

template_id*Template Id

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Request to install a template from a marketplace source.

The {id} in the URL path is the template id WITHIN the source. The installed-template id is alias_id if provided, else the source template id. This lets a user install the same source template under a different installed name (Section 4.3 identity invariant: at most one row per (id, scope, owner)).

Response Body

application/json

application/json

curl -X POST "https://example.com/ext/hindclaw/me/templates/string/install" \  -H "Content-Type: application/json" \  -d '{    "source_name": "string"  }'
{  "id": "string",  "name": "string",  "description": "string",  "category": "string",  "integrations": [    "string"  ],  "tags": [    "string"  ],  "scope": "server",  "owner": "string",  "source_name": "string",  "source_scope": "server",  "source_owner": "string",  "source_revision": "string",  "installed_at": "2019-08-24T14:15:22Z",  "updated_at": "2019-08-24T14:15:22Z",  "manifest": {}}
POST
/ext/hindclaw/me/templates/{template_id}/update

Authorization

HTTPBearer
AuthorizationBearer <token>

In: header

Path Parameters

template_id*Template Id

Query Parameters

force?Force
Defaultfalse

Response Body

application/json

application/json

curl -X POST "https://example.com/ext/hindclaw/me/templates/string/update"
{  "updated": true,  "previous_revision": "string",  "new_revision": "string",  "template": {    "id": "string",    "name": "string",    "description": "string",    "category": "string",    "integrations": [      "string"    ],    "tags": [      "string"    ],    "scope": "server",    "owner": "string",    "source_name": "string",    "source_scope": "server",    "source_owner": "string",    "source_revision": "string",    "installed_at": "2019-08-24T14:15:22Z",    "updated_at": "2019-08-24T14:15:22Z",    "manifest": {}  }}
GET
/ext/hindclaw/me/templates/{template_id}/check-update

Authorization

HTTPBearer
AuthorizationBearer <token>

In: header

Path Parameters

template_id*Template Id

Response Body

application/json

application/json

curl -X GET "https://example.com/ext/hindclaw/me/templates/string/check-update"
{  "has_update": true,  "current_revision": "string",  "latest_revision": "string",  "source_name": "string",  "source_scope": "server"}
GET
/ext/hindclaw/admin/templates

Authorization

HTTPBearer
AuthorizationBearer <token>

In: header

Query Parameters

category?string|null
tag?string|null

Response Body

application/json

application/json

curl -X GET "https://example.com/ext/hindclaw/admin/templates"
{  "templates": [    {      "id": "string",      "name": "string",      "description": "string",      "category": "string",      "integrations": [        "string"      ],      "tags": [        "string"      ],      "scope": "server",      "owner": "string",      "source_name": "string",      "source_scope": "server",      "source_owner": "string",      "source_revision": "string",      "installed_at": "2019-08-24T14:15:22Z",      "updated_at": "2019-08-24T14:15:22Z",      "manifest": {}    }  ]}
POST
/ext/hindclaw/admin/templates

Authorization

HTTPBearer
AuthorizationBearer <token>

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Request to create a personal template by inlining an upstream manifest.

Response Body

application/json

application/json

curl -X POST "https://example.com/ext/hindclaw/admin/templates" \  -H "Content-Type: application/json" \  -d '{    "id": "string",    "name": "string",    "manifest": {      "version": "string"    }  }'
{  "id": "string",  "name": "string",  "description": "string",  "category": "string",  "integrations": [    "string"  ],  "tags": [    "string"  ],  "scope": "server",  "owner": "string",  "source_name": "string",  "source_scope": "server",  "source_owner": "string",  "source_revision": "string",  "installed_at": "2019-08-24T14:15:22Z",  "updated_at": "2019-08-24T14:15:22Z",  "manifest": {}}
GET
/ext/hindclaw/admin/templates/{template_id}

Authorization

HTTPBearer
AuthorizationBearer <token>

In: header

Path Parameters

template_id*Template Id

Response Body

application/json

application/json

curl -X GET "https://example.com/ext/hindclaw/admin/templates/string"
{  "id": "string",  "name": "string",  "description": "string",  "category": "string",  "integrations": [    "string"  ],  "tags": [    "string"  ],  "scope": "server",  "owner": "string",  "source_name": "string",  "source_scope": "server",  "source_owner": "string",  "source_revision": "string",  "installed_at": "2019-08-24T14:15:22Z",  "updated_at": "2019-08-24T14:15:22Z",  "manifest": {}}
PATCH
/ext/hindclaw/admin/templates/{template_id}

Authorization

HTTPBearer
AuthorizationBearer <token>

In: header

Path Parameters

template_id*Template Id

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Partial update for hand-edited templates. Every field is optional.

Response Body

application/json

application/json

curl -X PATCH "https://example.com/ext/hindclaw/admin/templates/string" \  -H "Content-Type: application/json" \  -d '{}'
{  "id": "string",  "name": "string",  "description": "string",  "category": "string",  "integrations": [    "string"  ],  "tags": [    "string"  ],  "scope": "server",  "owner": "string",  "source_name": "string",  "source_scope": "server",  "source_owner": "string",  "source_revision": "string",  "installed_at": "2019-08-24T14:15:22Z",  "updated_at": "2019-08-24T14:15:22Z",  "manifest": {}}
DELETE
/ext/hindclaw/admin/templates/{template_id}

Authorization

HTTPBearer
AuthorizationBearer <token>

In: header

Path Parameters

template_id*Template Id

Response Body

application/json

curl -X DELETE "https://example.com/ext/hindclaw/admin/templates/string"
Empty
POST
/ext/hindclaw/admin/templates/{template_id}/install

Authorization

HTTPBearer
AuthorizationBearer <token>

In: header

Path Parameters

template_id*Template Id

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Request to install a template from a marketplace source.

The {id} in the URL path is the template id WITHIN the source. The installed-template id is alias_id if provided, else the source template id. This lets a user install the same source template under a different installed name (Section 4.3 identity invariant: at most one row per (id, scope, owner)).

Response Body

application/json

application/json

curl -X POST "https://example.com/ext/hindclaw/admin/templates/string/install" \  -H "Content-Type: application/json" \  -d '{    "source_name": "string"  }'
{  "id": "string",  "name": "string",  "description": "string",  "category": "string",  "integrations": [    "string"  ],  "tags": [    "string"  ],  "scope": "server",  "owner": "string",  "source_name": "string",  "source_scope": "server",  "source_owner": "string",  "source_revision": "string",  "installed_at": "2019-08-24T14:15:22Z",  "updated_at": "2019-08-24T14:15:22Z",  "manifest": {}}
POST
/ext/hindclaw/admin/templates/{template_id}/update

Authorization

HTTPBearer
AuthorizationBearer <token>

In: header

Path Parameters

template_id*Template Id

Query Parameters

force?Force
Defaultfalse

Response Body

application/json

application/json

curl -X POST "https://example.com/ext/hindclaw/admin/templates/string/update"
{  "updated": true,  "previous_revision": "string",  "new_revision": "string",  "template": {    "id": "string",    "name": "string",    "description": "string",    "category": "string",    "integrations": [      "string"    ],    "tags": [      "string"    ],    "scope": "server",    "owner": "string",    "source_name": "string",    "source_scope": "server",    "source_owner": "string",    "source_revision": "string",    "installed_at": "2019-08-24T14:15:22Z",    "updated_at": "2019-08-24T14:15:22Z",    "manifest": {}  }}
GET
/ext/hindclaw/admin/templates/{template_id}/check-update

Authorization

HTTPBearer
AuthorizationBearer <token>

In: header

Path Parameters

template_id*Template Id

Response Body

application/json

application/json

curl -X GET "https://example.com/ext/hindclaw/admin/templates/string/check-update"
{  "has_update": true,  "current_revision": "string",  "latest_revision": "string",  "source_name": "string",  "source_scope": "server"}