All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Added method
facturapi.Organization.UpdateDefaultSeriesAsyncfor updating default series
- Added
TaxFactorandIepsModeconstants for tax payload fields. - Added
CancellationMotiveandCancellationStatusconstants for cancellation flows. - Added
GlobalPeriodicity,GlobalMonths, andExportCodeconstants for global invoice payload fields. - Added
InvoiceStatusandReceiptStatusconstants for common document status handling. - Added
receipt.cancellation_status_updatedto webhook event constants.
- Updated
TaxSystemconstants to include missing SAT regime code625. - Expanded
Taxabilityconstants to include codes06,07, and08.
No changes are required if your code:
- Instantiates
FacturapiClientand calls wrapper methods directly (for exampleawait client.Invoice.CreateAsync(...)). - Uses
varwhen storing wrapper properties (for examplevar invoices = client.Invoice;). - Does not depend on concrete wrapper types in method signatures, fields, or tests.
You need to update your code if you:
- Type wrapper properties as concrete classes (
CustomerWrapper,InvoiceWrapper, etc.). - Mock or inject concrete wrapper classes.
- Expose concrete wrappers in your own interfaces or public APIs.
Before (v5):
CustomerWrapper customers = client.Customer;After (v6):
ICustomerWrapper customers = client.Customer;IFacturapiClientnow exposes wrapper interfaces instead of concrete wrapper classes:ICustomerWrapper,IProductWrapper,IInvoiceWrapper,IOrganizationWrapper,IReceiptWrapper,IRetentionWrapper,ICatalogWrapper,ICartaporteCatalogWrapper,IToolWrapper,IWebhookWrapper.
FacturapiClientproperties now return those interface types as part of the public contract.- Dropped
net452target framework support. The package now targetsnetstandard2.0,net6.0, andnet8.0.
- New public interfaces for all wrapper surfaces to improve dependency injection and mocking in tests.
Invoice.StampDraftAsyncand legacyStampDraftnow co-exist;StampDraftis marked as obsolete.- Added initial
FacturapiTesttest project with regression coverage for query building and wrapper behavior. - Added
FacturapiClient.CreateWithCustomHttpClient(...)for advanced scenarios where consumers need to provide their ownHttpClientwithout changing the default constructor. - Added organization team-management endpoints to
Organization/IOrganizationWrapper: access listing and retrieval, invite send/cancel/respond flows, role listing/templates/operations, role CRUD, and role reassignment for team members.
Retention.CancelAsyncis now consistent with the rest of the SDK: supportsCancellationToken, disposes HTTP responses, and uses shared error handling (ThrowIfErrorAsync).- Query string generation now handles null values and empty query dictionaries safely.
- README examples were corrected to align with the current async API surface and valid C# snippets.
- Internal async calls in wrapper implementations now consistently use
ConfigureAwait(false).
- Import for retention wrapper
- Method for cancel retentions must send motive and substitution
- Wrappers can no longer be constructed directly; their constructors are internal and they are intended to be used only through
FacturapiClient. - Renamed existing methods to match documented C# surface:
Organization.List/Create/Update/DeleteSeriesAsync(were*SeriesGroupAsync),Invoice.UpdateStatusAsync(wasUpdateStatus), andTool.ValidateTaxIdAsync(wasValidateTaxId). - Carta Porte catalog methods moved to a dedicated
CartaporteCatalogWrapper;CartaporteCatalogis now of that type, andCatalogWrapperretains only product/unit catalogs.
- Expose webhook methods through
FacturapiClient/IFacturapiClient. - New organization endpoints:
MeAsync(/organizations/me),CheckDomainIsAvailableAsync,UpdateReceiptSettingsAsync, andUpdateDomainAsync. - New
CartaporteCatalogWrapperfor Carta Porte catalog searches. - Added
DomainAvailabilitymodel for domain check responses. - Added
Tool.HealthCheckAsyncfor/check. FacturapiException.Statusnow surfaces the HTTP status code when available.- Introduced
IFacturapiClientso consumers can mock the client surface in tests. - Optional
CancellationTokenparameters on client methods to allow request cancellation from callers.
FacturapiClientnow implementsIDisposable; callDispose()when finished (or wrap inusing) to release HTTP resources. If not disposed, garbage collection will eventually clean up, but explicit disposal avoids lingering HTTP connections.
Invoices.PreviewPdfAsyncnow calls the documented POST endpoint with a JSON body (breaking change to the method signature).Receipts.CreateGlobalInvoiceAsyncposts directly to/receipts/global-invoiceand no longer requires an id (breaking change to the signature).- Receipt routes now hit
/receipts/{id}for cancel, invoice, email, and PDF download instead of invoice endpoints. Organizations.CreateSeriesAsyncuses POST (not PUT) to/organizations/{id}/series-group, matching the API.
- Methods to carta porte catalogs
SearchAirTranportCodes,SearchTransportConfigs,SearchRightsOfPassage,SearchCustomsDocuments,SearchPackagingTypesSearchTrailerTypes,SearchHazardousMaterials,SearchNavalAuthorizations,SearchPortStations,SearchMarineContainers
- Added fields to
Customermodel:DefaultInvoiceUse.
- Add
Invoices.PreviewPdfAsyncmethod to preview invoice PDF before stamping.
- Fix
Invoices.SendByEmailAsync,Receipts.SendByEmailAsync,Retentions.SendByEmailAsyncmethod and mark thedataparameter as optional.
- Add
AddOnsproperty toOrganizationmodel to support Facturapi add-ons. - Add missing properties to
Organization.Customization.PdfExtramodel:AddressCodes,RoundUnitPrice,TaxBreakdown,IepsBreakdown,RenderCartaPorte, andRepeatSignature.
- Add
Organizations.UpdateSelfInvoiceSettingsAsyncmethod to update self invoice settings.
- Add Create Webhook
Webhooks.CreateAsync - Add Update Webhook
Webhooks.UpdateAsync - Add Retrieve Webhook
Webhooks.RetrieveAsync - Add Delete Webhook
Webhooks.DeleteAsync - Add List Webhooks
Webhooks.ListAsync - Add Validate Signature Webhook
Webhooks.ValidateSignatureAsync
- Type IepsMode for Tax model
- Type Factor for Tax model
- Support sending query params to
Customers.CreateAsyncandCustomers.UpdateAsyncmethods. - Added fields to
Customermodel:SatValidatedAt,EditLinkandEditLinkExpiresAt. - Added targets for .NET 6.0 and .NET 7.0.
- Add List of Live Api Keys
Organizations.ListAsyncLiveApiKey - Add Delete of a Live Api Key
Organization.DeleteAsyncLiveApiKey
- New methods to manage Series:
Organizations.ListSeriesGroupAsync,Organizations.CreateSeriesGroupAsync,Organizations.UpdateSeriesGroupAsync,Organizations.DeleteSeriesGroupAsync.
- New methods for invoice drafts:
Invoices.UpdateStatusAsync,Invoices.UpdateDraftAsync,Invoices.StampDraftAsyncandInvoices.CopyToDraftAsync.
- Global constants of taxability
- Taxability type in product type
- Global types in invoice model
- Update invoice uses constants
- Update payment form constants
- Add new method for delete certs in organization
- Support for more .NET versions: .NET Core, .NET 6 and .NET 4.5.2
- Allow passing options object to invoice creation
- We now target .NET standard 2.0 instead of .NET framework 4.5.
- RESICO Tax system
- Download cancellation receipt XML and PDF
- Download receipt PDF
- Send receipt by email
- Tax Validation endpoint
- Customer
TaxSystemproperty - Invoice
Addressproperty
- Added support for CFDI 4.0
- Unit keys catalog was pointing to product keys catalog
- Catalogs API
- Endpoint for validating tax id
- Missing property on Stamp object: ComplementString
- Removed deprecated property
Invoice.ForeignTrade. - Removed deprecated
Wrapperclass.
- Support for Receipts API
- Support for Retentions API
- Added missing properties on
Invoiceclass:ExternalId,Type,StampandComplements.
Invoice.Payments[].Relatedshould be a List
- Bug at uploading certificates.
- Problem uploading logo and certs for an organization.
- Bunch of properties missing from the Invoice class like Payments, ForeignTrade, Related, etc.
TotalResultsproperty in search results.FacturapiClientreplacesWrapperand is now the preferred way of instanciating the API client. Usage is exactly the same. Actually this is more a renaming than a replacement.- Now you can send parameters to the
Invoice.SendByEmailmethod, which means you can specify the email address to send the invoice to.
- Wrapper class. We're replacing it with the more descriptive
FacturapiClient.Wrapperwill be available during this version for keeping backwards compatibility, but will be removed in the next major release.
- Deprecated static methods.