Dynamoi

Music marketing for AI agents: free Smart Links, promotion campaigns, analytics, and distribution.

我該用這個嗎

品質與安全性

B
說明品質
99%
結構描述完整度
74%
命名品質
77%
汙染風險
40%
權限相符程度
90%
協定合規性
100%

發現項目(11)

  • HIGHTool poisoning patterns detected
  • MEDIUMTool 'dynamoi_get_youtube_channel_data' description contains placeholder text在 dynamoi_get_youtube_channel_data 中
  • MEDIUMTool description contains URL to non-standard domain在 dynamoi_get_distribution_application 中
  • LOWTool 'dynamoi_get_youtube_channel_data' name length outside 3-30 range在 dynamoi_get_youtube_channel_data 中
  • LOWTool 'dynamoi_get_distribution_application' name length outside 3-30 range在 dynamoi_get_distribution_application 中
  • LOWTool 'dynamoi_preview_smart_link_themes' name length outside 3-30 range在 dynamoi_preview_smart_link_themes 中
  • LOWTool 'dynamoi_create_smart_link_from_spotify' name length outside 3-30 range在 dynamoi_create_smart_link_from_spotify 中
  • LOWTool 'dynamoi_create_smart_links_from_spotify_artist' name length outside 3-30 range在 dynamoi_create_smart_links_from_spotify_artist 中
  • LOWTool description contains role marker that could confuse chat models在 dynamoi_get_distribution_application 中
  • LOWTool 'fetch' suggests web access but openWorldHint=false在 fetch 中

根據工具定義與協定合規性的自動化分析。

上下文成本

~16,218Token(工具定義)
~7.2 KB典型回應大小
顯著的注意力影響(128k 上下文的 12.67%)

這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。

安裝

一鍵安裝

將以下內容加入你的 `claude_desktop_config.json` 檔案:

{
  "mcpServers": {
    "dynamoi": {
      "command": "npx",
      "args": [
        "@dynamoi/mcp"
      ]
    }
  }
}

可執行的套件

npm@dynamoi/mcp0.7.1streamable-http

遠端端點

https://dynamoi.com/mcpstreamable-http

它能做什麼

工具清單

工具(19)

🟢 唯讀🟡 寫入🔴 刪除⚪ 未知
🟢dynamoi_about

Use this when the user asks what Dynamoi is, who it is for, or what it offers — including before sign-in or before choosing a tool. Returns the canonical About Dynamoi text plus a short structured summary covering free Smart Links, managed Smart Campaigns, YouTube campaigns, distribution, company facts, support, and getting started. This is read-only product information, not account data.

輸入結構描述

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {},
      "additionalProperties": {}
    },
    "kind": {
      "type": "string",
      "enum": [
        "validation",
        "business",
        "platform",
        "unknown"
      ]
    },
    "message": {
      "type": "string"
    },
    "code": {
      "type": "string",
      "enum": [
        "ACCOUNT_READ_ONLY",
        "INVALID_SPOTIFY_SOURCE",
        "CAPABILITY_REQUIRED",
        "INSUFFICIENT_SCOPE",
        "STATE_CONFLICT",
        "QUOTE_CHANGED",
        "RATE_LIMITED",
        "OUTPUT_INVALID",
        "UNKNOWN_EFFECT"
      ]
    },
    "draftId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "failureStage": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "field": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "nextAction": {
      "type": "object",
      "properties": {
        "field": {
          "type": "string",
          "minLength": 1,
          "maxLength": 120
        },
        "kind": {
          "type": "string",
          "enum": [
            "provide_input",
            "read_status",
            "reconnect",
            "handoff"
          ]
        },
        "reason": {
          "type": "string",
          "minLength": 1,
          "maxLength": 240
        }
      },
      "required": [
        "kind"
      ],
      "additionalProperties": false
    },
    "prerequisite": {
      "type": "string",
      "minLength": 1,
      "maxLength": 240
    },
    "retryAfterSeconds": {
      "type": "integer",
      "minimum": 0,
      "maximum": 86400
    },
    "retryable": {
      "type": "boolean"
    },
    "screeningResult": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "status": {
      "type": "string",
      "enum": [
        "success",
        "partial_success",
        "error"
      ]
    }
  },
  "required": [
    "status"
  ],
  "additionalProperties": false
}
🟢dynamoi_get_account_overview(format, intent)

Use this when the user explicitly asks about the signed-in Dynamoi account itself, such as who is logged in, how many organizations or artists it can access, or whether account-level platform connections exist. Pass intent to match that explicit account question; it defaults to account_overview. Do not use this to confirm a specific Meta or YouTube onboarding attempt because this account-level state can span multiple artists; use dynamoi_get_platform_status for the target artist instead. Do not use this to enumerate artists one by one; use dynamoi_list_artists for that. Never use this to 'check context' before answering generic Instagram, lyrics, songwriting, or marketing-advice questions, even if Dynamoi is attached.

輸入結構描述

{
  "type": "object",
  "properties": {
    "format": {
      "type": "string",
      "enum": [
        "json",
        "summary"
      ]
    },
    "intent": {
      "default": "account_overview",
      "type": "string",
      "enum": [
        "account_overview",
        "artist_access_check",
        "organization_access_check",
        "platform_connection_check"
      ]
    }
  },
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {
        "artistCount": {
          "type": "number"
        },
        "artists": {
          "type": "object",
          "properties": {
            "count": {
              "type": "number"
            },
            "summaries": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string"
                  },
                  "name": {
                    "type": "string"
                  },
                  "publicUrl": {
                    "type": "string"
                  },
                  "summary": {
                    "type": "string"
                  }
                },
                "additionalProperties": {}
              }
            }
          },
          "required": [
            "count",
            "summaries"
          ],
          "additionalProperties": false
        },
        "organizationCount": {
          "type": "number"
        },
        "recommendedNextActions": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "state": {
          "type": "object",
          "properties": {},
          "additionalProperties": {}
        },
        "summary": {
          "type": "string"
        },
        "user": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": {}
    },
    "kind": {
      "type": "string"
    },
    "message": {
      "type": "string"
    },
    "code": {
      "type": "string",
      "enum": [
        "ACCOUNT_READ_ONLY",
        "INVALID_SPOTIFY_SOURCE",
        "CAPABILITY_REQUIRED",
        "INSUFFICIENT_SCOPE",
        "STATE_CONFLICT",
        "QUOTE_CHANGED",
        "RATE_LIMITED",
        "OUTPUT_INVALID",
        "UNKNOWN_EFFECT"
      ]
    },
    "draftId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "failureStage": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "field": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "nextAction": {
      "type": "object",
      "properties": {
        "field": {
          "type": "string",
          "minLength": 1,
          "maxLength": 120
        },
        "kind": {
          "type": "string",
          "enum": [
            "provide_input",
            "read_status",
            "reconnect",
            "handoff"
          ]
        },
        "reason": {
          "type": "string",
          "minLength": 1,
          "maxLength": 240
        }
      },
      "required": [
        "kind"
      ],
      "additionalProperties": false
    },
    "prerequisite": {
      "type": "string",
      "minLength": 1,
      "maxLength": 240
    },
    "retryAfterSeconds": {
      "type": "integer",
      "minimum": 0,
      "maximum": 86400
    },
    "retryable": {
      "type": "boolean"
    },
    "screeningResult": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "status": {
      "type": "string",
      "enum": [
        "success",
        "partial_success",
        "error"
      ]
    }
  },
  "required": [
    "status"
  ],
  "additionalProperties": {}
}
🟢dynamoi_list_artists(artistId, cursor, format, limit)

Use this when the user wants to see which artists or YouTube channels they manage, along with billing status, active campaign count, and their role. Pass artistId when you need the full profile/readiness details for one artist instead of a roster page. Do not use this for campaign details; use dynamoi_list_campaigns or dynamoi_get_campaign. Never use this for generic social-media or marketing advice, including Instagram follower-growth questions, unless the user explicitly asked about their Dynamoi roster. If the result is empty, the user is brand-new — do not stop with 'no records found'; route through dynamoi_get_account_overview.recommendedNextActions.

輸入結構描述

