Skip to main content

FCC Robocall Mitigation Database (RMD)

The FCC’s Robocall Mitigation Database (RMD) is the public registry every US voice service provider must file in before it originates calls. Under 47 CFR § 64.6305, your filing declares your STIR/SHAKEN implementation level, and — for any provider that has not fully deployed STIR/SHAKEN — a description of the robocall-mitigation program you run. Terminating carriers are required to refuse traffic from providers that are absent from, or deficient in, the database, so a missing or stale filing is a direct cause of your outbound calls being blocked or labeled downstream. Orbit gives you the record-keeping surface for that obligation: a place to prepare the filing, mark it submitted and published, flag and resolve deficiencies, and watch the recertification clock — plus an opt-in call-time check you can apply to your own outbound origination. Filing with the FCC itself, and every lifecycle decision along the way, stays with you. All endpoints below are rooted at https://api.orbit.devotel.io/api/v1/compliance. The same surface is available in the dashboard under Settings → Compliance → RMD, which drives the identical API.
This page describes Orbit’s tracking surface. It is not legal advice. Whether you must file, what your filing must contain, and how current it must stay depends on your network and traffic — confirm with qualified counsel.

Lifecycle states

An RMD registration moves through five states. withdrawn is not terminal — a withdrawn filing can be re-opened to draft when you re-file.
  • draft — the filing is being prepared; nothing has been submitted.
  • submitted — filed with the FCC RMD portal, awaiting publication.
  • active — published in the RMD; the recertification clock is running.
  • remediation_required — a terminating carrier or the FCC flagged a deficiency you must correct.
  • withdrawn — filing withdrawn or superseded.
An invalid request (for example, certifying from draft, or editing an active filing in place) returns 409 with RMD_INVALID_TRANSITION. A request against a registration that does not exist yet returns 404 with RMD_NOT_FOUND.

The recertification clock

Once a filing reaches active, a review deadline is computed from certified_at plus your recert_interval_days (default 365; settable up to 3650). Every GET /compliance/rmd annotates the registration with a live verdict: Plan around two distinct cadences: the FCC expects you to update a filing within 10 business days of any change (returned as update_window_business_days on the read response), and most operators re-attest annually — the 365-day default above tracks the annual cadence.

Endpoints

All writes require the owner or admin role; the read is open to any authenticated member.

Working the lifecycle, step by step

1. Create or update the draft

Build the draft before you file. The STIR/SHAKEN level you declare decides whether a robocall-mitigation plan is mandatory: with partial or none you must supply mitigation_plan; with complete it is optional.
Re-POST the same shape to edit the draft. Once the filing is submitted, in-place edits are refused (409 RMD_LOCKED) and you move it through the lifecycle endpoints instead.

2. Submit the filing

After you file with the FCC RMD portal, record the submission — optionally with the FCC confirmation reference:
Submission is refused with 409 RMD_INCOMPLETE when the draft is missing a required piece — most commonly the mitigation plan, which is mandatory unless stir_shaken_status is complete. The details array names each blocker.

3. Certify publication

When the filing is published in the database, mark it active. This sets certified_at and starts the review clock:

4. Flag and resolve a deficiency

If a terminating carrier or the FCC flags a problem with your filing, record the deficiency (the reason is required) and, once corrected, resolve it. Resolving returns the filing to active and restarts the clock from the resolve date.

5. Withdraw

Mark a filing withdrawn when it is superseded or no longer applies:
Withdrawal is reversible: POST /compliance/rmd on a withdrawn filing re-opens it to draft (keeping the original id and creation time), and you walk the lifecycle again.

6. Read back the current state in one call

The response carries the registration, the live recertification verdict with due_at and days_remaining, the effective enforcement mode, and update_window_business_days for the FCC’s after-a-change update window.

Call-time origination enforcement

Tracking the filing answers “what is our RMD state?” A second, opt-in layer answers “should we originate right now, given that state?” The voice pre-origination guard checks the filing of the originating organization — not the recipient — before an outbound call is placed, and applies the mode you set: Set the mode once; it applies to every outbound voice origination from your organization until you change it:
A filing is not current — flagged under warn, blocked under enforce — in four situations: Two deliberate behaviors of the guard:
  • It fails open. If the read of your organization’s settings errors at call time, the call proceeds — a lookup blip must never break dialing. The recipient-facing gates (DNC scrub, quiet hours) are the fail-closed regulatory backstop; this guard is about your own filing.
  • Preview paths never throw. Dry-run origination paths evaluate the same verdict but surface it as a flag, so tooling can preview “would this call be held under enforce?” without blocking.

Tenant-owned by design

The RMD surface follows Orbit’s compliance posture rule: filing is your decision, never a platform-mandated gate. Nothing files with the FCC for you, nothing blocks your traffic unless you set enforce, and the default mode is off. Orbit records the filing state, computes the deadlines, and applies the posture you choose — the obligation, and every lifecycle call above, stays with your organization. The one platform-level exception is the campaign/dialer TCPA 8 AM–9 PM recipient-local window, documented in What is not tenant-toggleable — the RMD enforcement mode is not part of it.