Create a draft partner app

Add MCP server to your AI tool

Allow AI tools and LLMs to interact with the API documentation portal through MCP.

MCP server URL

https://docs.thankly.ai/mcp

Standard setup for AI tools providing an mcp.json file

mcp.json
"Thankly MCP server": {
  "url": "https://docs.thankly.ai/mcp"
}
Close
POST /v1/admin/orgs/{org_id}/partner-apps

Create a new partner app in DRAFT status.

Top-level slugs are globally unique (the slug is the public tenant identifier baked into ChatGPT connector URLs). Brand sub-page slugs are unique per parent. Either collision returns 409.

Phase-3 quotas + tombstone enforcement: per-org partner-app caps surface as 429; archived-slug cooldown surfaces as 409 with a cooldown-aware message.

When ?copy_from=<app-id> is supplied, the new app inherits the source's draft JSONB blobs verbatim (with tool names cleared per G3-35b). Versions are NOT copied — the new app starts at DRAFT.

Path parameters

  • org_id string Required

Query parameters

  • copy_from string | null

    Source partner app id (G3-35b). When set, the new app's JSONB blobs (sections, theme, auth_config, sponsored_config) are cloned from the source's current draft state. Tool names are reset to empty strings. Slug uniqueness, tombstone cooldown, and per-org quotas all still apply to the new slug.

application/json

Body Required

  • slug string Required

    URL slug. Will be normalized server-side to [a-z0-9-]+ with no leading/trailing hyphen. Reserved blocklist applies.

    Minimum length is 1, maximum length is 64.

  • display_name string Required

    Minimum length is 1, maximum length is 120.

  • tagline string | null

    Maximum length is 240.

  • parent_app_id string | null
  • catalog_id string Required

    Catalog UUID this app's capabilities will query.

Responses

  • 201 application/json

    Successful Response

    Hide response attributes Show response attributes object
    • id string Required
    • org_id string Required
    • slug string Required
    • parent_app_id string | null
    • parent_slug string | null
    • catalog_id string | null
    • display_name string Required
    • tagline string | null
    • status string Required

      Lifecycle states for a partner app row.

      Mirrors the partner_app_status Postgres enum created in the b3fb8189acb2_add_partner_apps_tables Alembic migration.

      Values are DRAFT, PUBLISHED, SUSPENDED, or ARCHIVED.

    • schema_version integer Required

      Minimum value is 1.0.

    • sections array[object] | null
      Hide sections attributes Show sections attributes object

      Draft-shape section. All fields optional except id.

      • id string Required

        Minimum length is 1, maximum length is 64.

      • capability string | null
      • title string | null
      • description string | null
      • layout string | null
      • enabled boolean | null
      • filters object | null

        Additional properties are allowed.

      • ui object | null

        Additional properties are NOT allowed.

        Hide ui attributes Show ui attributes object | null
        • empty_state_title string | null

          Maximum length is 120.

        • empty_state_body string | null

          Maximum length is 500.

        • max_items integer | null

          Minimum value is 1.0, maximum value is 100.0.

        • sort string | null

          Values are relevance, price_asc, price_desc, newest, or rating.

      • tool object | null

        Tool descriptor — admin/draft shape. name and description are optional so partners can save a partial section before filling them in. Publish-time validation tightens to required (see :class:_ToolConfig).

        Hide tool attributes Show tool attributes object | null
        • name string | null
        • description string | null

          Minimum length is 1, maximum length is 1024.

        • output_template_uri string | null

          Maximum length is 256.

      • sponsored_ranking_surface string | null

        Values are primary, embedded, or none.

    • theme object | null

      Resolved theme — admin/draft shape. All fields optional.

      Additional properties are NOT allowed.

      Hide theme attributes Show theme attributes object | null
      • brand_name string | null

        Minimum length is 1, maximum length is 120.

      • logo_url string | null
      • color_scheme string | null

        Values are light, dark, or system.

      • colors object | null

        Theme color tokens — admin/draft shape. All fields optional.

        Additional properties are NOT allowed.

        Hide colors attributes Show colors attributes object | null
        • primary string | null
        • accent string | null
        • background string | null
        • surface string | null
        • text string | null
        • muted_text string | null
        • border string | null
      • typography object | null

        Theme typography tokens — admin/draft shape. All fields optional.

        Additional properties are NOT allowed.

        Hide typography attributes Show typography attributes object | null
        • font_family string | null

          Values are system, inter, ibm-plex, dm-sans, geist, instrument-serif, fraunces, or space-grotesk.

        • heading_weight integer | null
        • body_weight integer | null
      • radius string | null

        Values are none, sm, md, lg, or pill.

    • sponsored_config object | null

      Additional properties are allowed.

    • auth_config object | null

      Additional properties are allowed.

    • created_at string(date-time) Required
    • updated_at string(date-time) Required
    • created_by string | null
    • versions array[object]
      Hide versions attributes Show versions attributes object | null

      Lightweight summary of a published version row.

      Used inline on :class:PartnerAppDetail, not as a top-level admin response. The full snapshot is queried on demand for diffs/rollback.

      • id string Required
      • version integer Required

        Minimum value is 1.0.

      • schema_version integer Required

        Minimum value is 1.0.

      • published_at string(date-time) Required
      • published_by string | null
    • latest_version object | null

      Lightweight summary of a published version row.

      Used inline on :class:PartnerAppDetail, not as a top-level admin response. The full snapshot is queried on demand for diffs/rollback.

      Additional properties are NOT allowed.

      Hide latest_version attributes Show latest_version attributes object | null
      • id string Required
      • version integer Required

        Minimum value is 1.0.

      • schema_version integer Required

        Minimum value is 1.0.

      • published_at string(date-time) Required
      • published_by string | null
    • draft_revision string | null
    • published_section_ids array[string]
  • 422 application/json

    Validation Error

    Hide response attribute Show response attribute object
    • detail array[object]
      Hide detail attributes Show detail attributes object
      • loc array[string | integer] Required
      • msg string Required
      • type string Required
      • input
      • ctx object