{
  "type": "object",
  "properties": {
    "artistId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "cursor": {
      "type": "string"
    },
    "format": {
      "type": "string",
      "enum": [
        "json",
        "summary"
      ]
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    }
  },
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {
        "artists": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "publicUrl": {
                "type": "string"
              },
              "summary": {
                "type": "string"
              }
            },
            "additionalProperties": {}
          }
        },
        "nextCursor": {
          "type": "string"
        },
        "summary": {
          "type": "string"
        },
        "totalCount": {
          "type": "number"
        }
      },
      "additionalProperties": {}
    },
    "kind": {
      "type": "string"
    },
    "message": {
      "type": "string"
    },
    "code": {
      "type": "string",
      "enum": [
        "ACCOUNT_READ_ONLY",
        "INVALID_SPOTIFY_SOURCE",
        "CAPABILITY_REQUIRED",
        "INSUFFICIENT_SCOPE",
        "STATE_CONFLICT",
        "QUOTE_CHANGED",
        "RATE_LIMITED",
        "OUTPUT_INVALID",
        "UNKNOWN_EFFECT"
      ]
    },
    "draftId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "failureStage": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "field": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "nextAction": {
      "type": "object",
      "properties": {
        "field": {
          "type": "string",
          "minLength": 1,
          "maxLength": 120
        },
        "kind": {
          "type": "string",
          "enum": [
            "provide_input",
            "read_status",
            "reconnect",
            "handoff"
          ]
        },
        "reason": {
          "type": "string",
          "minLength": 1,
          "maxLength": 240
        }
      },
      "required": [
        "kind"
      ],
      "additionalProperties": false
    },
    "prerequisite": {
      "type": "string",
      "minLength": 1,
      "maxLength": 240
    },
    "retryAfterSeconds": {
      "type": "integer",
      "minimum": 0,
      "maximum": 86400
    },
    "retryable": {
      "type": "boolean"
    },
    "screeningResult": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "status": {
      "type": "string",
      "enum": [
        "success",
        "partial_success",
        "error"
      ]
    }
  },
  "required": [
    "status"
  ],
  "additionalProperties": {}
}
🟢dynamoi_search(artistId, cursor, format, includeArchived, limit, ...)

Use this when the user mentions an artist, release, campaign, or smart link but you do not yet know the exact record to inspect. Do not use this for analytics summaries or billing questions once you already know the target record. If the result is empty for a brand-new user (no artists yet), do not respond 'no records found' as a terminal answer — instead suggest creating their first artist hub via dynamoi_create_smart_links_from_spotify_artist.

輸入結構描述

{
  "type": "object",
  "properties": {
    "artistId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "cursor": {
      "type": "string"
    },
    "format": {
      "type": "string",
      "enum": [
        "json",
        "summary"
      ]
    },
    "includeArchived": {
      "type": "boolean"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    },
    "query": {
      "type": "string",
      "maxLength": 120
    },
    "type": {
      "type": "string",
      "enum": [
        "artist",
        "campaign",
        "smartlink"
      ]
    }
  },
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {
        "nextCursor": {
          "type": "string"
        },
        "results": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "publicUrl": {
                "type": "string"
              },
              "summary": {
                "type": "string"
              }
            },
            "additionalProperties": {}
          }
        },
        "summary": {
          "type": "string"
        },
        "totalCount": {
          "type": "number"
        }
      },
      "additionalProperties": {}
    },
    "kind": {
      "type": "string"
    },
    "message": {
      "type": "string"
    },
    "code": {
      "type": "string",
      "enum": [
        "ACCOUNT_READ_ONLY",
        "INVALID_SPOTIFY_SOURCE",
        "CAPABILITY_REQUIRED",
        "INSUFFICIENT_SCOPE",
        "STATE_CONFLICT",
        "QUOTE_CHANGED",
        "RATE_LIMITED",
        "OUTPUT_INVALID",
        "UNKNOWN_EFFECT"
      ]
    },
    "draftId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "failureStage": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "field": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "nextAction": {
      "type": "object",
      "properties": {
        "field": {
          "type": "string",
          "minLength": 1,
          "maxLength": 120
        },
        "kind": {
          "type": "string",
          "enum": [
            "provide_input",
            "read_status",
            "reconnect",
            "handoff"
          ]
        },
        "reason": {
          "type": "string",
          "minLength": 1,
          "maxLength": 240
        }
      },
      "required": [
        "kind"
      ],
      "additionalProperties": false
    },
    "prerequisite": {
      "type": "string",
      "minLength": 1,
      "maxLength": 240
    },
    "retryAfterSeconds": {
      "type": "integer",
      "minimum": 0,
      "maximum": 86400
    },
    "retryable": {
      "type": "boolean"
    },
    "screeningResult": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "status": {
      "type": "string",
      "enum": [
        "success",
        "partial_success",
        "error"
      ]
    }
  },
  "required": [
    "status"
  ],
  "additionalProperties": {}
}
🟢search(query)

OpenAI ChatGPT Deep Research / Connectors search contract. Returns matching Dynamoi artists, campaigns, and Smart Links so they can be cited in a deep-research session. For regular ChatGPT chat use dynamoi_search instead.

輸入結構描述

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "minLength": 1,
      "maxLength": 500
    }
  },
  "required": [
    "query"
  ],
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {
        "results": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "publicUrl": {
                "type": "string"
              },
              "summary": {
                "type": "string"
              }
            },
            "additionalProperties": {}
          }
        }
      },
      "additionalProperties": {}
    },
    "kind": {
      "type": "string"
    },
    "message": {
      "type": "string"
    },
    "code": {
      "type": "string",
      "enum": [
        "ACCOUNT_READ_ONLY",
        "INVALID_SPOTIFY_SOURCE",
        "CAPABILITY_REQUIRED",
        "INSUFFICIENT_SCOPE",
        "STATE_CONFLICT",
        "QUOTE_CHANGED",
        "RATE_LIMITED",
        "OUTPUT_INVALID",
        "UNKNOWN_EFFECT"
      ]
    },
    "draftId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "failureStage": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "field": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "nextAction": {
      "type": "object",
      "properties": {
        "field": {
          "type": "string",
          "minLength": 1,
          "maxLength": 120
        },
        "kind": {
          "type": "string",
          "enum": [
            "provide_input",
            "read_status",
            "reconnect",
            "handoff"
          ]
        },
        "reason": {
          "type": "string",
          "minLength": 1,
          "maxLength": 240
        }
      },
      "required": [
        "kind"
      ],
      "additionalProperties": false
    },
    "prerequisite": {
      "type": "string",
      "minLength": 1,
      "maxLength": 240
    },
    "retryAfterSeconds": {
      "type": "integer",
      "minimum": 0,
      "maximum": 86400
    },
    "retryable": {
      "type": "boolean"
    },
    "screeningResult": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "status": {
      "type": "string",
      "enum": [
        "success",
        "partial_success",
        "error"
      ]
    }
  },
  "required": [
    "status"
  ],
  "additionalProperties": {}
}
🟢fetch(id)

OpenAI ChatGPT Deep Research / Connectors fetch contract. Given an id returned by `search` (formatted as 'artist:<uuid>', 'campaign:<uuid>', or 'smartlink:<uuid>'), returns the full record for citation.

輸入結構描述

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "publicUrl": {
          "type": "string"
        },
        "summary": {
          "type": "string"
        }
      },
      "additionalProperties": {}
    },
    "kind": {
      "type": "string"
    },
    "message": {
      "type": "string"
    },
    "code": {
      "type": "string",
      "enum": [
        "ACCOUNT_READ_ONLY",
        "INVALID_SPOTIFY_SOURCE",
        "CAPABILITY_REQUIRED",
        "INSUFFICIENT_SCOPE",
        "STATE_CONFLICT",
        "QUOTE_CHANGED",
        "RATE_LIMITED",
        "OUTPUT_INVALID",
        "UNKNOWN_EFFECT"
      ]
    },
    "draftId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "failureStage": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "field": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "nextAction": {
      "type": "object",
      "properties": {
        "field": {
          "type": "string",
          "minLength": 1,
          "maxLength": 120
        },
        "kind": {
          "type": "string",
          "enum": [
            "provide_input",
            "read_status",
            "reconnect",
            "handoff"
          ]
        },
        "reason": {
          "type": "string",
          "minLength": 1,
          "maxLength": 240
        }
      },
      "required": [
        "kind"
      ],
      "additionalProperties": false
    },
    "prerequisite": {
      "type": "string",
      "minLength": 1,
      "maxLength": 240
    },
    "retryAfterSeconds": {
      "type": "integer",
      "minimum": 0,
      "maximum": 86400
    },
    "retryable": {
      "type": "boolean"
    },
    "screeningResult": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "status": {
      "type": "string",
      "enum": [
        "success",
        "partial_success",
        "error"
      ]
    }
  },
  "required": [
    "status"
  ],
  "additionalProperties": {}
}
🟢dynamoi_list_campaigns(artistId, campaignType, cursor, format, limit, ...)

