Pulled the full 30-gotcha ledger. Here’s the honest answer: I’m already
operational in
Reply.io, but “world class” is blocked by a specific, recurring structural problem, and almost every high-impact gotcha traces back to it.
The one thing that would change everything: verification & preview
Every launch today requires a full per-contact byte-equal readback, and even that can’t confirm the email is correct. Writes fail silently in five distinct ways — rows vanish from the import response (#22), rows come back skipped with no field writes (#27), name/underscore mismatches drop fields (#18), platform-suppressed addresses skip silently (#25), and any PATCH full-replaces and wipes the other 9 fields (#14/#28/#30). So I readback everything. Then — because there is
no API that returns the merge-resolved, HTML-rendered email — an operator still has to eyeball one rendered message in the UI to catch {{Herr_Frau}} non-resolution, empty-body halts (#15), and text-wall rendering (#23). That manual UI eyeball is the single biggest thing standing between “built” and “world-class autonomous.”
What closes it: a real render/preview endpoint — fully merge-resolved subject + HTML body, per step, per contact, exactly as it would send.
⭐
Actionable now: the Aug 11 changelog we just reviewed shipped GET /v3/sequences/{sequence_id}/contacts/{contact_id}/preview — and the path is
not scoped under /ai-sdr/. That
might already be the general preview endpoint I’ve been asking for. This is worth a live test immediately; if it renders regular (non-AI-SDR) sequences, it eliminates the #1 manual bottleneck and I’d rewrite the pre-launch checklist around it.
Want me to test it against a throwaway sequence + contact?
The full prioritized ask list (each tied to the manual work / risk it removes)
Tier 1 — trust the write, see the render
1. Render/preview endpoint (above) — kills the UI eyeball rule and half the readback ritual.
2. Merge-not-replace field writes — a PATCH that touches only the fields sent, or PUT …/contacts/{id}/custom-fields/{fieldId}. Deletes the most
destructive class outright (#14/#28/#30) — right now a one-field title edit wipes all custom fields.
3. Honest import semantics — per-row status that distinguishes
written vs
skipped-no-write vs
suppressed, each with a reason; never drop rows from the response (#22/#25/#27). Today skipped/updated are ambiguous and the tally lies.
Tier 2 — enrollment truth
4.
GET /v3/sequences/{id}/contacts/count + reliably-paginated membership that doesn’t randomly drop members (#17/#29, and the large-page drop in the Atlas note). This retires the v1-enroll-fallback + double-sweep + MCP-tiebreaker dance I do on every push over 100 contacts. (This count endpoint was “coming late July” → now slipped to
late August per the changelog — it’s the one operational item I’m genuinely waiting on.)
5.
A first-class v3 enroll that overrides “in another sequence” and returns explicit Added/NotProcessed — i.e. promote the MCP add_contact_to_sequence behavior into REST so I stop reaching for the legacy v1 x-api-key addandpushtocampaign (#16/#29).
Tier 3 — the structural one
6.
Per-enrollment field snapshotting. Custom fields are contact-global and resolved at send time, so a prospect in two sequences can’t hold two different bodies (#20). Reply’s confirmed snapshot-at-enrollment is a feature request, not shipped. Getting it would delete an entire subsystem I maintain — the namespaced-slot assignment machinery (V6_SLOT_ASSIGNMENT_SPEC).
Tier 4 — MCP build parity + reporting
7.
MCP tools to create/edit sequences, steps, and upload attachments (+ webhooks CRUD). Today building is REST-only (#10); the MCP tools are self-documenting and trap-proof, so moving the
build path onto MCP would cut the error surface on the riskiest part of the job.
8.
Meeting lifecycle write-back (held/no_show/rescheduled) + a bulk-by-email status setter (#13) — needed for fully automated reporting.
9.
Consistent cursor pagination on every list endpoint — email-accounts is skip-only and hid a client’s real senders past page 1 (#21); schedules has
no pagination and dumped 392 records → context overflow. One cursor style everywhere.
Tier 5 — cleanups
10. Fix (or formally deprecate) emailTemplateId on v3 steps and template PATCH/DELETE (#1/#3b) — dead paths I route around.
11. whoami/team-users returns 403 on this legacy account — workspace/team access would unlock clean multi-client owner→name resolution for reports.
Meta-tax worth naming
Most of v3 is still
Beta — “shapes may change without notice” (#9), which is why I re-verify request shapes after every changelog. A stable versioned contract (or a changelog webhook) would remove standing overhead — but that’s a maturity ask, not a feature.
Bottom line: I don’t need new endpoints to
function — the skill already encodes reliable workarounds for all 30 traps. What separates functional from world-class is
(1) a render-preview endpoint and (2) writes/imports I can trust without a full readback.