POST /v1/admin/orgs/{org_id}/partner-apps
curl \
 --request POST 'http://api.example.com/v1/admin/orgs/{org_id}/partner-apps' \
 --header "Authorization: Bearer $ACCESS_TOKEN" \
 --header "Content-Type: application/json" \
 --data '{"slug":"string","display_name":"string","tagline":"string","parent_app_id":"string","catalog_id":"string"}'
Request examples
{
  "slug": "string",
  "display_name": "string",
  "tagline": "string",
  "parent_app_id": "string",
  "catalog_id": "string"
}
Response examples (201)
{
  "id": "string",
  "org_id": "string",
  "slug": "string",
  "parent_app_id": "string",
  "parent_slug": "string",
  "catalog_id": "string",
  "display_name": "string",
  "tagline": "string",
  "status": "DRAFT",
  "schema_version": 42,
  "sections": [
    {
      "id": "string",
      "capability": "string",
      "title": "string",
      "description": "string",
      "layout": "string",
      "enabled": true,
      "filters": {},
      "ui": {
        "empty_state_title": "string",
        "empty_state_body": "string",
        "max_items": 42,
        "sort": "relevance"
      },
      "tool": {
        "name": "string",
        "description": "string",
        "output_template_uri": "string"
      },
      "sponsored_ranking_surface": "primary"
    }
  ],
  "theme": {
    "brand_name": "string",
    "logo_url": "string",
    "color_scheme": "light",
    "colors": {
      "primary": "string",
      "accent": "string",
      "background": "string",
      "surface": "string",
      "text": "string",
      "muted_text": "string",
      "border": "string"
    },
    "typography": {
      "font_family": "system",
      "heading_weight": 42,
      "body_weight": 42
    },
    "radius": "none"
  },
  "sponsored_config": {},
  "auth_config": {},
  "created_at": "2026-05-04T09:42:00Z",
  "updated_at": "2026-05-04T09:42:00Z",
  "created_by": "string",
  "versions": [
    {
      "id": "string",
      "version": 42,
      "schema_version": 42,
      "published_at": "2026-05-04T09:42:00Z",
      "published_by": "string"
    }
  ],
  "latest_version": {
    "id": "string",
    "version": 42,
    "schema_version": 42,
    "published_at": "2026-05-04T09:42:00Z",
    "published_by": "string"
  },
  "draft_revision": "string",
  "published_section_ids": [
    "string"
  ]
}
Response examples (422)
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "ctx": {}
    }
  ]
}