Use this when the user wants to browse campaigns for one artist, optionally filtered by type or status. Do not use this for a single campaign deep dive; use dynamoi_get_campaign for that. Never use this to personalize generic marketing advice. If the user has no artists yet, do not call this — route via dynamoi_get_account_overview first.

輸入結構描述

{
  "type": "object",
  "properties": {
    "artistId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "campaignType": {
      "type": "string",
      "enum": [
        "SMART_CAMPAIGN",
        "YOUTUBE"
      ]
    },
    "cursor": {
      "type": "string"
    },
    "format": {
      "type": "string",
      "enum": [
        "json",
        "summary"
      ]
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    },
    "status": {
      "type": "string",
      "enum": [
        "AWAITING_SMART_LINK",
        "ACTIVE",
        "ARCHIVED",
        "CONTENT_VALIDATION",
        "DEPLOYING",
        "FAILED",
        "PAUSED",
        "READY_FOR_REVIEW",
        "SUBSCRIPTION_PAUSED"
      ]
    }
  },
  "required": [
    "artistId"
  ],
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {
        "campaigns": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "publicUrl": {
                "type": "string"
              },
              "summary": {
                "type": "string"
              }
            },
            "additionalProperties": {}
          }
        },
        "nextCursor": {
          "type": "string"
        },
        "summary": {
          "type": "string"
        },
        "totalCount": {
          "type": "number"
        }
      },
      "additionalProperties": {}
    },
    "kind": {
      "type": "string"
    },
    "message": {
      "type": "string"
    },
    "code": {
      "type": "string",
      "enum": [
        "ACCOUNT_READ_ONLY",
        "INVALID_SPOTIFY_SOURCE",
        "CAPABILITY_REQUIRED",
        "INSUFFICIENT_SCOPE",
        "STATE_CONFLICT",
        "QUOTE_CHANGED",
        "RATE_LIMITED",
        "OUTPUT_INVALID",
        "UNKNOWN_EFFECT"
      ]
    },
    "draftId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "failureStage": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "field": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "nextAction": {
      "type": "object",
      "properties": {
        "field": {
          "type": "string",
          "minLength": 1,
          "maxLength": 120
        },
        "kind": {
          "type": "string",
          "enum": [
            "provide_input",
            "read_status",
            "reconnect",
            "handoff"
          ]
        },
        "reason": {
          "type": "string",
          "minLength": 1,
          "maxLength": 240
        }
      },
      "required": [
        "kind"
      ],
      "additionalProperties": false
    },
    "prerequisite": {
      "type": "string",
      "minLength": 1,
      "maxLength": 240
    },
    "retryAfterSeconds": {
      "type": "integer",
      "minimum": 0,
      "maximum": 86400
    },
    "retryable": {
      "type": "boolean"
    },
    "screeningResult": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "status": {
      "type": "string",
      "enum": [
        "success",
        "partial_success",
        "error"
      ]
    }
  },
  "required": [
    "status"
  ],
  "additionalProperties": {}
}
🟢dynamoi_get_campaign(analyticsDateRange, analyticsGranularity, campaignId, format, includeAnalytics, ...)

Use this when the user wants full details for one campaign, including budget, targeting, platform status, and next actions. YouTube campaigns return youtubeStrategy and strategyGuide: read the guide's goal and judgeBy before interpreting results. Set includeAnalytics=true for paid delivery, includeChannelResults=true for observed YouTube channel results with paid and organic views (never attributed to the campaign), includeDeploymentStatus=true for delivery/deployment blockers, and includeCountries=true only when the full country list is needed. Do not use this for a campaign list; use dynamoi_list_campaigns instead. After a successful launch or campaign mutation, prefer format=summary when you need a follow-up read to relay the final answer.

輸入結構描述

{
  "type": "object",
  "properties": {
    "analyticsDateRange": {
      "type": "object",
      "properties": {
        "end": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
        },
        "start": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
        }
      },
      "required": [
        "end",
        "start"
      ],
      "additionalProperties": false
    },
    "analyticsGranularity": {
      "type": "string",
      "enum": [
        "TOTAL",
        "DAILY"
      ]
    },
    "campaignId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "format": {
      "type": "string",
      "enum": [
        "json",
        "summary"
      ]
    },
    "includeAnalytics": {
      "type": "boolean"
    },
    "includeChannelResults": {
      "type": "boolean"
    },
    "includeCountries": {
      "type": "boolean"
    },
    "includeDeploymentStatus": {
      "type": "boolean"
    }
  },
  "required": [
    "campaignId"
  ],
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "publicUrl": {
          "type": "string"
        },
        "summary": {
          "type": "string"
        },
        "artistId": {
          "type": "string"
        },
        "contentTitle": {
          "type": "string"
        },
        "nextActions": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "status": {
          "type": "string"
        }
      },
      "additionalProperties": {}
    },
    "kind": {
      "type": "string"
    },
    "message": {
      "type": "string"
    },
    "code": {
      "type": "string",
      "enum": [
        "ACCOUNT_READ_ONLY",
        "INVALID_SPOTIFY_SOURCE",
        "CAPABILITY_REQUIRED",
        "INSUFFICIENT_SCOPE",
        "STATE_CONFLICT",
        "QUOTE_CHANGED",
        "RATE_LIMITED",
        "OUTPUT_INVALID",
        "UNKNOWN_EFFECT"
      ]
    },
    "draftId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "failureStage": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "field": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "nextAction": {
      "type": "object",
      "properties": {
        "field": {
          "type": "string",
          "minLength": 1,
          "maxLength": 120
        },
        "kind": {
          "type": "string",
          "enum": [
            "provide_input",
            "read_status",
            "reconnect",
            "handoff"
          ]
        },
        "reason": {
          "type": "string",
          "minLength": 1,
          "maxLength": 240
        }
      },
      "required": [
        "kind"
      ],
      "additionalProperties": false
    },
    "prerequisite": {
      "type": "string",
      "minLength": 1,
      "maxLength": 240
    },
    "retryAfterSeconds": {
      "type": "integer",
      "minimum": 0,
      "maximum": 86400
    },
    "retryable": {
      "type": "boolean"
    },
    "screeningResult": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "status": {
      "type": "string",
      "enum": [
        "success",
        "partial_success",
        "error"
      ]
    }
  },
  "required": [
    "status"
  ],
  "additionalProperties": {}
}
🟢dynamoi_get_artist_analytics(artistId, dateRange, format, granularity)

Use this when the user wants artist-level performance across all campaigns, including 30-day rollups or daily breakdowns. Pass granularity=DAILY when the user asks for a daily breakdown. Pass format=summary when the user wants a written rollup, a strongest-campaign verdict, or a direct answer you can relay immediately. If this tool already returned the requested strongest-campaign comparison, stop and answer instead of calling more analytics tools. For one campaign's metrics, use dynamoi_get_campaign with includeAnalytics=true.

輸入結構描述

