Appearance
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
| Field | Kind | Signature |
|---|---|---|
login | mutation, custom | login(email: String!, password: String!): Auth |
register | mutation, custom | register(email: String!, password: String!, artist_spotify_id: String!, coupon: String): Auth |
register_invited | mutation, custom | register_invited(token: String!, first_name: String!, last_name: String!, password: String!, coupon: String): Auth |
register_invitation_check | mutation, custom | register_invitation_check(token: String!): Status |
refresh_token | mutation, custom | refresh_token(token: String!): Auth — not implemented, returns null |
get_current_user_data | query, custom | get_current_user_data: Auth |
user_by_email | query, custom | user_by_email(email: String!): UserId |
update_password | mutation, custom | update_password(current_password: String, new_password: String!, user_id: String): SuccessBoolean |
reset_password_request | mutation, custom | reset_password_request(email: String!): SuccessBoolean |
reset_password | mutation, custom | reset_password(token: String!, password: String!): SuccessBoolean |
reset_password_admin | mutation, custom | reset_password_admin(email: String!, admin_password: String!, new_password: String!): SuccessBoolean |
update_email_request | mutation, custom | update_email_request(email: String!): SuccessBoolean |
update_email | mutation, custom | update_email(email: String!, email_token: String!): SuccessBoolean |
verify_email | mutation, custom | verify_email(email: String!, email_token: String!): SuccessBoolean |
check_email_token | query, custom | check_email_token(email: String!, email_token: String!): SuccessBoolean |
users | query, table | Your own record plus users who share access to your artists. |
See Authentication.
Signup
| Field | Kind | Signature |
|---|---|---|
signup_check_step | mutation, custom | signup_check_step(email: String!, coupon: String): CheckStep |
set_password_signup | mutation, custom | set_password_signup(email: String!, password: String!): Auth |
set_signup_step | mutation, custom | set_signup_step(id: String!, signup_step: Int!): SuccessBoolean |
remove_signup_artist | mutation, custom | remove_signup_artist(artist_id: String!): SuccessBoolean |
Artists
| Field | Kind | Signature |
|---|---|---|
artists | query, table | Artists you manage. See Get Artists. |
artists_by_pk | query, table | artists_by_pk(id: uuid!): artists |
update_artists / update_artists_by_pk | mutation, table | Limited column set — see Get Artists. |
search_artists | query, custom | search_artists(name: String!): Artists — searches Spotify. |
add_artist | mutation, custom | add_artist(artist_spotify_id: String!): Auth |
add_artists | mutation, custom | add_artists(artist_spotify_id: String!): Auth |
delete_artist | mutation, custom | delete_artist(artist_id: String!): SuccessBoolean |
invite_user | mutation, custom | invite_user(email: String!, artist_id: String!, coupon: String): SuccessBoolean |
add_agency_member | mutation, custom | add_agency_member(user_id: String!): SuccessBoolean |
remove_agency_member | mutation, custom | remove_agency_member(user_id: String!): SuccessBoolean |
artist_socials | query/mutation, table | Social profiles shown on bio links. |
artist_users | query/mutation, table | Which users can manage which artists. |
Releases and Spotify
| Field | Kind | Signature |
|---|---|---|
get_artist_releases | query, custom | get_artist_releases(artist_id: String!): Releases |
get_releases_by_spotify_id | query, custom | get_releases_by_spotify_id(spotify_id: String!): Releases |
get_spotify_preview_url | query, custom | get_spotify_preview_url(link: String): SpotifyPreviewUrl |
get_long_spotify_url_from_shortened | query, custom | get_long_spotify_url_from_shortened(link: String): SpotifyPreviewUrl |
meta | query, custom | meta(url: String!): Meta — scrapes Open Graph metadata from any URL. |
rid_from_link | mutation, custom | rid_from_link(link: String!): RidResponse |
links_from_rid | mutation, custom | links_from_rid(rid: String!, type: String!): LinksResponse |
See Artist Releases.
Links
| Field | Kind | Signature |
|---|---|---|
links | query, table | See Get Link. |
links_by_pk | query, table | links_by_pk(id: uuid!): links |
create_link | mutation, custom | See Create Link for the full argument list. |
quick_create_link | mutation, custom | quick_create_link(source: String!, domain: String!, path: String): QuickCreateLinkResponse |
update_links / update_links_by_pk | mutation, table | See Edit Link. |
delete_links / delete_links_by_pk | mutation, table | Permanent. |
path_available | mutation, custom | path_available(domain: String!, path: String!): SuccessBoolean |
link_destinations | query/mutation, table | See Destinations. |
link_tracks | query/mutation, table | Preview tracks for preview_type: "spotify". |
fill_missing_deeplinks | mutation, custom | fill_missing_deeplinks(link_id: String!): SuccessBoolean |
INFO
There is no edit_link mutation. Editing goes through update_links_by_pk — see Edit Link.
Domains
| Field | Kind | Signature |
|---|---|---|
domains | query/mutation, table | Artist default domain records. |
custom_domains | query, table | Custom domains owned by your account. |
custom_domain_artists | query/mutation, table | Domain-to-artist assignments. |
add_custom_domain | mutation, custom | add_custom_domain(domain: String!): CustomDomain |
remove_custom_domain | mutation, custom | remove_custom_domain(id: String!): CustomDomain |
See Domains.
Statistics
| Field | Kind | Signature |
|---|---|---|
link_statistics | query, action | link_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_statistics | query, action | artist_statistics(artist_id: uuid!, start_time: date!, end_time: date!, offset: String): statistics_artist |
link_totals | query, custom | link_totals(artist_id: String!): Stats |
link_stats | query, custom | Deprecated 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
| Field | Kind | Notes |
|---|---|---|
optins | query, table | Read-only. See Get Subscribers. |
fans | query, table | Read-only. |
optouts | query, table | Read-only. |
presaves | query, table | Read-only for manager. |
presave_subscriptions | query, table | Read-only. |
pixels | query/mutation, table | Full CRUD. See Tracking Pixels. |
Uploads
| Field | Kind | Signature |
|---|---|---|
upload_file | query, custom | upload_file: S3Upload |
s3_upload | mutation, custom | s3_upload(extension: String!, type: String!): S3Upload |
s3_upload_from_url | mutation, custom | s3_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.
| Field | Kind |
|---|---|
braintree_client_token | mutation |
braintree_subscribe | mutation |
braintree_resubscribe | mutation |
braintree_retry_charge | mutation |
braintree_add_artists | mutation |
braintree_add_initial_artists | mutation |
braintree_add_agency_artists | mutation |
braintree_add_family_artists | mutation |
braintree_change_artist_plan | mutation |
braintree_change_agency_artist_plan | mutation |
braintree_change_billing_interval | mutation |
braintree_set_default_payment_method | mutation |
braintree_get_transactions | query |
braintree_get_billing_information | query |
braintree_check_coupon | query |
check_discount_coupon | query |
activate_coupon | mutation |
upgrade_artist_trial_plan | mutation |
upgrade_artist_trial_plan_to_any | mutation |
get_referrals_data | query |
Public (no token required)
| Field | Kind | Notes |
|---|---|---|
blog_posts | query, table | Public blog content. |
blog_categories | query, table | Public blog categories. |
These are the only fields visible to the anonymous role. Everything else returns validation-failed without a token — see Errors.
Miscellaneous
| Field | Kind | Signature |
|---|---|---|
intercom_hash | mutation, custom | intercom_hash: String |
generate_chat_user_hash | mutation, custom | generate_chat_user_hash: UserHash |
feature_flags | query, table | Feature flags on your account. |
Response types
| Type | Fields |
|---|---|
Auth | token: String, user: UserAuth |
UserAuth | id, 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] |
Artist | id, 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] |
LinkResponse | success: Boolean!, link: LinkObject |
LinkObject | id!, artist_id!, domain!, path!, type!, title, subtitle, description, image, theme, layout, preview_type, autoplay_track, release_name, display_artist_socials, destinations: [Destination], tracks: [Track] |
Destination | id!, type!, url!, cta, text, logo, enabled, priority, deeplink_ios, deeplink_android |
Track | id!, url!, name, priority |
Releases | success: Boolean, releases: [Release] |
Release | id, name, album_name, type, url, cover_image, release_date |
QuickCreateLinkResponse | success!, link_id!, artist_id!, token |
RidResponse | success, rid, type |
LinksResponse | success, links: [Link] where Link is { platform, url } |
CustomDomain | id, domain, user_id |
S3Upload | url!, key! |
SuccessBoolean | success: Boolean |
SuccessData | success: Boolean, data: String |
SuccessToken | success: Boolean, token: String |
Status | status: String |
UserId | id: String |
UserHash | hash: String |
SpotifyPreviewUrl | preview_url: String |
FeatureFlag | id, feature, enabled |
PhoneNumber | id, artist_id, phone_number, welcome_message, created_at |
Stats, Data, Meta, Artists | Each 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 } } } }"}'