Editing an outbound campaign's settings now saves
Updating an outbound voice campaign's pacing, calling window, retries, voicemail, or webhook from the Edit screen now saves correctly β the save error is fixed.
Latest updates, features, and fixes.
Updating an outbound voice campaign's pacing, calling window, retries, voicemail, or webhook from the Edit screen now saves correctly β the save error is fixed.
Bonus spins you earn from buying a Giraffe (and from buying $GARY) are now a separate stash that never expires β spin them whenever you like, without counting against your daily Longneck Luck spin limit.
If you sign in with your wallet, you can now export your Gary Club wallet's private key from Settings by signing a quick message with that wallet β no password or repeated sign-outs needed.
Moving a Giraffe out of your Gary Club wallet to another address now goes through cleanly. If a transfer ever can't complete, you'll see a clear reason instead of a confusing error.
When your voice agent hands a caller off to a real person, the transfer now connects cleanly every time. Previously some transfers could fail and the caller heard an apology instead of being put through.
Connecting a client's agent to Cal.com now saves every time β approve once and it lands back showing connected. Previously the connection could silently fail to save after you approved.
Your support tickets list now shows every ticket you've opened by default, including closed and resolved ones, with the complete message history on each. Filter by status any time you want a shorter list.
Your support inbox now shows every ticket you've opened by default β closed and resolved tickets included β so you can always reopen any ticket and read its full history. Use the status filter to narrow the list when you want.
When your agent transfers a call to a human, the caller is now connected directly instead of routed through an extra layer β clearing up the static and dropouts some agencies heard on transferred calls.
When a coupon is applied to a package, your monthly revenue, revenue per client, and annual run rate now show the actual discounted amount you're billing β not the full list price.
Payment links you send prospects now complete checkout correctly β your client can enter their card, apply a coupon, and start their subscription without errors.
Your client portal β login, sign-up, password reset, and dashboard β now shows your logo, name, and favicon instead of Gary Club on your verified custom domain, including the browser tab and shared-link previews.
If you run your client signup links on your own custom domain, promo codes now apply at checkout and clients can complete signup end to end.
The /hire-an-agent page is now organized around 10 named outcomes (Answer Desk, Night Desk, First Contact, Lead Lock, Quote Close, Calendar Full, Hidden Revenue, Comeback Engine, Five Star Flow, Referral Flywheel) plus a custom-build path. New 2-minute fit diagnostic prescribes the right outcomes for your business and primes the fit call.
The Giraffe Open category now has a π€ AI channel for models, prompts, and agent builds. Business Coaching is now π§ Mastermind β same room, same conversations, new name.
If your agency is set to Canada, the Messaging hub now reflects the CASL flow end-to-end. The Campaigns tab is hidden (Canada doesn't need carrier campaigns), the Numbers tab no longer asks you to pick a verified brand, and the Buy Number flow defaults the area-code picker to Canada and explains the number will attach directly under your CASL identification on SMS Setup.
Telnyx numbers that sit unattached β no client, agent, brand, SDR config, or recent call/SMS traffic β are now automatically released after 10 days of being tracked in your account. Stops the slow per-number bleed on numbers that were bought but never wired up. The action is visible in the Compliance hub and logged for audit.
Numbers outside the US that need carrier-filed regulatory documents (UK, EU, AU) now show up at Messaging β Compliance. The wizard walks you through proof of address, ID / Companies House certificate, contact, address, use case, and business website, uploads them to the carrier, and submits the requirement group for approval. Outbound SMS from non-compliant numbers is paused until approved, and a dashboard banner flags any action needed.
Connected: Interested, Not Interested, Callback Requested, Demo Booked, Wrong Number, and Voicemail Left all now reflect what actually happened on the call. Lists show company name, contact name, and a fallback phone label so empty cells are gone. Demo-client contacts also surface inside your agency CRM.
When someone calls your Inbound SDR number back after you phoned or texted them, the agent now knows. It pulls the prior call's date, disposition, and summary and greets the caller by name with context, instead of asking 'how can I help?'
Your follow-ups now use pre-call research and a verified website scrape to address prospects by the right name, reference real services, and quote your actual package pricing instead of generic placeholders. Voicemails get voicemail-style copy, not 'thanks for taking my call.'
The transcript and call info now render on first paint instead of after a spinner. No more waiting for the page to fetch what the server already knew.
Canadian agencies now pay a flat $5/mo compliance fee per CA scope (agency or client) that owns at least one active Canadian number β the equivalent of the US 10DLC campaign monthly without the carrier registration. Visible alongside the rest of your rates in admin pricing.
Canadian agencies and clients can now send SMS from Canadian long codes without registering a US 10DLC brand. Pick Canada at signup or flip an existing client via the auto-detect banner β Messaging shows a Canada SMS Setup page with CASL identification, opt-out keywords, and the consent attestation. Identification + STOP are auto-appended on the first message of every thread.
Pre-submit checklist now catches when country, state, postal code, or EIN country don't agree β before you burn a Telnyx submission on a typo. Canadian sole proprietors get a clear 'incorporate first' message: 10DLC carrier registration requires a Corporation Number, not a Business Number.
Demo Mode and Inbound SDR auto-text used to fire on every caller, including the daily wave of Google-listing and SEO cold-call scripts. The auto-text now reads the call transcript and skips the SMS for callers that match the obvious scam shape (2+ scam signals, or 1 signal on a sub-10-second auto-dial hang-up). Real prospects still get the follow-up.
Opening 'Text' on a CRM contact used to create a 'No messages yet' row at the top of your Messages inbox even if you never sent anything. Those drafts no longer clutter the list β only threads with real activity show up.
Tap 'Forgot Password' on gary.club, click the link in your email, set a new password. Previously the recovery flow silently failed when the email link opened in a new tab (almost always) because the security code didn't survive across tabs. The verifier now persists for 10 minutes across tabs in the same browser so the round trip just works.
Turn on a single toggle in Growth β Inbound SDR and every prospect who calls your SDR line gets an immediate text from your agency's SMS number. The thread lands in your Messages inbox and your Messaging Agent runs SPIN over text from there. Same auto-engage behavior we ship for Demo Mode, now wired to your Inbound SDR. Requires your Messaging Agent to be set up in Growth β SMS.
The follow-up email and SMS that auto-generate after every phone call now prescribe one of the 10 named Solutions (Answer Desk, Night Desk, Quote Close, etc.) with its Implementation Sentence verbatim, instead of pitching 'AI voice agents'. Em dashes, corporate phrasing, and AI-stack language are banned in customer-facing copy. The drafts mirror the rep's actual speaking voice from the transcript.
When you preview a list in the power dialer, the 'leads match your criteria' count now shows the true filtered count instead of capping at 200. Lists with 200+ matching leads were previously under-reported here even though the list-stats banner above showed the real number.
Bulk-select isn't capped to the visible 100 rows anymore. When you tick the header checkbox on Contacts or Companies and your search returns more results than fit on a page, a new banner appears: "Select all N matching your search." Click it and every result β across all pages β joins your selection, so Add to list, Owner, Tag, Export and the rest of the bulk actions apply to the entire filtered set in one click.
The Messaging dashboard now follows the natural carrier flow: 1. Brands β 2. Campaigns β 3. Numbers. The campaign create form is a focused 3-step wizard (Use case β Brand & strategy β Compose) with per-sub-use-case sample message templates for Low Volume Mixed and Mixed Use campaigns. Privacy and Terms URLs are now required at create time. Click 'Submit for internal review' and we validate every field against the carrier compliance checklist before any FUEL is charged.
Reminders now fire in their proper windows (24h, 1h, and 15m before the event), never overlap, and never repeat. Cleaner copy and a larger, more legible logo.
Power-dialer and click-to-call now always log to the Company and Contact timelines, with the rep's name on every entry. Fixes a case where a second call to the same company today only showed once, and where calls displayed as a generic 'User'.
Open the right-rail Deals section on a Company or Contact and click + New deal β the quick-create drawer pre-fills the company and contact so the deal lands scoped correctly with one click.
A2P brand registrations that fail at the carrier now tell you the offending field (e.g. "vertical") instead of a cryptic "required parameter missing." Brand verticals normalize to the canonical TCR set on save, so submissions that would have silently rejected at Telnyx are caught up front.
When you unlock locked $GARY at /dashboard/lock, the button now reports Sending β Confirming on-chain and clears as soon as the transaction lands, instead of spinning silently for up to a minute even after the tx had already confirmed.
Two fixes to the messaging brand registration flow. You can now edit any draft or rejected brand from the Messaging β Brands tab (Edit button next to Submit). And the pre-approval check no longer false-fails the address rule on brands that have a complete ZIP β the validator was reading a different key than the form was writing.
Re-dropping $GARY or $GIRAFFISH in #gc-trenches now refreshes the existing card in place instead of spawning a fresh duplicate within the same day.
Pick any combination of Inbound Voice (receptionist), Outbound Voice (dialer / SDR), and SMS when building a package. Outbound voice gets its own per-minute pricing, included minutes, overage rate, and optional daily call cap separate from inbound.
Until today, packages forced a single channel pick: Voice, SMS, or Voice + SMS. That left two real combinations unaddressed: Inbound + SMS (a receptionist that texts back) and Outbound Voice at all (despite outbound shipping in May).
Now the Create / Edit Package screen has three independent toggles:
Outbound voice is treated as a first-class billable channel with its own pricing fields:
Existing packages were migrated: 31 single-channel Voice packages became Inbound Voice; the 3 combo packages kept Inbound + SMS. Outbound is opt-in everywhere β no existing client gained a capability they did not already have.
1-click demo agent deploy from a Growth Audit was returning "CSRF validation failed" because the server-to-server forward into the agent provisioning route was missing an Origin header. Fixed.
Search bar on the power dialer searches across every contact and company in your CRM, not just the currently-selected list. Same fix on the Companies and Contacts pages β typing 'hvac' (or anything else) now actually queries Postgres instead of filtering only the visible 100-row page. Try it once and you'll see the count update.
When someone replies to a CRM email, the inbound message now nests under your outbound on the contact timeline as a thread, renders the original HTML (sanitized) on demand, and preserves attachments β click to download. A new β© Reply button on each inbound row pre-fills the composer with the thread's In-Reply-To/References so your reply continues the same conversation. Outbound attachments work too β paperclip icon in the composer, files attach inline. Send-as aliases let you switch the From address per send (must be configured in Gmail's 'Send mail as' first).
Dynamic 'Called' / 'Never Called' lists now reflect activity within seconds. The dialer's industry filter is now a smart Search box (matches name, industry, address, plus synonyms like dentalβdentist, hvacβheating). Call recordings play merged in both ears instead of split. Transcripts now show the calling rep's first name (e.g. 'PEYTON') instead of a generic 'YOU'.
When someone replies to an email you sent from the CRM, it now appears as an inbound activity on the contact's timeline within ~2 minutes β no manual logging. The recipient address auto-saves to the contact, and the next time you compose, the To field pre-fills with their primary email.
Settings β Account now uses a 16-character Gmail App Password instead of OAuth. Skips Google's verification flow entirely. Every team member connects their own inbox; sends route through SMTP so mail lands in your real Sent folder. Reply syncing into the contact timeline ships next.
Your dialer list cards now reflect every call you've made (last-called, connected, no-answer, never-called) within seconds. Previously, large lists could take many seconds to load and some calls weren't being credited to the right company.
Fixed a regression from this morning's OG-bonus rollout where Lock returned a 'spin_id required' error after the wheel finished spinning. OGs can claim today's bonus spin again β and any spin that errored before the fix has already been refunded by the auto-recovery sweep, so your daily count is intact.
Longneck Luck and STRETCH are now exclusive to Giraffe holders. Hold a Giraffe Tower NFT (or carry the Giraffe badge) to play β the same gate that already protects The Herd and member chat.
Members who don't hold a Giraffe Tower NFT can still take their daily Longneck spin, but the reel now shows common-rarity prizes only β no $GARY drops, NFTs, or jackpots. Buy a Giraffe to unlock the full prize pool.
When a member crosses #1 all-time or breaks into the top 5, the activity feed now shows a full celebration hero card β gradient banner, big rank + lifetime winnings, confetti, and a leaderboard CTA. Replaces the plain-text body that was rendering before.
OG Giraffe badge holders now get one bonus Longneck Luck spin every day on top of the existing free + holder + buy bonuses. Eligibility is durable β once you've earned the OG badge you keep the bonus, even after transferring NFTs between wallets.
Visit Longneck Luck to claim. The OG tile shows up alongside Giraffe, Whale, Giraffish Millionaire, and $GARY Holder bonuses. Daily reset at 00:00 UTC.
Your inbound voice agents will no longer offer appointment slots that have already passed today. The pre-call webhook now injects current local time, day of week, and timezone so agents propose realistic windows β and naturally pivot to tomorrow's first slots after hours.
Specifically: every voice agent receives these dynamic variables on each call, localized to the agent's configured timezone:
{{current_time}} β e.g. "3:47 PM"{{current_time_24h}} β e.g. "15:47"{{current_day_of_week}} β e.g. "Wednesday"{{agent_timezone}} β e.g. "America/Detroit"Combined with the existing {{today_date}}, agents can now resolve relative dates correctly ("tomorrow morning", "this weekend") and skip windows that have already passed when the call comes in late.
Live transcript on the Phone dialer (agency.gary.club/agency/dashboard/growth/phone) now streams both sides of the call as you speak. Both your voice and the prospect's are captioned in real time with accurate speaker labels.
Browse AI voice agents by industry at gary.club/industries β 13 verticals from HVAC to vet clinic, each with a live demo number you can dial right now to hear the agent in action.
Nine new pages covering brand registration, campaign use cases, consent and opt-in language, privacy policy requirements, required keywords, forbidden content, toll-free verification, and the full carrier error-code lookup.
Live at docs.gary.club/ai-agency-unlocked/messaging/overview. Covers everything you need to know to register a brand, get a campaign approved, and send compliantly across the US and Canada.
Two consecutive days of intermittent 503s on gary.club and /dashboard are fixed. The site now graceful-restarts before any memory leak can crash it, and a watchdog auto-recovers if anything else breaks. You shouldn't see the maintenance page again.
Every active agency can now run outbound calling β schedule voice broadcasts to a list, or launch always-on outbound voice agents triggered by your CRM. Find them under Growth β Outbound SDR and Launch a New Agent β Outbound Voice.
A new n8n Recipes section in the API docs with 12 ready-to-import workflows covering SMS automation, CRM sync, inbound webhooks, outbound calls, and third-party integrations (Google Sheets, Airtable, Slack).
Every member who's won a prize from Longneck Luck, STRETCH, or token perks now has a lifetime rank on the new Rewards Leaderboard at gary.club/dashboard/games. USD value is computed at present spot prices, so as $GARY and $GIRAFFISH grow your lifetime winnings climb with them. Profile pages have a new Rewards tab itemizing your wins with your rank #X of all members. Push notifications fire when you crack the top 10, top 5, or take #1.
You can now add or change your email from Settings β Profile, even if you originally signed in with a Solana wallet. Previously the form rejected the save and showed an unfamiliar placeholder address in the error.
When a new number texts your agency line and your "Default autopilot for new conversations" toggle is on, the AI now replies right away. Previously the toggle saved but new conversations always landed with autopilot off until you flipped it manually.
The org-level toggle on Growth β Messaging Agent now seeds ai_autopilot on every new sms_conversations row. Existing conversations are untouched β your per-conversation overrides still win.
Every inbound text and AI reply now streams into your SMS inbox the instant it lands β no more refreshing the page to see new conversations or replies. iMessage-style live updates across every open tab.
Behind the scenes we wired the WebSocket broadcast at the canonical send site so every outbound (AI, rep, compliance) and every inbound shows up in your inbox the moment it happens. Polling tightened to 5s as a safety net for any event the WebSocket missed.
Open the Growth β Messaging Agent inbox on two devices to see it: a text on one streams into the other instantly.
Your wallet, the dashboard, the activity feed, longneck stats, and the header ticker all show the same $GARY price now, refreshed every minute. Previously different pages could show prices up to an hour apart.
Every server-side $GARY price read now goes through one canonical oracle (60s fresh cache, Raydium β DexScreener fallback) instead of three independent sources with different update cadences. Your portfolio USD value and the ticker are now always aligned.
Every monthly Stretch payout now pins a π Champion of the Month announcement at the top of your dashboard, fans the celebration out to every member's bell, and pings push-subscribed devices. No more silent prize months.
Monthly winners are now announced to every member. Bell pings, push notifications for opted-in folks, and the dashboard feed gets a Champion-of-the-Month hero card with prize amounts. April 2026's winners (Gino, OllieRodgers, PN11) just landed in your bell.
The gary-club Claude Code plugin is live. Run /plugin marketplace add gary-club github:garylhenderson/gary-club-docs then /plugin install gary-club@gary-club, set GARY_CLUB_API_KEY, and Claude Code instantly has 119 MCP tools plus 12 slash-command workflows: /triage, /brief, /pipeline, /post-call, /sms-reply, /enrich, /kb, /eod, /sequence-health, /onboard, /spend-alerts, /outbound. Each destructive workflow asks before sending or dialing.
If you tried to install the Claude Skill earlier today and saw 503 / 405 / 'Service Unavailable' errors, that's resolved. A duplicate tool registration in our MCP catalog was crashing the server on every initialize call, which nginx then masked as a 405. New connections via Claude Desktop, Claude Code, and Claude.ai's custom connectors all work now.
Major Public API expansion: per-contact phones and emails sub-routes (full CRUD with consent + DNC fields), Sequences full CRUD plus per-enrollment pause/resume/unenroll, Lists and Activities single-row routes (GET/PATCH/DELETE), brand-new SDR Prospects resource, and a webhook-delivery replay endpoint. Idempotency-Key header is honored on every create endpoint (24h replay-safe). Twenty-two new webhook event types (contact.archived, deal.won/lost, task.created/updated, activity.logged, list.member_added/removed, sms_broadcast.*, sdr.campaign.*, agent.updated, sequence.contact_enrolled, and more) β every mutation now fires its catalog event. The MCP server gained 28 tools to cover the new surface. Field coverage on contacts (TCPA consent, custom_fields, socials), deals (recurring revenue, probability), companies (firmographics, Google Maps, socials), and tasks/activities (metadata) now matches what the data model supports.
A new step-by-step guide at docs.gary.club/api/n8n walks you through wiring your AAU API key into n8n's Header Auth credential, importing a ready-made test workflow, and binding the credential to each HTTP Request node β the easy-to-miss step that breaks most first-time imports. Verifies your connection end-to-end in under five minutes.
The platform completed its migration to Telnyx for telephony on 2026-04-28. Public API responses now include telnyx_phone_number, telnyx_phone_id, and telnyx_call_control_id; the legacy twilio_* fields are kept for back-compat but are null on every post-cutover row. Several webhook endpoints now return 410 Gone β see content for the full list.
The platform completed its TwilioβTelnyx migration on 2026-04-28. Below is what changed for integrators.
GET /v1/agents: telnyx_phone_number alongside legacy twilio_phone_numberGET /v1/agents/:idOrSlug: telnyx_phone_number, telnyx_phone_id alongside legacy twilio_phone_*GET /v1/calls + GET /v1/calls/:id: telnyx_call_control_id alongside legacy twilio_call_sidFor new integrations: read telnyx_* first. For existing integrations: continue reading twilio_* for legacy rows; both columns will be present during a 90-day grace window before legacy columns are dropped.
POST /api/sms/incoming & /api/sms/status β use /api/sms/incoming/:provider and /api/sms/status/:provider (Telnyx).POST /api/phone/voice, /call-status, /recording-status, /amd-result, /transcription β Telnyx Call Control replaces these via its own webhooks.POST /api/sdr/inbound-voice, /outbound-status, /call-status β same.POST /api/phone/token β Twilio Voice JS access token. Click-to-call moved to Telnyx WebRTC; the token is minted client-side now.GET /api/phone/recordings/:sid β Twilio recordings archived. Telnyx recordings stream from their own URL on the call row.POST /api/phone/tag-team/* β handoff feature pending Telnyx Call Control conference port.telnyx_*; keep twilio_* as a fallback during the 90-day grace window.Posting an external link in #agency-general now reliably renders the OG preview image. Some thumbnails were silently 404'ing for the past day.
Fixed a same-day regression on /dashboard/lock where the wallet readiness check rejected legit unlocks. Two layers: a token-decimal mismatch ($LGARY uses 8 decimals, $GARY uses 9) and an RPC-proxy allowlist gap that masked the first fix. If you saw "your $LGARY isn't in this wallet" earlier today, hard-refresh and try again.
All four pieces of agent context β Packages, Knowledge, Connectors, MCP β now live in one place under Growth Agents. Edit it once and every agent in your agency (Inbound SDR, Outbound SDR, SMS, Phone) reads from the same shared config. Voice agents get the knowledge synced to ElevenLabs automatically, and any tool-using agent (Gmail draft, Claude, Cursor) can search and read your KB on demand via the new kb.search and kb.read MCP tools.
If your wallet is missing the SOL needed for the unlock fee, or your $LGARY receipt tokens are sitting in the Realms DAO instead of your wallet, the lock page now tells you exactly what to do (and links you straight to Realms to withdraw $LGARY) instead of opening a Phantom signature request that's guaranteed to fail.
Times on the daily leaderboard no longer have ~half a second of network and animation latency padded onto them. If you finish at 0:47, the leaderboard shows 0:47 β not 0:48.
Telnyx-recorded calls in the comparison view of the click-to-call dialer no longer fail to load on Safari. They now stream through our same-origin proxy with the right Content-Type.
Drop a new training in the Resources section and a custom email goes out to active agencies 15 minutes later, written by AI from the actual training content. Editable in /admin/triggers if you want to disable or tweak.
We removed the Caller ID tab from Settings. Your CNAM is set automatically when a phone number is registered, using your agency or client name, and refreshes whenever you rename. No more 500 FUEL fee, no more Trust Hub waiting.
Every client now gets one shared knowledge base that powers all of their agents. New agents auto-attach on launch β inbound voice, outbound voice, SMS, all of them. Existing agents have been backfilled so they share the same KB right now.
Flip the autopilot toggle on any conversation in your SMS inbox and your AI agent will reply to inbound texts using your client's knowledge base. Replies use Claude Haiku 4.5, stay under 320 characters, and are billed at 1 FUEL per reply. Off by default.
Launching an outbound voice agent now takes seconds. Pick the client, choose to reuse their inbound number or provision a fresh one, and you're live. No template picker, no extra fields.
Every call you make from Growth β Phone now streams a live transcript that labels each line as You or Them in real time. Recording playback works on every browser, and the post-call detail page shows the speaker-tagged transcript plus the full AI scorecard (summary, action items, talk-ratio, objections, buying signals) the moment the call ends.
Joining the stage and tapping Unmute now works the way you expect. A bad permission key in our Stream Video integration was silently failing every per-user grant since the call type was switched, while the matching revoke ran on every step-down β so anyone who'd ever stepped down accumulated a stuck revoke and got 'No permission to publish AUDIO' on next try. Fixed the grant payload, stopped emitting the revoke, and cleared every existing stuck revoke.
Every call you make from the dashboard now has a live transcript that streams as you and the lead talk. After hangup, a higher-accuracy diarized transcript is saved to the call record so summaries and downstream analysis run on clean text.
The browser dialer at Growth β Phone is back. After last week's voice migration, dialing from your dashboard returned a gateway error because your caller-ID lived on Telnyx but the dialer still spoke to Twilio. The dialer now uses Telnyx end-to-end so you can call leads directly from the browser again.
The bell badge and notification list now update the moment a notification arrives or you mark one read β no page refresh needed. Read state syncs across tabs in the same browser too.
Open channels (Lounge, Happy + Healthy, Trenches, Business Coaching) now show the latest message in the sidebar for every Giraffe holder β previously only admins could see them. Badge-gated channels show the latest message blurred for non-holders so you can see there's activity in OG / Whales / Stackers / Vibin / Top 100 / Millionaires without being able to read the content. Hold the right badge and the blur lifts.
Launching an SMS agent now requires an approved 10DLC brand, an approved campaign on that brand, and an active phone number bound to it β checked atomically at launch. If anything's missing or pending, the launch is rejected with a clear note pointing to the specific field that needs attention on the client's Compliance page. Approved-and-bound launches go through cleanly: the agent inherits the right number and messaging profile, no separate config step. SMS agents created this way work end-to-end with the existing 1:1 inbox at /clients/{id} (SMS tab) and broadcasts via /sms-broadcasts.
Run a separate outbound-voice agent on the same client as your inbound β distinct AI persona, same Twilio number when you want it. Launch picks one of two paths: provision a new dedicated number (FUEL-billed like your inbound), or reuse your existing inbound agent's number with no extra cost. Outbound agents share their own greeting, voice, system prompt, and FAQ, so cold outreach campaigns sound nothing like the friendly receptionist that takes inbound. Trigger them today via the SDR campaigns UI, /api/public/v1/calls (single dial), or /api/public/v1/sdr/campaigns (batch).
Wire Cal.com, Calendly, Google Calendar, and your MCP servers in one place per client instead of digging into each agent. Find them now under Connectors and MCP Servers in the client sidebar at /dashboard/clients/{id}. When a client has more than one agent, an agent picker selects which one to configure. Existing per-agent connector data is unchanged β we just moved the entry point. Stale ?tab=connectors and ?tab=mcp deep-links auto-redirect to the new location.
/hire-an-agent is now a roster of three agent types instead of plan tiers. Inbound voice for the phone, outbound voice that triggers off your CRM or scheduled broadcasts (webinar confirmations, post-event follow-up, no-show recovery), and full 2-way SMS with broadcasts and conversational replies. Each agent has six concrete use-case examples. Talk to Luna at (737) 390-1289 to hear voice, or text our team at (512) 420-4121 to feel SMS β both live, both real.
Three new daily notifications. When Longneck Luck spins refresh and the day's STRETCH puzzle goes live (00:00 UTC), the bell pings. When yesterday's STRETCH top 5 lock in (00:05 UTC), the bell pings again with the champion's name. Defaults to in-app only; turn push on per type from notification settings if you want the midnight nudge.
Schedule, approve, and dispatch SMS broadcasts entirely through the public API. POST /sms-broadcasts creates a draft / scheduled / recurring broadcast against a CRM list or smart-list slug; PATCH adjusts schedule or pauses; POST /sms-broadcasts/{id}/send-now kicks off the same BullMQ runner the in-portal Send Now button uses. Approval flow respected β POST /sms-broadcasts/{id}/approve for broadcasts above your agency threshold. Per-recipient delivery state via GET /sms-broadcasts/{id}/recipients. 7 new MCP tools so Claude can drive end-to-end SMS workflows. Docs page forthcoming β see the OpenAPI spec for full shape.
Trigger a single outbound dial via POST /calls (returns 202 + EL conversation_id + Twilio call_sid) β wired through the same backend dialer your inbound SDR uses. Manage outbound SDR campaigns end-to-end via /sdr/campaigns (list, create, pause/resume/cancel, schedule). Add documents to a knowledge base programmatically (manual / URL / R2 upload) β the Voyage embedding worker picks them up automatically. Generate AI summaries for companies and deals (24h cache, 1 FUEL on miss). 11 new MCP tools so Claude can drive everything above. Full docs rewrite forthcoming this week β until then, see the OpenAPI spec for shape.
Mint a single agency key for everything across your clients β or one key per client when you need clean separation. No more scope picking, no per-agent narrowing, no permissions to audit: every key is full access. New endpoints land in the same ship: enroll a contact in a nurture sequence (POST /sequences/{id}/enrollments β idempotent, perfect for post-inbound-call automations) and read your FUEL balance / usage / transaction ledger (/billing/*). MCP picks up 7 new tools to match. Settings β API Keys gets a primary-key-with-Rotate UX so swapping a leaked key takes one click.
Give us a direct way to reach you. Add your cell on Settings β Profile and we'll use it for support and time-sensitive account messages β separate from your agency's main line and never used for marketing.
Recorded voice notes were silent on iOS Safari (timer counted but no audio). Fixed by uploading them as Stream's first-class voiceRecording attachment type β matches the gary.club chat upload path. New voice notes play through the speaker on tap. Also pre-computes the waveform at upload time so the receiver doesn't decode the audio file on every render.
The 4th agent-kind card on the launch flow is now Google My Business β the upcoming integration that lets your agent reply to messages from your Google Business Profile (Maps + Search). Marked Coming soon while we wire up Google Business Messages provisioning. The Voice + SMS hybrid placeholder is retired (was never live).
docs.gary.club/api ships a Stripe/Linear-tier shell: sticky side-nav, color-coded HTTP method badges, multi-language code tabs with copy buttons, scoped param tables, and dedicated pages for Contacts, Deals, SMS, Calls, Knowledge Base, MCP, and Errors. The whole site flips light/dark from the header.
Each contact now has an agent owner β auto-assigned when an agent creates the contact via call/SMS, editable anytime. The new /crm tab in each client shows a comprehensive list with filter chips per agent (All Β· Unowned Β· per-agent counts) and an inline owner picker on every row. The agent editor's Contacts tab defaults to 'Mine' (contacts owned by the agent you're viewing) with a one-click Mine/All toggle.
Outbound webhook subscriptions can now scope to a specific agent (agent_id on POST /v1/webhooks). Every event payload that involves an agent now includes a payload.agent block with id + slug + kind, so subscribers can route without an extra fetch.
A new top-level Agents page lists every agent across every client in your agency, with kind/state/client filter chips and a search box that hits names, slugs, phone numbers, labels, and client names. Click any row to jump straight into that agent's editor.
New /v1/agents endpoints (list, detail, PATCH) addressable by slug or UUID, with alias-aware redirects so renames don't break integrations. Every public API resource that can be agent-scoped now accepts an agent_id filter, and the MCP server exposes agents.list/get/update plus agent_id parameters on calls.list and sms.conversations.list. Mint per-agent API keys from the new Clients β Agent β API Access tab with one-click curl/n8n/MCP install snippets.
A single client can run multiple AI agents β multiple inbound voice lines, future outbound voice + SMS β each with its own slug, kind, purpose, and labels. Launch flow has a new agent-kind picker; the clients list now opens an agent grid; each agent has its own API Access tab with a stable slug and per-agent API keys.
Three new entry points: an API Keys link under Team & Trust in the agency sidebar, a CTA card on Settings β Account, and a full mint/list/revoke section inside each client's settings page.
The dashboard now treats API keys as a first-class surface:
agent_live_ keys minted on this client's behalf, mint new ones with a scope picker + rate-limit + expiry, copy the cleartext once, revoke any time.New toggle in the Client Portal & Team Visibility section: when on, the client sees an API Keys page in their portal at agents.gary.club and can mint their own integration keys. Defaults off β agencies opt in per client.
Available agency-wide (Settings β Client Portal β sidebar items) and as a per-client override (each client's Portal Visibility section). When enabled, the client portal:
POST /api/client/api-keys so the client can mint agent_live_ keys scoped only to their own data.REST endpoints for CRM (contacts, companies, deals, activities, tasks, lists, pipelines), SMS, voice, and AI tools; signed outbound webhooks with HMAC-SHA256 + retries + circuit breaker; a remote Model Context Protocol server with 32 tools. One bearer-token auth model across both surfaces.
gc_live_ for agency-wide access, agent_live_ for client-scoped (cross-client reads return 404 β no leakage possible).X-Gary-Client-Id per-request to act as one client.gary.club/dashboard/herd is now an always-on audio room for Giraffe holders. Auto-on captions, persistent stage roster, two-tier permission model (admin + user), zero microphone-permission spam. Built on Stream Video.
Inbound SDR calls were quietly hallucinating bookings since March 28 β the agent_id middleware on /api/tools/* rejected webhook calls because Cal.com sent the id in the query string, not the body. Fixed end-to-end with new defensive middleware and a calcom_token_expired notification surface so future expiries can't go silent.
agent_id from body OR query, fixing the booking flow.calcom_token_expired notification fires the moment a refresh-token dies β agency owners get an in-app + email heads-up so they can reconnect Cal.com before SDRs hallucinate again.connector_events audit-log writes are no longer silently swallowed; failures surface to logs.New gary.club signups skip the human-verification gate and auto-confirm their email. Welcome drops fire immediately; no more verification-email round trips for the happy path.
New /agency/dashboard/chat with a single team:agency-general channel + an admin overview at /admin/chat. Push fan-out, message search (βK), pinned messages, gold-star moderator marker, all the chat-surface polish from gary.club ported over.
Every SDR call summary is now persisted to the contact timeline as a structured activity. Sentiment, next steps, and key topics are extracted automatically.
Inbound replies (SMS or email) automatically pause active sequences for that contact. Stops the "robot just kept hammering them" failure mode.
Every email reply to a connected Gmail account lands in the right contact's timeline. Unknown senders auto-create a CRM contact with source=gmail_inbound_auto.
Closed all three deferrals: Snapshots UI, Smart Deal Progression UI, Magic Fields creation. Plus the send_sms automation runner, a settings sub-nav, and a mobile pass on every CRM table.
Signal House retired. Agencies now provision their own Telnyx managed account (brand + 10DLC campaign + numbers) directly from the dashboard, with an approval-gated onboarding flow and a 6-step teardown when they leave.
/crm/inbox now groups by contact instead of per-channel. Inline compose, optimistic send, WebSocket live updates, and tapback interpretation. Plus 1:1 Gmail send + per-contact email backfill.
/dashboard/longneck and the new /dashboard/games arcade lander are live. 8 spins per day, 5-tier prize odds, midnight-UTC reset, 250+ trash-talk lines on losses, instant on-chain $GARY payouts via DB trigger.
Audit runs now create CRM contacts (with first/last split), a "Growth Audits" list, and a Researching deal in the agency's pipeline. Backfilled 40 historical audits across the 3 active agencies.
gary.club/dashboard/buy ships with a Stripe-only checkout. New holders auto-receive 10 $GARY + 1,000 $GIRAFFISH from the encrypted-DB inventory wallet.
New /signup flow collects phone + an explicit consent checkbox. Audit row stored in agency_sms_consent for every accept; webhook + Settings audit wiring tracked separately.
Retell was confirmed unused across all live agencies. Backend integration removed, legacy billing tables (members, usage_records, calls) dropped. Cuts ~3k LOC.
Did-Not-Finish quips on Stretch leaderboards are now generated by Haiku per-attempt instead of pulled from a 40-entry static pool. The static pool stays as a fallback when the model is unavailable.
Five-deploy evolution of /admin/broadcasts. Include/exclude audience lists, Mailgun batch API with retry + complaint circuit breaker, CRM activity linkage, one-click unsubscribe, per-broadcast detail pages, and an audience-aware AI composer that produces 3 subject variants.
Upload a PDF or text document (up to 200k chars); the autopilot uses it to seed Research (60k tokens) β Writer (120k tokens). Default image model flipped to OpenAI gpt-image-2 via Fal.
The Regenerate button now accepts custom instructions to guide the AI rewrite.
Clicking "Regenerate" on a follow-up email now reveals an input field where you can type specific instructions β for example, "Email Leti not Todd, she referred me" or "Focus on the partnership angle." The AI uses these as override directives when rewriting the email.
This fixes a common issue where the AI misidentified who was spoken to on the call (e.g. emailing the gatekeeper instead of the decision maker) and the only recourse was manual editing.
Fixed WebSocket authentication so live transcripts and in-call notes work during connected calls.
The live transcript was never loading during calls because the WebSocket connection was missing a required JWT authentication token. The backend immediately rejected the connection with a 4001 Unauthorized error.
Added a /api/phone/ws-token endpoint that generates a short-lived JWT, and updated the frontend WebSocket hook to fetch and append the token before connecting. In-call notes (which send through the same WebSocket) now work as well.
Fixed 3 bugs where enrichment contacts, post-call follow-up emails, and power dialer stats were not updating live.
Enriched contacts now appear immediately in the lead detail panel without requiring a page refresh. Previously, re-enriching a lead would not trigger a contact reload because the enrichment status never visibly changed in local state.
The disposition follow-up email now auto-populates with the AI-generated draft, enriched contact email in the TO field, and org signature. Fixed a timing issue where the call ID was lost on disconnect, preventing the analysis fetch. Also increased polling from a single 3-second retry to 5 progressive attempts (up to 25 seconds) to accommodate longer analysis times.
Call stats (Calls, Connected, Demos, Rate) now update immediately after each disposition with optimistic client-side updates. Fixed a timing issue where the stats sync could miss due to phone re-initialization state transitions.
Launch your own AI-powered inbound sales agent. The Inbound SDR answers calls 24/7, qualifies leads with discovery questions, pitches your services using configured pricing packages, answers FAQs from your knowledge base, and books appointments via Cal.com or Google Calendar β all on autopilot. Includes a proven 7-stage sales playbook, customizable voice and personality, per-minute billing (25 credits/min), and full call analytics.
A dedicated AI sales agent that handles your incoming phone calls end-to-end.
Agencies now have granular control over what clients see in their portal. Show or hide sidebar items, agent tabs, individual fields, and export actions. Set agency-wide defaults or customize per client.
Agencies can now deploy multiple AI voice agents per client β ideal for businesses with multiple locations or departments. Each agent gets its own phone number, greeting, and configuration. Clone existing agents to quickly set up new locations.
Comprehensive documentation site live at docs.gary.club with 27 pages covering the complete platform β getting started guides, agency portal walkthrough, client portal features, billing, connectors, voice agent configuration, and troubleshooting.
Voice agents can now book appointments during live calls. Cal.com integration provides real-time availability checking and instant booking. Zoom integration auto-generates unique meeting links for virtual appointments. Full recording pipeline included.
Template Marketplace now live with 145 industry-specific templates across 19 categories covering 2,175 variables. AI-powered template generation lets you create custom templates for any business type in seconds.
New Training & Resources section with video tutorials, guides, and downloadable materials. Powered by Cloudflare R2 storage for fast, reliable content delivery.
Full team management system with 7 built-in roles (Owner, Admin, Manager, Sales, Support, Onboarding, Read-Only) plus custom roles. Invite team members, assign granular permissions, and scale your agency operations.
Email system migrated to Mailgun (mg.gary.club) with comprehensive branded email templates. Agencies get white-labeled email notifications sent from their own domain.
Full template library seeded across 19 categories: Home Services, Legal, Automotive, Dental, Fitness, Food & Beverage, and more. Each template includes system prompts, greetings, FAQs, and smart variables tailored to the industry.
32 notification types across 6 categories (Billing, Agents, Calls, Clients, Team, System) with in-app and email delivery channels. Configurable per-category preferences.
Two-tier Stripe billing with Base Package ($250 platform fee) and Fill My Tank (dynamic Agent Fuel credits). Auto-reload with configurable threshold and target. Real-time credit tracking and per-client usage breakdowns.
Migrated from Retell AI to ElevenLabs Conversational AI paired with Claude Haiku 4.5. Dramatically improved voice quality, conversation intelligence, and natural-sounding interactions.
AI Agency Unlocked production platform live at agency.gary.club. Full agency portal, client portal, voice agent deployment pipeline, Twilio telephony integration, and white-label branding system.