{
  "type": "object",
  "properties": {
    "artistId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "dateRange": {
      "type": "object",
      "properties": {
        "end": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
        },
        "start": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
        }
      },
      "required": [
        "end",
        "start"
      ],
      "additionalProperties": false
    },
    "format": {
      "type": "string",
      "enum": [
        "json",
        "summary"
      ]
    },
    "granularity": {
      "type": "string",
      "enum": [
        "TOTAL",
        "DAILY"
      ]
    }
  },
  "required": [
    "artistId"
  ],
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {
        "artistId": {
          "type": "string"
        },
        "artistName": {
          "type": "string"
        },
        "dateRange": {
          "type": "object",
          "properties": {
            "end": {
              "type": "string"
            },
            "start": {
              "type": "string"
            }
          },
          "required": [
            "end",
            "start"
          ],
          "additionalProperties": false
        },
        "summary": {
          "type": "string"
        }
      },
      "additionalProperties": {}
    },
    "kind": {
      "type": "string"
    },
    "message": {
      "type": "string"
    },
    "code": {
      "type": "string",
      "enum": [
        "ACCOUNT_READ_ONLY",
        "INVALID_SPOTIFY_SOURCE",
        "CAPABILITY_REQUIRED",
        "INSUFFICIENT_SCOPE",
        "STATE_CONFLICT",
        "QUOTE_CHANGED",
        "RATE_LIMITED",
        "OUTPUT_INVALID",
        "UNKNOWN_EFFECT"
      ]
    },
    "draftId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "failureStage": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "field": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "nextAction": {
      "type": "object",
      "properties": {
        "field": {
          "type": "string",
          "minLength": 1,
          "maxLength": 120
        },
        "kind": {
          "type": "string",
          "enum": [
            "provide_input",
            "read_status",
            "reconnect",
            "handoff"
          ]
        },
        "reason": {
          "type": "string",
          "minLength": 1,
          "maxLength": 240
        }
      },
      "required": [
        "kind"
      ],
      "additionalProperties": false
    },
    "prerequisite": {
      "type": "string",
      "minLength": 1,
      "maxLength": 240
    },
    "retryAfterSeconds": {
      "type": "integer",
      "minimum": 0,
      "maximum": 86400
    },
    "retryable": {
      "type": "boolean"
    },
    "screeningResult": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "status": {
      "type": "string",
      "enum": [
        "success",
        "partial_success",
        "error"
      ]
    }
  },
  "required": [
    "status"
  ],
  "additionalProperties": {}
}
🟢dynamoi_get_youtube_channel_data(artistId, cursor, dataset, endDate, format, ...)

Use this for data science on an artist's own connected YouTube channel: daily rows straight from the YouTube Analytics warehouse, paged. Pick one dataset: channel_daily (views, watch time, subscribers gained and lost, likes, shares, playlist starts, estimated revenue, ad revenue, gross revenue, monetized playbacks, CPM and playback-based CPM), video_daily (per-video metrics with titles; filter with videoIds), country_daily, traffic_source_daily, search_term_daily (YouTube search terms for the whole channel), subscribed_status_daily, device_daily, operating_system_daily, playback_location_daily, creator_content_type_daily, or video_catalog (video titles and publish dates). traffic_source_daily rows with source ADVERTISING carry trafficClass=paid and every other source carries trafficClass=organic, but that label only groups sources and is not organic proof: ad clicks that land in a playlist are credited mostly to PLAYLIST and SUBSCRIBER, so trafficClass=organic rows include ad sessions. Organic lift is growth in sources ads do not touch (YT_SEARCH, RELATED_VIDEO, browse features) or lift that persists after spend stops. Data is observed on the channel, not attributed to any campaign; compare periods yourself and use the campaigns block (dates, strategy, promoted videos) as context. YouTube data arrives about 2-3 days late and revenue can lag further: check coverage before comparing, and treat placeholderDays and missingDays as unknown, never zero. Not available yet: audience demographics, per-video traffic sources and per-video search terms. Needs a connected channel; a channel that must be reconnected is refused. Returns no ad spend. Before judging a campaign's strategy, read the strategyGuide from dynamoi_get_campaign. Page with nextCursor; format=summary returns only the summary and coverage.

輸入結構描述

{
  "type": "object",
  "properties": {
    "artistId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "cursor": {
      "type": "string",
      "minLength": 1,
      "maxLength": 1000
    },
    "dataset": {
      "type": "string",
      "enum": [
        "channel_daily",
        "video_daily",
        "country_daily",
        "traffic_source_daily",
        "search_term_daily",
        "subscribed_status_daily",
        "device_daily",
        "operating_system_daily",
        "playback_location_daily",
        "creator_content_type_daily",
        "video_catalog"
      ]
    },
    "endDate": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "format": {
      "type": "string",
      "enum": [
        "json",
        "summary"
      ]
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    },
    "startDate": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "videoIds": {
      "minItems": 1,
      "maxItems": 50,
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "^[A-Za-z0-9_-]{11}$"
      }
    }
  },
  "required": [
    "artistId",
    "dataset",
    "endDate",
    "startDate"
  ],
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {
        "artistId": {
          "type": "string"
        },
        "channelName": {
          "type": [
            "string",
            "null"
          ]
        },
        "dataset": {
          "type": "string"
        },
        "nextCursor": {
          "type": "string"
        },
        "rowCount": {
          "type": "number"
        },
        "summary": {
          "type": "string"
        }
      },
      "additionalProperties": {}
    },
    "kind": {
      "type": "string"
    },
    "message": {
      "type": "string"
    },
    "code": {
      "type": "string",
      "enum": [
        "ACCOUNT_READ_ONLY",
        "INVALID_SPOTIFY_SOURCE",
        "CAPABILITY_REQUIRED",
        "INSUFFICIENT_SCOPE",
        "STATE_CONFLICT",
        "QUOTE_CHANGED",
        "RATE_LIMITED",
        "OUTPUT_INVALID",
        "UNKNOWN_EFFECT"
      ]
    },
    "draftId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "failureStage": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "field": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "nextAction": {
      "type": "object",
      "properties": {
        "field": {
          "type": "string",
          "minLength": 1,
          "maxLength": 120
        },
        "kind": {
          "type": "string",
          "enum": [
            "provide_input",
            "read_status",
            "reconnect",
            "handoff"
          ]
        },
        "reason": {
          "type": "string",
          "minLength": 1,
          "maxLength": 240
        }
      },
      "required": [
        "kind"
      ],
      "additionalProperties": false
    },
    "prerequisite": {
      "type": "string",
      "minLength": 1,
      "maxLength": 240
    },
    "retryAfterSeconds": {
      "type": "integer",
      "minimum": 0,
      "maximum": 86400
    },
    "retryable": {
      "type": "boolean"
    },
    "screeningResult": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "status": {
      "type": "string",
      "enum": [
        "success",
        "partial_success",
        "error"
      ]
    }
  },
  "required": [
    "status"
  ],
  "additionalProperties": {}
}
🟢dynamoi_get_platform_status(artistId, format, onboardingAttemptId, onboardingFlow)

Use this when the user wants to know whether Spotify, Meta, or YouTube are connected and what setup steps still block launches. When polling after a connection-start flow, pass the returned onboardingAttemptId and onboardingFlow so Dynamoi ops can correlate the browser step. Do not use this for detailed billing questions. Never use this to personalize generic Instagram or marketing-advice questions.

輸入結構描述

{
  "type": "object",
  "properties": {
    "artistId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "format": {
      "type": "string",
      "enum": [
        "json",
        "summary"
      ]
    },
    "onboardingAttemptId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "onboardingFlow": {
      "type": "string",
      "enum": [
        "meta",
        "youtube"
      ]
    }
  },
  "required": [
    "artistId"
  ],
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {
        "artistId": {
          "type": "string"
        },
        "artistName": {
          "type": "string"
        },
        "platforms": {
          "type": "object",
          "properties": {},
          "additionalProperties": {}
        },
        "summary": {
          "type": "string"
        }
      },
      "additionalProperties": {}
    },
    "kind": {
      "type": "string"
    },
    "message": {
      "type": "string"
    },
    "code": {
      "type": "string",
      "enum": [
        "ACCOUNT_READ_ONLY",
        "INVALID_SPOTIFY_SOURCE",
        "CAPABILITY_REQUIRED",
        "INSUFFICIENT_SCOPE",
        "STATE_CONFLICT",
        "QUOTE_CHANGED",
        "RATE_LIMITED",
        "OUTPUT_INVALID",
        "UNKNOWN_EFFECT"
      ]
    },
    "draftId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "failureStage": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "field": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "nextAction": {
      "type": "object",
      "properties": {
        "field": {
          "type": "string",
          "minLength": 1,
          "maxLength": 120
        },
        "kind": {
          "type": "string",
          "enum": [
            "provide_input",
            "read_status",
            "reconnect",
            "handoff"
          ]
        },
        "reason": {
          "type": "string",
          "minLength": 1,
          "maxLength": 240
        }
      },
      "required": [
        "kind"
      ],
      "additionalProperties": false
    },
    "prerequisite": {
      "type": "string",
      "minLength": 1,
      "maxLength": 240
    },
    "retryAfterSeconds": {
      "type": "integer",
      "minimum": 0,
      "maximum": 86400
    },
    "retryable": {
      "type": "boolean"
    },
    "screeningResult": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "status": {
      "type": "string",
      "enum": [
        "success",
        "partial_success",
        "error"
      ]
    }
  },
  "required": [
    "status"
  ],
  "additionalProperties": {}
}
🟢dynamoi_get_distribution_application(artistId)

