Troubleshooting: RMD filing lifecycle failures
The RMD filing lifecycle page teaches the happy path — draft, submit, certify, keep current, withdraw. This page picks up where a filing stopped being happy: the FCC or a terminating carrier flagged it deficient, the recertification clock ran out with no one watching, a filing was withdrawn (sometimes accidentally) and now needs to come back, or a re-file attempt returns a409 you did not expect. Each failure below
has a diagnostic that names the exact response fields to read and a fix run
that returns the filing to active.
How the lifecycle moves (and where it jams)
activeflagged deficient — a carrier or the FCC reports a problem; the filing sits inremediation_requireduntil you resolve it.activepast the review date — the recertification verdict flips tooverdueand, underenforce, origination blocks with a403 RMD_RECERT_OVERDUEat call time.- Withdrawn by mistake —
withdrawnis reversible; re-POST /compliance/rmdre-opens the same registration todraft. - Draft will not submit — mandatory fields (usually the mitigation
plan) are missing; the response’s
detailsarray names every blocker. - 409 on re-file —
RMD_LOCKED,RMD_INCOMPLETE, andRMD_INVALID_TRANSITIONeach mean a different wrong move.
Symptom → cause → fix
Symptom 1: filing flagged deficient (the “filed but flagged” state)
The registration showsstatus: "remediation_required" on
Settings → Compliance → RMD, or your origination guard (in warn or
enforce mode) flags calls because
RMD_REMEDIATION_REQUIRED fires.
Diagnostic. Read the current state:
registration.status is remediation_required, and
registration.remediation_reason carries whatever was recorded as the
cause. The flag is class-level data — anyone with member read access can
pull it; you do not need to be the owner to diagnose.
Fix run.
- Treat the cause — re-file with the FCC RMD portal once the filing content is corrected (a bounced contact email, a stale mitigation plan, an incomplete address).
- Resolve the flag:
active and restarts the recertification
clock from the resolve date — a resolved deficiency resets the review
deadline, it does not inherit the old one.
- If your enforcement mode is
enforce, origination unblocks the moment the resolve lands; inwarn, the flag clears on the next call.
remediation_required waiting for a reviewer; the state only flags
that you still owe the correction.
Symptom 2: certified-but-expired (silent recertification lapse)
The filing showsrecertification.status: "overdue" — or worse, origination
403s with RMD_RECERT_OVERDUE under enforce. The counter-intuitive part
is that the countdown lives in the read response, not in a webhook:
GET /compliance/rmd recomputes the full verdict on every call, so nothing
pings you when days_remaining crosses zero.
Diagnostic. Read the registration and look at recertification:
certified_at + recert_interval_days (default 365; settable up to 3650),
returned ready-computed as recertification.due_at. When
days_remaining drops to 30 or below the verdict is due_soon; past the
date it is overdue with overdue: true.
Fix run.
- Re-attest with the FCC (periodic review / re-certification of a current filing).
-
Restart the clock by re-certifying. Two routes reach
activeand set a freshcertified_at:- if you walked the filing through a deficiency,
POST /compliance/rmd/resolve; - if the filing is still plain
active, withdraw it and re-file it as below (Symptom 3) — the re-file path mints a newcertified_atwhen you re-certify.
- if you walked the filing through a deficiency,
-
Watch
recert_interval_dayswhen you next edit a draft: set the review cadence your counsel requires instead of the 365-day default. The field applies at draft time and survives for the life of the registration.
GET /compliance/rmd on a job
and alert when recertification.status reaches due_soon. The field exists
on every read, so an external reminder is a three-line script.
Symptom 3: withdrawn filing still being originated (guard defaults)
Two situations hide behind one word. A withdrawn filing shows up as a403 RMD_NOT_ACTIVE origination block (under enforce), or a
warn-mode flag — and the operator who withdrew it accidentally cannot
re-file until the re-open completes.
Diagnostic. Read the registration and the enforcement mode in one call
(the dashboard’s Settings → Compliance → RMD page shows both):
enforcement.mode of off (the default) means the opt-in call-time guard
under 47 CFR § 64.6305 isn’t blocking anything — origination proceeds
regardless of the withdrawn state. In warn or enforce, the same
withdrawn filing flags or blocks with RMD_NOT_ACTIVE.
Fix run.
- Re-open the withdrawn filing to
draft:
POST /compliance/rmd on a withdrawn filing re-opens it to draft and
keeps the original id and created_at — the re-file is a continuation,
not a fresh record.
- Correct the mandatory fields (see Symptom 4 if you get a
409 RMD_INCOMPLETE). POST /compliance/rmd/submit(records the FCC filing reference), thenPOST /compliance/rmd/certifywhen publication is confirmed. The recertification clock restarts from that newcertified_at.- Review the enforcement mode before you turn the filing back on: if
the withdrawal was a deliberate pause of origination, putting the guard
straight back to
enforcere-blocks calls the minute certify lands. Set it withPUT /compliance/rmd/enforcement(see RMD registration) — and rememberoffis the tenant-owned default; nothing platform-level forces you into a gate.
Symptom 4: draft won’t submit — incomplete mandatory fields
POST /compliance/rmd/submit returns 409 RMD_INCOMPLETE even though the
draft looked fine when you saved it. The blocker list lives in the
response’s details array:
details — each string names
the missing field. The usual offender is the mitigation plan, which is
mandatory whenever stir_shaken_status is partial or none. The other
four are the identity fields: company_name, business_address,
contact_name, contact_email.
Fix run.
POST /compliance/rmdwith the missing field filled in (only allowed while the filing is stilldraftorwithdrawn— a filed registration is mutated through the lifecycle endpoints).- Re-
POST /compliance/rmd/submit. The same four calls always succeed once every blocker resolves. - If the filing is already past
draft(submitted or active), stop editing it in place —409 RMD_LOCKEDis the surface telling you to go throughsubmit/certify/remediation/resolve/withdrawinstead.
Symptom 5: 409 conflict on re-submit or re-file
A re-file attempt hands back a409 you can’t place. The
error-code catalog has three RMD conflict codes
and each one means something different:
The re-file-idempotent path:
POST /compliance/rmd on a withdrawn filing
is the correct re-file (keeps id), POST on a filed registration is the
wrong re-file (RMD_LOCKED), and a first-time POST mints a fresh
registration. That is the end of the 409 map — none of the codes is a
transient collision or a retry target.
Error-code quick reference (RMD endpoints)
RMD_NOT_CURRENT at call time carries one of four details:
RMD_NOT_REGISTERED, RMD_NOT_ACTIVE, RMD_REMEDIATION_REQUIRED, or
RMD_RECERT_OVERDUE — match it against the
RMD registration
page’s guard table.
What not to do
- Do not re-activate the withdrawn filing without reviewing the guard.
If
enforcement.modeisenforceorwarn, bringing the filing back toactiveflips the origination verdict instantly. A deliberate pause becomes an accidental block, a warn becomes a quiet resume. Review the mode with the same care you review the filing. - Do not PUT
"certified"manually. The only route toactiveisPOST /compliance/rmd/certify(orPOST /compliance/rmd/resolve) after a realsubmittedstate — a hand-edited record would carry acertified_atthat no filing ever supported, and every downstream check trusts that timestamp. - Do not try to edit a filed registration.
409 RMD_LOCKEDis the surface refusing in-place mutation; it is intentional. Walk the lifecycle endpoints instead. - Do not treat a poll-loop on
GET /compliance/rmdas a substitute for counsel. The filed data stays with you; the platform records it. This page is operational guidance, not legal advice.
See also
- RMD filing lifecycle — the full happy path, the recertification verdicts, and the endpoint reference.
- Send gates — the outbound gate stack the origination guard reads alongside.
- STIR/SHAKEN attestation — the level you assert on the filing and what callers see.
- ITG traceback — the companion obligation once your traffic is attributable.
- Troubleshooting — the rest of the fault-finder pages if this symptom list didn’t cover yours.