Skip to main content
Digital platform reporting is in active development. The action names and the portal layout may change. If you operate a platform in Mexico, talk to us before enabling it in production.
Operators of digital platforms (โ€œplataformas digitales tecnolรณgicasโ€) that facilitate sales or services for third parties must keep, and make available to the SAT, the information of every operation carried out through them. This is a separate obligation from CFDI issuance โ€” the platform itself reports the operations, regardless of who issued the underlying invoice. This feature lets you register a party as a platform reporter, record each operation with the legally required fields, and hand the SAT a private URL where it can browse, filter, and export those operations on demand. For the regulatory background โ€” Article 30-B of the CFF (2026 RMF) and the operation-information requirements of rule 2.9.21 โ€” see the Mexico compliance page.

How it works

There are three provider actions, in the platforms namespace, plus a SAT-facing portal:
StepActionWhat it does
Registersat-mx.platforms.registerEnrolls a party for platform reporting and produces the portal URL + access credentials.
Recordsat-mx.platforms.recordFiles a single operation (invoice / CFDI) with the required fields, ready for inspection.
Unregistersat-mx.platforms.unregisterStops accepting new operations while keeping the portal and its history available.
The typical lifecycle is: register the party once โ†’ record every operation as it happens โ†’ share the portal URL with the SAT. The SAT logs in whenever it needs to inspect the operations. If the party stops reporting, you unregister it; the historical data stays accessible.

Recorded fields

Each recorded operation captures the fields required by rule 2.9.21, section I, extracted automatically from the GOBL document:
#FieldSourceRequired
aTipo de servicio (service type)Distinct line-item descriptions (capped at the first three, with โ€œ+N mรกsโ€)Yes
bRFC del comprador (buyer tax ID)Customer tax_id.code, when presentWhen known
cMonto sin IVA (amount before VAT)Invoice totalsYes
dIVA (VAT)Invoice totalsYes
eMonto con IVA (amount incl. VAT)Invoice totalsYes
fFolio fiscal (CFDI UUID)The SAT stamp (sat-uuid); falls back to the invoice number when there is no CFDIWhen available
gForma de pago (payment method)The Mexican FormaPago (mx-cfdi-payment-means) when present, otherwise the GOBL payment instruction keyYes
Fields b and f are conditional in the rule itself โ€” a sale to pรบblico en general has no buyer RFC, and a non-CFDI operation has no folio fiscal. The recording action only rejects an operation when one of the always-required totals (c, d, e), the service type, or the payment method is missing.
The feature does not restrict by country or tax regime: a foreign operator (for example, a German company operating in Mexico) can be registered and reported on just the same.

Registering a platform

Run sat-mx.platforms.register against the operatorโ€™s party. It enrolls the party, generates an HMAC-signed portal URL, and writes the link and credentials to the partyโ€™s metadata so you can retrieve and re-share them at any time. The action returns, and stores on the party:
  • URL โ€” the signed portal address to give to the SAT.
  • Usuario โ€” the operatorโ€™s RFC.
  • Secreto โ€” the access secret (shown so you can share it; re-running register keeps the same secret).

How it works

1

Set State โ†’ processing

Marks the silo entry as โ€œProcessingโ€.
2

Sign envelope

Closes (signs) the party envelope so it can be processed.
3

Register party for platform reporting

Enrolls the party, signs the portal URL, and stores the link + credentials on the party metadata.
4

Set State โ†’ registered

Marks the silo entry as โ€œRegisteredโ€.

SAT register platform workflow

Enrolls a party for digital platform reporting and generates the SAT portal URL and credentials.

Recording operations

Wire sat-mx.platforms.record as the workflow for the bill/invoice documents that flow through the platform. The action resolves the supplier from the invoice, extracts the required fields, and files the operation against that platformโ€™s portal. Recording is idempotent on the invoice: re-running the workflow for the same document updates the existing row instead of creating a duplicate. If the platform has been unregistered, new operations are rejected.

How it works

1

Set State โ†’ processing

Marks the silo entry as โ€œProcessingโ€.
2

Sign envelope

Closes (signs) the invoice envelope so it can be processed.
3

Record operation for reporting

Extracts the rule 2.9.21 fields and files the operation; errors if a required field is missing.
4

Set State โ†’ sent

Marks the silo entry as โ€œSentโ€.

SAT record operation workflow

Files a single sale through the digital platform portal, ready for SAT inspection.
An operation can only be recorded against a party that has been registered first. The record action resolves the platform from the invoiceโ€™s supplier โ€” register the supplierโ€™s party before sending it any operations.

The SAT portal

The portal is the SAT-facing side of the feature. It needs no Invopop account: the SAT opens the signed URL from the register step and authenticates with the Usuario (RFC) and Secreto. Once logged in, the SAT sees a paginated table of every recorded operation for that platform, with the fields above, and can:
  • Filter by buyer RFC and by a date range. Filtering and pagination run server-side, so the table stays fast over very large histories.
  • Export to CSV โ€” the full, filtered result set streams as a download, with no row-count ceiling.
GET /<owner>/<entry>?sig=<signature> โ€” the signed portal entry point (login).
GET /<owner>/<entry>/sales โ€” the filterable, paginated operations table.
GET /<owner>/<entry>/sales.csv โ€” a streaming CSV export of the current filter.
The session is a short-lived signed cookie; logging out (or letting it expire) returns the SAT to the login screen for the same signed link.

Unregistering

When a party should no longer accept new operations, run sat-mx.platforms.unregister. New record calls are rejected from that point on, but the portal URL and secret keep working so the SAT can still inspect everything filed up to then.

How it works

1

Set State โ†’ processing

Marks the silo entry as โ€œProcessingโ€.
2

Unregister party from platform reporting

Stops accepting new operations; preserves portal access and history.
3

Set State โ†’ void

Marks the silo entry as โ€œVoidโ€.

SAT unregister platform workflow

Stops accepting new operations for a platform while preserving portal access and history.
To resume reporting for the party, register it again โ€” the existing portal URL and secret are reused.