Use this when the user asks whether an artist qualifies for Dynamoi music distribution, wants the five application requirements, or wants the status of an existing distribution application. It checks Spotify connection, at least 1,000 Spotify followers, at least 10,000 verified Soundcharts monthly listeners, connected Facebook Page plus Instagram professional identity, and a connected YouTube channel. Meeting all five requirements permits an application but never guarantees approval. When the connection tools are available, use purpose=distribution_identity for missing Meta or YouTube identity; otherwise tell the user: 'You can do this in the Dynamoi dashboard at https://dynamoi.com/dashboard.' Identity connections do not require advertising billing.

輸入結構描述

{
  "type": "object",
  "properties": {
    "artistId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    }
  },
  "required": [
    "artistId"
  ],
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {},
      "additionalProperties": {}
    },
    "kind": {
      "type": "string",
      "enum": [
        "validation",
        "business",
        "platform",
        "unknown"
      ]
    },
    "message": {
      "type": "string"
    },
    "code": {
      "type": "string",
      "enum": [
        "ACCOUNT_READ_ONLY",
        "INVALID_SPOTIFY_SOURCE",
        "CAPABILITY_REQUIRED",
        "INSUFFICIENT_SCOPE",
        "STATE_CONFLICT",
        "QUOTE_CHANGED",
        "RATE_LIMITED",
        "OUTPUT_INVALID",
        "UNKNOWN_EFFECT"
      ]
    },
    "draftId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "failureStage": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "field": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "nextAction": {
      "type": "object",
      "properties": {
        "field": {
          "type": "string",
          "minLength": 1,
          "maxLength": 120
        },
        "kind": {
          "type": "string",
          "enum": [
            "provide_input",
            "read_status",
            "reconnect",
            "handoff"
          ]
        },
        "reason": {
          "type": "string",
          "minLength": 1,
          "maxLength": 240
        }
      },
      "required": [
        "kind"
      ],
      "additionalProperties": false
    },
    "prerequisite": {
      "type": "string",
      "minLength": 1,
      "maxLength": 240
    },
    "retryAfterSeconds": {
      "type": "integer",
      "minimum": 0,
      "maximum": 86400
    },
    "retryable": {
      "type": "boolean"
    },
    "screeningResult": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "status": {
      "type": "string",
      "enum": [
        "success",
        "partial_success",
        "error"
      ]
    }
  },
  "required": [
    "status"
  ],
  "additionalProperties": false
}
🟡dynamoi_apply_for_distribution(adultSignerAttestation, applicantCountry, artistId, confirmApplicationSubmission, payoutCountry, ...)

Submit an artist's application for Dynamoi music distribution after the user explicitly asks to apply and all five eligibility requirements are met. This records an application for manual review; it does not approve distribution, accept an agreement, submit a release, transfer rights, configure splits or tax forms, or deliver music to stores. All three valid ISO 3166-1 alpha-2 country or territory codes, an adult signer attestation, confirmApplicationSubmission=true, and a concise userIntentSummary are required. Country, tax, payout, sanctions, and provider-delivery checks remain manual progression gates after intake; a valid code does not imply approval. Repeated submission is idempotent for an active application.

輸入結構描述

{
  "type": "object",
  "properties": {
    "adultSignerAttestation": {
      "type": "boolean",
      "const": true
    },
    "applicantCountry": {
      "type": "string",
      "minLength": 2,
      "maxLength": 2
    },
    "artistId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "confirmApplicationSubmission": {
      "type": "boolean",
      "const": true
    },
    "payoutCountry": {
      "type": "string",
      "minLength": 2,
      "maxLength": 2
    },
    "taxResidencyCountry": {
      "type": "string",
      "minLength": 2,
      "maxLength": 2
    },
    "userIntentSummary": {
      "type": "string",
      "minLength": 1,
      "maxLength": 500
    }
  },
  "required": [
    "adultSignerAttestation",
    "applicantCountry",
    "artistId",
    "confirmApplicationSubmission",
    "payoutCountry",
    "taxResidencyCountry",
    "userIntentSummary"
  ],
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {},
      "additionalProperties": {}
    },
    "kind": {
      "type": "string",
      "enum": [
        "validation",
        "business",
        "platform",
        "unknown"
      ]
    },
    "message": {
      "type": "string"
    },
    "code": {
      "type": "string",
      "enum": [
        "ACCOUNT_READ_ONLY",
        "INVALID_SPOTIFY_SOURCE",
        "CAPABILITY_REQUIRED",
        "INSUFFICIENT_SCOPE",
        "STATE_CONFLICT",
        "QUOTE_CHANGED",
        "RATE_LIMITED",
        "OUTPUT_INVALID",
        "UNKNOWN_EFFECT"
      ]
    },
    "draftId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "failureStage": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "field": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "nextAction": {
      "type": "object",
      "properties": {
        "field": {
          "type": "string",
          "minLength": 1,
          "maxLength": 120
        },
        "kind": {
          "type": "string",
          "enum": [
            "provide_input",
            "read_status",
            "reconnect",
            "handoff"
          ]
        },
        "reason": {
          "type": "string",
          "minLength": 1,
          "maxLength": 240
        }
      },
      "required": [
        "kind"
      ],
      "additionalProperties": false
    },
    "prerequisite": {
      "type": "string",
      "minLength": 1,
      "maxLength": 240
    },
    "retryAfterSeconds": {
      "type": "integer",
      "minimum": 0,
      "maximum": 86400
    },
    "retryable": {
      "type": "boolean"
    },
    "screeningResult": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "status": {
      "type": "string",
      "enum": [
        "success",
        "partial_success",
        "error"
      ]
    }
  },
  "required": [
    "status"
  ],
  "additionalProperties": false
}
🟢dynamoi_preview_smart_link_themes(artistName, releaseTitle)

Use this when the user asks what Dynamoi Smart Link pages can look like, wants to compare Smart Link themes, or asks to preview the available themes before creating or updating a free Smart Link. This is a read-only visual preview and does not create, publish, update, or promote a Smart Link.

輸入結構描述

{
  "type": "object",
  "properties": {
    "artistName": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80
    },
    "releaseTitle": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80
    }
  },
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {
        "artistName": {
          "type": "string"
        },
        "releaseTitle": {
          "type": "string"
        },
        "themes": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "publicUrl": {
                "type": "string"
              },
              "summary": {
                "type": "string"
              }
            },
            "additionalProperties": {}
          }
        }
      },
      "required": [
        "artistName",
        "releaseTitle",
        "themes"
      ],
      "additionalProperties": {}
    },
    "kind": {
      "type": "string"
    },
    "message": {
      "type": "string"
    },
    "code": {
      "type": "string",
      "enum": [
        "ACCOUNT_READ_ONLY",
        "INVALID_SPOTIFY_SOURCE",
        "CAPABILITY_REQUIRED",
        "INSUFFICIENT_SCOPE",
        "STATE_CONFLICT",
        "QUOTE_CHANGED",
        "RATE_LIMITED",
        "OUTPUT_INVALID",
        "UNKNOWN_EFFECT"
      ]
    },
    "draftId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "failureStage": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "field": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "nextAction": {
      "type": "object",
      "properties": {
        "field": {
          "type": "string",
          "minLength": 1,
          "maxLength": 120
        },
        "kind": {
          "type": "string",
          "enum": [
            "provide_input",
            "read_status",
            "reconnect",
            "handoff"
          ]
        },
        "reason": {
          "type": "string",
          "minLength": 1,
          "maxLength": 240
        }
      },
      "required": [
        "kind"
      ],
      "additionalProperties": false
    },
    "prerequisite": {
      "type": "string",
      "minLength": 1,
      "maxLength": 240
    },
    "retryAfterSeconds": {
      "type": "integer",
      "minimum": 0,
      "maximum": 86400
    },
    "retryable": {
      "type": "boolean"
    },
    "screeningResult": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "status": {
      "type": "string",
      "enum": [
        "success",
        "partial_success",
        "error"
      ]
    }
  },
  "required": [
    "status"
  ],
  "additionalProperties": {}
}
🔴dynamoi_create_smart_link_from_spotify(artistId, clientRequestId, customDescription, format, spotifyUrl, ...)

