{"openapi":"3.1.0","info":{"title":"Kindly AI Skill Catalog","version":"2026-09-04","description":"Discover focused, vetted marketing skills. Free bodies are public. A person creates a scoped token in their Kindly AI account, then an agent can save onboarding answers and retrieve entitled artifacts through private endpoints."},"servers":[{"url":"https://kindly-ai.com"}],"externalDocs":{"description":"Create or revoke an agent token","url":"https://kindly-ai.com/account/tokens"},"paths":{"/api/resources":{"get":{"operationId":"getResourceAvailability","summary":"List free starter kits and the upcoming Marketing Brain","description":"Public relative URLs and availability. Marketing Brain is in development, not purchasable; no draft skill body or private context is returned.","responses":{"200":{"description":"Customer-facing resource availability","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/catalog":{"get":{"operationId":"searchMarketingSkills","summary":"Search public skill metadata","parameters":[{"name":"q","in":"query","schema":{"type":"string"}},{"name":"access","in":"query","schema":{"type":"string","enum":["free","member"]}},{"name":"category","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Matching public skill records","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/catalog/{slug}":{"get":{"operationId":"getMarketingSkill","summary":"Inspect one public skill record","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Public skill metadata and access links","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Skill not found"}}}},"/api/catalog/{slug}/content":{"get":{"operationId":"getFreeMarketingSkill","summary":"Retrieve a complete free SKILL.md artifact","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Complete free skill body","content":{"text/markdown":{"schema":{"type":"string"}}}},"401":{"description":"Member artifact; follow membershipUrl and onboardingUrl"},"404":{"description":"Skill not found"}}}},"/api/onboarding/{slug}":{"post":{"operationId":"onboardMarketingSkill","summary":"Save private answers and onboard one skill","description":"Requires a Kindly AI personal token with onboarding:write. Inspect the public skill record first for its onboarding question IDs.","security":[{"KindlyToken":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["answers"],"properties":{"answers":{"type":"object","additionalProperties":{"type":"string","maxLength":4000}}},"additionalProperties":false}}}},"responses":{"200":{"description":"Onboarding saved; response says whether the artifact is ready","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Answers do not match the skill's onboarding schema"},"401":{"description":"Token is missing, invalid, revoked, or expired"},"403":{"description":"Token lacks onboarding:write"},"404":{"description":"Skill not found"},"429":{"description":"Token rate limit exceeded"}}}},"/api/library/{slug}/artifact":{"get":{"operationId":"getOnboardedSkillArtifact","summary":"Retrieve a personalized, onboarded SKILL.md artifact","description":"Requires a Kindly AI personal token with artifacts:read, completed onboarding, and an active membership when the skill is member-only.","security":[{"KindlyToken":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Personalized skill artifact","content":{"text/markdown":{"schema":{"type":"string"}}}},"401":{"description":"Token is missing, invalid, revoked, or expired"},"403":{"description":"Token lacks artifacts:read or membership is inactive"},"404":{"description":"Skill not found"},"409":{"description":"Complete onboarding before retrieving this artifact"},"429":{"description":"Token rate limit exceeded"}}}}},"components":{"securitySchemes":{"KindlyToken":{"type":"http","scheme":"bearer","bearerFormat":"kai_pat_…","description":"A scoped personal token created at /account/tokens. Store it as a secret and send it only over HTTPS."}}}}