THINKHX

Catalog

The catalog lists the apps that projects have published, most-used first. It is not limited to your own project: it is the discovery surface for apps anyone can run. Publishing an app into it is a PATCH on Apps; reading it is this resource.

Instructions are never exposed here, because they belong to the app's owner. Input fields are, because they are the schema a caller fills in to launch a run.

Endpoints

MethodPathScope
GET/v1/catalog/listcatalog:read
GET/v1/catalog/detail/<app_id>catalog:read
GET/v1/catalog/publicnone

<app_id> is an app identifier, prefixed mapp_.

The catalog app object

FieldTypeDescription
idstringThe app identifier, prefixed mapp_.
objectstringAlways catalog_app.
namestringThe app's name.
descriptionstringWhat the app does.
logostringThe identifier of the app's logo file, or an empty string.
backgroundstringThe decorative background the app is shown with.
modelstringThe model the app runs on.
projectstringThe project that published the app.
dataarrayThe input schema. Returned by the detail endpoint only.
runsintegerHow many times the app has been run from outside its own project.
created_atintegerCreation time, in Unix seconds. Detail endpoint only.

List the catalog

GET /v1/catalog/list returns published apps ordered by how often they have been run, most-used first. It accepts limit and offset.

curl
curl "https://api.thinkhx.com/v1/catalog/list?limit=1" \
  -H "Authorization: Bearer sk-project-YOUR_KEY"
json
{
  "code": 200,
  "title": "OK",
  "response": {
    "object": "list",
    "data": [
      {
        "id": "mapp_0ceacb46e5b3a99e91b6",
        "object": "catalog_app",
        "name": "Support triage",
        "description": "Sorts an inbound support message by urgency.",
        "logo": "file_d81e4afa6c8bf11fa881",
        "background": "bg-gradient-to-br from-indigo-500 to-sky-500",
        "model": "modi_7b1e4c2a9d05f3618ea4",
        "project": "proj_3f6c1d90ab77e2415c08",
        "runs": 148
      }
    ],
    "total": 1
  }
}

total counts every published app, so you can page through the whole catalog with offset.

Read one catalog app

GET /v1/catalog/detail/<app_id> adds the input schema, which is what you need before launching a run against an app you do not own.

curl
curl https://api.thinkhx.com/v1/catalog/detail/mapp_0ceacb46e5b3a99e91b6 \
  -H "Authorization: Bearer sk-project-YOUR_KEY"
json
{
  "code": 200,
  "title": "OK",
  "response": {
    "id": "mapp_0ceacb46e5b3a99e91b6",
    "object": "catalog_app",
    "name": "Support triage",
    "description": "Sorts an inbound support message by urgency.",
    "logo": "file_d81e4afa6c8bf11fa881",
    "background": "bg-gradient-to-br from-indigo-500 to-sky-500",
    "model": "modi_7b1e4c2a9d05f3618ea4",
    "project": "proj_3f6c1d90ab77e2415c08",
    "data": [
      {
        "id": "madi_5d8b21c74e0af96b3d15",
        "name": "message",
        "type": "text",
        "placeholder": "Paste the message",
        "required": true
      }
    ],
    "runs": 148,
    "created_at": 1754205600
  }
}

The app has to be both published and activated. An app that is neither, or that does not exist, gives 404 and Public app not found.

Tip — Use the name of each data entry as the key when you launch the run, as described in Runs. A run against a published app you do not own is allowed and counts towards its public run total.

The keyless endpoint

GET /v1/catalog/public serves the same published apps with no authentication at all, for a public showcase page. It takes no parameters, returns at most 50 apps, and does not use the standard envelope.

curl
curl https://api.thinkhx.com/v1/catalog/public
json
{
  "ok": true,
  "data": [
    {
      "id": "mapp_0ceacb46e5b3a99e91b6",
      "name": "Support triage",
      "description": "Sorts an inbound support message by urgency.",
      "background": "bg-gradient-to-br from-indigo-500 to-sky-500",
      "logo": "file_d81e4afa6c8bf11fa881",
      "logo_url": "https://cdn-ef56d.owoxo.media/d/cdnu_6b2e91f47a05c3d8e142/file_d81e4afa6c8bf11fa881/",
      "category_id": "mott_4f8a26d1c709b53ea814",
      "category": "Text"
    }
  ]
}
FieldTypeDescription
okbooleantrue when the catalog was served, false when it could not be.
dataarrayThe published apps. Empty when ok is false.

Each entry carries a ready-to-use logo_url rather than only the file identifier, and names its category. There is no total and no paging: this endpoint is a fixed showcase feed, not a way to walk the catalog.

A method other than GET gives 405, and a backing service that is briefly unreachable gives 503. Both answer {"ok": false, "data": []}.

Notelogo_url is an empty string when the app has no logo, or when the delivery host cannot be resolved. Check it before using it.

Need help? Contact Support.