Use this when the user wants to create one free Dynamoi Smart Link from a Spotify album or track URL/URI, or a single starter release from a Spotify artist URL. For full-catalog artist imports or artist hub requests, prefer dynamoi_create_smart_links_from_spotify_artist. Smart Links are free to create and manage. High-popularity or unverifiable artist links may stay unpublished in verification hold until Dynamoi can verify the client relationship. This does not create a paid ad campaign. Spotify playlist URLs are not supported today. This is also how to add a release missing from an artist's imported catalog: the user pastes that release's exact Spotify album, single, or EP URL. If the Smart Link already exists, return the existing link instead of creating a duplicate; if customDescription is provided, update that Smart Link's public description. In the final answer, lead with the public URL and do not expose internal IDs unless asked.

輸入結構描述

{
  "type": "object",
  "properties": {
    "artistId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "clientRequestId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "customDescription": {
      "type": "string",
      "maxLength": 500
    },
    "format": {
      "type": "string",
      "enum": [
        "json",
        "summary"
      ]
    },
    "spotifyUrl": {
      "type": "string",
      "minLength": 1,
      "maxLength": 500
    },
    "userIntentSummary": {
      "type": "string",
      "maxLength": 500
    }
  },
  "required": [
    "artistId",
    "spotifyUrl"
  ],
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {
        "artistHubUrl": {
          "type": "string"
        },
        "artistId": {
          "type": "string"
        },
        "artistName": {
          "type": "string"
        },
        "claimStatus": {
          "type": "string",
          "enum": [
            "auto_approved",
            "pending_ops_review",
            "verification_deferred",
            "approved_by_ops",
            "rejected"
          ]
        },
        "createdAt": {
          "type": "string"
        },
        "id": {
          "type": "string"
        },
        "isPublic": {
          "type": "boolean"
        },
        "localizedPublicUrls": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "publicUrl": {
          "type": "string"
        },
        "publishState": {
          "type": "string",
          "enum": [
            "published",
            "unpublished"
          ]
        },
        "releaseSlug": {
          "type": "string"
        },
        "releaseTitle": {
          "type": "string"
        },
        "releaseType": {
          "type": "string"
        },
        "renderState": {
          "type": "string",
          "enum": [
            "queued",
            "rendering",
            "rendered",
            "failed"
          ]
        },
        "spotifyUrl": {
          "type": [
            "string",
            "null"
          ]
        },
        "takedownStatus": {
          "type": "string",
          "enum": [
            "none",
            "active",
            "resolved"
          ]
        },
        "theme": {
          "type": "string",
          "enum": [
            "classic",
            "brutalist",
            "aurora",
            "cinematic"
          ]
        },
        "updatedAt": {
          "type": "string"
        },
        "actionRequired": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "customDescription": {
          "type": [
            "string",
            "null"
          ]
        },
        "nextActions": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "originalSpotifyUrl": {
          "type": [
            "string",
            "null"
          ]
        },
        "summary": {
          "type": "string"
        },
        "warnings": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "outcome": {
          "type": "string",
          "enum": [
            "created",
            "existing"
          ]
        },
        "workflowWarning": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "required": [
        "artistHubUrl",
        "artistId",
        "artistName",
        "claimStatus",
        "createdAt",
        "id",
        "isPublic",
        "publicUrl",
        "publishState",
        "releaseSlug",
        "releaseTitle",
        "releaseType",
        "renderState",
        "spotifyUrl",
        "takedownStatus",
        "theme",
        "updatedAt",
        "customDescription",
        "nextActions",
        "originalSpotifyUrl",
        "summary",
        "outcome",
        "workflowWarning"
      ],
      "additionalProperties": false
    },
    "kind": {
      "type": "string",
      "enum": [
        "validation",
        "business",
        "platform",
        "unknown"
      ]
    },
    "message": {
      "type": "string"
    },
    "code": {
      "type": "string",
      "enum": [
        "ACCOUNT_READ_ONLY",
        "INVALID_SPOTIFY_SOURCE",
        "CAPABILITY_REQUIRED",
        "INSUFFICIENT_SCOPE",
        "STATE_CONFLICT",
        "QUOTE_CHANGED",
        "RATE_LIMITED",
        "OUTPUT_INVALID",
        "UNKNOWN_EFFECT"
      ]
    },
    "draftId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "failureStage": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "field": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "nextAction": {
      "type": "object",
      "properties": {
        "field": {
          "type": "string",
          "minLength": 1,
          "maxLength": 120
        },
        "kind": {
          "type": "string",
          "enum": [
            "provide_input",
            "read_status",
            "reconnect",
            "handoff"
          ]
        },
        "reason": {
          "type": "string",
          "minLength": 1,
          "maxLength": 240
        }
      },
      "required": [
        "kind"
      ],
      "additionalProperties": false
    },
    "prerequisite": {
      "type": "string",
      "minLength": 1,
      "maxLength": 240
    },
    "retryAfterSeconds": {
      "type": "integer",
      "minimum": 0,
      "maximum": 86400
    },
    "retryable": {
      "type": "boolean"
    },
    "screeningResult": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "status": {
      "type": "string",
      "enum": [
        "success",
        "error"
      ]
    }
  },
  "required": [
    "status"
  ],
  "additionalProperties": false
}
🟡dynamoi_create_smart_links_from_spotify_artist(artistId, clientRequestId, format, spotifyArtistUrl, userIntentSummary)

Use this when the user gives a Spotify artist URL and wants Dynamoi to create, import, or refresh free Smart Links for the artist catalog and return the artist hub. If the signed-in user has no Dynamoi artist yet, omit artistId so Dynamoi can create the first artist from the Spotify artist profile. This starts the background catalog import so the user does not need to open the dashboard. Smart Links are free to create and manage. High-popularity or unverifiable artist catalog links may stay unpublished in verification hold until Dynamoi can verify the client relationship. This does not create a paid ad campaign. In the final answer, lead with the artist hub URL and current public Smart Link URLs; do not expose internal IDs unless asked.

輸入結構描述

