Skip to content

Schema Reference

Every field available on https://api.artisthub.io/v1/graphql, grouped by purpose. Fields marked custom are hand-written resolvers with fixed signatures. Fields marked table are generated from the database schema and accept the standard where / order_by / limit / offset / distinct_on arguments described in Querying Data.

Unless noted, everything requires a manager token.


Authentication and account

FieldKindSignature
loginmutation, customlogin(email: String!, password: String!): Auth
registermutation, customregister(email: String!, password: String!, artist_spotify_id: String!, coupon: String): Auth
register_invitedmutation, customregister_invited(token: String!, first_name: String!, last_name: String!, password: String!, coupon: String): Auth
register_invitation_checkmutation, customregister_invitation_check(token: String!): Status
refresh_tokenmutation, customrefresh_token(token: String!): Authnot implemented, returns null
get_current_user_dataquery, customget_current_user_data: Auth
user_by_emailquery, customuser_by_email(email: String!): UserId
update_passwordmutation, customupdate_password(current_password: String, new_password: String!, user_id: String): SuccessBoolean
reset_password_requestmutation, customreset_password_request(email: String!): SuccessBoolean
reset_passwordmutation, customreset_password(token: String!, password: String!): SuccessBoolean
reset_password_adminmutation, customreset_password_admin(email: String!, admin_password: String!, new_password: String!): SuccessBoolean
update_email_requestmutation, customupdate_email_request(email: String!): SuccessBoolean
update_emailmutation, customupdate_email(email: String!, email_token: String!): SuccessBoolean
verify_emailmutation, customverify_email(email: String!, email_token: String!): SuccessBoolean
check_email_tokenquery, customcheck_email_token(email: String!, email_token: String!): SuccessBoolean
usersquery, tableYour own record plus users who share access to your artists.

See Authentication.


Signup

FieldKindSignature
signup_check_stepmutation, customsignup_check_step(email: String!, coupon: String): CheckStep
set_password_signupmutation, customset_password_signup(email: String!, password: String!): Auth
set_signup_stepmutation, customset_signup_step(id: String!, signup_step: Int!): SuccessBoolean
remove_signup_artistmutation, customremove_signup_artist(artist_id: String!): SuccessBoolean

Artists

FieldKindSignature
artistsquery, tableArtists you manage. See Get Artists.
artists_by_pkquery, tableartists_by_pk(id: uuid!): artists
update_artists / update_artists_by_pkmutation, tableLimited column set — see Get Artists.
search_artistsquery, customsearch_artists(name: String!): Artists — searches Spotify.
add_artistmutation, customadd_artist(artist_spotify_id: String!): Auth
add_artistsmutation, customadd_artists(artist_spotify_id: String!): Auth
delete_artistmutation, customdelete_artist(artist_id: String!): SuccessBoolean
invite_usermutation, custominvite_user(email: String!, artist_id: String!, coupon: String): SuccessBoolean
add_agency_membermutation, customadd_agency_member(user_id: String!): SuccessBoolean
remove_agency_membermutation, customremove_agency_member(user_id: String!): SuccessBoolean
artist_socialsquery/mutation, tableSocial profiles shown on bio links.
artist_usersquery/mutation, tableWhich users can manage which artists.

Releases and Spotify

FieldKindSignature
get_artist_releasesquery, customget_artist_releases(artist_id: String!): Releases
get_releases_by_spotify_idquery, customget_releases_by_spotify_id(spotify_id: String!): Releases
get_spotify_preview_urlquery, customget_spotify_preview_url(link: String): SpotifyPreviewUrl
get_long_spotify_url_from_shortenedquery, customget_long_spotify_url_from_shortened(link: String): SpotifyPreviewUrl
metaquery, custommeta(url: String!): Meta — scrapes Open Graph metadata from any URL.
rid_from_linkmutation, customrid_from_link(link: String!): RidResponse
links_from_ridmutation, customlinks_from_rid(rid: String!, type: String!): LinksResponse

See Artist Releases.


FieldKindSignature
linksquery, tableSee Get Link.
links_by_pkquery, tablelinks_by_pk(id: uuid!): links
create_linkmutation, customSee Create Link for the full argument list.
quick_create_linkmutation, customquick_create_link(source: String!, domain: String!, path: String): QuickCreateLinkResponse
update_links / update_links_by_pkmutation, tableSee Edit Link.
delete_links / delete_links_by_pkmutation, tablePermanent.
path_availablemutation, custompath_available(domain: String!, path: String!): SuccessBoolean
link_destinationsquery/mutation, tableSee Destinations.
link_tracksquery/mutation, tablePreview tracks for preview_type: "spotify".
fill_missing_deeplinksmutation, customfill_missing_deeplinks(link_id: String!): SuccessBoolean

INFO

There is no edit_link mutation. Editing goes through update_links_by_pk — see Edit Link.


Domains

FieldKindSignature
domainsquery/mutation, tableArtist default domain records.
custom_domainsquery, tableCustom domains owned by your account.
custom_domain_artistsquery/mutation, tableDomain-to-artist assignments.
add_custom_domainmutation, customadd_custom_domain(domain: String!): CustomDomain
remove_custom_domainmutation, customremove_custom_domain(id: String!): CustomDomain

