REST API
Skill Registry
Derived from the source of github.com/awee-ai/api/cmd/registry.
Awee Skill Registry API · v1.0.0 · 8 endpoints
Registry
Handles GET /v1/registry
Without an app parameter the route serves the org's whole catalog, which is the browsing view. With ?app=<slug> it serves only what that app holds an install row for, which is what an automation picker wants, because an app should be offered the workflows it was given and not everything the registry happens to hold. owner, owner_kind, label and collection narrow either view.
rest.Handler.GetSkills
Query parameters
ownerstringowner_kindstringcollectionstringlabelstringappstringResponses
200 OKOK
itemsSkill[]required
itemsSkill[]requiredcollectionstringconfigstringrequiredcreated_atstring (date-time)requireddeleted_atstring (date-time)idstringrequiredlabelsstring[]namestringrequiredorg_idstringrequiredownerstringowner_kindOwnerKindSeparates workflows we ship from workflows somebody else wrote.
requiresRequiresIs a workflow's declaration of what it touches.
requiresRequiresconnectionsConnectionRequirement[]
connectionsConnectionRequirement[]capabilitiesstring[]optionalbooleanproviderstringrequiredhostsstring[]Are the outbound hostnames the workflow contacts directly, without a scheme or path.
tablesTableRequirement[]
tablesTableRequirement[]fieldsFieldRequirement[]
fieldsFieldRequirement[]namestringrequiredoptionalbooleantypeFieldTypeEnumerates the supported field data types.
optionalbooleanMarks a table the workflow uses when present and copes without.
tablestringrequiredwritesbooleanslugstringrequiredupdated_atstring (date-time)requireduser_idstringrequiredtotalinteger (int64)required500 Internal Server Errorthe request could not be completed
errorstringrequiredDefaultthe request could not be completed
errorstringrequiredNo request body.
{
"items": [
{
"collection": "string",
"config": "string",
"created_at": "2024-01-15T09:30:00Z",
"deleted_at": "2024-01-15T09:30:00Z",
"id": "string",
"labels": [
"string"
],
"name": "string",
"org_id": "string",
"owner": "string",
"owner_kind": "string",
"requires": {
"connections": [
{
"capabilities": [
"string"
],
"optional": true,
"provider": "string"
}
],
"hosts": [
"string"
],
"tables": [
{
"fields": [
{
"name": "string",
"optional": true,
"type": "string"
}
],
"optional": true,
"table": "string",
"writes": true
}
]
},
"slug": "string",
"updated_at": "2024-01-15T09:30:00Z",
"user_id": "string"
}
],
"total": 0
}Handles POST /v1/registry
The body is an inline pipeline.Config JSON carrying the registry metadata keys alongside the authored config, which is why it is decoded twice into two disjoint views of the same object rather than nested. The registry stores the skill keyed by record id while keeping the human slug (cfg.ID) on the row for dedupe and display. Registering never installs. A skill published here is available to no app until an install row says otherwise, and a publisher cannot install itself.
rest.Handler.RegisterSkill
Takes no parameters and no request body.
Responses
201 CreatedCreated
collectionstringconfigstringrequiredcreated_atstring (date-time)requireddeleted_atstring (date-time)idstringrequiredlabelsstring[]namestringrequiredorg_idstringrequiredownerstringowner_kindOwnerKindSeparates workflows we ship from workflows somebody else wrote.
requiresRequiresIs a workflow's declaration of what it touches.
requiresRequiresconnectionsConnectionRequirement[]
connectionsConnectionRequirement[]capabilitiesstring[]optionalbooleanproviderstringrequiredhostsstring[]Are the outbound hostnames the workflow contacts directly, without a scheme or path.
tablesTableRequirement[]
tablesTableRequirement[]fieldsFieldRequirement[]
fieldsFieldRequirement[]namestringrequiredoptionalbooleantypeFieldTypeEnumerates the supported field data types.
optionalbooleanMarks a table the workflow uses when present and copes without.
tablestringrequiredwritesbooleanslugstringrequiredupdated_atstring (date-time)requireduser_idstringrequired400 Bad Requestthe request could not be completed
errorstringrequired403 Forbiddenthe request could not be completed
errorstringrequired500 Internal Server Errorthe request could not be completed
errorstringrequiredDefaultthe request could not be completed
errorstringrequiredNo request body.
{
"collection": "string",
"config": "string",
"created_at": "2024-01-15T09:30:00Z",
"deleted_at": "2024-01-15T09:30:00Z",
"id": "string",
"labels": [
"string"
],
"name": "string",
"org_id": "string",
"owner": "string",
"owner_kind": "string",
"requires": {
"connections": [
{
"capabilities": [
"string"
],
"optional": true,
"provider": "string"
}
],
"hosts": [
"string"
],
"tables": [
{
"fields": [
{
"name": "string",
"optional": true,
"type": "string"
}
],
"optional": true,
"table": "string",
"writes": true
}
]
},
"slug": "string",
"updated_at": "2024-01-15T09:30:00Z",
"user_id": "string"
}Handles GET /v1/registry/{id}
rest.Handler.GetSkill
Path parameters
idstringrequiredResponses
200 OKOK
collectionstringconfigstringrequiredcreated_atstring (date-time)requireddeleted_atstring (date-time)idstringrequiredlabelsstring[]namestringrequiredorg_idstringrequiredownerstringowner_kindOwnerKindSeparates workflows we ship from workflows somebody else wrote.
requiresRequiresIs a workflow's declaration of what it touches.
requiresRequiresconnectionsConnectionRequirement[]
connectionsConnectionRequirement[]capabilitiesstring[]optionalbooleanproviderstringrequiredhostsstring[]Are the outbound hostnames the workflow contacts directly, without a scheme or path.
tablesTableRequirement[]
tablesTableRequirement[]fieldsFieldRequirement[]
fieldsFieldRequirement[]namestringrequiredoptionalbooleantypeFieldTypeEnumerates the supported field data types.
optionalbooleanMarks a table the workflow uses when present and copes without.
tablestringrequiredwritesbooleanslugstringrequiredupdated_atstring (date-time)requireduser_idstringrequired400 Bad Requestthe request could not be completed
errorstringrequired404 Not Foundthe request could not be completed
errorstringrequired500 Internal Server Errorthe request could not be completed
errorstringrequiredDefaultthe request could not be completed
errorstringrequiredNo request body.
{
"collection": "string",
"config": "string",
"created_at": "2024-01-15T09:30:00Z",
"deleted_at": "2024-01-15T09:30:00Z",
"id": "string",
"labels": [
"string"
],
"name": "string",
"org_id": "string",
"owner": "string",
"owner_kind": "string",
"requires": {
"connections": [
{
"capabilities": [
"string"
],
"optional": true,
"provider": "string"
}
],
"hosts": [
"string"
],
"tables": [
{
"fields": [
{
"name": "string",
"optional": true,
"type": "string"
}
],
"optional": true,
"table": "string",
"writes": true
}
]
},
"slug": "string",
"updated_at": "2024-01-15T09:30:00Z",
"user_id": "string"
}Handles GET /v1/registry/{id}/assets
rest.Handler.ListAssets
Path parameters
idstringrequiredResponses
200 OKOK
itemsAsset[]required
itemsAsset[]requiredcontentstring (byte)created_atstring (date-time)requireddeleted_atstring (date-time)idstringrequirednamestringrequiredorg_idstringrequiredskill_idstringrequiredupdated_atstring (date-time)requireduser_idstringrequiredtotalinteger (int64)required400 Bad Requestthe request could not be completed
errorstringrequired404 Not Foundthe request could not be completed
errorstringrequired500 Internal Server Errorthe request could not be completed
errorstringrequiredDefaultthe request could not be completed
errorstringrequiredNo request body.
{
"items": [
{
"content": "aGVsbG8=",
"created_at": "2024-01-15T09:30:00Z",
"deleted_at": "2024-01-15T09:30:00Z",
"id": "string",
"name": "string",
"org_id": "string",
"skill_id": "string",
"updated_at": "2024-01-15T09:30:00Z",
"user_id": "string"
}
],
"total": 0
}Handles POST /v1/registry/{id}/assets
rest.Handler.UploadAsset
Path parameters
idstringrequiredBody
application/jsonrequiredcontentstringrequirednamestringrequiredResponses
201 CreatedCreated
contentstring (byte)created_atstring (date-time)requireddeleted_atstring (date-time)idstringrequirednamestringrequiredorg_idstringrequiredskill_idstringrequiredupdated_atstring (date-time)requireduser_idstringrequired400 Bad Requestthe request could not be completed
errorstringrequired403 Forbiddenthe request could not be completed
errorstringrequired404 Not Foundthe request could not be completed
errorstringrequired500 Internal Server Errorthe request could not be completed
errorstringrequiredDefaultthe request could not be completed
errorstringrequired{
"content": "string",
"name": "string"
}{
"content": "aGVsbG8=",
"created_at": "2024-01-15T09:30:00Z",
"deleted_at": "2024-01-15T09:30:00Z",
"id": "string",
"name": "string",
"org_id": "string",
"skill_id": "string",
"updated_at": "2024-01-15T09:30:00Z",
"user_id": "string"
}Handles GET /v1/registry/{id}/assets/{file}
rest.Handler.GetAsset
Path parameters
idstringrequiredfilestringrequiredResponses
200 OKOK
contentstring (byte)created_atstring (date-time)requireddeleted_atstring (date-time)idstringrequirednamestringrequiredorg_idstringrequiredskill_idstringrequiredupdated_atstring (date-time)requireduser_idstringrequired400 Bad Requestthe request could not be completed
errorstringrequired404 Not Foundthe request could not be completed
errorstringrequired500 Internal Server Errorthe request could not be completed
errorstringrequiredDefaultthe request could not be completed
errorstringrequiredNo request body.
{
"content": "aGVsbG8=",
"created_at": "2024-01-15T09:30:00Z",
"deleted_at": "2024-01-15T09:30:00Z",
"id": "string",
"name": "string",
"org_id": "string",
"skill_id": "string",
"updated_at": "2024-01-15T09:30:00Z",
"user_id": "string"
}Handles GET /v1/registry/{id}/form
rest.Handler.GetSkillForm
Path parameters
idstringrequiredResponses
200 OKOK
fieldsField[]
fieldsField[]defaultunknownIs the value applied when a record is inserted (or a form is rendered) without an explicit value for this field.
default_sourcestringDeclares the origin of a dynamic default value when the server has resolved one into Default.
descriptionstringIs a human-readable explanation of the field's purpose.
labelstringIs the UI label for the field.
namestringrequiredIs the column / input name.
option_labelsstring[]Is a parallel array to Options that carries display labels for enum values.
optionsstring[]Is the ordered list of permitted string values for FieldTypeEnum.
related_fieldstringIs the name of the foreign-key field on the related table.
related_tablestringIs the name of the target table for relation fields.
relation_label_fieldstringNames the field on the related record that the UI should show as the dropdown label.
requiredbooleanMarks the field as non-nullable / mandatory.
typeFieldTyperequiredEnumerates the supported field data types.
400 Bad Requestthe request could not be completed
errorstringrequired404 Not Foundthe request could not be completed
errorstringrequired500 Internal Server Errorthe request could not be completed
errorstringrequiredDefaultthe request could not be completed
errorstringrequiredNo request body.
{
"fields": [
{
"default": null,
"default_source": "string",
"description": "string",
"label": "string",
"name": "string",
"option_labels": [
"string"
],
"options": [
"string"
],
"related_field": "string",
"related_table": "string",
"relation_label_field": "string",
"required": true,
"type": "string"
}
]
}Handles GET /v1/registry/installs?app={slug}
It exposes the entitlement itself rather than making an operator infer it from a filtered catalog, and it is the read side of the record a marketplace install writes.
rest.Handler.GetInstalls
Query parameters
appstringResponses
200 OKOK
itemsInstall[]required
itemsInstall[]requiredapp_slugstringrequiredapproved_requiresRequiresIs a workflow's declaration of what it touches.
approved_requiresRequiresconnectionsConnectionRequirement[]
connectionsConnectionRequirement[]capabilitiesstring[]optionalbooleanproviderstringrequiredhostsstring[]Are the outbound hostnames the workflow contacts directly, without a scheme or path.
tablesTableRequirement[]
tablesTableRequirement[]fieldsFieldRequirement[]
fieldsFieldRequirement[]namestringrequiredoptionalbooleantypeFieldTypeEnumerates the supported field data types.
optionalbooleanMarks a table the workflow uses when present and copes without.
tablestringrequiredwritesbooleancreated_atstring (date-time)requireddeleted_atstring (date-time)idstringrequiredorg_idstringrequiredskill_idstringrequiredslugstringrequiredsourceInstallSourcerequiredRecords how an install row came to exist.
updated_atstring (date-time)requireduser_idstringrequiredtotalinteger (int64)required400 Bad Requestthe request could not be completed
errorstringrequired500 Internal Server Errorthe request could not be completed
errorstringrequiredDefaultthe request could not be completed
errorstringrequiredNo request body.
{
"items": [
{
"app_slug": "string",
"approved_requires": {
"connections": [
{
"capabilities": [
"string"
],
"optional": true,
"provider": "string"
}
],
"hosts": [
"string"
],
"tables": [
{
"fields": [
{
"name": "string",
"optional": true,
"type": "string"
}
],
"optional": true,
"table": "string",
"writes": true
}
]
},
"created_at": "2024-01-15T09:30:00Z",
"deleted_at": "2024-01-15T09:30:00Z",
"id": "string",
"org_id": "string",
"skill_id": "string",
"slug": "string",
"source": "string",
"updated_at": "2024-01-15T09:30:00Z",
"user_id": "string"
}
],
"total": 0
}