{
  "type": "object",
  "properties": {
    "artistId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "clientRequestId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "format": {
      "type": "string",
      "enum": [
        "json",
        "summary"
      ]
    },
    "spotifyArtistUrl": {
      "type": "string",
      "minLength": 1,
      "maxLength": 500
    },
    "userIntentSummary": {
      "type": "string",
      "maxLength": 500
    }
  },
  "required": [
    "spotifyArtistUrl"
  ],
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {
        "artistCreatedFromSpotify": {
          "type": "boolean"
        },
        "artistHubUrl": {
          "type": "string"
        },
        "artistId": {
          "type": "string"
        },
        "artistName": {
          "type": "string"
        },
        "catalogImportStatus": {
          "type": "string",
          "enum": [
            "started",
            "start_failed"
          ]
        },
        "currentSmartLinkCount": {
          "type": "number"
        },
        "existingCount": {
          "type": "number"
        },
        "initialSmartLink": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "artistHubUrl": {
                  "type": "string"
                },
                "artistId": {
                  "type": "string"
                },
                "artistName": {
                  "type": "string"
                },
                "claimStatus": {
                  "type": "string",
                  "enum": [
                    "auto_approved",
                    "pending_ops_review",
                    "verification_deferred",
                    "approved_by_ops",
                    "rejected"
                  ]
                },
                "createdAt": {
                  "type": "string"
                },
                "id": {
                  "type": "string"
                },
                "isPublic": {
                  "type": "boolean"
                },
                "localizedPublicUrls": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "publicUrl": {
                  "type": "string"
                },
                "publishState": {
                  "type": "string",
                  "enum": [
                    "published",
                    "unpublished"
                  ]
                },
                "releaseSlug": {
                  "type": "string"
                },
                "releaseTitle": {
                  "type": "string"
                },
                "releaseType": {
                  "type": "string"
                },
                "renderState": {
                  "type": "string",
                  "enum": [
                    "queued",
                    "rendering",
                    "rendered",
                    "failed"
                  ]
                },
                "spotifyUrl": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "takedownStatus": {
                  "type": "string",
                  "enum": [
                    "none",
                    "active",
                    "resolved"
                  ]
                },
                "theme": {
                  "type": "string",
                  "enum": [
                    "classic",
                    "brutalist",
                    "aurora",
                    "cinematic"
                  ]
                },
                "updatedAt": {
                  "type": "string"
                }
              },
              "required": [
                "artistHubUrl",
                "artistId",
                "artistName",
                "claimStatus",
                "createdAt",
                "id",
                "isPublic",
                "publicUrl",
                "publishState",
                "releaseSlug",
                "releaseTitle",
                "releaseType",
                "renderState",
                "spotifyUrl",
                "takedownStatus",
                "theme",
                "updatedAt"
              ],
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ]
        },
        "newlyAvailableCount": {
          "type": "number"
        },
        "nextActions": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "smartLinks": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "artistHubUrl": {
                "type": "string"
              },
              "artistId": {
                "type": "string"
              },
              "artistName": {
                "type": "string"
              },
              "claimStatus": {
                "type": "string",
                "enum": [
                  "auto_approved",
                  "pending_ops_review",
                  "verification_deferred",
                  "approved_by_ops",
                  "rejected"
                ]
              },
              "createdAt": {
                "type": "string"
              },
              "id": {
                "type": "string"
              },
              "isPublic": {
                "type": "boolean"
              },
              "localizedPublicUrls": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "publicUrl": {
                "type": "string"
              },
              "publishState": {
                "type": "string",
                "enum": [
                  "published",
                  "unpublished"
                ]
              },
              "releaseSlug": {
                "type": "string"
              },
              "releaseTitle": {
                "type": "string"
              },
              "releaseType": {
                "type": "string"
              },
              "renderState": {
                "type": "string",
                "enum": [
                  "queued",
                  "rendering",
                  "rendered",
                  "failed"
                ]
              },
              "spotifyUrl": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "takedownStatus": {
                "type": "string",
                "enum": [
                  "none",
                  "active",
                  "resolved"
                ]
              },
              "theme": {
                "type": "string",
                "enum": [
                  "classic",
                  "brutalist",
                  "aurora",
                  "cinematic"
                ]
              },
              "updatedAt": {
                "type": "string"
              }
            },
            "required": [
              "artistHubUrl",
              "artistId",
              "artistName",
              "claimStatus",
              "createdAt",
              "id",
              "isPublic",
              "publicUrl",
              "publishState",
              "releaseSlug",
              "releaseTitle",
              "releaseType",
              "renderState",
              "spotifyUrl",
              "takedownStatus",
              "theme",
              "updatedAt"
            ],
            "additionalProperties": false
          }
        },
        "spotifyArtistUrl": {
          "type": "string"
        },
        "summary": {
          "type": "string"
        },
        "warnings": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "required": [
        "artistHubUrl",
        "artistId",
        "artistName",
        "catalogImportStatus",
        "currentSmartLinkCount",
        "existingCount",
        "initialSmartLink",
        "newlyAvailableCount",
        "nextActions",
        "smartLinks",
        "spotifyArtistUrl",
        "summary"
      ],
      "additionalProperties": false
    },
    "kind": {
      "type": "string",
      "enum": [
        "validation",
        "business",
        "platform",
        "unknown"
      ]
    },
    "message": {
      "type": "string"
    },
    "code": {
      "type": "string",
      "enum": [
        "ACCOUNT_READ_ONLY",
        "INVALID_SPOTIFY_SOURCE",
        "CAPABILITY_REQUIRED",
        "INSUFFICIENT_SCOPE",
        "STATE_CONFLICT",
        "QUOTE_CHANGED",
        "RATE_LIMITED",
        "OUTPUT_INVALID",
        "UNKNOWN_EFFECT"
      ]
    },
    "draftId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "failureStage": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "field": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "nextAction": {
      "type": "object",
      "properties": {
        "field": {
          "type": "string",
          "minLength": 1,
          "maxLength": 120
        },
        "kind": {
          "type": "string",
          "enum": [
            "provide_input",
            "read_status",
            "reconnect",
            "handoff"
          ]
        },
        "reason": {
          "type": "string",
          "minLength": 1,
          "maxLength": 240
        }
      },
      "required": [
        "kind"
      ],
      "additionalProperties": false
    },
    "prerequisite": {
      "type": "string",
      "minLength": 1,
      "maxLength": 240
    },
    "retryAfterSeconds": {
      "type": "integer",
      "minimum": 0,
      "maximum": 86400
    },
    "retryable": {
      "type": "boolean"
    },
    "screeningResult": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "status": {
      "type": "string",
      "enum": [
        "success",
        "error"
      ]
    }
  },
  "required": [
    "status"
  ],
  "additionalProperties": false
}
🟢dynamoi_list_smart_links(artistId, cursor, format, limit, query, ...)

Use this when the user wants to list free Smart Links for one artist, including release title, public URL, publish state, claim state, render state, and theme. Do not use this for paid campaign lists; use dynamoi_list_campaigns for campaigns. In the final answer, show public URLs and avoid internal IDs unless asked. If empty for an artist with connected Spotify, suggest dynamoi_create_smart_links_from_spotify_artist for catalog import or dynamoi_create_smart_link_from_spotify for one release instead of stopping at 'no Smart Links yet'.

輸入結構描述

{
  "type": "object",
  "properties": {
    "artistId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "cursor": {
      "type": "string"
    },
    "format": {
      "type": "string",
      "enum": [
        "json",
        "summary"
      ]
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    },
    "query": {
      "type": "string",
      "maxLength": 120
    },
    "claimStatus": {
      "type": "string",
      "enum": [
        "auto_approved",
        "pending_ops_review",
        "verification_deferred",
        "approved_by_ops",
        "rejected"
      ]
    },
    "publishState": {
      "type": "string",
      "enum": [
        "published",
        "unpublished"
      ]
    },
    "renderState": {
      "type": "string",
      "enum": [
        "queued",
        "rendering",
        "rendered",
        "failed"
      ]
    }
  },
  "required": [
    "artistId"
  ],
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "nextCursor": {
              "type": "string"
            },
            "smartLinks": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "artistHubUrl": {
                    "type": "string"
                  },
                  "artistId": {
                    "type": "string"
                  },
                  "artistName": {
                    "type": "string"
                  },
                  "claimStatus": {
                    "type": "string",
                    "enum": [
                      "auto_approved",
                      "pending_ops_review",
                      "verification_deferred",
                      "approved_by_ops",
                      "rejected"
                    ]
                  },
                  "createdAt": {
                    "type": "string"
                  },
                  "id": {
                    "type": "string"
                  },
                  "isPublic": {
                    "type": "boolean"
                  },
                  "localizedPublicUrls": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "publicUrl": {
                    "type": "string"
                  },
                  "publishState": {
                    "type": "string",
                    "enum": [
                      "published",
                      "unpublished"
                    ]
                  },
                  "releaseSlug": {
                    "type": "string"
                  },
                  "releaseTitle": {
                    "type": "string"
                  },
                  "releaseType": {
                    "type": "string"
                  },
                  "renderState": {
                    "type": "string",
                    "enum": [
                      "queued",
                      "rendering",
                      "rendered",
                      "failed"
                    ]
                  },
                  "spotifyUrl": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "takedownStatus": {
                    "type": "string",
                    "enum": [
                      "none",
                      "active",
                      "resolved"
                    ]
                  },
                  "theme": {
                    "type": "string",
                    "enum": [
                      "classic",
                      "brutalist",
                      "aurora",
                      "cinematic"
                    ]
                  },
                  "updatedAt": {
                    "type": "string"
                  }
                },
                "required": [
                  "artistHubUrl",
                  "artistId",
                  "artistName",
                  "claimStatus",
                  "createdAt",
                  "id",
                  "isPublic",
                  "publicUrl",
                  "publishState",
                  "releaseSlug",
                  "releaseTitle",
                  "releaseType",
                  "renderState",
                  "spotifyUrl",
                  "takedownStatus",
                  "theme",
                  "updatedAt"
                ],
                "additionalProperties": false
              }
            }
          },
          "required": [
            "smartLinks"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "nextCursor": {
              "type": "string"
            },
            "summary": {
              "type": "string"
            },
            "totalCount": {
              "type": "number"
            }
          },
          "required": [
            "summary",
            "totalCount"
          ],
          "additionalProperties": false
        }
      ]
    },
    "kind": {
      "type": "string",
      "enum": [
        "validation",
        "business",
        "platform",
        "unknown"
      ]
    },
    "message": {
      "type": "string"
    },
    "code": {
      "type": "string",
      "enum": [
        "ACCOUNT_READ_ONLY",
        "INVALID_SPOTIFY_SOURCE",
        "CAPABILITY_REQUIRED",
        "INSUFFICIENT_SCOPE",
        "STATE_CONFLICT",
        "QUOTE_CHANGED",
        "RATE_LIMITED",
        "OUTPUT_INVALID",
        "UNKNOWN_EFFECT"
      ]
    },
    "draftId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "failureStage": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "field": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "nextAction": {
      "type": "object",
      "properties": {
        "field": {
          "type": "string",
          "minLength": 1,
          "maxLength": 120
        },
        "kind": {
          "type": "string",
          "enum": [
            "provide_input",
            "read_status",
            "reconnect",
            "handoff"
          ]
        },
        "reason": {
          "type": "string",
          "minLength": 1,
          "maxLength": 240
        }
      },
      "required": [
        "kind"
      ],
      "additionalProperties": false
    },
    "prerequisite": {
      "type": "string",
      "minLength": 1,
      "maxLength": 240
    },
    "retryAfterSeconds": {
      "type": "integer",
      "minimum": 0,
      "maximum": 86400
    },
    "retryable": {
      "type": "boolean"
    },
    "screeningResult": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "status": {
      "type": "string",
      "enum": [
        "success",
        "error"
      ]
    }
  },
  "required": [
    "status"
  ],
  "additionalProperties": false
}
🟢dynamoi_get_smart_link(artistId, dateRange, format, granularity, includeAnalytics, ...)

