SAT catalogs

The SAT (Mexico's tax authority, Servicio de Administración Tributaria) publishes standard catalogs for e-invoicing in Mexico. You must use their keys and descriptions when you issue a CFDI (Mexico's electronic invoice).

SAT catalogs and their Fiscalapi equivalents

The SAT catalogs in the API have exactly the same records as the official catalogs. For example, SatPaymentForms contains the same records as c_FormaPago. The tables below show the name of each catalog in the SAT and in the API.

Invoicing catalogs

SAT catalogAPI catalogDescription
c_FormaPagoSatPaymentFormsForms of payment (how the customer paid: cash, bank transfer, card; the FormaPago key) accepted on the invoice
c_MonedaSatCurrenciesCurrencies allowed on the invoice
c_TipoDeComprobanteSatInvoiceTypesThe invoice's CFDI type (the TipoDeComprobante key: I income, the regular sales invoice; E credit note; T transfer, moves goods without a sale; N payroll; P payment)
c_ExportacionSatExportCodesExport operations of the invoice
c_MetodoPagoSatPaymentMethodsPayment methods (whether the CFDI is paid in full when issued, PUE, or later or in installments, PPD; not how the customer pays) of the invoice
c_PeriodicidadSatPeriodicitiesFrequency of the global invoice (factura global, one CFDI that groups a period's sales to the general public)
c_MesesSatMonthsPeriods the invoice covers
c_TipoRelacionSatRelationshipTypesRelationship types between invoices
c_RegimenFiscalSatTaxRegimesTax regimes (régimen fiscal, the SAT category a taxpayer is registered under, such as 601 or 626) of the issuer or the recipient
c_UsoCFDISatCfdiUsesCFDI uses (how the recipient will use the CFDI for tax purposes)
c_ClaveProdServSatProductCodesSAT product or service keys
c_ClaveUnidadSatUnitMeasurementsUnits of measure of the CFDI products
c_ObjetoImpSatTaxObjectsTax object (whether an item is subject to tax, ObjetoImp) of the CFDI products
c_ImpuestoSatTaxesTaxes that apply to the invoice
c_TipoFactorSatTaxTypesFactor types of the CFDI products' taxes
c_MotivosCancelacionSatMotivosCancelacionCancellation reasons (one of the SAT keys 01 to 04) for invoices
c_PaisSatCountriesCountries according to the ISO 3166-1 standard
c_EstadoSatStatesMexican states, US states, and Canadian provinces

Payroll catalogs

SAT catalogAPI catalogDescription
c_BancoSatBanksBanks for payroll transfers
c_OrigenRecursoSatFundSourcesSource of funds in the payroll of SNCF member entities (SNCF: Sistema Nacional de Coordinación Fiscal, the system that coordinates federal and state taxes in Mexico; a member government entity adds EntidadSNCF to its payroll CFDIs)
c_PeriodicidadPagoSatPaymentPeriodicitiesPayroll pay periods
c_TipoContratoSatContractTypesTypes of contract between the employee and the employer
c_TipoDeduccionSatDeductionTypesPayroll deduction types
c_TipoHorasSatOvertimeTypesTypes of overtime an employee works
c_TipoIncapacidadSatDisabilityTypesTypes of work incapacity of an employee
c_TipoJornadaSatWorkdayTypesTypes of workday of an employee
c_TipoNominaSatPayrollTypesPayroll types
c_TipoOtroPagoSatOtherPaymentTypesTypes of other payments an employee receives
c_TipoPercepcionSatEarningTypesTypes of earnings (percepciones: salary, overtime, bonuses, and other pay) an employee receives
c_TipoRegimenSatTaxRegimeTypesTypes of hiring regime of the employee
c_RiesgoPuestoSatJobRisksThe employee's occupational risk class
c_EstadoSatPayrollStatesMexican states where the workplace can be located
c_SindicalizadoSatUnionizedStatusesIndicates whether the worker belongs to a union

Fiscalapi internal catalogs

API catalogDescription
ProductTypesProduct types in the UNSPSC classification (segment level)
ProductDivisionsProduct divisions in the UNSPSC classification (division level)
ProductGroupsProduct groups in the UNSPSC classification (group level)
ProductClassesProduct classes in the UNSPSC classification (class level)
UserTypesTypes of people (person: any individual or legal entity registered in your tenant) in the system
ReportRuleTypesTypes of report rules (the logo, colors, and templates applied to an issuer's invoice PDFs)
TaxesApplicable taxes: ISR (Mexico's income tax, Impuesto Sobre la Renta), IVA (Mexico's value-added tax, VAT), and IEPS (Mexico's excise tax on specific goods and services, Impuesto Especial sobre Producción y Servicios)
TaxFlagsTax flag: R, withholding (retención), or T, transferred tax (traslado, a tax the issuer charges the recipient)
TaxTypesTax factor types: Tasa (rate), Cuota (fixed amount), or Exento (exempt)
TaxRulesTax calculation rules by product type, division, group, or class
PersonTypesPerson types: individual (persona física) or legal entity (persona moral)
InvoiceStatusesInvoice statuses in the CFDI lifecycle
SatValidationTypesTypes of SAT validation you can run on a CFDI

Carta Porte 3.1 catalogs

SAT catalogAPI catalogDescription
c_CveTransporteSatCveTransporteTransportation mode key: Autotransporte (01, road), Marítimo (02, sea), Aéreo (03, air), Ferroviario (04, rail)
c_TipoEstacionSatTipoEstacionStation type: Origen Nacional (01, domestic origin), Intermedia (02, intermediate), Destino Nacional (03, domestic destination)
c_EstacionesSatEstacionesOrigin, intermediate, and destination stations and terminals for each transportation type
c_TipoPermisoSatTipoPermisoPermit types that the SCT (Secretaría de Comunicaciones y Transportes, Mexico's transportation ministry) grants for freight and passenger transportation
c_ClaveUnidadPesoSatClaveUnidadPesoWeight unit keys: Kilogramo (KGM, kilogram), Tonelada (TNE, ton), Libra (LBR, pound), among others
c_MotivoTrasladoSatMotivoTrasladoReason for moving the goods covered by the CFDI
c_TipoMateriaSatTipoMateriaType of material or goods transported
c_SectorCOFEPRISSatSectorCOFEPRISCOFEPRIS (Comisión Federal para la Protección contra Riesgos Sanitarios, Mexico's health regulator) sector: Medicamentos (01, medicines), Precursores (02, precursors), Psicotrópicos (03, psychotropics), Tóxicas (04, toxic substances), Plaguicidas (05, pesticides)
c_FormaFarmaceuticaSatFormaFarmaceuticaPharmaceutical form of the product when the COFEPRIS sector is Medicamentos (medicines)
c_CondicionesEspecialesSatCondicionesEspecialesSpecial transportation conditions for goods regulated by COFEPRIS
c_RegistroISTMOSatRegistroISTMORegistration in the Interoceanic Corridor of the Isthmus of Tehuantepec
c_ClaveTipoCargaSatClaveTipoCargaClassification of the type of cargo transported
c_ColoniaSatColoniaNeighborhoods of the origin and destination locations
c_LocalidadSatLocalidadLocalities of the origin and destination locations
c_MunicipioSatMunicipioMunicipalities of the origin and destination locations
c_MaterialPeligrosoSatMaterialPeligrosoHazardous materials according to the NOM (Norma Oficial Mexicana, a Mexican official standard): explosives, ammunition, chemical substances
c_TipoEmbalajeSatTipoEmbalajePackaging type for transporting hazardous materials
c_ConfigAutotransporteSatConfigAutotransporteVehicle configuration for road transportation (vehicle and trailer type)
c_SubTipoRemSatSubTipoRemTrailer or semitrailer subtype for road transportation
c_ParteTransporteSatParteTransporteTransportation parts or segments
c_FiguraTransporteSatFiguraTransporteParties involved in the transportation: Operador (01, operator), Propietario (owner), Arrendatario (lessee), Notificado (notified party)
c_ConfigMaritimaSatConfigMaritimaMaritime transportation configuration
c_ContenedorMaritimoSatContenedorMaritimoMaritime container types
c_NumAutorizacionNavieroSatNumAutorizacionNavieroAuthorization number of the consignee shipping agent
c_TipoDeServicioSatTipoDeServicioRail service type
c_CodigoTransporteAereoSatCodigoTransporteAereoAirline codes for air cargo transportation
c_DerechosDePasoSatDerechosDePasoTrackage rights (tolls) on rail routes
c_TipoCarroSatTipoCarroRail car type
c_ContenedorSatContenedorRail container specifications
c_TipoDeTraficoSatTipoDeTraficoRail traffic type
c_RegimenAduaneroSatRegimenAduaneroCustoms regime: Importación Definitiva (IMD, definitive import), Exportación Definitiva (EXD, definitive export), Temporal (ITR, temporary), Depósito Fiscal (DFI, bonded warehouse), Tránsito (TRA, transit)
c_DocumentoAduaneroSatDocumentoAduaneroCustoms document type
c_FlagTipoUbicacionSatFlagTipoUbicacionLocation type: Origen (origin) or Destino (destination)
c_FlagNavegacionTraficoSatFlagNavegacionTraficoMaritime navigation and traffic indicator
c_FlagMaterialPeligrosoSatFlagMaterialPeligrosoHazardous material indicator: Sí (yes) or No
c_FlagLogisticaInversaRecoleccionDevolucionSatFlagLogisticaInversaRecoleccionDevolucionReverse logistics indicator for pickup or return
c_FlagTranspInternacSatFlagTranspInternacInternational transportation indicator: Sí (yes) or No
c_FlagEntradaSalidaMercSatFlagEntradaSalidaMercGoods entry or exit indicator
c_FlagRegistroISTMOSatFlagRegistroISTMOIndicator of registration in the Isthmus of Tehuantepec Corridor

Comercio Exterior 2.0 catalogs

SAT catalogAPI catalogDescription
c_ClavePedimentoSatClavePedimentoKey of the pedimento (the Mexican customs declaration for imports and exports)
c_FraccionArancelariaSatFraccionArancelariaFracción arancelaria (Mexico's 8-digit tariff code: the 6-digit Harmonized System code plus 2 Mexican digits) of the goods in foreign trade operations
c_INCOTERMSatINCOTERMInternational commercial terms (INCOTERM) that define the delivery responsibilities
c_TipoOperacionSatTipoOperacionForeign trade operation type
c_UnidadAduanaSatUnidadAduanaUnit of measure used in customs documentation

PagedList model

Because SAT catalogs have many records, Search a catalog returns the paginated PagedList model. Each item on the page is a CatalogDto, which represents one record of the catalog.

Properties

  • Name
    items
    Type
    array of objects (CatalogDto)?
    Description

    The items on the current page.

  • Name
    pageNumber
    Type
    integer | number?
    Description

    The current page.

  • Name
    totalPages
    Type
    integer | number?
    Description

    The total number of pages.

  • Name
    totalCount
    Type
    integer | number?
    Description

    The total number of items.

  • Name
    hasPreviousPage
    Type
    boolean?
    Description

    Whether there's a previous page.

  • Name
    hasNextPage
    Type
    boolean?
    Description

    Whether there's a next page.


GET/api/v4/catalogs

List catalogs

This endpoint returns the names of the available catalogs, without pagination. Use these names to get or search the records of a catalog. Write them exactly as they appear, because they're case-sensitive: a name that isn't on the list returns 404 on the other catalog endpoints.

Request

GET
/api/v4/catalogs
curl --location 'https://test.fiscalapi.com/api/v4/catalogs' \
--header 'X-TENANT-KEY: <tenant>' \
--header 'X-TIME-ZONE: America/Mexico_City' \
--header 'X-API-KEY: <api-key>' \
--data ''

Response

{
    "data": [
        "SatCfdiUses",
        "SatCountries",
        "SatCurrencies",
        "SatExportCodes",
        "SatInvoiceTypes",
        "SatMonths",
        "SatTaxObjects",
        "SatPaymentForms",
        "SatPaymentMethods",
        "SatPeriodicities",
        "SatProductCodes",
        "SatRelationshipTypes",
        "SatTaxes",
        "SatStates",
        "SatTaxRegimes",
        "SatTaxTypes",
        "SatUnitMeasurements",
        "ProductTypes",
        "ProductDivisions",
        "ProductGroups",
        "ProductClasses",
        "UserTypes",
        "ReportRuleTypes",
        "Taxes",
        "TaxFlags",
        "TaxTypes",
        "TaxRules",
        "PersonTypes",
        "InvoiceStatuses",
        "SatBanks",
        "SatFundSources",
        "SatPaymentPeriodicities",
        "SatContractTypes",
        "SatDeductionTypes",
        "SatOvertimeTypes",
        "SatDisabilityTypes",
        "SatWorkdayTypes",
        "SatPayrollTypes",
        "SatOtherPaymentTypes",
        "SatEarningTypes",
        "SatTaxRegimeTypes",
        "SatJobRisks",
        "SatPayrollStates",
        "SatUnionizedStatuses",
        "SatRegimenAduanero",
        "SatCveTransporte",
        "SatTipoEstacion",
        "SatEstaciones",
        "SatClaveUnidadPeso",
        "SatMaterialPeligroso",
        "SatTipoEmbalaje",
        "SatTipoPermiso",
        "SatColonia",
        "SatLocalidad",
        "SatMunicipio",
        "SatSectorCOFEPRIS",
        "SatFormaFarmaceutica",
        "SatCondicionesEspeciales",
        "SatTipoMateria",
        "SatDocumentoAduanero",
        "SatParteTransporte",
        "SatFiguraTransporte",
        "SatConfigAutotransporte",
        "SatSubTipoRem",
        "SatRegistroISTMO",
        "SatConfigMaritima",
        "SatClaveTipoCarga",
        "SatContenedorMaritimo",
        "SatNumAutorizacionNaviero",
        "SatCodigoTransporteAereo",
        "SatTipoDeServicio",
        "SatDerechosDePaso",
        "SatTipoCarro",
        "SatContenedor",
        "SatTipoDeTrafico",
        "SatFlagTipoUbicacion",
        "SatFlagNavegacionTrafico",
        "SatFlagMaterialPeligroso",
        "SatFlagLogisticaInversaRecoleccionDevolucion",
        "SatFlagTranspInternac",
        "SatFlagEntradaSalidaMerc",
        "SatFlagRegistroISTMO",
        "SatMotivosCancelacion",
        "SatClavePedimento",
        "SatFraccionArancelaria",
        "SatINCOTERM",
        "SatMotivoTraslado",
        "SatTipoOperacion",
        "SatUnidadAduana"
    ],
    "succeeded": true,
    "message": "",
    "details": "",
    "httpStatusCode": 200
}

GET/api/v4/catalogs/<catalogName>/key/<recordId>

Get a record by ID

This endpoint returns a record from a catalog by the catalog name and the record ID, which is the record's key in the catalog. The catalog name is case-sensitive.

Errors

The messages arrive in details. In them, <recordId> is the record's key and <catalogName> is the catalog name.

StatusWhen it happensMessage
404The record key doesn't exist in the catalog.No such resource for the given Id: <recordId>
404The catalog name doesn't exist.No existe el catálogo '<catalogName>'.

Request

GET
/v4/catalogs/<catalogName>/key/<recordId>
curl --location 'https://test.fiscalapi.com/api/v4/catalogs/SatPaymentForms/key/03' \
--header 'X-TENANT-KEY: <tenant-key>' \
--header 'X-TIME-ZONE: America/Mexico_City' \
--header 'X-API-KEY: <api-key>' \
--data ''

Response

{
    "data": {
        "id": "03",
        "description": "Transferencia electrónica de fondos",
        "createdAt": "2024-08-10T15:46:30.3730000",
        "updatedAt": null
    },
    "succeeded": true,
    "message": "",
    "details": "",
    "httpStatusCode": 200
}

GET/api/v4/catalogs/<catalogName>/<searchTerm>

This endpoint searches for records in a catalog by the catalog name and a search term. The response is a paginated list.

Query parameters

  • Name
    pageNumber
    Type
    integer | number
    required
    Description

    The page number you want to retrieve.

    Default:
    1
  • Name
    pageSize
    Type
    integer | number
    required
    Description

    The number of records per page, from 1 to 100.

    Default:
    50

Errors

The message arrives in details. In it, <catalogName> is the catalog name.

StatusWhen it happensMessage
404The catalog name doesn't exist.No existe el catálogo '<catalogName>'.

Request

GET
/v4/catalogs/<catalogName>/<searchTerm>
curl --location 'https://test.fiscalapi.com/api/v4/catalogs/SatPaymentForms/Tarjeta?pageNumber=1&pageSize=100' \
--header 'X-TENANT-KEY: <tenant-key>' \
--header 'X-TIME-ZONE: America/Mexico_City' \
--header 'X-API-KEY: <api-key>' \
--data ''

Response

{
    "data": {
        "items": [
            {
                "id": "04",
                "description": "Tarjeta de crédito",
                "createdAt": "0001-01-01T00:00:00.0000000",
                "updatedAt": null
            },
            {
                "id": "28",
                "description": "Tarjeta de débito",
                "createdAt": "0001-01-01T00:00:00.0000000",
                "updatedAt": null
            },
            {
                "id": "29",
                "description": "Tarjeta de servicios",
                "createdAt": "0001-01-01T00:00:00.0000000",
                "updatedAt": null
            }
        ],
        "pageNumber": 1,
        "totalPages": 1,
        "totalCount": 3,
        "hasPreviousPage": false,
        "hasNextPage": false
    },
    "succeeded": true,
    "message": "",
    "details": "",
    "httpStatusCode": 200
}

Was this page helpful?