Why no InMails sent — credits exhausted

What this page covers

If your LinkedIn campaign uses InMail steps and you noticed a sudden drop in InMail dispatch — or a campaign-events log full of Skipped: account InMail credits exhausted entries — this guide explains what happened, why WarmySender stops dispatching to a Sales Navigator account when its credit balance reaches zero, how the monthly reset cycle works, and what you can do to resume sending.

WarmySender is a 4-pillar outreach platform — Cold Emailing, Email Warmup, LinkedIn Outreach, and Multichannel sequences. This page is part of the LinkedIn Outreach pillar and applies specifically to the InMail action type (Sales Navigator + LinkedIn Premium accounts).

What happened (plain language)

LinkedIn Sales Navigator gives every paying account a monthly InMail credit balance — typically 50 credits per month for Sales Nav Core, more for higher tiers. When the balance reaches zero, LinkedIn returns a clean "Not enough credits" error on every InMail send attempt; the message simply does not leave your account.

Pre-V15 (before May 7, 2026), WarmySender would handle this on a per-prospect basis: each individual InMail attempt got the credit-exhausted error, the engine recorded the skip, and the next prospect on the same account immediately tried another InMail — into the same empty bucket. Result: hundreds of wasted Unipile API calls per day on an account that mathematically could not send anything until the next monthly reset.

V15 introduced an account-level circuit breaker. The first time a credit-exhausted error fires on a Sales Navigator account, WarmySender stamps the account row with the breaker timestamp. From that point until the next monthly reset (or a manual top-up), every subsequent InMail dispatch on that account is skipped at the pre-dispatch gate — before any Unipile API call is made.

This is a refusal-to-send pattern: it cannot cause a duplicate send, bypass a cap, or flip an account state. It saves Unipile API quota, prevents log noise, and surfaces the actual cause to operators in dashboards instead of burying it under per-prospect skip noise.

How the breaker works

When the breaker arms

The very first time WarmySender attempts to send an InMail through a Sales Navigator account and Unipile returns a message containing the substring "credit" (the LinkedIn-Unipile copy is Not enough credits — Provider cannot execute request because of insufficient credits), the breaker arms by stamping the column linkedin_accounts.inmail_credits_exhausted_at = NOW().

The structured production log emits a JSON line of the form {"source":"inmail_credit_breaker","action":"set","account_id":"...","prospect_id":"...","unipile_message":"...","ts":"..."} for grep-ability and dashboard ingestion.

When the breaker is consulted

Every subsequent InMail dispatch on the same account checks the breaker BEFORE calling Unipile. The decision tree:

What the breaker does NOT pause

The breaker is InMail-specific. The same account continues to send connection invites, messages, profile views, and engagement actions at full normal pace — those don't consume Sales Nav credits. Pausing them would over-restrict and waste capacity.

The Sales Nav monthly credit cycle

LinkedIn Sales Navigator credits reset on the first of each calendar month at midnight UTC. The reset is automatic — you don't need to do anything. Here's the typical cycle:

WarmySender's breaker auto-clears on the calendar-month rollover, so dispatch resumes naturally on the 1st without operator intervention. If you top up your credits mid-month (LinkedIn allows this on most tiers) and then send any successful InMail through the account in the next hour, the breaker also auto-clears via the recent-success evidence path.

What to do as a customer

You have three options when an account hits the credit-exhausted state:

Option 1 — Wait for the monthly reset (zero-cost)

  1. Confirm the breaker is armed: in the LinkedIn Accounts page, the affected account shows a "Sales Nav credits exhausted — auto-resumes next month" pill on the account card.
  2. Continue running your campaign. Connection invites and messages on the same account keep flowing.
  3. On the 1st of next month at 00:00 UTC, the breaker auto-clears and InMail dispatch resumes.
  4. Affected prospects whose enrollment was deferred to first-of-next-month re-enter the dispatch path automatically — no manual re-enrollment needed.

Option 2 — Top up credits via LinkedIn (mid-month resume)

  1. Log into LinkedIn directly (not through WarmySender — credit purchases happen on LinkedIn's billing page).
  2. Open Sales Navigator → Settings → Billing. Find the "Buy more InMail credits" option (LinkedIn's UI labels vary by region and tier).
  3. Purchase the credit pack appropriate to your campaign volume.
  4. Send a single test InMail through WarmySender — pick any small campaign and trigger one dispatch. If it succeeds, the breaker auto-clears on the next dispatch on the same account (recent-success evidence path).
  5. Alternatively, manually clear the breaker via the LinkedIn Accounts page → account card → "Reset credit-exhausted state" button (operator-only; contact support if you don't see it).

Option 3 — Switch to a different action type for the affected campaigns

  1. Edit the campaign step that's hitting credits-exhausted.
  2. Change the action from send_inmail to send_message (only works for already-connected prospects) or remove the InMail step entirely.
  3. Save the campaign. Affected prospects re-enter the dispatch path on the next sending window.
  4. Note: send_message requires a 1st-degree connection. If your campaign was using InMail specifically because the prospects are not connected, this option doesn't apply — wait for the reset or top up.

How to recognize this state in the dashboard

Three signals make the credit-exhausted state diagnosable at a glance:

Account safety

Per CLAUDE.md, account safety is the top invariant of the WarmySender platform. The credit-exhausted breaker is strictly safety-improving:

Frequently asked questions

Does WarmySender consume my Sales Nav credits?

No — every successful InMail consumes exactly one of YOUR Sales Nav credits, billed by LinkedIn directly. WarmySender does not have its own credit pool. Your account, your credits, your cycle.

When exactly does the breaker auto-clear?

Two conditions auto-clear:

Why doesn't the breaker pause invites and messages too?

Sales Nav credits only apply to InMails. Connection invites and messages on connected prospects don't consume credits — they're billed separately as part of the platform subscription. Pausing all action types would over-restrict and waste healthy capacity.

My affected prospects were deferred to first-of-next-month — what does that mean for my campaign timeline?

The deferred prospects don't fail or stop — they simply re-enter the dispatch path on the 1st. Your campaign continues to send connection invites + messages (which don't consume credits) at normal pace through the rest of the month. On the 1st, deferred InMail-step prospects start dispatching again, subject to the standard daily cap + ramp + cooldown machinery.

Can I see exactly when the breaker armed and cleared?

Yes — operators can run this SQL against the LinkedIn Accounts table:

SELECT id, display_name, status, inmail_credits_exhausted_at
FROM linkedin_accounts
WHERE inmail_credits_exhausted_at IS NOT NULL
ORDER BY inmail_credits_exhausted_at DESC;

For arm/clear/skip telemetry over time, grep the production logs for "source":"inmail_credit_breaker".

What if I'm on LinkedIn Premium (not Sales Navigator)?

LinkedIn Premium accounts have a different InMail credit model (typically 5/month for Premium Career, 15/month for Premium Business). The same credit-exhausted error fires when those run out, and the same breaker arms on the same account row. The auto-clear behavior is identical — credits reset on the 1st of each month.