recoup-create-artist
End-to-end playbook for creating, identifying, and enriching a new artist account. Use when the user asks to create, add, onboard, or set up a new artist — phrases like "create artist", "onboard X", "add this artist", "set up a new artist", or any task that starts a brand-new artist record from a name. The skill drives 8 sequential API calls (create → Spotify match → PATCH profile → Songstats research → Spotify catalog → web socials search → PATCH socials → synthesize KB) from a `RECOUP.md` checklist scaffolded by the `recoup-artist-workspace` skill, ticking each box and persisting captured values back to the file as it goes.
What this skill does
# Create New Artist The canonical recipe used internally by Recoup's chat agent. Follow it step-by-step to bring a brand-new artist account up to "researched + enriched" parity from a sandbox or any external agent. The chain is **8 sequential API calls**. Long deterministic chains executed from prose memory tend to drop steps — the agent reads the doc once, runs a couple of calls, and forgets the rest. Drive the work from the `RECOUP.md` checklist file scaffolded by the [`recoup-artist-workspace`](https://github.com/recoupable/skills/tree/main/plugins/recoup-essentials/skills/recoup-artist-workspace) skill: tick each box and persist captured values back to the frontmatter as you go. The file IS the workflow state, and a fresh turn can resume by reading it. ## Prerequisites - `$RECOUP_ACCESS_TOKEN` — Bearer token for `api.recoupable.com` - `$RECOUP_ORG_ID` — the org the artist should belong to (recommended in sandboxes) - An artist name to create (e.g. `ARTIST_NAME="The Weeknd"`) - The artist's `RECOUP.md` already scaffolded (see `recoup-artist-workspace` skill, Step 0) The flow has three phases, all driven from the single checklist file: 1. **Create + identify** — `POST /api/artists`, then find the canonical Spotify match 2. **Enrich** — `PATCH` the artist with image/label/socials, then run structured research (Songstats profile/career/playlists) plus a web search for narrative context and additional socials 3. **Synthesize + persist** — generate a knowledge-base report, save it (RECOUP.md tree or hosted URL), then optionally `PATCH` the `knowledges` array **Don't run this chain under a throwaway `agent+` account.** Artist data created against an `[email protected]` email is permanently isolated to that account and can't be recovered if the API key is lost. Only run after the user has authenticated with their real email. ## Resuming a partial setup If `$ARTIST_DIR/RECOUP.md` already exists, do not re-scaffold and do not re-run completed steps. Read the file, find the first unchecked item, and resume from there using the values already saved in the frontmatter: ```bash # Show the next unchecked step grep -n '^- \[ \]' "$ARTIST_DIR/RECOUP.md" | head -1 ``` If every item is checked, the artist is fully set up — confirm with the user before doing anything else. ## Step 1: Create the artist ```bash ARTIST_RESPONSE=$(curl -sS -X POST "https://api.recoupable.com/api/artists" \ -H "Authorization: Bearer $RECOUP_ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d "$(jq -n --arg name "$ARTIST_NAME" --arg org "$RECOUP_ORG_ID" \ '{name: $name, organization_id: $org}')") ARTIST_ID=$(echo "$ARTIST_RESPONSE" | jq -r '.artist.account_id') ``` Capture `account_id` as `$ARTIST_ID` — every subsequent step needs it. `organization_id` is optional but should be included when running inside a sandbox so the artist is scoped to the right org. Full request/response schema: `https://developers.recoupable.com/api-reference/artists/create`. **After this step:** write `artistId: $ARTIST_ID` into the frontmatter and tick `- [ ] 1.` → `- [x] 1.` in `RECOUP.md`. ## Step 2: Find the canonical Spotify match ```bash SPOTIFY=$(curl -sS -G "https://api.recoupable.com/api/spotify/search" \ -H "Authorization: Bearer $RECOUP_ACCESS_TOKEN" \ --data-urlencode "q=$ARTIST_NAME" \ --data-urlencode "type=artist" \ --data-urlencode "limit=10") ``` Pick the best match: prefer an exact case-insensitive name match; if multiple, prefer the highest popularity score. Export the fields the rest of the chain needs: ```bash MATCH=$(echo "$SPOTIFY" | jq --arg name "$ARTIST_NAME" ' .artists.items | (map(select((.name | ascii_downcase) == ($name | ascii_downcase))) | sort_by(-.popularity) | first) // (sort_by(-.popularity) | first) ') SPOTIFY_ARTIST_ID=$(echo "$MATCH" | jq -r '.id // empty') SPOTIFY_PROFILE_URL=$(echo "$MATCH" | jq -r '.external_urls.spotify // empty') SPOTIFY_IMAGE_URL=$(echo "$MATCH" | jq -r '.images[0].url // empty') [ -n "$SPOTIFY_ARTIST_ID" ] || { echo "No Spotify match for $ARTIST_NAME"; exit 1; } ``` Also keep `genres`, `followers.total`, and `popularity` from `$MATCH` for the KB report later. Full schema: `https://developers.recoupable.com/api-reference/spotify/search`. **After this step:** write `spotifyArtistId`, `spotifyProfileUrl`, and `imageUrl` into the frontmatter, save `genres` / `followers.total` / `popularity` to the `## Notes` section, and tick `- [ ] 2.` → `- [x] 2.`. ## Step 3: Set basic profile + Spotify URL One `PATCH` covers the image and the Spotify social URL. Use **uppercase** platform keys in `profileUrls` (the API matches platforms case-sensitively — see the platform key reference at the bottom of this file). ```bash curl -sS -X PATCH "https://api.recoupable.com/api/artists/$ARTIST_ID" \ -H "Authorization: Bearer $RECOUP_ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d "$(jq -n --arg image "$SPOTIFY_IMAGE_URL" --arg url "$SPOTIFY_PROFILE_URL" \ '{image: $image, profileUrls: {SPOTIFY: $url}}')" ``` This single endpoint replaces what the chat tool chain runs as four separate MCP calls (`update_account_info` ×2, `update_artist_socials` ×2). Add `label` to the body if you discover one (e.g. from the step 4e web search or press) — the structured `profile` endpoint does **not** return a label field. Full body schema: `https://developers.recoupable.com/api-reference/artists/update`. **After this step:** tick `- [ ] 3.` → `- [x] 3.`. ## Step 4: Run structured research Don't use `POST /api/research/deep` here — it tends to hang in sandboxes and returns paraphrased prose. Instead, fan out across four bounded structured endpoints (one prerequisite lookup + three structured pulls + one web search). The outputs are typed JSON the agent can use directly without paraphrasing. **Retry transient misses.** The research endpoints sit behind a cache/refresh layer — a *cold* call can come back `status: "error"` (or `202`) and then succeed on retry. Treat any non-`success` response as transient and retry once or twice before giving up, so a cold miss doesn't silently write empty research into the workspace. Use this helper for the GET pulls below: ```bash research_get() { # usage: research_get <endpoint> [curl -G args...] local ep="$1"; shift local out="" for attempt in 1 2 3; do out=$(curl -sS --max-time 90 -G "https://api.recoupable.com/api/research/$ep" \ -H "Authorization: Bearer $RECOUP_ACCESS_TOKEN" "$@") [ "$(echo "$out" | jq -r '.status // "error"')" = "success" ] && { echo "$out"; return 0; } sleep 3 done echo "$out"; return 1 # last non-success body; caller logs it and leaves the box unchecked } ``` ### 4a: Look up the provider `artist_id` (Songstats) Most of the structured research endpoints take the research provider's `artist_id` — a short alphanumeric Songstats id like `wjcgfd9i`, **not** the Spotify ID. Resolve it once (from `artist_info.songstats_artist_id`) and reuse it for the rest of step 4. ```bash LOOKUP=$(research_get lookup --data-urlencode "spotifyId=$SPOTIFY_ARTIST_ID") PROVIDER_ARTIST_ID=$(echo "$LOOKUP" | jq -r '.artist_info.songstats_artist_id // empty') [ -n "$PROVIDER_ARTIST_ID" ] || { echo "No provider match for Spotify ID $SPOTIFY_ARTIST_ID — skipping structured research"; } ``` If the lookup fails (rare — most Spotify-discoverable artists have a provider profile), skip 4b–4d and just run 4e (web search). Full schema: `https://developers.recoupable.com/api-reference/research/lookup`. ### 4b: Pull the artist profile Returns bio, genres, country, social/streaming URLs (`links`), related artists, and avatar. Note: it does **not** return label, career stage, or follower/listener metrics — pull those from `/api/research/metrics` or the web search if you need them. ```bash PROFILE=$(research_get profile --data-urlencode "id=$PROVIDER_ARTIST_ID") ``` Full schema: `https://developers.recoupable.com/api-reference/research
Related in Ads & Marketing
ads
IncludedMulti-platform paid advertising audit and optimization skill. Analyzes Google, Meta, YouTube, LinkedIn, TikTok, Microsoft, and Apple Ads. 250+ checks with scoring, parallel agents, industry templates, and AI creative generation.
banana
IncludedAI image generation Creative Director powered by Google Gemini Nano Banana models. Use this skill for ANY request involving image creation, editing, visual asset production, or creative direction. Triggers on: generate an image, create a photo, edit this picture, design a logo, make a banner, visual for my anything, and all /banana commands. Handles text-to-image, image editing, multi-turn creative sessions, batch workflows, and brand presets.
rpg-migration-analyzer
IncludedAnalyzes legacy RPG (Report Program Generator) programs from AS/400 and IBM i systems for migration to modern Java applications. Extracts business logic from RPG III/IV/ILE source code, identifies data structures (D-specs), file operations (F-specs), program dependencies (CALLB/CALLP), and converts RPG constructs to Java equivalents. Generates migration reports, complexity estimates, and Java implementation strategies with POJO classes, JPA entities, and service methods. Use when modernizing AS/400 or IBM i legacy systems, analyzing RPG source files (.rpg, .rpgle, .RPGLE), converting RPG to Java, mapping data specifications to Java classes, planning legacy system migration, or when user mentions RPG analysis, Report Program Generator, RPG III/IV/ILE, AS/400 modernization, IBM i migration, packed decimal conversion, or mainframe application rewrite.
brand-library-architect
IncludedBuild a complete brand library for a product — visual asset render pipeline, brand documentation set (BRAND, COPY, MANIFESTO, BIOS, FAQ, GLOSSARY, TONE, PRICING), open-source convention files (README, CONTRIBUTING, SECURITY, CODE_OF_CONDUCT), and a self-contained press kit. This skill should be used when the user asks to "build a brand library / brand kit / press kit / brand assets" for a product, "set up a brand library workflow," "create a positioning manifesto plus visual identity," or any combination of brand documentation + visual asset pipeline. Apply phase-by-phase or run end-to-end. Templates are product-agnostic and use {{TOKEN}} placeholders the skill prompts the user to fill.
writing-tech-post
IncludedAuthors engineering blog posts end-to-end: launch deep-dives, incident postmortems, architecture migrations, performance case studies, tutorials, AI/agent system writeups, security disclosures, and research-to-product translations. Picks the correct archetype, plans the abstraction ladder, enforces an evidence cadence (diagrams, benchmarks, profiles, traces, code, ablations), tunes voice against publisher house styles (Datadog, Vercel, GitHub, AWS, Meta, Cloudflare, Jane Street), and runs a pre-publish gate for narrative momentum and disclosure ethics. Use when drafting a new engineering post, restructuring a draft that feels flat, deciding which evidence form belongs where, validating that depth and product context are balanced, or preparing a postmortem, migration, or performance narrative for external publication. Do not use for API reference documentation, README authoring, marketing copy, release notes, generic SEO content, ghost-written executive thought leadership, or non-engineering long-form essays.
blog-google
IncludedGoogle API integration for blog performance: PageSpeed Insights, CrUX Core Web Vitals with 25-week history, Search Console performance, URL Inspection, Indexing API, GA4 organic traffic, NLP entity analysis for E-E-A-T, YouTube video search for embedding, and Google Ads Keyword Planner. Progressive feature availability based on credential tier (API key, OAuth/service account, GA4, Ads). Shares config with claude-seo at ~/.config/claude-seo/google-api.json. Use when user says "google data", "page speed", "core web vitals", "search console", "indexation", "GA4", "keyword research", "nlp entities", "blog performance", "youtube search", "google api setup".