Use this when the user wants full details for one free Smart Link, including release, Spotify URL, public play.dynamoi.com URL, current status, theme source, and next actions. Set includeAnalytics=true for visit/click analytics and includeArtistSettings=true for artist-level theme/pixel settings. In the final answer, lead with the public URL and do not expose internal IDs unless asked.

輸入結構描述

{
  "type": "object",
  "properties": {
    "artistId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "dateRange": {
      "type": "object",
      "properties": {
        "end": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
        },
        "start": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
        }
      },
      "required": [
        "end",
        "start"
      ],
      "additionalProperties": false
    },
    "format": {
      "type": "string",
      "enum": [
        "json",
        "summary"
      ]
    },
    "granularity": {
      "type": "string",
      "enum": [
        "TOTAL",
        "DAILY"
      ]
    },
    "includeAnalytics": {
      "type": "boolean"
    },
    "includeArtistSettings": {
      "type": "boolean"
    },
    "includeBreakdowns": {
      "type": "boolean"
    },
    "playLinkId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "spotifyUrl": {
      "type": "string",
      "minLength": 1,
      "maxLength": 500
    }
  },
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "publicUrl": {
          "type": "string"
        },
        "summary": {
          "type": "string"
        },
        "artistId": {
          "type": "string"
        },
        "artistName": {
          "type": "string"
        },
        "nextActions": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "publishState": {
          "type": "string"
        },
        "releaseTitle": {
          "type": "string"
        },
        "theme": {
          "type": "string"
        }
      },
      "additionalProperties": {}
    },
    "kind": {
      "type": "string"
    },
    "message": {
      "type": "string"
    },
    "code": {
      "type": "string",
      "enum": [
        "ACCOUNT_READ_ONLY",
        "INVALID_SPOTIFY_SOURCE",
        "CAPABILITY_REQUIRED",
        "INSUFFICIENT_SCOPE",
        "STATE_CONFLICT",
        "QUOTE_CHANGED",
        "RATE_LIMITED",
        "OUTPUT_INVALID",
        "UNKNOWN_EFFECT"
      ]
    },
    "draftId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "failureStage": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "field": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "nextAction": {
      "type": "object",
      "properties": {
        "field": {
          "type": "string",
          "minLength": 1,
          "maxLength": 120
        },
        "kind": {
          "type": "string",
          "enum": [
            "provide_input",
            "read_status",
            "reconnect",
            "handoff"
          ]
        },
        "reason": {
          "type": "string",
          "minLength": 1,
          "maxLength": 240
        }
      },
      "required": [
        "kind"
      ],
      "additionalProperties": false
    },
    "prerequisite": {
      "type": "string",
      "minLength": 1,
      "maxLength": 240
    },
    "retryAfterSeconds": {
      "type": "integer",
      "minimum": 0,
      "maximum": 86400
    },
    "retryable": {
      "type": "boolean"
    },
    "screeningResult": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "status": {
      "type": "string",
      "enum": [
        "success",
        "partial_success",
        "error"
      ]
    }
  },
  "required": [
    "status"
  ],
  "additionalProperties": {}
}
🔴dynamoi_update_smart_link(action, artistId, clientRequestId, customDescription, expectedUpdatedAt, ...)

Use this when the user wants to change one Smart Link's public description or update artist-level Smart Link theme/pixel settings. Set action to update_description or update_artist_settings. Public availability is artist-wide in the dashboard; this tool does not publish or unpublish individual links. Theme-only updates switch instantly; description or pixel changes may queue background rendering.

輸入結構描述

{
  "type": "object",
  "properties": {
    "action": {
      "type": "string",
      "enum": [
        "update_description",
        "update_artist_settings"
      ]
    },
    "artistId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "clientRequestId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "customDescription": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 500
        },
        {
          "type": "null"
        }
      ]
    },
    "expectedUpdatedAt": {
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
    },
    "googleAdsConversionId": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 32
        },
        {
          "type": "null"
        }
      ]
    },
    "metaPixelId": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 32
        },
        {
          "type": "null"
        }
      ]
    },
    "playLinkId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "theme": {
      "type": "string",
      "enum": [
        "classic",
        "brutalist",
        "aurora",
        "cinematic"
      ]
    },
    "tiktokPixelId": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 32
        },
        {
          "type": "null"
        }
      ]
    },
    "userIntentSummary": {
      "type": "string",
      "maxLength": 500
    }
  },
  "required": [
    "action"
  ],
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "publicUrl": {
          "type": "string"
        },
        "summary": {
          "type": "string"
        },
        "artistId": {
          "type": "string"
        },
        "artistName": {
          "type": "string"
        },
        "defaultTheme": {
          "type": "string"
        },
        "renderQueuedCount": {
          "type": "number"
        },
        "renderWarning": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "additionalProperties": {}
    },
    "kind": {
      "type": "string"
    },
    "message": {
      "type": "string"
    },
    "code": {
      "type": "string",
      "enum": [
        "ACCOUNT_READ_ONLY",
        "INVALID_SPOTIFY_SOURCE",
        "CAPABILITY_REQUIRED",
        "INSUFFICIENT_SCOPE",
        "STATE_CONFLICT",
        "QUOTE_CHANGED",
        "RATE_LIMITED",
        "OUTPUT_INVALID",
        "UNKNOWN_EFFECT"
      ]
    },
    "draftId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "failureStage": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "field": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "nextAction": {
      "type": "object",
      "properties": {
        "field": {
          "type": "string",
          "minLength": 1,
          "maxLength": 120
        },
        "kind": {
          "type": "string",
          "enum": [
            "provide_input",
            "read_status",
            "reconnect",
            "handoff"
          ]
        },
        "reason": {
          "type": "string",
          "minLength": 1,
          "maxLength": 240
        }
      },
      "required": [
        "kind"
      ],
      "additionalProperties": false
    },
    "prerequisite": {
      "type": "string",
      "minLength": 1,
      "maxLength": 240
    },
    "retryAfterSeconds": {
      "type": "integer",
      "minimum": 0,
      "maximum": 86400
    },
    "retryable": {
      "type": "boolean"
    },
    "screeningResult": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "status": {
      "type": "string",
      "enum": [
        "success",
        "partial_success",
        "error"
      ]
    }
  },
  "required": [
    "status"
  ],
  "additionalProperties": {}
}

社群

為此伺服器評分

證據

近期觀測

已驗證未記錄版本19 個工具
已驗證未記錄版本18 個工具
已驗證未記錄版本17 個工具