Skip to content

Artist Source of Truth Registry

Related documentation: Artist Endpoint Map (product flows) · Artist Module Backend API · Promoters API · Data Ownership

Last verified: 2026-06-07
Scope: Backend-Kisum-Promoters, Frontend-Kisum-Promoters, Backend-Kisum-Artists, Frontend-Kisum-Artists

This is the canonical dot-connector for artist-related APIs after the 2026-06 directory migration. For every artist-facing route it records:

  1. Who owns the data (source of truth)
  2. Which Promoters handler resolves it
  3. Which upstream is called (if any)
  4. Which Mongo / external stores are touched
  5. Which frontend file(s) call the route
  6. Which UI screen consumes the response

Use this page when debugging wrong data, planning migrations, or adding new artist endpoints.


ConcernSource of truthPromoters access pattern
Directory / profile shell — list, search, GET :id, name, image, country, genres (display), biography (read via network)Backend-Kisum-Artists PostgresMachine BFF: artists-directory.upstream.js or /api/artists-network/* transparent proxy
Analytics / enrichment — stats, demographics, discography, chart presence, predictions, trend, historical, platform UUIDs, Soundcharts/Viberate/Songstats/Spotify pipelinesMongo kisum_data.artists_v2 + data_analyst.artist_data + Kworb charts.* + external music APIsArtistsQuery.getArtistFromMongomust not route through Artists upstream
Booking / marketplace / roster / team / relationships / touringBackend-Kisum-Artists Postgres (workflow + intelligence modules)/api/artists-network/*/api/v1/* transparent proxy
  • Profile-only upstream: GET /api/artists, /search, /:id, /v2/artists*, event lineup display (resolveLineupArtists).
  • Analytics stay Mongo: getStatsById, getDemographicsById, discography, predictions, trend, etc. use getArtistFromMongo.
  • Event lineup stats use Mongo (getStatsById with null company).
  • Event predictions use Mongo batch (getArtistsFromMongoByRefs).
  • Browser never calls Backend-Kisum-Artists internal routes directly (except Frontend-Kisum-Artists agency app with Bearer to Artists public API).

flowchart TB
  subgraph FE_Promoters["Frontend-Kisum-Promoters"]
    Legacy["/api/artists/*\n(data.ts)"]
    Network["/api/artists-network/*\n(artists-network/api.ts)"]
    Events["/api/events/*\n(lineup)"]
  end

  subgraph FE_Artists["Frontend-Kisum-Artists"]
    Direct["ARTISTS_API_BASE_URL\n/api/v1/*"]
  end

  subgraph Promoters["Backend-Kisum-Promoters :3099"]
    ArtistsRoute["artists.route.js"]
    ArtistsV2["artists-v2.route.js"]
    NetworkRoute["artists-network.route.js"]
    EventsQuery["events.query.js"]
    UpstreamDir["artists-directory.upstream.js"]
    ArtistsQuery["artists.query.js"]
  end

  subgraph ArtistsSvc["Backend-Kisum-Artists :3831"]
    PG["Postgres artist master\n+ booking/marketplace"]
  end

  subgraph Mongo["Mongo kisum_data"]
    ArtistsV2Col["artists_v2"]
    ArtistData["data_analyst.artist_data"]
    Charts["charts.*"]
  end

  subgraph External["External APIs"]
    Spotify["Spotify / MusicData"]
    SC["Soundcharts"]
    VB["Viberate"]
    SS["Songstats"]
    DFS["DataForSEO"]
    BIT["Bandsintown"]
    SLF["Setlist.fm"]
    N8N["n8n market-analysis"]
  end

  Legacy --> ArtistsRoute
  Network --> NetworkRoute
  Events --> EventsQuery
  Direct --> ArtistsSvc

  ArtistsRoute -->|"list/search/getById"| UpstreamDir
  UpstreamDir --> ArtistsSvc
  ArtistsRoute -->|"stats/demographics/..."| ArtistsQuery
  ArtistsQuery --> ArtistsV2Col
  ArtistsQuery --> ArtistData
  ArtistsQuery --> Charts
  ArtistsQuery --> External

  NetworkRoute -->|"X-Internal-API-Key + Bearer + x-org"| ArtistsSvc
  EventsQuery -->|"display"| UpstreamDir
  EventsQuery -->|"stats/predictions"| ArtistsQuery

StoreDatabase / serviceCollection / tableOwns
Artist directory masterBackend-Kisum-Artists Postgresartists, artist_profiles, artist_genres, artist_platform_accounts, artist_provider_refs, artist_team, companies/people/rosterCanonical artist identity, profile, bio, genres, platform links, team, booking graph
Analytics artist documentMongo kisum_dataartists_v2Legacy enrichment doc: data_platforms, platforms, streamingPlatforms, socials, ranks, Soundcharts/Viberate UUIDs
Aggregated statsMongo data_analystartist_dataPrecomputed stats snapshots used by getStatsById / refresh pipelines
Historical seriesMongo kisum_dataartist_historical (via artistHistoricalModel)Cached fanbase/stream historical per channel
Genre taxonomy (legacy list)Mongo kisum_dataothers doc id: 'genres'GET /api/artists/genres filter dropdown
Chart presenceMongo Kworbcharts.* collectionsChart ranking presence
Promoter CRMMongo kisum_dataevents, offers, availsTenant-scoped business data; still reference artist ids from Mongo _id in many paths

FunctionFilePurposeSoT
listArtistsFromUpstream / searchArtistsFromUpstream / getArtistByIdFromUpstreamartists/artists-directory.upstream.jsMachine GET to Artists /api/v1/artists*Artists Postgres
resolveArtistMasterartists/queries/artists.query.jsSingle artist profile for display; maps legacy shapeArtists Postgres
resolveLineupArtistsartists/queries/artists.query.jsBatch upstream for event lineup name/image/countryArtists Postgres
getArtistFromMongoartists/queries/artists.query.jsLookup artists_v2 by numeric id, gid, or Mongo _idMongo
getArtistsFromMongoByRefsartists/queries/artists.query.jsBatch Mongo for predictionsMongo
artistsClient.requestservices/artists.client.jsHTTP to ARTISTS_INTERNAL_BASE_URL with X-Internal-API-KeyArtists service

Env (Promoters):

VariableRequired forNotes
ARTISTS_INTERNAL_BASE_URLDirectory + network BFFe.g. http://artists.local.kisum.io:3831
ARTISTS_INTERNAL_API_KEYAll Artists machine callsMust match Artists deployment
ARTISTS_API_TIMEOUT_MSOptionalDefault 30000

Directory routes return 503 when Artists env is unset.


Section A — Backend-Kisum-Promoters legacy /api/artists/*

Section titled “Section A — Backend-Kisum-Promoters legacy /api/artists/*”

Route file: artists/artists.route.js
Handler: artists/artists.controller.jsArtistsQuery / ArtistsCommand
Auth: Authorization Bearer + x-org (tenant). Most routes: optionalRequirePermissions([]). Writes: PERMISSIONS.ARTIST.EDIT.

#MethodPromoters pathQuery methodSource of truthUpstream / storesExternal APIsFrontend caller(s)UI / flow
1POST/api/artists/migratemigrateArtistsImagePathPromoters ops (image path fix)Mongo artists_v2 writesInternal/admin onlyMigration utility
2GET/api/artistsgetlistArtistsFromUpstreamArtists PostgresGET /api/v1/artists via machine BFFlibs/data.tsfetchArtists; hooks/use-artists.ts; combobox-artists.tsx; artists/page listArtist directory list, comboboxes, event create
3GET/api/artists/searchsearchsearchArtistsFromUpstreamArtists PostgresGET /api/v1/artists?q=libs/data.tssearchArtists; combobox-artists.tsxTypeahead search
4GET/api/artists/search/newsearchNewSpotify (live search)Spotify client (this.spotify.searchArtists)libs/data.tssearchArtistsNew; artists/add/page.tsxAdd artist — external discovery
5GET/api/artists/search/new/music-brainzsearchNewMusicBrainzMusicBrainzMUSIC_BRAINZ_URL WS APIlibs/data.tssearchArtistsMusicBrainzAdd artist — MB lookup
6GET/api/artists/genresgetGenresMongo otherskisum_data.others where id: 'genres'libs/data.tsgetArtistGenres; combobox-artist-genres.tsxGenre filter dropdowns
7GET/api/artists/platformsgetByPlatformMongo + live platform APIsgetArtistFromMongo for UUIDs; then Viberate/Songstats/SoundchartsPlatform resolver APIslibs/data.tsgetArtistPlatformsPlatform linking UI
8GET/api/artists/:id/trendgetTrendByIdDataForSEO (artist name from Mongo)getArtistFromMongo for nameGoogle Trends via DataForSEOlibs/data.tsgetArtistTrend*; some paths via Amplify ROUTER_URLAnalytics → trend charts
9GET/api/artists/:id/datagetDataByIdMongo analytics bundlegetArtistFromMongo + artist_dataVarious per fieldLegacy integrationsCountry-scoped data bundle
10GET/api/artists/:id/data-v2getDataByIdV2Mongo analytics bundleSame as dataVariousLegacyv2 data bundle
11GET/api/artists/:id/statsgetStatsByIdMongo artist_data + refreshgetArtistFromMongo; may refresh via Soundcharts/Viberate/SongstatsSpotify, SC, VB, SSlibs/data.tsgetArtistStats; artist-overview-audience.tsx; artist-analytics-statistic.tsx; getArtistDetailOverview uses /api/artist/:id/stats (typo path — verify proxy)Overview audience, analytics stats
12GET/api/artists/:id/card-statsgetCardStatsMongogetArtistFromMongo; may update socialslibs/data.tsgetArtistCardStats; artist-hero.tsxHero card metrics
13GET/api/artists/:id/demographicsgetDemographicsByIdMongo + platform APIsgetArtistFromMongo; data_platforms enrichment writesSoundcharts/Viberate/Songstats per channellibs/data.tsgetArtistDemographics_v2; artist-analytics-demographics.tsx; demographics *.tsx per platform; Next route app/api/artists/[id]/demographicsDemographics tabs
14GET/api/artists/:id/setlistfmgetSetlistfmByIdMongo + Setlist.fmgetArtistFromMongoSetlist.fm APILegacy setlist componentsSetlists
15GET/api/artists/:id/prediction/:countryCodegetPredictionByIdAndCountryCodeMongogetArtistFromMongoInternal prediction modelslibs/data.tsgetArtistPredictionPrediction by country
16GET/api/artists/:id/bandsintown/eventsgetBandsInTownEventsByIdMongo + BandsintowngetArtistFromMongoBandsintownlibs/data.tsgetArtistBandsintownEvents; artist-overview-upcoming-shows.tsx; artist-shows.tsxUpcoming shows
17GET/api/artists/:id/bandsintowngetBandsInTownByIdMongo + BandsintowngetArtistFromMongoBandsintownlibs/data.tsBandsintown profile
18GET/api/artists/:id/historicalgetHistoricalMongo artist_historical + Viberate/SoundchartsgetArtistFromMongo; cache collectionViberate, Soundchartslibs/data.tsgetArtistHistoricalHistorical fanbase charts
19GET/api/artists/:id/discography/:albumIdgetDiscographyAlbumByIdMusicData / SpotifyAlbum id from Mongo artist contextAPI-MusicData proxyartist-discography.tsxAlbum detail
20GET/api/artists/:id/discographygetDiscographyByIdMongo + MusicDatagetArtistFromMongo for Spotify idMusicData /spotify/*libs/data.tsgetArtistDiscography*; artist-discography.tsx; artist-overview-latest-release.tsxDiscography list
21GET/api/artists/:id/top-tracksgetTopTracksByIdMongo + SpotifygetArtistFromMongoSpotify / MusicDatalibs/data.tsgetArtistTopTracks; artist-overview-top-tracks.tsxTop tracks
22GET/api/artists/:id/top-songs-regionalgetRegionalTopSongsByIdMongo + analytics APIsgetArtistFromMongoSongstats / Soundchartslibs/data.ts; artist-regional-top-songs.shared.tsxRegional top songs
23GET/api/artists/:id/chart-presencegetChartPresenceByIdMongo Kworb charts.*getArtistFromMongoKworb chart DBlibs/data.tsgetArtistChartPresence; artist-overview-chart-presence.tsxChart presence
24GET/api/artists/:id/top-countriesgetTopCountriesByIdMongo (may write soundcharts_uuid)getArtistFromMongo; optional Mongo updateSoundchartslibs/data.tsgetArtistTopCountries; artist-overview-top-countries.tsxTop countries
25GET/api/artists/:id/charts/song/ranks/:platformgetChartSongRanksByIdSoundcharts (proxy)getArtistFromMongo; resolve/persist soundcharts_uuidSoundcharts GET /v2/artist/{uuid}/charts/song/ranks/{platform}(pending frontend)Chart song entries / peaks
26GET/api/artists/:id/eventsgetEventByArtistIdPromoters events collectionMongo events where artist in lineupEvent-artist cross viewsArtist’s events
27GET/api/artists/:id/performancegetPerformanceByIdMongo analyticsgetArtistFromMongoPerformance analyticsPerformance tab
28GET/api/artists/:id/contactsgetContactsByIdMongo artists_v2.teamAggregation on team.agencies / management peoplesLegacy contacts (prefer network team)Contacts drawer
29GET/api/artists/:idgetByIdresolveArtistMasterArtists PostgresGET /api/v1/artists/:id?include=profile,genres,platforms,providerslibs/data.tsgetArtist; legacy paths; Note: detail shell prefers artists-networkArtist detail fallback
30POST/api/artists/:id/prediction-v2getPredictionByIdV2MongogetArtistFromMongoInternal modelslibs/data.tsPrediction v2
31POST/api/artists/:id/prediction-v3getPredictionByIdV3MongogetArtistFromMongoInternal modelslibs/data.ts; app/api/artists/[id]/prediction-v3; Amplify ROUTER_URLartist-analytics-prediction.tsx
32POST/api/artists/market-analysisgetMarketAnalysisn8n workflowBody from Mongo-enriched contextn8n webhooklibs/data.tsgetArtistMarketAnalysis; artist-analytics-prediction.tsxMarket analysis AI
33POST/api/artistscreate (command)Mongo legacy createartists.command.js — still writes Mongo approval flowlibs/data.tscreateArtist; artists/add/page.tsxCreate artist (legacy) — prefer Artists module for new master
34POST/api/artists/:id/biocreateBio (command)Mongo bio write (legacy)Approval workflow in PromotersLegacy bio submitPrefer PUT /api/artists-network/artists/:id/profile

getArtistFromMongo accepts:

  • Numeric Kisum id (artists_v2.id)
  • Legacy Mongo gid string
  • Mongo _id ObjectId

resolveArtistMaster / upstream accept:

  • Bigint id, UUID, slug, or legacy gid (Artists service resolves)

Route file: artists/artists-v2.route.js

MethodPathHandlerSoTNotes
GET/api/v2/artistsArtistsQuery.getArtists PostgresSame as GET /api/artists
GET/api/v2/artists/:idArtistsQuery.getByIdArtists PostgresSame as GET /api/artists/:id

No Mongo layer models on live v2 list/detail path.


Section C — Backend-Kisum-Promoters /api/artists-network/*

Section titled “Section C — Backend-Kisum-Promoters /api/artists-network/*”

Route file: artists-network/artists-network.route.js
Proxy: artists-network/artists-network.controller.jsservices/artists.client.js
SoT: Backend-Kisum-Artists Postgres (all transparent proxies unless noted)
Auth: JWT + x-org + permission keys (promoter.artist, promoter.artist_offer, etc.)
Upstream headers: X-Internal-API-Key, forwarded Authorization, x-org

#MethodPromoters BFF pathArtists upstreamPermissionFE function (artists-network/api.ts)UI screen(s)
1GET/marketplace/artist-availabilities/api/v1/marketplace/artist-availabilitiesVIEW_AVAILsearchMarketplaceAvailsbooking/marketplace/page.tsx
2GET/marketplace/artists/api/v1/marketplace/artistsVIEW_ARTIST(marketplace browse)Marketplace
3GET/marketplace/agencies/api/v1/marketplace/agenciesVIEW_ARTISTlistMarketplaceAgenciesMarketplace agencies
4GET/companies/:id/api/v1/companies/:idVIEW_ARTISTgetArtistsCompanyAgency/company detail
5GET/companies/:id/roster/api/v1/companies/:id/rosterVIEW_ARTISTlistArtistsCompanyRosterRoster views
6GET/companies/:id/people/api/v1/companies/:id/peopleVIEW_ARTISTlistArtistsCompanyPeopleStaff/people
7GET/people/:id/api/v1/people/:idVIEW_ARTISTgetArtistsPersonPerson detail
8GET/people/:id/companies/api/v1/people/:id/companiesVIEW_ARTISTlistArtistsPersonCompaniesPerson ↔ companies
9GET/artists/api/v1/artistsVIEW_ARTISTlistArtistsDirectoryDirectory (network shape)
10GET/artists/:id/api/v1/artists/:idVIEW_ARTISTgetArtistsArtistBase shell
11GET/artists/:id/profile/api/v1/artists/:id/profileVIEW_ARTISTfetchArtistProfileRowartist-detail-context.tsx, artist-biography.tsx
12PUT/artists/:id/profile/api/v1/artists/:id/profileEDIT_ARTIST(profile edit)Bio edit
13POST/artists/:id/profile/ensure-short-bioBFF-only (Gemini → PUT profile)EDIT_ARTISTensureArtistsArtistShortBioartist-biography.tsx
14POST/artists/:id/profile/ensure-bio-formattedBFF-only (Gemini → PUT profile)EDIT_ARTISTensureArtistsArtistBioFormattedartist-biography.tsx
15GET/artists/:id/genres/api/v1/artists/:id/genresVIEW_ARTISTfetchArtistSubresourceRowsDetail tabs
16GET/artists/:id/subgenres/api/v1/artists/:id/subgenresVIEW_ARTISTfetchArtistSubresourceRowsDetail tabs
17GET/artists/:id/platform-accounts/api/v1/artists/:id/platform-accountsVIEW_ARTISTfetchArtistSubresourceRowsPlatforms
18GET/artists/:id/provider-refs/api/v1/artists/:id/provider-refsVIEW_ARTISTfetchArtistSubresourceRowsProvider refs
19GET/artists/:id/team/api/v1/artists/:id/teamVIEW_ARTISTgetArtistsArtistContactsContacts / team
20GET/artists/:id/roster/api/v1/artists/:id/rosterVIEW_ARTISTfetchArtistSubresourceRowsRoster links
21GET/promoters/:id/dashboard/api/v1/promoters/:id/dashboardVIEW_ARTISTgetPromoterDashboarddashboard-booking-network.tsx
22GET/promoters/:id/shortlists/api/v1/promoters/:id/shortlistsVIEW_ARTISTlistPromoterShortlistsbooking/shortlists/page.tsx
23POST/promoters/:id/shortlists/api/v1/promoters/:id/shortlistsEDIT_OFFERcreatePromoterShortlistcreate-shortlist-dialog.tsx
24POST/promoters/:id/shortlists/:shortlistId/artistssameEDIT_OFFERaddArtistToShortlistadd-artist-to-shortlist-dialog.tsx
25GET/promoters/:id/booking-history/api/v1/promoters/:id/booking-historyVIEW_OFFERDashboard/history
26GET/promoters/:id/inquiries/api/v1/promoters/:id/inquiriesVIEW_OFFERInquiries
27GET/promoters/:id/offers/api/v1/promoters/:id/offersVIEW_OFFERLegacy offers list
28GET/booking-requests/api/v1/booking-requestsVIEW_OFFERlistBookingRequestsbooking/requests/page.tsx
29POST/booking-requests/api/v1/booking-requestsEDIT_OFFERcreateBookingRequestsend-booking-request-sheet.tsx
30GET/booking-requests/:requestId/api/v1/booking-requests/:requestIdVIEW_OFFERgetBookingRequestbooking/requests/[id]/page.tsx
31PATCH/booking-requests/:requestId/api/v1/booking-requests/:requestIdEDIT_OFFERpatchBookingRequestRequest edit
32POST/booking-requests/:requestId/withdraw/api/v1/booking-requests/:requestId/withdrawEDIT_OFFERwithdrawBookingRequestwithdraw-request-dialog.tsx
33POST/booking-requests/:requestId/convert-to-offer/api/v1/booking-requests/:requestId/convert-to-offerEDIT_OFFERconvertBookingRequestToOfferconvert-to-offer-dialog.tsx
34GET/booking-offers/api/v1/booking-offersVIEW_OFFERlistBookingOffersbooking/offers/page.tsx
35POST/booking-offers/api/v1/booking-offersEDIT_OFFERCreate offer
36GET/booking-offers/:offerId/api/v1/booking-offers/:offerIdVIEW_OFFERgetBookingOfferbooking/offers/[id]/page.tsx
37POST/booking-offers/:offerId/counter/api/v1/booking-offers/:offerId/counterEDIT_OFFERcounterBookingOffercounter-offer-dialog.tsx
38POST/booking-offers/:offerId/accept/api/v1/booking-offers/:offerId/acceptEDIT_OFFERacceptBookingOfferaccept-offer-dialog.tsx
39POST/booking-offers/:offerId/decline/api/v1/booking-offers/:offerId/declineEDIT_OFFERdeclineBookingOfferdecline-offer-dialog.tsx
40POST/booking-offers/:offerId/cancel/api/v1/booking-offers/:offerId/cancelEDIT_OFFERcancelBookingOffercancel-offer-dialog.tsx
41GET/booking-offers/:offerId/holds/api/v1/booking-offers/:offerId/holdsVIEW_OFFERlistOfferHoldsoffer-holds-panel.tsx
42POST/booking-offers/:offerId/holds/api/v1/booking-offers/:offerId/holdsEDIT_OFFERcreateOfferHoldHolds panel
43PATCH/booking-offers/:offerId/holds/:holdId/api/v1/booking-offers/:offerId/holds/:holdIdEDIT_OFFERreleaseOfferHold (release action)Holds panel
44GET/bookings/api/v1/bookingsVIEW_OFFERbooking/confirmed/page.tsx
45GET/bookings/:bookingId/api/v1/bookings/:bookingIdVIEW_OFFERgetBookingbooking/confirmed/[id]/page.tsx
46GET/bookings/:bookingId/activity/api/v1/bookings/:bookingId/activityVIEW_OFFERlistBookingActivitybooking-activity-timeline.tsx
47POST/bookings/:bookingId/activity/api/v1/bookings/:bookingId/activityEDIT_OFFERpostBookingActivityActivity timeline
48GET/bookings/:bookingId/finance-status/api/v1/bookings/:bookingId/finance-statusVIEW_DEALgetBookingFinanceStatusbooking-finance-tab.tsx
49GET/bookings/:bookingId/payment-schedule/api/v1/bookings/:bookingId/payment-scheduleVIEW_DEALgetBookingPaymentScheduleFinance tab
50GET/bookings/:bookingId/deposit-status/api/v1/bookings/:bookingId/deposit-statusVIEW_DEALgetBookingDepositStatusFinance tab
51POST/bookings/:bookingId/finance-handoff/api/v1/bookings/:bookingId/finance-handoffEDIT_OFFERpostBookingFinanceHandofffinance-handoff-dialog.tsx
52–61GET/POST/relationships/*/api/v1/relationships/*VIEW_ARTIST / EDIT_OFFERlistRelationships, getRelationship*, etc.booking/relationships/*
62–69GET/POST/artists/:id/tour-plans, /tour-plans/*, /bookings/:id/logistics*/api/v1/*VIEW_LOGISTICS / EDIT_LOGISTICSlogistics helpers in api.tsbooking-logistics-tab.tsx, touring

Finance note: Booking finance visibility routes read Artists-computed handoff status; money truth remains Backend-Kisum-Finance.


Section D — Events cross-cutting (artist data)

Section titled “Section D — Events cross-cutting (artist data)”

File: events/queries/events.query.js

Event endpointArtist concernResolverSoT
GET /api/events/:id/lineupLineup display (name, image, country)resolveLineupArtistsArtists Postgres
SameLineup stats per artistgetStatsById(..., null)Mongo artist_data
Event predictions / financial artist bundleArtist enrichment for predictiongetArtistsFromMongoByRefsMongo artists_v2
Offer flow artist displaySingle artist shellresolveArtistMasterArtists Postgres

Frontend: libs/data.tsgetEventLineup; useEventArtists.ts (main + public events).


Section E — Other Promoters modules still on Mongo artists_v2

Section titled “Section E — Other Promoters modules still on Mongo artists_v2”

These modules have not been migrated to Artists upstream for artist master reads:

ModuleFile(s)Usage
Availsavails/*Artist refs on avail rows; marketplace browse moved to network
Offeroffer/commands/offer.command.jsartistsModel.find for offer artist snapshot
Agenciesagencies/queries/agencies.query.jsRoster artist details from Mongo + artist_data
Rankingsrankings queriesRank sort from Mongo
Setlistfmsetlist moduleArtist lookup
Kisum AIkisumAi/*Artist context for AI
Artist utilsutils/artist-stats-refresh.utils.jsMongo updateOne for platform UUID normalization

Rule: New features should use Artists Postgres for identity and Mongo only for analytics enrichment.


Section F — Backend-Kisum-Artists canonical API

Section titled “Section F — Backend-Kisum-Artists canonical API”

Base: /api/v1 (Fiber)
Auth: Bearer JWT (+ tenant context per route); internal machine routes use service keys as configured.

F.1 — CRUD entities (internal/artists/routes/routes.go)

Section titled “F.1 — CRUD entities (internal/artists/routes/routes.go)”
ResourceListGetCreateUpdateDelete
/artists
/companies
/people
/genres, /subgenres, /regions, /countries, /states, /cities, /platforms, /provider-sources
PathMethodsPostgres tables (conceptual)
/artists/:id/profileGET, PUTartist_profiles
/artists/:id/genresGET, PUTartist_genres
/artists/:id/subgenresGET, PUTsubgenres link
/artists/:id/platform-accountsGET, PUTplatform accounts
/artists/:id/provider-refsGET, PUTexternal provider refs
/artists/:id/teamGET, PUTteam members
/artists/:id/rosterGET, PUTroster links

F.3 — Workflow / marketplace / booking (workflow, intelligence, touring, contracts, provisioning modules)

Section titled “F.3 — Workflow / marketplace / booking (workflow, intelligence, touring, contracts, provisioning modules)”

Registered in internal/artists/module.go:

  • Marketplace: /marketplace/artist-availabilities, /marketplace/artists, /marketplace/agencies
  • Booking: /booking-requests, /booking-offers, /bookings (+ activity, holds, finance visibility)
  • Promoter: /promoters/:id/dashboard, shortlists, booking-history
  • Relationships, touring, logistics, contracts — see OpenAPI internal/openapi/spec.go

SoT for all F.3 routes: Artists Postgres (+ Finance handoff references only).


Section G — Frontend-Kisum-Promoters caller matrix (by screen)

Section titled “Section G — Frontend-Kisum-Promoters caller matrix (by screen)”
UI route / componentAPI surfaceSoT consumed
/artists listGET /api/artistsArtists Postgres (legacy envelope)
/artists/[id] layout shellartists-network → profile, genres, platforms, teamArtists Postgres
/artists/[id] overview audienceGET /api/artists/:id/statsMongo analytics
/artists/[id] heroGET /api/artists/:id/card-statsMongo
/artists/[id] demographics *GET /api/artists/:id/demographicsMongo + APIs
/artists/[id] discography/discography, /top-tracksMongo + MusicData
/artists/[id] chart presence/chart-presenceMongo Kworb
/artists/[id] top countries/top-countriesMongo
/artists/[id] regional songs/top-songs-regionalMongo
/artists/[id] shows/bandsintown/eventsMongo + BIT
/artists/[id] analytics prediction/trend, /prediction-v3, /market-analysisMongo + DataForSEO + n8n
/artists/[id] biographyartists-network profile + ensure-bioArtists Postgres
/artists/add/search/new, POST /api/artistsSpotify + Mongo legacy create
/booking/*/api/artists-network/*Artists Postgres
/events/[id] lineupGET /api/events/:id/lineupMixed: display=Artists, stats=Mongo
combobox-artistsfetchArtists, searchArtistsArtists Postgres
form-event / EventCreateDrawerfetchArtistsArtists Postgres

Some analytics calls bypass direct Promoters URL:

Next/Amplify pathProxies toNotes
app/api/artists/[id]/demographics/route.tsxPromoters /api/artists/:id/demographicsMay use ROUTER_URL
app/api/artists/[id]/prediction-v3/route.tsxPromoters POST .../prediction-v3Lambda router
libs/data.ts trend/demographics${ROUTER_URL}/api/artists/...Legacy Amplify path for cache

Section H — Frontend-Kisum-Artists (agency app)

Section titled “Section H — Frontend-Kisum-Artists (agency app)”

API client: src/lib/api-client.tsARTISTS_API_BASE_URL + /api/v1/*
Service: src/services/artists/api.ts (2000+ lines — full Artists surface)

PatternSoT
Direct Bearer to Artists public APIArtists Postgres (no Promoters BFF)
Agency roster, booking, contracts, touringSame as Section F

Promoters browser app must not copy this pattern — it uses Promoters BFF only.


ConcernPath
Legacy artist routesBackend-Kisum-Promoters/artists/artists.route.js
v2 artist routesBackend-Kisum-Promoters/artists/artists-v2.route.js
Network BFF routesBackend-Kisum-Promoters/artists-network/artists-network.route.js
Query / resolver logicBackend-Kisum-Promoters/artists/queries/artists.query.js
Directory upstreamBackend-Kisum-Promoters/artists/artists-directory.upstream.js
Legacy shape mapperBackend-Kisum-Promoters/artists/artists-directory.mapper.js
Artists HTTP clientBackend-Kisum-Promoters/services/artists.client.js
Event lineupBackend-Kisum-Promoters/events/queries/events.query.js
FE legacy APIFrontend-Kisum-Promoters/src/libs/data.ts
FE network APIFrontend-Kisum-Promoters/src/services/apis/artists-network/api.ts
Artists Go routesBackend-Kisum-Artists/internal/artists/routes/routes.go
Artists module mountBackend-Kisum-Artists/internal/artists/module.go

GapStatus
iso2 / genres query filters on GET /api/artistsNot fully mapped to Artists upstream list params
POST /api/artists legacy Mongo createStill writes Mongo; new master should use Artists
GET /api/artists/:id/contactsMongo team aggregation; prefer artists-network/.../team
Offer/avails/agencies/rankings artist readsStill Mongo artists_v2
Event lineup rank fieldMay differ between Mongo rank vs Artists profile — verify product intent
GET /api/artist/:id/stats (singular) in getArtistDetailOverviewPossible typo vs /api/artists/:id/stats — verify API gateway

When adding or changing any artist route:

  1. Update this registry (same PR as code).
  2. Update Backend-Kisum-Promoters/docs/ARTIST_SOURCE_OF_TRUTH_REGISTRY.md (mirror).
  3. Update Frontend-Kisum-Promoters/docs/ARTIST_API_SOURCE_OF_TRUTH.md if FE callers change.
  4. Update Backend-Kisum-Artists/docs/artist-source-of-truth-registry.md if upstream contract changes.
  5. Add row to Data Ownership if ownership moves.

  • Backend-Kisum-Promoters/docs/ARTISTS_NETWORK_BFF.md — network proxy details
  • Backend-Kisum-Promoters/docs/ARTIST_SOURCE_OF_TRUTH_REGISTRY.md — package mirror
  • Frontend-Kisum-Promoters/docs/ARTIST_API_SOURCE_OF_TRUTH.md — FE caller index
  • Backend-Kisum-Artists/docs/artist-source-of-truth-registry.md — upstream owner index