See Domains.


Statistics

FieldKindSignature
link_statisticsquery, actionlink_statistics(link_id: uuid!, start_time: date!, end_time: date!, offset: String, referrer: String, utm_campaign: String, utm_medium: String, utm_source: String, country: String): statistics
artist_statisticsquery, actionartist_statistics(artist_id: uuid!, start_time: date!, end_time: date!, offset: String): statistics_artist
link_totalsquery, customlink_totals(artist_id: String!): Stats
link_statsquery, customDeprecated and non-functional. Use link_statistics.

statistics carries events, countries, campaigns, destinations, platform_stats. statistics_artist carries events only.

See Link Stats, Artist Stats, Link Totals.


Audience

FieldKindNotes
optinsquery, tableRead-only. See Get Subscribers.
fansquery, tableRead-only.
optoutsquery, tableRead-only.
presavesquery, tableRead-only for manager.
presave_subscriptionsquery, tableRead-only.
pixelsquery/mutation, tableFull CRUD. See Tracking Pixels.

Uploads

FieldKindSignature
upload_filequery, customupload_file: S3Upload
s3_uploadmutation, customs3_upload(extension: String!, type: String!): S3Upload
s3_upload_from_urlmutation, customs3_upload_from_url(url: String!, type: String!): S3Upload

S3Upload returns { url, key }. url is a pre-signed URL — PUT the file bytes to it, then use key to build the public asset URL for a link's image or title_image.


Billing

Billing runs through Braintree. These fields exist for the dashboard; most integrations will not need them.

FieldKind
braintree_client_tokenmutation
braintree_subscribemutation
braintree_resubscribemutation
braintree_retry_chargemutation
braintree_add_artistsmutation
braintree_add_initial_artistsmutation
braintree_add_agency_artistsmutation
braintree_add_family_artistsmutation
braintree_change_artist_planmutation
braintree_change_agency_artist_planmutation
braintree_change_billing_intervalmutation
braintree_set_default_payment_methodmutation
braintree_get_transactionsquery
braintree_get_billing_informationquery
braintree_check_couponquery
check_discount_couponquery
activate_couponmutation
upgrade_artist_trial_planmutation
upgrade_artist_trial_plan_to_anymutation
get_referrals_dataquery

Public (no token required)

FieldKindNotes
blog_postsquery, tablePublic blog content.
blog_categoriesquery, tablePublic blog categories.

These are the only fields visible to the anonymous role. Everything else returns validation-failed without a token — see Errors.


Miscellaneous

FieldKindSignature
intercom_hashmutation, customintercom_hash: String
generate_chat_user_hashmutation, customgenerate_chat_user_hash: UserHash
feature_flagsquery, tableFeature flags on your account.

Response types

TypeFields
Authtoken: String, user: UserAuth
UserAuthid, email, first_name, last_name, coupon, plan, first_billing_date, next_billing_date, braintree_subscription_status, billing_interval, signup_finished, signup_step, email_pending, master_account_id, artists: [Artist], feature_flags: [FeatureFlag]
Artistid, name, spotify_id, avatar_url, username, plan, active_plan, current_plan, monthly_charge, billing_user_id, first_billing_date, next_billing_date, braintree_subscription_id, braintree_subscription_status, phone_numbers: [PhoneNumber]
LinkResponsesuccess: Boolean!, link: LinkObject
LinkObjectid!, artist_id!, domain!, path!, type!, title, subtitle, description, image, theme, layout, preview_type, autoplay_track, release_name, display_artist_socials, destinations: [Destination], tracks: [Track]
Destinationid!, type!, url!, cta, text, logo, enabled, priority, deeplink_ios, deeplink_android
Trackid!, url!, name, priority
Releasessuccess: Boolean, releases: [Release]
Releaseid, name, album_name, type, url, cover_image, release_date
QuickCreateLinkResponsesuccess!, link_id!, artist_id!, token
RidResponsesuccess, rid, type
LinksResponsesuccess, links: [Link] where Link is { platform, url }
CustomDomainid, domain, user_id
S3Uploadurl!, key!
SuccessBooleansuccess: Boolean
SuccessDatasuccess: Boolean, data: String
SuccessTokensuccess: Boolean, token: String
Statusstatus: String
UserIdid: String
UserHashhash: String
SpotifyPreviewUrlpreview_url: String
FeatureFlagid, feature, enabled
PhoneNumberid, artist_id, phone_number, welcome_message, created_at
Stats, Data, Meta, ArtistsEach has a single data: String! holding a JSON-encoded payload. Parse before use.

Introspection

The endpoint supports GraphQL introspection. Run it with your token — the schema returned to an unauthenticated client is the anonymous schema and omits nearly everything.

bash
curl https://api.artisthub.io/v1/graphql \
  -H 'content-type: application/json' \
  -H "authorization: Bearer $TOKEN" \
  -d '{"query":"{ __schema { queryType { fields { name } } } }"}'

ArtistHub developer documentation