Write safety
The breakers Swarmhit keeps against a runaway client.
Your application paces: warm-up, daily limits and schedules are yours. Swarmhit only refuses what a runaway client would do. Every refusal happens before anything reaches LinkedIn or WhatsApp, so retrying it can never send twice.
LinkedIn, per account
- One write at a time. A write waits at most 15 seconds for the account, then answers
429 account-busy. - A minimum gap between two writes, 20 seconds. A write too soon answers
429 account-busyat once, withretry_after_ms; the gap counts from the last attempt, accepted or not. - Daily caps per kind (UTC day): invitations 100, messages 300, InMail 100, reactions
100, comments 100, follows 100, withdrawals 300, accepts 100, profile visits 300. Over a
cap:
429 safety-floor, withretry_after_msuntil the next UTC midnight. The caps sit well above any sane pacing: meeting one means your pacing is broken. - LinkedIn's own limit. After LinkedIn answers 429 or 999, the account rests 20 minutes
(doubling on repeats within a day, up to 6 hours); every call meanwhile answers
429 rate-limitedwithretry_after_ms. Five writes in a row that LinkedIn rejects for no known reason cool it down the same way.
WhatsApp, per number
- Daily caps of 40 new chats, 500 messages and 300 "is this number on WhatsApp" checks
(
429 safety-floor). - At least 60 seconds between two new chats (
429 account-busy, withretry_after_ms). - WhatsApp's own limits come back as
403 whatsapp-new-chats-blockedand422 whatsapp-quota-reached.
Two guards worth using
unless_replied_since(ISO date or epoch ms) on a send: if the recipient wrote after that time, nothing is sent and the call answers409 recipient-replied. Use it on every automated follow-up.client_idon a WhatsApp send: your id for that send. A retry with the same id within 24 hours returns the first answer instead of sending again.