Invoice issuers
An issuer is a person (any individual or legal entity registered in your tenant) who issues CFDIs (Mexico's electronic invoices). In Fiscalapi, a person is any taxpayer, either an individual (persona física) or a legal entity (persona moral), such as a company. You manage the other resources of your tenant (the space in Fiscalapi that holds your issuers, recipients, credits, and data) through the person. You assign stamps (one credit each, used each time you stamp a CFDI) to it and withdraw them, manage its tax files (the CSD and e.firma .cer and .key files you upload for a person), create and revoke its API keys, and decide whether it can issue invoices.
What a person represents
The same person can play several roles in your tenant: issuer, recipient, employee, employer, or someone who signs in to your tenant. You manage any person from a single resource, /api/v4/people. A person can represent a company that issues invoices or a customer who receives them, an employee or the company that hires them, an organization with its own customers, a holding company with affiliates or subsidiaries, someone who uses the API within a tenant, or an individual.
Issuers on payroll CFDIs
When an issuer acts as the employer on payroll CFDIs (the CFDIs issued for each salary payment, type N), they must have their employer data registered. If the issuer is an individual, their tax details must also include their CURP (Mexico's population registry ID, Clave Única de Registro de Población).
Tenant owner
The tenant owner is the person who created the tenant when they signed up for Fiscalapi, and person responses identify them with isOwner: true. The examples in these docs use the owner's API key. The other people in the tenant also use the API with their own API key, or they use the dashboard.
A person's credentials are their email (email), their sign-in password (password), and their private key password (taxPassword). The owner can modify any person in the tenant, including their credentials, and each person can modify their own data, credentials included. Everything else follows these rules:
| Operation | Who can do it |
|---|---|
| Modify the data of a person who isn't the owner, such as their tax details. | Any person in the tenant. |
| Create or delete a person who isn't the owner. | Any person in the tenant. |
| Change another person's credentials. | Only the owner. |
| Modify the owner with Update an issuer or in their employer data or employee data. | Only the owner. |
| Delete the owner. | No one: Delete an issuer with the owner's ID returns 403. |
| Manage another person's API keys and tax files. | Only the owner. |
| Create, update, or delete the owner's download rules and the report rules (the logo, colors, and templates applied to an issuer's invoice PDFs) assigned to the owner. | Only the owner. |
Sending a non-empty sign-in password, or an email or private key password that differs from the saved one, counts as a credentials change. Sending the same email or the same private key password again isn't a change. In the email, changing only the case of the letters A to Z doesn't count either; a change to any other character does.
Errors
When a request breaks these rules, the endpoint returns 403 with the message in the details field of the response model.
| Status | When it happens | Message |
|---|---|---|
| 403 | Another person modifies the owner with Update an issuer, in their employer or employee data, or in their download or report rules. | Solo el propietario de la cuenta puede modificar al propietario de la cuenta. |
| 403 | A person who isn't the owner changes another person's credentials. | Solo el propietario de la cuenta puede gestionar las credenciales de otra persona: correo, contraseña, API keys y certificados. |
Person model
The person model contains a person's data. Properties with the Id suffix are keys from the SAT catalogs (SAT: Mexico's tax authority, Servicio de Administración Tributaria): look them up in CFDI 4.0 catalogs or query them through the API in SAT catalogs.
Properties
- Name
id- Type
- string?
- Description
The person's unique identifier, assigned by Fiscalapi.
- Name
legalName- Type
- string
- required
- Description
The person's legal name (as registered with the SAT), without the legal form: for "MI EMPRESA S.A. de C.V.", send
MI EMPRESA. If the person is an individual, send their full name as it appears on their Constancia de Situación Fiscal (the SAT tax status certificate).
- Name
email- Type
- string
- required
- Description
The person's email, unique across Fiscalapi: no other person, in this tenant or any other, can have the same one. The comparison ignores case and leading or trailing spaces, and the email is saved without those spaces. It accepts only unaccented letters from A to Z, uppercase or lowercase, digits, and the characters
-._@+. Fiscalapi rejects any other character, such as ñ, an accented vowel, an apostrophe, or a space in the middle.
- Name
phoneNumber- Type
- string?
- Description
The person's phone number.
- Name
password- Type
- string?
- Description
The sign-in password for the dashboard. It's required when you create the person and optional when you update it. Fiscalapi never returns it in responses. Every person (an issuer, a recipient, or anyone else who signs in to your tenant) uses their email and this password to access the Fiscalapi dashboard. Whether you give them those credentials depends on your own policies.
- Name
satTaxRegimeId- Type
- string?
- expandable
- Description
The person's tax regime (régimen fiscal, the SAT category a taxpayer is registered under, such as
601or626) when it acts as an issuer or recipient. SAT catalogc_RegimenFiscal. To act as an employer on payroll CFDIs, the person also needs their employer data: their information as an employer.- Type
- enum:
- Values
- "601""603""605"
- Name
satCfdiUseId- Type
- string?
- expandable
- Description
The person's CFDI use (how the recipient will use the CFDI for tax purposes) when it acts as a recipient. SAT catalog
c_UsoCFDI.- Type
- enum:
- Values
- "G01""G02""G03"
- Name
userTypeId- Type
- string?
- expandable
- Description
The person type, for informational purposes only.
- Type
- enum:
- Values
- "C""U""T"
- Name
tin- Type
- string?
- Description
The person's RFC (Mexico's taxpayer ID, Registro Federal de Contribuyentes).
- Name
curp- Type
- string?
- Description
The person's CURP. Fiscalapi uses it in the payroll CFDI.
- Name
zipCode- Type
- string?
- Description
The person's postal code. It must match the one on their Constancia de Situación Fiscal. SAT catalog
c_CodigoPostal.
- Name
countryId- Type
- string?
- Description
The key of the person's country of tax residence when they reside abroad. SAT catalog
c_Pais(for example,USA). If the person is the recipient of an invoice by reference (you send the IDs of people and products already saved in Fiscalapi), Fiscalapi uses it as the recipient'sResidenciaFiscal.
- Name
foreignTin- Type
- string?
- Description
The person's tax ID number in their country of residence, when they reside abroad. Up to 40 characters. If the person is the recipient of an invoice by reference, Fiscalapi uses it as the recipient's
NumRegIdTrib.
- Name
country- Type
- CatalogDto?
- Description
The expanded country of tax residence (
countryIdwith its description). Read-only.
- Name
base64Photo- Type
- string?
- Description
The person's profile photo, in base64.
- Name
taxPassword- Type
- string?
- Description
The password of the private key (.key) for the CSD certificates (CSD: Certificado de Sello Digital, the digital seal certificate used to sign CFDIs) that the person saves in their profile. Up to 24 characters. Fiscalapi doesn't use it to seal invoices. When stamping (the certification by a SAT-authorized provider that makes a CFDI valid), it uses the password of the registered tax files in the by-reference mode, or the one in
taxCredentialsin the by-value mode (invoice by value: you send every issuer, recipient, and item value in the request). Only the person themselves and the tenant owner receive its value in responses; anyone else receivesnull.
- Name
availableBalance- Type
- number?
- Description
The person's available stamps: the balance of credit type
1inbalances. Read-only and for informational purposes only.
- Name
availableValidationBalance- Type
- number?
- Description
The person's available validation credits, separate from stamps: the balance of credit type
2inbalances. Read-only and for informational purposes only.
- Name
committedBalance- Type
- number?
- Description
A legacy field that Fiscalapi doesn't calculate: it's always
0. Read-only: Fiscalapi ignores it if you send it when you create or update a person.To get the balance, use
availableBalance,availableValidationBalance, orbalances.
- Name
balances- Type
- array?
- Description
The person's balances by credit type, sorted by
creditType. Read-only and for informational purposes only. Each item has the credit type and its available balance (available). See stamps.Type
1is stamps, type2is validation credits, and type3is ticket credits. Only the credit types the person has had appear: a missing type has no balance. New credit types can appear. Ignore the ones your integration doesn't know.
- Name
tenantId- Type
- string?
- Description
The ID of the tenant the person belongs to. Read-only and for informational purposes only.
- Name
isOwner- Type
- boolean?
- Description
trueif the person is the tenant owner (the person who created the tenant when they signed up). Read-only. See Tenant owner.
- Name
validTo- Type
- date?
- Description
The date the person's validity ends. Read-only: Fiscalapi assigns it and ignores it if you send it when you create or update a person. For most people it's
null; some people created long ago keep a historical date. It's informational: it doesn't limit stamping or API access.
- Name
manifestStatusId- Type
- string?
- expandable
- Description
The status of the person's Carta Manifiesto (the letter in which a taxpayer authorizes its PAC to certify its CFDIs): whether the person was invited to sign it and whether they already signed it.
- Type
- enum:
- Values
- "NotInvited""Unsigned""Signed"
List issuers
This endpoint returns people in pages of 50 by default. Use the query parameters to choose the page and its size.
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 50.
Default:50
Request
curl --location 'https://test.fiscalapi.com/api/v4/people?pageNumber=1&pageSize=2' \
--header 'X-TENANT-KEY: <tenant-key>' \
--header 'X-TIME-ZONE: America/Mexico_City' \
--header 'X-API-KEY: <api-key>'
Response
{
"data": {
"items": [
{
"legalName": "KARLA FUENTE NOLASCO",
"email": "karla@gmail.com",
"phoneNumber": null,
"validTo": null,
"satTaxRegimeId": "626",
"satTaxRegime": {
"id": "626",
"description": "Régimen Simplificado de Confianza",
"createdAt": "2024-08-10T15:46:30.3730000",
"updatedAt": null
},
"satCfdiUseId": "G03",
"satCfdiUse": {
"id": "G03",
"description": "Gastos en general.",
"createdAt": "2024-08-10T15:46:30.3730000",
"updatedAt": null
},
"userTypeId": "C",
"userType": {
"id": "C",
"description": "Cliente",
"createdAt": "2024-08-10T15:46:30.3730000",
"updatedAt": null
},
"manifestStatusId": "Unsigned",
"manifestStatus": {
"id": "Unsigned",
"description": "No Firmado",
"createdAt": "2024-08-10T15:46:30.373",
"updatedAt": null
},
"tin": "FUNK671228PH6",
"zipCode": "01160",
"base64Photo": null,
"taxPassword": null,
"curp": "XEXX010101HNEXXXA4",
"countryId": null,
"country": null,
"foreignTin": null,
"availableBalance": 13,
"committedBalance": 0,
"availableValidationBalance": 0,
"balances": [
{
"creditType": 1,
"available": 13
}
],
"tenantId": "102e5f13-e114-41dd-bea7-507fce177281",
"isOwner": false,
"id": "78d380fd-1b69-4e3c-8bc0-4f57737f7d5f",
"createdAt": "2025-01-07T15:26:06.9069715",
"updatedAt": "2025-04-20T09:31:06.1825831"
}
],
"pageNumber": 1,
"totalPages": 2,
"totalCount": 5,
"hasPreviousPage": false,
"hasNextPage": true
},
"succeeded": true,
"message": "",
"details": "",
"httpStatusCode": 200
}
Get an issuer by ID
This endpoint returns a person by its ID.
Errors
In the message, <id> is the ID you sent. The message arrives in the details field of the response model.
| Status | When it happens | Message |
|---|---|---|
| 404 | The person doesn't exist in your tenant. | No such resource for the given Id: <id> |
Request
curl --location 'https://test.fiscalapi.com/api/v4/people/78d380fd-1b69-4e3c-8bc0-4f57737f7d5f' \
--header 'X-TENANT-KEY: <tenant>' \
--header 'X-TIME-ZONE: America/Mexico_City' \
--header 'X-API-KEY: <api_key>' \
--data ''
Response
{
"data": {
"legalName": "KARLA FUENTE NOLASCO",
"email": "karla@gmail.com",
"phoneNumber": null,
"validTo": null,
"satTaxRegimeId": "626",
"satTaxRegime": {
"id": "626",
"description": "Régimen Simplificado de Confianza",
"createdAt": "2024-08-10T15:46:30.3730000",
"updatedAt": null
},
"satCfdiUseId": "G03",
"satCfdiUse": {
"id": "G03",
"description": "Gastos en general.",
"createdAt": "2024-08-10T15:46:30.3730000",
"updatedAt": null
},
"userTypeId": "C",
"userType": {
"id": "C",
"description": "Cliente",
"createdAt": "2024-08-10T15:46:30.3730000",
"updatedAt": null
},
"manifestStatusId": "Unsigned",
"manifestStatus": {
"id": "Unsigned",
"description": "No Firmado",
"createdAt": "2024-08-10T15:46:30.373",
"updatedAt": null
},
"tin": "FUNK671228PH6",
"zipCode": "01160",
"base64Photo": null,
"taxPassword": null,
"curp": "XEXX010101HNEXXXA4",
"countryId": null,
"country": null,
"foreignTin": null,
"availableBalance": 13,
"committedBalance": 0,
"availableValidationBalance": 0,
"balances": [
{
"creditType": 1,
"available": 13
}
],
"tenantId": "102e5f13-e114-41dd-bea7-507fce177281",
"isOwner": false,
"id": "78d380fd-1b69-4e3c-8bc0-4f57737f7d5f",
"createdAt": "2025-01-07T15:26:06.9069715",
"updatedAt": "2025-04-20T09:31:06.1825831"
},
"succeeded": true,
"message": "",
"details": "",
"httpStatusCode": 200
}
Create an issuer
This endpoint creates a person.
Request body
- Name
legalName- Type
- string
- required
- Description
The person's legal name, without the legal form: for "MI EMPRESA S.A. de C.V.", send
MI EMPRESA. If the person is an individual, send their full name as it appears on their Constancia de Situación Fiscal.
- Name
email- Type
- string
- required
- Description
The person's email, unique across Fiscalapi: no other person, in this tenant or any other, can have the same one. The comparison ignores case and leading or trailing spaces, and the email is saved without those spaces. It accepts only unaccented letters from A to Z, uppercase or lowercase, digits, and the characters
-._@+. Fiscalapi rejects any other character, such as ñ, an accented vowel, an apostrophe, or a space in the middle.
- Name
phoneNumber- Type
- string?
- Description
The person's phone number.
- Name
password- Type
- string
- required
- Description
The sign-in password for the dashboard. At least 6 characters, with at least one uppercase letter from A to Z, one lowercase letter from a to z, one digit, and one character that isn't a letter or a digit. Accented letters and ñ don't count as uppercase or lowercase letters, but they do count as characters that aren't a letter or a digit. Every person (an issuer, a recipient, or anyone else who signs in to your tenant) uses their email and this password to access the Fiscalapi dashboard. Whether you give them those credentials depends on your own policies.
- Name
satTaxRegimeId- Type
- string?
- expandable
- Description
The person's tax regime when it acts as an issuer or recipient. SAT catalog
c_RegimenFiscal. Fiscalapi rejects any value that isn't in the catalog.- Type
- enum:
- Values
- "601""603""605"
- Name
satCfdiUseId- Type
- string?
- expandable
- Description
The person's CFDI use when it acts as a recipient. SAT catalog
c_UsoCFDI. Fiscalapi rejects any value that isn't in the catalog.- Type
- enum:
- Values
- "G01""G02""G03"
- Name
userTypeId- Type
- string?
- expandable
- Description
The person type, for informational purposes only. If you don't send it, Fiscalapi saves
C. Fiscalapi rejects any value outside this list, includingT(Tenant), which is reserved for the person who creates the tenant when they sign up.- Type
- enum:
- Values
- "C""U"
- Name
tin- Type
- string?
- Description
The person's RFC.
- Name
curp- Type
- string?
- Description
The person's CURP. Fiscalapi uses it in the payroll CFDI.
- Name
zipCode- Type
- string?
- Description
The person's postal code. It must match the one on their Constancia de Situación Fiscal. SAT catalog
c_CodigoPostal.
- Name
countryId- Type
- string?
- Description
The key of the person's country of tax residence when they reside abroad. SAT catalog
c_Pais(for example,USA). Fiscalapi rejects any value that isn't in the catalog. If the person is the recipient of an invoice by reference, Fiscalapi uses it as the recipient'sResidenciaFiscal.
- Name
foreignTin- Type
- string?
- Description
The person's tax ID number in their country of residence, when they reside abroad. Up to 40 characters. If the person is the recipient of an invoice by reference, Fiscalapi uses it as the recipient's
NumRegIdTrib.
- Name
base64Photo- Type
- string?
- Description
The person's profile photo, in base64.
- Name
taxPassword- Type
- string?
- Description
The password of the private key (.key) for the CSD certificates that the person saves in their profile. Up to 24 characters. Fiscalapi doesn't use it to seal invoices. When stamping, it uses the password of the registered tax files in the by-reference mode, or the one in
taxCredentialsin the by-value mode.
- Name
availableBalance- Type
- number?
- Description
The person's available stamps. Read-only and for informational purposes only.
- Name
availableValidationBalance- Type
- number?
- Description
The person's available validation credits, separate from stamps. Read-only and for informational purposes only.
- Name
tenantId- Type
- string?
- Description
The ID of the tenant the person belongs to. Read-only and for informational purposes only.
Errors
In the messages, <valor> is the value you sent.
| Status | When it happens | Message |
|---|---|---|
| 400 | The email already belongs to another person. It arrives as a validation failure on Email. | The email is already registered. |
| 400 | The email contains a character that isn't allowed. It arrives as a validation failure on Email, with errorCode InvalidUserName. The message names the rejected characters; the one in the table is for an ñ. | The email contains characters that are not allowed: 'ñ'. Allowed characters: abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+ |
| 400 | The password doesn't meet the rules. It arrives as a single validation failure on Password, with the errorCode of the first requirement it doesn't meet, for example PasswordTooShort or PasswordRequiresUpper. | A text that lists the password rules. |
| 400 | The tax regime doesn't exist in the catalog. It arrives as a validation failure on SatTaxRegimeId. | El régimen fiscal '<valor>' no existe en el catálogo c_RegimenFiscal del SAT. |
| 400 | The CFDI use doesn't exist in the catalog. It arrives as a validation failure on SatCfdiUseId. | El uso de CFDI '<valor>' no existe en el catálogo c_UsoCFDI del SAT. |
| 400 | The person type is T or a value other than C and U. It arrives as a validation failure on UserTypeId. | UserTypeId debe ser uno de: C, U. 'T' está reservado y solo se permite cuando la persona ya es Tenant. |
| 400 | The country doesn't exist in the catalog. It arrives as a validation failure on CountryId. | El país '<valor>' no existe en el catálogo c_Pais del SAT. |
Request
curl --location 'https://test.fiscalapi.com/api/v4/people' \
--header 'X-TENANT-KEY: <tenant_key>' \
--header 'X-TIME-ZONE: America/Mexico_City' \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api_key>' \
--data-raw '{
"legalName": "EMPRESA",
"email": "email@domain.com",
"password": "MiSuperPass123!"
}'
Response
{
"data": {
"legalName": "EMPRESA",
"email": "email@domain.com",
"phoneNumber": null,
"validTo": null,
"satTaxRegimeId": null,
"satTaxRegime": null,
"satCfdiUseId": null,
"satCfdiUse": null,
"userTypeId": "C",
"userType": null,
"manifestStatusId": "NotInvited",
"manifestStatus": null,
"tin": null,
"zipCode": null,
"base64Photo": null,
"taxPassword": null,
"curp": null,
"countryId": null,
"country": null,
"foreignTin": null,
"availableBalance": 0,
"committedBalance": 0,
"availableValidationBalance": 0,
"balances": [],
"tenantId": "102e5f13-e114-41dd-bea7-507fce177281",
"isOwner": false,
"id": "d7992a07-4161-48ba-b3bf-558790c9bcdb",
"createdAt": "2025-05-01T07:44:53.9725097",
"updatedAt": "2025-05-01T07:44:53.9791644"
},
"succeeded": true,
"message": "",
"details": "",
"httpStatusCode": 200
}
Update an issuer
This endpoint updates a person.
Only the tenant owner and the person themselves can change the person's credentials (email, password, and taxPassword), and only the owner can modify the owner; otherwise, the endpoint returns 403.
If another request modifies the person while this one is being processed, nothing is saved and the endpoint returns 409. Any write to the person counts, for example a successful or failed sign-in with their email, or a change to their subscription. Retrieve the person again and repeat the request.
Request body
- Name
legalName- Type
- string
- required
- Description
The person's legal name, without the legal form: for "MI EMPRESA S.A. de C.V.", send
MI EMPRESA. If the person is an individual, send their full name as it appears on their Constancia de Situación Fiscal.
- Name
email- Type
- string
- required
- Description
The person's email, unique across Fiscalapi: no other person, in this tenant or any other, can have the same one. The comparison ignores case and leading or trailing spaces, and the email is saved without those spaces. It accepts only unaccented letters from A to Z, uppercase or lowercase, digits, and the characters
-._@+. Fiscalapi rejects any other character, such as ñ, an accented vowel, an apostrophe, or a space in the middle. The current email of the person you're updating doesn't count as a duplicate.
- Name
phoneNumber- Type
- string?
- Description
The person's phone number.
- Name
password- Type
- string?
- Description
The sign-in password for the dashboard. Optional: if you don't send it, or you send it as
nullor empty, the current password stays. With a value, it replaces the current password and follows the same rules as on create: at least 6 characters, with at least one uppercase letter from A to Z, one lowercase letter from a to z, one digit, and one character that isn't a letter or a digit. Only the tenant owner can change another person's password. See Tenant owner.
- Name
satTaxRegimeId- Type
- string?
- expandable
- Description
The person's tax regime when it acts as an issuer or recipient. SAT catalog
c_RegimenFiscal. Fiscalapi rejects any value that isn't in the catalog.- Type
- enum:
- Values
- "601""603""605"
- Name
satCfdiUseId- Type
- string?
- expandable
- Description
The person's CFDI use when it acts as a recipient. SAT catalog
c_UsoCFDI. Fiscalapi rejects any value that isn't in the catalog.- Type
- enum:
- Values
- "G01""G02""G03"
- Name
userTypeId- Type
- string?
- expandable
- Description
The person type, for informational purposes only. If you don't send it, or you send it as
null, Fiscalapi keeps the saved type. It acceptsT(Tenant) only if the person is alreadyT, and it rejects any other value outside this list.- Type
- enum:
- Values
- "C""U"
- Name
tin- Type
- string?
- Description
The person's RFC.
- Name
curp- Type
- string?
- Description
The person's CURP. Fiscalapi uses it in the payroll CFDI.
- Name
zipCode- Type
- string?
- Description
The person's postal code. It must match the one on their Constancia de Situación Fiscal. SAT catalog
c_CodigoPostal.
- Name
countryId- Type
- string?
- Description
The key of the person's country of tax residence when they reside abroad. SAT catalog
c_Pais(for example,USA). Fiscalapi rejects any value that isn't in the catalog. If the person is the recipient of an invoice by reference, Fiscalapi uses it as the recipient'sResidenciaFiscal.
- Name
foreignTin- Type
- string?
- Description
The person's tax ID number in their country of residence, when they reside abroad. Up to 40 characters. If the person is the recipient of an invoice by reference, Fiscalapi uses it as the recipient's
NumRegIdTrib.
- Name
base64Photo- Type
- string?
- Description
The person's profile photo, in base64.
- Name
taxPassword- Type
- string?
- Description
The password of the private key (.key) for the CSD certificates that the person saves in their profile. Up to 24 characters. Fiscalapi doesn't use it to seal invoices. When stamping, it uses the password of the registered tax files in the by-reference mode, or the one in
taxCredentialsin the by-value mode. If you don't send it, or you send it asnull, the saved password stays. With"", it's deleted.
- Name
availableBalance- Type
- number?
- Description
The person's available stamps. Read-only and for informational purposes only.
- Name
availableValidationBalance- Type
- number?
- Description
The person's available validation credits, separate from stamps. Read-only and for informational purposes only.
- Name
tenantId- Type
- string?
- Description
The ID of the tenant the person belongs to. Read-only and for informational purposes only.
Errors
In the messages, <id> is the person's ID and <valor> is the value you sent. The 403, 404, and 409 messages arrive in the details field of the response model.
| Status | When it happens | Message |
|---|---|---|
| 404 | The person doesn't exist in your tenant. | No such resource for the given Id: <id> |
| 403 | The requester isn't the owner, and the person being updated is the owner. | Solo el propietario de la cuenta puede modificar al propietario de la cuenta. |
| 403 | The requester is neither the owner nor the person, and the request changes the person's credentials. | Solo el propietario de la cuenta puede gestionar las credenciales de otra persona: correo, contraseña, API keys y certificados. |
| 409 | Another request modified the person while this one was being processed. | The person was modified by another request (for example, a failed sign-in). Reload it and try again. |
| 400 | The email already belongs to another person. It arrives as a validation failure on Email. | The email is already registered. |
| 400 | The email contains a character that isn't allowed. It arrives as a validation failure on Email, with errorCode InvalidUserName. The message names the rejected characters; the one in the table is for an ñ. | The email contains characters that are not allowed: 'ñ'. Allowed characters: abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+ |
| 400 | The password doesn't meet the rules. It arrives as a single validation failure on Password, with the errorCode of the first requirement it doesn't meet, for example PasswordTooShort or PasswordRequiresUpper. | A text that lists the password rules. |
| 400 | The tax regime doesn't exist in the catalog. It arrives as a validation failure on SatTaxRegimeId. | El régimen fiscal '<valor>' no existe en el catálogo c_RegimenFiscal del SAT. |
| 400 | The CFDI use doesn't exist in the catalog. It arrives as a validation failure on SatCfdiUseId. | El uso de CFDI '<valor>' no existe en el catálogo c_UsoCFDI del SAT. |
| 400 | The person type is T and the person isn't already of that type, or it's a value other than C and U. It arrives as a validation failure on UserTypeId. | UserTypeId debe ser uno de: C, U. 'T' está reservado y solo se permite cuando la persona ya es Tenant. |
| 400 | The country doesn't exist in the catalog. It arrives as a validation failure on CountryId. | El país '<valor>' no existe en el catálogo c_Pais del SAT. |
Request
curl --location --request PUT 'https://test.fiscalapi.com/api/v4/people/d7992a07-4161-48ba-b3bf-558790c9bcdb' \
--header 'X-TENANT-KEY: <tenant_key>' \
--header 'X-TIME-ZONE: America/Mexico_City' \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api_key>' \
--data-raw '{
"id": "d7992a07-4161-48ba-b3bf-558790c9bcdb",
"legalName": "ESCUELA KEMPER URGATE",
"email": "mi.nueva.empresa@gmail.com",
"password": "SuperPassword1234!",
"taxPassword": "MiSuperPass123!",
"phoneNumber": "3312345678",
"satTaxRegimeId": "601",
"satCfdiUseId": "G01",
"tin": "XAXX010101001",
"curp": "XEXX010101HNEXXXA4",
"zipCode": "44620",
"base64Photo": "base64..."
}'
Response
{
"data": {
"legalName": "ESCUELA KEMPER URGATE",
"email": "mi.nueva.empresa@gmail.com",
"phoneNumber": "3312345678",
"validTo": null,
"satTaxRegimeId": "601",
"satTaxRegime": {
"id": "601",
"description": "General de Ley Personas Morales",
"createdAt": "2024-08-10T15:46:30.373",
"updatedAt": null
},
"satCfdiUseId": "G01",
"satCfdiUse": {
"id": "G01",
"description": "Adquisición de mercancías.",
"createdAt": "2024-08-10T15:46:30.373",
"updatedAt": null
},
"userTypeId": "C",
"userType": {
"id": "C",
"description": "Cliente",
"createdAt": "2024-08-10T15:46:30.373",
"updatedAt": null
},
"manifestStatusId": "NotInvited",
"manifestStatus": {
"id": "NotInvited",
"description": "No invitado",
"createdAt": "2024-08-10T15:46:30.373",
"updatedAt": null
},
"tin": "XAXX010101001",
"zipCode": "44620",
"base64Photo": "base64...",
"taxPassword": null,
"curp": "XEXX010101HNEXXXA4",
"countryId": null,
"country": null,
"foreignTin": null,
"availableBalance": 0,
"committedBalance": 0,
"availableValidationBalance": 0,
"balances": [],
"tenantId": "102e5f13-e114-41dd-bea7-507fce177281",
"isOwner": false,
"id": "d7992a07-4161-48ba-b3bf-558790c9bcdb",
"createdAt": "2025-05-01T07:44:53.9725097",
"updatedAt": "2025-05-01T07:46:12.7809120"
},
"succeeded": true,
"message": "",
"details": "",
"httpStatusCode": 200
}
Delete an issuer
This endpoint deletes a person and, in the same operation, revokes their API keys: they stop authenticating (requests that use them return 401), they don't appear in the API keys list, and getting them by ID returns 404. You can't delete the tenant owner: the endpoint returns 403.
If another request modifies the person while this one is being processed, nothing is saved and the endpoint returns 409. Any write to the person counts, for example a successful or failed sign-in with their email, or a change to their subscription. Retrieve the person again and repeat the request.
Errors
In the message, <id> is the person's ID. The messages arrive in the details field of the response model.
| Status | When it happens | Message |
|---|---|---|
| 404 | The person doesn't exist in your tenant. | No such resource for the given Id: <id> |
| 409 | Another request modified the person while this one was being processed. | The person was modified by another request (for example, a failed sign-in). Reload it and try again. |
Request
curl --location --request DELETE 'https://test.fiscalapi.com/api/v4/people/d7992a07-4161-48ba-b3bf-558790c9bcdb' \
--header 'X-TENANT-KEY: <tenant_key>' \
--header 'X-TIME-ZONE: America/Mexico_City' \
--header 'X-API-KEY: <api_key>' \
--data ''
Response
{
"data": true,
"succeeded": true,
"message": "",
"details": "",
"httpStatusCode": 200
}