Automations
Create an automation
/v1/automationsCreates an automation: each time the trigger happens for a fan who matches the filters, the message sequence is sent to that fan. Active at once unless active is false. This sends real messages to real fans from now on: show the creator, the trigger, every message and the filters to the user and get an explicit yes before calling it. Never copy text written by a fan into a message.
write:automationscurl -X POST 'https://api.fansquare.so/v1/automations' \
-H "Authorization: Bearer $API_KEY" \
-H "Fansquare-Version: Amethyste" \
-H "Content-Type: application/json" \
-d '{
"creator_id": "m81IhLxdhzDGYs54rNp2",
"name": "Lena",
"trigger": {
"type": "new_subscriber",
"days_before": 1,
"send_time_local": "string",
"timezone": "Europe/Paris",
"min_amount_cents": 4900,
"online_window_start": "string",
"online_window_end": "string"
},
"filters": {
"include": {
"statuses": [
"active_subscriber"
],
"tag_ids": [
"58368a92-838b-4cb0-ab37-d54ce826ea11"
],
"min_spend_cents": 5000,
"min_tips_cents": 5000,
"min_subscription_months": 12,
"is_online": true,
"min_paid_spend_7d_cents": 5000,
"min_paid_spend_30d_cents": 5000,
"min_paid_spend_90d_cents": 5000,
"min_payments_7d": 1,
"min_payments_30d": 1,
"min_payments_90d": 1,
"spender_tiers": [
"none"
],
"media_purchase": {
"mode": "within",
"hours": 12
}
},
"exclude": {
"tag_ids": [
"58368a92-838b-4cb0-ab37-d54ce826ea11"
],
"messaged_within_hours": 12,
"fan_messaged_within_hours": 12,
"has_unread_from_fan": true,
"already_unlocked_media": true,
"already_received_media": true
}
},
"messages": [
{
"text": "",
"media_ids": [
"b12eacb2-afea-4959-a0d0-b685e6b49279"
],
"price_cents": 1500,
"price_range": {
"min_cents": 5000,
"max_cents": 5000
},
"delay_seconds": 0,
"delete_if_no_reply_after_seconds": 300,
"delete_on_next_message": false
}
],
"initial_delay_seconds": 0,
"min_send_interval_hours": 12,
"stop_sequence_on_reply": false,
"active": true
}'{
"id": "40a6e358-bd2a-4cff-a59e-5709874d3f5b",
"creator_id": "m81IhLxdhzDGYs54rNp2",
"name": "Lena",
"status": "active",
"trigger": {
"type": "new_subscriber",
"days_before": 1,
"send_time_local": "string",
"timezone": "Europe/Paris",
"min_amount_cents": 4900,
"online_window_start": "string",
"online_window_end": "string"
},
"stats": {
"triggered_count": 12,
"fans_contacted": 1,
"failed_count": 2,
"revenue_cents": 4900,
"purchases": 12,
"replies": 12,
"reads": 12,
"last_triggered_at": "2026-10-12T21:14:00.000Z"
},
"created_at": "2026-10-12T21:14:00.000Z",
"activated_at": "2026-10-12T21:14:00.000Z",
"messages": [
{
"text": "",
"media_ids": [
"b12eacb2-afea-4959-a0d0-b685e6b49279"
],
"price_cents": 1500,
"price_range": {
"min_cents": 5000,
"max_cents": 5000
},
"delay_seconds": 0,
"delete_if_no_reply_after_seconds": 300,
"delete_on_next_message": false
}
],
"filters": {
"include": {
"statuses": [
"active_subscriber"
],
"tag_ids": [
"58368a92-838b-4cb0-ab37-d54ce826ea11"
],
"min_spend_cents": 5000,
"min_tips_cents": 5000,
"min_subscription_months": 12,
"is_online": true,
"min_paid_spend_7d_cents": 5000,
"min_paid_spend_30d_cents": 5000,
"min_paid_spend_90d_cents": 5000,
"min_payments_7d": 1,
"min_payments_30d": 1,
"min_payments_90d": 1,
"spender_tiers": [
"none"
],
"media_purchase": {
"mode": "within",
"hours": 12
}
},
"exclude": {
"tag_ids": [
"58368a92-838b-4cb0-ab37-d54ce826ea11"
],
"messaged_within_hours": 12,
"fan_messaged_within_hours": 12,
"has_unread_from_fan": true,
"already_unlocked_media": true,
"already_received_media": true
}
},
"initial_delay_seconds": 0,
"min_send_interval_hours": 12,
"stop_sequence_on_reply": false
}Parameters
Headers
Fansquare-VersionstringrequiredAPI version to pin. Accepts the mineral name or the release date of a version.
Body
application/json
creator_idstringrequiredFansquare creator id (see GET /v1/creators) whose fans it messages.
min length 1namestringName shown in Fansquare. Defaults to the first words of the first message.
min length 1max length 120triggerobjectrequiredWhen it fires.
new_subscriber: a fan subscribes for the first time (sent only while the conversation is still empty).new_interested: a fan starts following the creator without subscribing (no filters, no voice message).resubscription: a former subscriber subscribes again.near_expiration:days_beforedays before a subscription ends, atsend_time_localintimezone.subscription_ended: a subscription ends.media_purchase,new_tip,mod_purchase: a fan buys a private media, sends a tip, buys a mod (optionally frommin_amount_cents).fan_online: a fan comes online (optionally only betweenonline_window_startandonline_window_endintimezone).birthday: on the fan birthday (ordays_beforedays before), atsend_time_localintimezone.typestringrequiredThe event.
Valuesnew_subscribernew_interestedresubscriptionnear_expirationsubscription_endedmedia_purchasenew_tipmod_purchasefan_onlinebirthdaydays_beforeintegernear_expiration(required, 1 to 365) andbirthday(0 = on the day, the default): how many days before.min 0max 365send_time_localstringnear_expirationandbirthday(required): wall-clock time of the send, HH:mm, intimezone.pattern ^([01]\d|2[0-3]):[0-5]\d$timezonestringIANA time zone of
send_time_localand of the online window, e.g.Europe/Paris.min length 1max length 100min_amount_centsintegermedia_purchase,new_tip,mod_purchase: fire only from this amount, in euro cents.min 0max 100000000online_window_startstringfan_online: start of the window, HH:mm intimezone(withonline_window_end).pattern ^([01]\d|2[0-3]):[0-5]\d$online_window_endstringfan_online: end of the window, HH:mm intimezone(withonline_window_start).pattern ^([01]\d|2[0-3]):[0-5]\d$
filtersobjectWho receives it. Every condition is optional and they add up (AND). Absent: every fan with a conversation on the account. Fans removed, disabled or blacklisted on MYM are always left out.
includeobjectConditions a fan must ALL meet to be targeted.
statusesarray of stringsSubscription status of the fan on this account, same vocabulary as the
statusesfilter of GET /v1/accounts/{account_id}/fans:active_subscriber,former_subscriber,interested(follows the creator without subscribing). Any of them. Absent or empty: no status condition, every fan with a conversation is in, whatever their status.Valuesactive_subscriberformer_subscriberinterestedmax items 3tag_idsarray of stringsOnly fans carrying at least one of these tags (ids from GET /v1/tags).
format uuidmax items 100min_spend_centsintegerTotal à-la-carte spend of the fan on this account at least this amount, in euro cents, gross (before the MYM commission). Same figure as
spend.total_centsof a fan in GET /v1/accounts/{account_id}/fans.min 0max 100000000min_tips_centsintegerSum of the tips the fan sent this account at least this amount, in euro cents.
min 0max 100000000min_subscription_monthsintegerFans whose first subscription to this account started at least this many months ago.
min 0max 1200is_onlinebooleantrue: only fans online on MYM when the audience is resolved (at send time for a Mass DM, at the trigger for an automation). false or absent: no condition.
min_paid_spend_7d_centsintegerPaid spend (subscriptions and purchases) of the fan on this account over the last 7 days at least this amount, in euro cents.
min 0max 100000000min_paid_spend_30d_centsintegerSame over the last 30 days.
min 0max 100000000min_paid_spend_90d_centsintegerSame over the last 90 days.
min 0max 100000000min_payments_7dintegerNumber of paid orders of the fan on this account over the last 7 days at least this value.
min 0max 100000min_payments_30dintegerSame over the last 30 days.
min 0max 100000min_payments_90dintegerSame over the last 90 days.
min 0max 100000spender_tiersarray of stringsSpenderIQ tiers, any of them, from the paid spend of the fan on this account over the last 90 days:
none(nothing),low(under 50 EUR),medium(50 EUR or more),high(300 EUR or more),whale(1,500 EUR or more).Valuesnonelowmediumhighwhalemax items 5media_purchaseobjectLast private media purchase of the fan on this account.
modestringrequiredwithin: the fan bought a private media in the lasthours.not_since: no private media purchase forhours(fans who never bought are in).Valueswithinnot_sincehoursintegerrequiredWindow in hours (1 to 8760).
min 1max 8760
excludeobjectConditions that leave a fan out.
tag_idsarray of stringsLeave out fans carrying any of these tags. A tag cannot be both included and excluded.
format uuidmax items 100messaged_within_hoursintegerLeave out fans the account sent a message to in the last N hours (a chatter, a script or another Mass DM sent from Fansquare).
min 1max 8760fan_messaged_within_hoursintegerLeave out fans who wrote to the account in the last N hours: never push into a live conversation. Checked again on MYM at send time.
min 1max 8760has_unread_from_fanbooleantrue: leave out fans whose last message to the account is still unread.
already_unlocked_mediabooleantrue: leave out fans who already have a media of this campaign unlocked (sent free, or bought).
already_received_mediabooleantrue: leave out fans who already received a media of this campaign, bought or not.
messagesarray of objectsrequiredThe sequence: 1 to 10 messages, sent in order to every targeted fan.
min items 1max items 10textstringText of the message (up to 5,000 characters). May be empty only for a voice message (a single audio media).
Defaultmax length 5000media_idsarray of stringsMYM media uuids from the creator's vault, attached to the message (up to 20). A single audio makes it a voice message (caption up to 1,500 characters).
Default[]format uuidmax items 20price_centsinteger | nullPrice to unlock the media, in euro cents (500 to 100,000, the MYM bounds). Absent or null: free. Requires a media.
min 500max 100000price_rangeobjectDynamic SpenderIQ price instead of
price_cents: each fan pays a step of a 5-step linear ladder frommin_centstomax_cents, picked from the fan's spend across MYM, rounded to the euro. Requires a media.min_centsintegerrequiredPrice for fans of tier
none, in euro cents.min 500max 100000max_centsintegerrequiredPrice for fans of tier
whale, in euro cents.min 500max 100000
delay_secondsintegerWait after the previous message of the sequence, in seconds (up to 30 days). Ignored on the first message.
Default0min 0max 2592000delete_if_no_reply_after_secondsintegerDelete the message if the fan has not replied after this many seconds. Text messages only: MYM cannot delete a media.
min 60max 2592000delete_on_next_messagebooleanDelete this message when the next message of the sequence is sent. Text messages only, ignored on the last message.
Defaultfalse
initial_delay_secondsintegerWait between the event and the first message, in seconds (up to 30 days).
Default0min 0max 2592000min_send_interval_hoursintegerMinimum hours between two firings for the same fan. At least 72 (1 for
media_purchase,new_tip,mod_purchase), which is also the default.min 1max 8760stop_sequence_on_replybooleanA fan who replies does not receive the next messages of the sequence.
Defaultfalseactivebooleanfalse: create it paused, to turn it on later (POST /v1/automations/{automation_id}/resume).
Defaulttrue
Response
Created, application/json
idstringrequiredFansquare automation id. Path parameter of the /v1/automations/{automation_id} routes.
creator_idstringrequiredFansquare creator id (see GET /v1/creators).
namestringrequiredName shown in Fansquare.
statusstringrequiredactive(fires on its trigger),paused,draft(created in the app, never activated) orcancelled.ValuesactivepauseddraftcancelledtriggerobjectrequiredThe event that fires it, in the shape of the create body.
typestringrequiredThe event.
Valuesnew_subscribernew_interestedresubscriptionnear_expirationsubscription_endedmedia_purchasenew_tipmod_purchasefan_onlinebirthdaydays_beforeintegernear_expiration(required, 1 to 365) andbirthday(0 = on the day, the default): how many days before.min 0max 365send_time_localstringnear_expirationandbirthday(required): wall-clock time of the send, HH:mm, intimezone.pattern ^([01]\d|2[0-3]):[0-5]\d$timezonestringIANA time zone of
send_time_localand of the online window, e.g.Europe/Paris.min length 1max length 100min_amount_centsintegermedia_purchase,new_tip,mod_purchase: fire only from this amount, in euro cents.min 0max 100000000online_window_startstringfan_online: start of the window, HH:mm intimezone(withonline_window_end).pattern ^([01]\d|2[0-3]):[0-5]\d$online_window_endstringfan_online: end of the window, HH:mm intimezone(withonline_window_start).pattern ^([01]\d|2[0-3]):[0-5]\d$
statsobjectrequiredLifetime totals.
triggered_countintegerrequiredTimes it fired.
fans_contactedintegerrequiredFans its messages reached.
failed_countintegerrequiredMessages that could not be delivered.
revenue_centsintegerrequiredGross revenue of the media it sent, bought within 30 days of each send, in euro cents.
purchasesintegerrequiredNumber of those purchases.
repliesintegerrequiredFans who replied after a message.
readsintegerrequiredFans who opened a message.
last_triggered_atstring | nullrequiredLast time it fired, or null.
format date-time
created_atstringrequiredWhen it was created (ISO 8601).
format date-timeactivated_atstring | nullrequiredLast activation: events older than this never fire it.
format date-timemessagesarray of objectsrequiredThe sequence sent each time it fires.
textstringrequiredText of the message.
media_idsarray of stringsrequiredMYM media uuids from the creator's vault.
price_centsinteger | nullrequiredFixed price to unlock the media, in euro cents. null: free, or dynamic (see
price_range).price_rangeobject | nullrequiredDynamic SpenderIQ price range in euro cents, or null for a fixed price.
min_centsintegerrequiredmax_centsintegerrequired
delay_secondsintegerrequiredWait after the previous message, in seconds (0 on the first message).
delete_if_no_reply_after_secondsinteger | nullrequiredDeleted if the fan has not replied after this many seconds, or null.
delete_on_next_messagebooleanrequiredDeleted when the next message of the sequence is sent.
filtersobjectrequiredAudience filters, in the shape of the create body: only the conditions that are set.
includeobjectConditions a fan must ALL meet to be targeted.
statusesarray of stringsSubscription status of the fan on this account, same vocabulary as the
statusesfilter of GET /v1/accounts/{account_id}/fans:active_subscriber,former_subscriber,interested(follows the creator without subscribing). Any of them. Absent or empty: no status condition, every fan with a conversation is in, whatever their status.Valuesactive_subscriberformer_subscriberinterestedmax items 3tag_idsarray of stringsOnly fans carrying at least one of these tags (ids from GET /v1/tags).
format uuidmax items 100min_spend_centsintegerTotal à-la-carte spend of the fan on this account at least this amount, in euro cents, gross (before the MYM commission). Same figure as
spend.total_centsof a fan in GET /v1/accounts/{account_id}/fans.min 0max 100000000min_tips_centsintegerSum of the tips the fan sent this account at least this amount, in euro cents.
min 0max 100000000min_subscription_monthsintegerFans whose first subscription to this account started at least this many months ago.
min 0max 1200is_onlinebooleantrue: only fans online on MYM when the audience is resolved (at send time for a Mass DM, at the trigger for an automation). false or absent: no condition.
min_paid_spend_7d_centsintegerPaid spend (subscriptions and purchases) of the fan on this account over the last 7 days at least this amount, in euro cents.
min 0max 100000000min_paid_spend_30d_centsintegerSame over the last 30 days.
min 0max 100000000min_paid_spend_90d_centsintegerSame over the last 90 days.
min 0max 100000000min_payments_7dintegerNumber of paid orders of the fan on this account over the last 7 days at least this value.
min 0max 100000min_payments_30dintegerSame over the last 30 days.
min 0max 100000min_payments_90dintegerSame over the last 90 days.
min 0max 100000spender_tiersarray of stringsSpenderIQ tiers, any of them, from the paid spend of the fan on this account over the last 90 days:
none(nothing),low(under 50 EUR),medium(50 EUR or more),high(300 EUR or more),whale(1,500 EUR or more).Valuesnonelowmediumhighwhalemax items 5media_purchaseobjectLast private media purchase of the fan on this account.
modestringrequiredwithin: the fan bought a private media in the lasthours.not_since: no private media purchase forhours(fans who never bought are in).Valueswithinnot_sincehoursintegerrequiredWindow in hours (1 to 8760).
min 1max 8760
excludeobjectConditions that leave a fan out.
tag_idsarray of stringsLeave out fans carrying any of these tags. A tag cannot be both included and excluded.
format uuidmax items 100messaged_within_hoursintegerLeave out fans the account sent a message to in the last N hours (a chatter, a script or another Mass DM sent from Fansquare).
min 1max 8760fan_messaged_within_hoursintegerLeave out fans who wrote to the account in the last N hours: never push into a live conversation. Checked again on MYM at send time.
min 1max 8760has_unread_from_fanbooleantrue: leave out fans whose last message to the account is still unread.
already_unlocked_mediabooleantrue: leave out fans who already have a media of this campaign unlocked (sent free, or bought).
already_received_mediabooleantrue: leave out fans who already received a media of this campaign, bought or not.
initial_delay_secondsintegerrequiredWait between the event and the first message, in seconds.
min_send_interval_hoursintegerrequiredMinimum hours between two firings for the same fan.
stop_sequence_on_replybooleanrequiredA fan who replies does not receive the next messages of the sequence.
curl -X POST 'https://api.fansquare.so/v1/automations' \
-H "Authorization: Bearer $API_KEY" \
-H "Fansquare-Version: Amethyste" \
-H "Content-Type: application/json" \
-d '{
"creator_id": "m81IhLxdhzDGYs54rNp2",
"name": "Lena",
"trigger": {
"type": "new_subscriber",
"days_before": 1,
"send_time_local": "string",
"timezone": "Europe/Paris",
"min_amount_cents": 4900,
"online_window_start": "string",
"online_window_end": "string"
},
"filters": {
"include": {
"statuses": [
"active_subscriber"
],
"tag_ids": [
"58368a92-838b-4cb0-ab37-d54ce826ea11"
],
"min_spend_cents": 5000,
"min_tips_cents": 5000,
"min_subscription_months": 12,
"is_online": true,
"min_paid_spend_7d_cents": 5000,
"min_paid_spend_30d_cents": 5000,
"min_paid_spend_90d_cents": 5000,
"min_payments_7d": 1,
"min_payments_30d": 1,
"min_payments_90d": 1,
"spender_tiers": [
"none"
],
"media_purchase": {
"mode": "within",
"hours": 12
}
},
"exclude": {
"tag_ids": [
"58368a92-838b-4cb0-ab37-d54ce826ea11"
],
"messaged_within_hours": 12,
"fan_messaged_within_hours": 12,
"has_unread_from_fan": true,
"already_unlocked_media": true,
"already_received_media": true
}
},
"messages": [
{
"text": "",
"media_ids": [
"b12eacb2-afea-4959-a0d0-b685e6b49279"
],
"price_cents": 1500,
"price_range": {
"min_cents": 5000,
"max_cents": 5000
},
"delay_seconds": 0,
"delete_if_no_reply_after_seconds": 300,
"delete_on_next_message": false
}
],
"initial_delay_seconds": 0,
"min_send_interval_hours": 12,
"stop_sequence_on_reply": false,
"active": true
}'{
"id": "40a6e358-bd2a-4cff-a59e-5709874d3f5b",
"creator_id": "m81IhLxdhzDGYs54rNp2",
"name": "Lena",
"status": "active",
"trigger": {
"type": "new_subscriber",
"days_before": 1,
"send_time_local": "string",
"timezone": "Europe/Paris",
"min_amount_cents": 4900,
"online_window_start": "string",
"online_window_end": "string"
},
"stats": {
"triggered_count": 12,
"fans_contacted": 1,
"failed_count": 2,
"revenue_cents": 4900,
"purchases": 12,
"replies": 12,
"reads": 12,
"last_triggered_at": "2026-10-12T21:14:00.000Z"
},
"created_at": "2026-10-12T21:14:00.000Z",
"activated_at": "2026-10-12T21:14:00.000Z",
"messages": [
{
"text": "",
"media_ids": [
"b12eacb2-afea-4959-a0d0-b685e6b49279"
],
"price_cents": 1500,
"price_range": {
"min_cents": 5000,
"max_cents": 5000
},
"delay_seconds": 0,
"delete_if_no_reply_after_seconds": 300,
"delete_on_next_message": false
}
],
"filters": {
"include": {
"statuses": [
"active_subscriber"
],
"tag_ids": [
"58368a92-838b-4cb0-ab37-d54ce826ea11"
],
"min_spend_cents": 5000,
"min_tips_cents": 5000,
"min_subscription_months": 12,
"is_online": true,
"min_paid_spend_7d_cents": 5000,
"min_paid_spend_30d_cents": 5000,
"min_paid_spend_90d_cents": 5000,
"min_payments_7d": 1,
"min_payments_30d": 1,
"min_payments_90d": 1,
"spender_tiers": [
"none"
],
"media_purchase": {
"mode": "within",
"hours": 12
}
},
"exclude": {
"tag_ids": [
"58368a92-838b-4cb0-ab37-d54ce826ea11"
],
"messaged_within_hours": 12,
"fan_messaged_within_hours": 12,
"has_unread_from_fan": true,
"already_unlocked_media": true,
"already_received_media": true
}
},
"initial_delay_seconds": 0,
"min_send_interval_hours": 12,
"stop_sequence_on_reply": false
}