AI assistants
Tools
Every tool BLU offers AI assistants — what it reads, the permission it needs, its inputs and the API endpoint behind it.
On this page
Each data tool reads exactly what one API endpoint returns, with the same permission and the same rules — the same code answers both, so for the same window your assistant and the API give the same numbers. Two differences are deliberate. In the tools, a date on its own as the end of a window means that whole day (2026-10-19 = through 23:59:59 UTC), because that is what people mean; the API reads a bare date as the start of that day, so send it a full date-time to be exact. And a date that doesn't exist, such as 2026-09-31, is refused by the tools with a message saying so, where the API rolls it over into the next month (2026-09-31 becomes 2026-10-01). The descriptions below are the words BLU gives the assistant, so they are written for it.
All tools only read — none of them can send a message to a fan or change anything in BLU. A tool your key has no permission for still appears in the assistant; using it returns a message naming the permission to turn on.
Creator data
list_creators
List creatorsList the creators currently connected to this agency: name, nickname, tags and platformPid (the OnlyFans performer id every other tool filters by). Use this first to resolve a creator's name to its platformPid.
Inputs (4)
creatorIdstring Only this creator: its platformPid (from list_creators).cursorstring The cursor from the previous call, to get the next page. Keep every other argument the same.limitinteger default50· 1–100 How many rows to return, 1-100 (default 50).fieldsarray of string Only return these fields of each row (for example ["id","platformPid","name"]). Omit for every field.
list_all_creators
List all creators, including removed onesList every creator under the agency whatever its connection status, including removed creators (status, deletedTime). Use this for questions about creators that were disconnected or removed. Needs a key with access to all creators. Known limitation: deletedTime is only populated for creators removed after status logging began — BLU hard-deletes creator rows, so it cannot be reconstructed for earlier removals. At most the 100 most recent removals are listed.
Inputs (4)
creatorIdstring Only this creator: its platformPid (from list_creators).cursorstring The cursor from the previous call, to get the next page. Keep every other argument the same.limitinteger default50· 1–100 How many rows to return, 1-100 (default 50).fieldsarray of string Only return these fields of each row (for example ["id","platformPid","name"]). Omit for every field.
list_transactions
List transactionsList individual revenue transactions (subscriptions, messages/PPV, tips, posts, streams) newest first, with amount, fee and net in CENTS, the transaction type and status, and a pseudonymous fanId. status is OnlyFans' own: done = completed, loading = still processing, undo = reversed (refunded or charged back), pending_return = a refund in progress; BLU's own earnings count every status except undo. Use this for "show recent payments" or to add up revenue over a short window. Window: startTime/endTime (default: the last 3 days; up to 366 days back). Get platformPid values from list_creators. Known limitation: type is derived from OnlyFans' own transaction description, which is localised. For a creator whose OnlyFans account is in a language BLU does not yet classify, type is null rather than a wrong bucket.
Inputs (6)
creatorIdstring Only this creator: its platformPid (from list_creators).cursorstring The cursor from the previous call, to get the next page. Keep every other argument the same.endTimestring Window end, UTC, inclusive: a date (2026-10-19 = through the end of that day) or a date-time. Omit for up to now.limitinteger default50· 1–100 How many rows to return, 1-100 (default 50).startTimestring Window start, UTC: a date (2026-10-01 = from 00:00 that day) or a date-time (2026-10-01T09:30:00Z). Omit both bounds for the last 72 hours. History goes back 366 days.fieldsarray of string Only return these fields of each row (for example ["id","transactionId","platformPid"]). Omit for every field.
list_refunds
List refunds and chargebacksList refunds and chargebacks: when the payment was made, when it was disputed, the amount in CENTS and OnlyFans' reason code. Window: startTime/endTime (default: the last 3 days; up to 366 days back). Get platformPid values from list_creators. Known limitation: transactionId names the disputed payment (transactionId on /v1/transactions) only when BLU holds that payment: a chargeback for a payment made before BLU began syncing the creator has null there and in refundReason, which on production today is most of them. paymentStatus is the payment's status when BLU first recorded the chargeback.
Inputs (6)
creatorIdstring Only this creator: its platformPid (from list_creators).cursorstring The cursor from the previous call, to get the next page. Keep every other argument the same.endTimestring Window end, UTC, inclusive: a date (2026-10-19 = through the end of that day) or a date-time. Omit for up to now.limitinteger default50· 1–100 How many rows to return, 1-100 (default 50).startTimestring Window start, UTC: a date (2026-10-01 = from 00:00 that day) or a date-time (2026-10-01T09:30:00Z). Omit both bounds for the last 72 hours. History goes back 366 days.fieldsarray of string Only return these fields of each row (for example ["id","transactionId","platformPid"]). Omit for every field.
list_links
List tracking and free-trial linksList marketing links and their performance: clicks, subscribers, conversion, earnings (gross and net, CENTS), promotion cost, profit and ROI. linkType picks TRACKING (default) or TRIAL links; CAMPAIGN (profile promotions) is not synced yet and returns nothing. Use this for "which link brought the most subscribers". Known limitation: linkType=CAMPAIGN (profile promotions) returns an empty list: BLU does not yet sync promotion campaigns. TRACKING and TRIAL are complete. profit, roi and cpc are null until a promotion cost is entered for the link in BLU. A refunded or charged-back payment counts as 0, once OnlyFans has settled the refund — one still in progress is counted as earnings until it does, which is what the BLU app shows too. A refund recorded after the payment was already counted shows at the link's next recount: the sync runs every 2 hours, and a link is recounted when its subscriber count (for a trial, its claim count) changes, so a link nobody is clicking keeps its last figure. source and tag are labels your team sets in BLU, not referrer data — BLU does not see where a click came from.
Inputs (6)
creatorIdstring Only this creator: its platformPid (from list_creators).cursorstring The cursor from the previous call, to get the next page. Keep every other argument the same.limitinteger default50· 1–100 How many rows to return, 1-100 (default 50).linkTypestring one ofTRACKING,TRIAL,CAMPAIGNWhich links: TRACKING (default) or TRIAL. CAMPAIGN returns nothing yet.statusstring one ofACTIVE,DEACTIVATEDACTIVE or DEACTIVATED links only.fieldsarray of string Only return these fields of each row (for example ["id","platformPid","name"]). Omit for every field.
get_link_daily_stats
Tracking-link clicks and subscribers per dayOne row per tracking link per day: clicks and subscribers gained that day, plus running totals. Days are the agency's report days. Window: reportStartTime/reportEndTime (YYYY-MM-DD; up to 31 days per call, default today and the 3 days before). Up to 10 creators per call (creatorIds). Data starts on 2026-09-12. Get platformPid values from list_creators. Known limitation: OnlyFans keeps no history of a link's counters, so this series starts on 2026-09-12, the day BLU began writing them down: earlier days return no rows. A day's gain is null when the day before it was not recorded. Tracking links only — trial links are not recorded yet. There is no referrer or device breakdown: BLU does not receive one.
Inputs (6)
creatorIdsarray of string at most 10 Only these creators: up to 10 platformPid values (from list_creators). Omit for every creator this connection can see.cursorstring The cursor from the previous call, to get the next page. Keep every other argument the same.limitinteger default50· 1–100 How many rows to return, 1-100 (default 50).reportEndTimestring Last day of the report, YYYY-MM-DD, inclusive. Defaults to today.reportStartTimestring First day of the report, YYYY-MM-DD (the agency's own days). Omit both for today and the 3 days before. At most 31 days per call. History goes back 366 days.fieldsarray of string Only return these fields of each row (for example ["linkId","platformPid","date"]). Omit for every field.
list_link_fans
List fans who came from a linkList the fans acquired through ONE marketing link and what each spent, by type (gross, in CENTS). Needs linkType and linkId (the link's id from list_links).
Inputs (6)
creatorIdstring Only this creator: its platformPid (from list_creators).cursorstring The cursor from the previous call, to get the next page. Keep every other argument the same.limitinteger default50· 1–100 How many rows to return, 1-100 (default 50).linkIdstring required The link's id, from list_links.linkTypestring required one ofTRACKING,TRIAL,CAMPAIGNWhich kind of link linkId is: TRACKING or TRIAL. CAMPAIGN returns nothing yet.fieldsarray of string Only return these fields of each row (for example ["id","fanId","fanName"]). Omit for every field.
list_automated_messages
List automated messagesList automated message campaigns: trigger, audience filters, the messages and price (CENTS), status and how many times each was sent. Purchases and revenue per campaign are not attributed yet (null). Get platformPid values from list_creators. Known limitation: Per-collection send, purchase and revenue counters are null, and so are campaign-level purchases and revenue: BLU records deliveries per recipient but does not yet attribute purchases to a campaign. totalNumberOfTimeSent is complete. employeeId is null when the campaign's author is no longer one of your employees.
Inputs (4)
creatorIdstring Only this creator: its platformPid (from list_creators).cursorstring The cursor from the previous call, to get the next page. Keep every other argument the same.limitinteger default50· 1–100 How many rows to return, 1-100 (default 50).fieldsarray of string Only return these fields of each row (for example ["automatedMessageId","platformPid","employeeId"]). Omit for every field.
list_priority_mass_messages
List priority mass messagesList priority mass message campaigns: audience rules, price (CENTS), status, send time and how many were sent or failed. Purchases and revenue per campaign are not attributed yet (null). Get platformPid values from list_creators. Known limitation: Campaign-level purchases and revenue are null: BLU records deliveries per recipient but does not yet attribute purchases to a campaign. totalNumberOfTimeSent is complete. employeeId is null when the campaign's author is no longer one of your employees.
Inputs (4)
creatorIdstring Only this creator: its platformPid (from list_creators).cursorstring The cursor from the previous call, to get the next page. Keep every other argument the same.limitinteger default50· 1–100 How many rows to return, 1-100 (default 50).fieldsarray of string Only return these fields of each row (for example ["platformPid","employeeId","status"]). Omit for every field.
list_sales_records
List sales with employee attributionList individual sales (paid PPV unlocks and tips) with who gets the credit: the attribution rule, the credited employee and the attributed amount (CENTS). Use this for "which chatter made this sale". Refunded or charged-back sales are left out unless includeReversed=true. Window: startTime/endTime (up to 31 days per call, default the last 3 days). Get platformPid values from list_creators. Known limitation: A sale is a paid PPV unlock or a tip: offers nobody bought and free unlocks are not returned. campaignRef groups the sales of one campaign or mass send — a PPV sent to a single fan has none. A campaign of another agency's on a creator you share is never named.
Inputs (7)
creatorIdstring Only this creator: its platformPid (from list_creators).cursorstring The cursor from the previous call, to get the next page. Keep every other argument the same.endTimestring Window end, UTC, inclusive: a date (2026-10-19 = through the end of that day) or a date-time. Omit for up to now.includeReversedboolean defaultfalsetrue to include sales that were later refunded or charged back.limitinteger default50· 1–100 How many rows to return, 1-100 (default 50).startTimestring Window start, UTC: a date (2026-10-01 = from 00:00 that day) or a date-time (2026-10-01T09:30:00Z). Omit both bounds for the last 72 hours. At most 31 days per call. History goes back 366 days.fieldsarray of string Only return these fields of each row (for example ["id","transactionId","platformPid"]). Omit for every field.
get_creator_chat_stats
Chat activity per creatorPer creator, over the window: how fast fans got a reply (replyTime, milliseconds), messages sent through BLU, fans chatted, and PPVs sent and unlocked. Window: reportStartTime/reportEndTime (YYYY-MM-DD; up to 31 days, default today and the 3 days before). Up to 10 creators per call. Get platformPid values from list_creators. Known limitation: replyTime is measured for fan messages from 2026-09-12: a window that starts earlier averages only the part after that date, and one entirely before it is null. It counts a reply by anyone on the creator side, including one typed in the OnlyFans Manager, which BLU sees but cannot attribute to an employee; a mass message is never a reply. Messages and fans chatted count what employees sent THROUGH BLU. Before 2026-09-12, replyTime carried the fan's latency to an employee, which is now fanReplyTimeMs.
Inputs (6)
creatorIdsarray of string at most 10 Only these creators: up to 10 platformPid values (from list_creators). Omit for every creator this connection can see.cursorstring The cursor from the previous call, to get the next page. Keep every other argument the same.limitinteger default50· 1–100 How many rows to return, 1-100 (default 50).reportEndTimestring Last day of the report, YYYY-MM-DD, inclusive. Defaults to today.reportStartTimestring First day of the report, YYYY-MM-DD (the agency's own days). Omit both for today and the 3 days before. At most 31 days per call. History goes back 366 days.fieldsarray of string Only return these fields of each row (for example ["platformPid","date","replyTime"]). Omit for every field.
get_fan_counts
Active and expired fans per dayPer creator and day: activeFans (subscribed at the END of that day), expiredFans (lapsed DURING that day — a flow, never add it up as a total) and paidActiveFans. Window: reportStartTime/reportEndTime (YYYY-MM-DD; up to 31 days, default today and the 3 days before). Up to 10 creators per call. Get platformPid values from list_creators. Known limitation: Days before the nightly rollup began are reconstructed from the current fan snapshot and are a LOWER BOUND: a fan who churned long enough ago that OnlyFans no longer returns them is absent, and a fan who left and re-subscribed keeps only their latest window. Recent days are measured, not reconstructed.
Inputs (6)
creatorIdsarray of string at most 10 Only these creators: up to 10 platformPid values (from list_creators). Omit for every creator this connection can see.cursorstring The cursor from the previous call, to get the next page. Keep every other argument the same.limitinteger default50· 1–100 How many rows to return, 1-100 (default 50).reportEndTimestring Last day of the report, YYYY-MM-DD, inclusive. Defaults to today.reportStartTimestring First day of the report, YYYY-MM-DD (the agency's own days). Omit both for today and the 3 days before. At most 31 days per call. History goes back 366 days.fieldsarray of string Only return these fields of each row (for example ["platformPid","date","activeFans"]). Omit for every field.
get_new_and_renewed_fans
New and renewed subscriptions per dayPer creator and day: new paid subscriptions and renewals, from the creator's own ledger. A free page reports 0 here even while it gains fans — use get_fan_counts for that. Window: reportStartTime/reportEndTime (YYYY-MM-DD; up to 31 days, default today and the 3 days before). Up to 10 creators per call. Get platformPid values from list_creators.
Inputs (6)
creatorIdsarray of string at most 10 Only these creators: up to 10 platformPid values (from list_creators). Omit for every creator this connection can see.cursorstring The cursor from the previous call, to get the next page. Keep every other argument the same.limitinteger default50· 1–100 How many rows to return, 1-100 (default 50).reportEndTimestring Last day of the report, YYYY-MM-DD, inclusive. Defaults to today.reportStartTimestring First day of the report, YYYY-MM-DD (the agency's own days). Omit both for today and the 3 days before. At most 31 days per call. History goes back 366 days.fieldsarray of string Only return these fields of each row (for example ["platformPid","date","newSubscribers"]). Omit for every field.
get_fans_with_renew_on
Fans with auto-renew on or off per dayPer creator and day: active fans whose subscription will renew, and those who set it to expire. null before 2026-09-12. Window: reportStartTime/reportEndTime (YYYY-MM-DD; up to 31 days, default today and the 3 days before). Up to 10 creators per call. Get platformPid values from list_creators. Known limitation: Returns null for days before 2026-09-12. Before then this endpoint counted a different OnlyFans flag, which read about 98% renewing where OnlyFans itself shows about 61%; those values are withdrawn rather than republished, and renewal state is point-in-time, so it cannot be reconstructed. Each day's value is one nightly snapshot of the fans active at that day's end, from each fan's own subscription as BLU last synced it: a fan who changed their mind since is counted as before, and for a creator with more than about 8,000 fans the older fans are not re-read daily. Never reported as 0 for a day that was not observed.
Inputs (6)
creatorIdsarray of string at most 10 Only these creators: up to 10 platformPid values (from list_creators). Omit for every creator this connection can see.cursorstring The cursor from the previous call, to get the next page. Keep every other argument the same.limitinteger default50· 1–100 How many rows to return, 1-100 (default 50).reportEndTimestring Last day of the report, YYYY-MM-DD, inclusive. Defaults to today.reportStartTimestring First day of the report, YYYY-MM-DD (the agency's own days). Omit both for today and the 3 days before. At most 31 days per call. History goes back 366 days.fieldsarray of string Only return these fields of each row (for example ["platformPid","date","fansWithRenewOn"]). Omit for every field.
get_fans_today
Today's subscribers so farToday so far, per creator: OnlyFans' own subscriber count, and the subscriptions bought and renewed since midnight in the agency's time zone. Use this for "how are we doing today". Get platformPid values from list_creators. Known limitation: subscribersCount is null until the creator's first sync after 2026-09-12. The subscription counts are null for a creator who is disconnected, because BLU is then not reading their ledger. They count PAID subscriptions, so a free page reports 0 new ones, as on /fans/subscriber-count.
Inputs (4)
creatorIdstring Only this creator: its platformPid (from list_creators).cursorstring The cursor from the previous call, to get the next page. Keep every other argument the same.limitinteger default50· 1–100 How many rows to return, 1-100 (default 50).fieldsarray of string Only return these fields of each row (for example ["platformPid","date","utcOffset"]). Omit for every field.
get_subscription_length
Average subscription length per dayPer creator and day: the average subscription length, in DAYS. Window: reportStartTime/reportEndTime (YYYY-MM-DD; up to 31 days, default today and the 3 days before). Up to 10 creators per call. Get platformPid values from list_creators. Known limitation: Days before the nightly rollup began are reconstructed from the current fan snapshot and are a LOWER BOUND: a fan who churned long enough ago that OnlyFans no longer returns them is absent, and a fan who left and re-subscribed keeps only their latest window. Recent days are measured, not reconstructed.
Inputs (6)
creatorIdsarray of string at most 10 Only these creators: up to 10 platformPid values (from list_creators). Omit for every creator this connection can see.cursorstring The cursor from the previous call, to get the next page. Keep every other argument the same.limitinteger default50· 1–100 How many rows to return, 1-100 (default 50).reportEndTimestring Last day of the report, YYYY-MM-DD, inclusive. Defaults to today.reportStartTimestring First day of the report, YYYY-MM-DD (the agency's own days). Omit both for today and the 3 days before. At most 31 days per call. History goes back 366 days.fieldsarray of string Only return these fields of each row (for example ["platformPid","date","avgSubscriptionLength"]). Omit for every field.
get_profile_visitors
Profile visitors per dayPer creator and day: profile visitors as OnlyFans counts them. Window: reportStartTime/reportEndTime (YYYY-MM-DD; up to 31 days, default today and the 3 days before). Up to 10 creators per call. Get platformPid values from list_creators. Known limitation: The daily guest / logged-in split is null: BLU reads OnlyFans' daily visitor chart as one total. OnlyFans' split by visitor type is published per country, over the trailing year, on /v1/creator-report/reach/top-countries. The daily total itself is OnlyFans' own pre-aggregated daily bucket republished under the creator's local-day label — OnlyFans returns no intraday detail, so it cannot be re-bucketed, and where your report timezone differs from the account's the edges will not line up exactly.
Inputs (6)
creatorIdsarray of string at most 10 Only these creators: up to 10 platformPid values (from list_creators). Omit for every creator this connection can see.cursorstring The cursor from the previous call, to get the next page. Keep every other argument the same.limitinteger default50· 1–100 How many rows to return, 1-100 (default 50).reportEndTimestring Last day of the report, YYYY-MM-DD, inclusive. Defaults to today.reportStartTimestring First day of the report, YYYY-MM-DD (the agency's own days). Omit both for today and the 3 days before. At most 31 days per call. History goes back 366 days.fieldsarray of string Only return these fields of each row (for example ["platformPid","date","profileVisitors"]). Omit for every field.
get_profile_views_by_country
Profile views by countryWhere each creator's profile views come from: OnlyFans' top ten countries plus "Others" over the trailing year, split into guests and logged-in users. These are views, not unique visitors, and nothing here locates an individual fan. Get platformPid values from list_creators. Known limitation: These are profile VIEWS, not unique visitors, exactly as OnlyFans reports them, re-read about hourly. OnlyFans gives no daily breakdown by country and no split by subscriber, so neither is offered. Nothing here identifies or locates a fan, and no endpoint in this API publishes a fan's location.
Inputs (4)
creatorIdstring Only this creator: its platformPid (from list_creators).cursorstring The cursor from the previous call, to get the next page. Keep every other argument the same.limitinteger default50· 1–100 How many rows to return, 1-100 (default 50).fieldsarray of string Only return these fields of each row (for example ["platformPid","countryCode","countryName"]). Omit for every field.
list_creator_status_changes
Creator connect / disconnect historyConnect, disconnect, verification and removal events for creators, with who made the change (null = it was automatic, e.g. an expired session). Use this for "when did this creator disconnect". Window: reportStartTime/reportEndTime (YYYY-MM-DD; up to 31 days, default today and the 3 days before). Up to 10 creators per call. Get platformPid values from list_creators. Known limitation: FORWARD-ONLY. A creator is hard-deleted along with everything attached to it, so there was nothing to reconstruct from: the log starts on the day BLU began recording it and no earlier history exists or can be produced. Removal events are only returned to a key scoped to ALL creators — a removed creator cannot be named in a creatorIds filter.
Inputs (6)
creatorIdsarray of string at most 10 Only these creators: up to 10 platformPid values (from list_creators). Omit for every creator this connection can see.cursorstring The cursor from the previous call, to get the next page. Keep every other argument the same.limitinteger default50· 1–100 How many rows to return, 1-100 (default 50).reportEndTimestring Last day of the report, YYYY-MM-DD, inclusive. Defaults to today.reportStartTimestring First day of the report, YYYY-MM-DD (the agency's own days). Omit both for today and the 3 days before. At most 31 days per call. History goes back 366 days.fieldsarray of string Only return these fields of each row (for example ["id","creatorId","platformPid"]). Omit for every field.
Employee data
list_employees
List employeesList the agency's employees (chatters and managers): id, name, status (deactivated ones are included) and when they were added. Use this to turn an employeeId from another tool into a name. Known limitation: deletedTime is always null: BLU hard-deletes employee records, so a removed employee is absent rather than tombstoned. Deactivated employees are returned with a DEACTIVATED status.
Inputs (4)
cursorstring The cursor from the previous call, to get the next page. Keep every other argument the same.employeeIdsarray of integer at most 10 Only these employees: up to 10 employeeId values (from list_employees). Omit for everyone.limitinteger default50· 1–100 How many rows to return, 1-100 (default 50).fieldsarray of string Only return these fields of each row (for example ["employeeId","employeeName","status"]). Omit for every field.
list_employee_creators
Creators assigned to an employeeList the creators one employee is assigned to. Needs employeeId (from list_employees).
Inputs (4)
cursorstring The cursor from the previous call, to get the next page. Keep every other argument the same.employeeIdinteger required The employee: an employeeId from list_employees.limitinteger default50· 1–100 How many rows to return, 1-100 (default 50).fieldsarray of string Only return these fields of each row (for example ["employeeId","creatorId","platformPid"]). Omit for every field.
get_employee_sales_stats
Sales per employee per daySales credited to each employee, per creator and day (the agency's report days): total sales, PPV and tips, in CENTS. Refunded and charged-back sales are excluded. Use this for "who was our best chatter last week". Window: reportStartTime/reportEndTime (YYYY-MM-DD; up to 31 days, default today and the 3 days before). Up to 10 employeeIds per call; omit for everyone. Known limitation: A row exists for each employee, creator and day with any activity through BLU; date is a day in your agency's report timezone, and today's rows fill in through the day. salesAmount includes tips, and ppvSalesAmount is salesAmount minus tipsSalesAmount. The split by the channel a sale came through (direct message, priority mass, mass message) is not available yet.
Inputs (6)
cursorstring The cursor from the previous call, to get the next page. Keep every other argument the same.employeeIdsarray of integer at most 10 Only these employees: up to 10 employeeId values (from list_employees). Omit for everyone.limitinteger default50· 1–100 How many rows to return, 1-100 (default 50).reportEndTimestring Last day of the report, YYYY-MM-DD, inclusive. Defaults to today.reportStartTimestring First day of the report, YYYY-MM-DD (the agency's own days). Omit both for today and the 3 days before. At most 31 days per call. History goes back 366 days.fieldsarray of string Only return these fields of each row (for example ["employeeId","date","platformPid"]). Omit for every field.
get_employee_chat_stats
Chat activity per employee per dayPer employee, creator and day: messages and PPVs sent through BLU, PPVs unlocked, fans chatted, characters typed and how fast the employee replied to fans (milliseconds; from 2026-09-12). Window: reportStartTime/reportEndTime (YYYY-MM-DD; up to 31 days, default today and the 3 days before). Up to 10 employeeIds per call; omit for everyone. Known limitation: Messages count what employees sent THROUGH BLU: a message typed in the OnlyFans Manager tab is not seen, and neither is a reply sent that way. Response times are measured from 2026-09-12 — earlier days are null — as the time from a fan's message to the employee's first reply through BLU; a mass message is never a reply. responseTimeBasedOnClockedHours counts only fan messages that arrived while the employee was clocked in; percentiles are null below 5 replies. responseTimeBasedOnScheduledHours is null: replies are not yet measured against the shift schedule. goldenRatio is null: BLU has no source for it.
Inputs (6)
cursorstring The cursor from the previous call, to get the next page. Keep every other argument the same.employeeIdsarray of integer at most 10 Only these employees: up to 10 employeeId values (from list_employees). Omit for everyone.limitinteger default50· 1–100 How many rows to return, 1-100 (default 50).reportEndTimestring Last day of the report, YYYY-MM-DD, inclusive. Defaults to today.reportStartTimestring First day of the report, YYYY-MM-DD (the agency's own days). Omit both for today and the 3 days before. At most 31 days per call. History goes back 366 days.fieldsarray of string Only return these fields of each row (for example ["employeeId","date","platformPid"]). Omit for every field.
Organization data
get_monthly_billing
BLU billing per monthThe agency's BLU bill per month: subscription charges, deductions, total, balance due, paid and pending (CENTS). This is what the agency pays BLU, not creator earnings. Window: startTime/endTime (default the last 3 days — pass the months you want). Known limitation: BLU bills from a credit ledger rather than issuing invoices, so discount and igic are always 0 and invoiceId is a derived, stable identifier rather than a document number.
Inputs (5)
cursorstring The cursor from the previous call, to get the next page. Keep every other argument the same.endTimestring Window end, UTC, inclusive: a date (2026-10-19 = through the end of that day) or a date-time. Omit for up to now.limitinteger default50· 1–100 How many rows to return, 1-100 (default 50).startTimestring Window start, UTC: a date (2026-10-01 = from 00:00 that day) or a date-time (2026-10-01T09:30:00Z). Omit both bounds for the last 72 hours. History goes back 366 days.fieldsarray of string Only return these fields of each row (for example ["billingId","invoiceId","billingPeriod"]). Omit for every field.
list_reassigned_sales
Manually reassigned salesSales whose credit was moved by hand from one employee to another: who moved it, from whom, to whom and when. Window: startTime/endTime (up to 31 days per call, default the last 3 days).
Inputs (5)
cursorstring The cursor from the previous call, to get the next page. Keep every other argument the same.endTimestring Window end, UTC, inclusive: a date (2026-10-19 = through the end of that day) or a date-time. Omit for up to now.limitinteger default50· 1–100 How many rows to return, 1-100 (default 50).startTimestring Window start, UTC: a date (2026-10-01 = from 00:00 that day) or a date-time (2026-10-01T09:30:00Z). Omit both bounds for the last 72 hours. At most 31 days per call. History goes back 366 days.fieldsarray of string Only return these fields of each row (for example ["id","transactionId","transactionPerfId"]). Omit for every field.
This connection
get_connection_info
What this connection can readDescribe this BLU connection: the agency, the API key it uses, which creators and employees it covers, which kinds of data it may read (and which it may not), whether fans' names are included, its limits and the agency's report time zone. Call this first, and whenever a tool says something is not allowed.
Inputs (0)
Takes no input.
Not offered as a tool
- Platform ranking (
GET /v1/creator-report/rank): BLU does not capture OnlyFans' performance rank yet, so this endpoint returns null for every day. It becomes a tool when it carries data.
What BLU tells the assistant
When an assistant connects, BLU introduces itself as BLU (server name blu, version 1.0.0) with these instructions, word for word:
BLU gives read-only access to one agency's BLU data: creators, fans, transactions, sales, chat and employee performance, links, mass messages and billing. Nothing can be changed. Money is integer cents (1230 = $12.30). Report days are the agency's own days; timestamps are UTC. null means BLU does not know — never treat it as 0. Call get_connection_info first to see what this connection can read. Creators are identified by platformPid (from list_creators); pass it as creatorId or creatorIds. Windowed tools default to a short recent window (the last 72 hours, or today and the 3 days before for daily reports), so pass explicit dates for anything longer. Lists are paginated: when hasMore is true, call again with the returned cursor and the same filters. Use `fields` to fetch only the columns you need when reading many rows. If a tool says the key lacks a permission, tell the user which one: the agency owner turns it on in BLU, under API keys → Edit.
Every tool is marked read-only, non-destructive and idempotent, so assistants that ask before running a tool can tell it changes nothing.

