Skip to main content
POST
/
v1
/
fiscal_profiles
Error
A valid request URL is required to generate request examples
{
  "object": "fiscal_profile",
  "id": "obj_2P9K3sample",
  "rfc": "XAXX010101000",
  "legal_name": "string",
  "tax_regime": "string",
  "zip": "string",
  "csd": {
    "serial": "string",
    "valid_from": "string",
    "valid_to": "string",
    "rfc": "XAXX010101000"
  },
  "status": "requires_action",
  "has_fiel": true,
  "manifest_status": "pending_signature",
  "manifest_signed_at": "2026-07-10T18:25:43Z",
  "next_actions": [
    {
      "type": "string",
      "message": "string",
      "endpoint": "string",
      "requires": [
        "string"
      ]
    }
  ],
  "pending_actions": [
    {
      "type": "string",
      "message": "string",
      "endpoint": "string",
      "requires": [
        "string"
      ]
    }
  ],
  "metadata": {},
  "brand_color": "string",
  "has_logo": true,
  "livemode": false,
  "created_at": "2026-07-10T18:25:43Z",
  "updated_at": "2026-07-10T18:25:43Z"
}
{
"type": "https://errors.invoiceapi.mx/auth_unauthorized",
"title": "Authentication required",
"status": 401,
"code": "auth.unauthorized",
"detail": "Missing or invalid API key.",
"remediation": "Send `Authorization: Bearer sk_test_...` (or sk_live_...) with a valid API key.",
"doc_url": "/docs/errors#auth-unauthorized",
"request_id": "req_2P9K3sample"
}
{
"type": "https://errors.invoiceapi.mx/fiscal_profile_in_use",
"title": "Fiscal profile is in use",
"status": 409,
"code": "fiscal_profile.in_use",
"detail": "The profile is referenced by issued invoices.",
"remediation": "Profiles with invoices are retained; rotate the CSD instead of deleting.",
"doc_url": "/docs/errors#fiscal_profile-in_use",
"request_id": "req_2P9K3sample"
}
{
"type": "https://errors.invoiceapi.mx/fiscal_profile_invalid_csd",
"title": "Invalid CSD certificate or password",
"status": 422,
"code": "fiscal_profile.invalid_csd",
"detail": "The CSD .cer/.key pair could not be opened.",
"remediation": "Verify cer_base64 is the .cer, key_base64 is the .key, and the password.",
"doc_url": "/docs/errors#fiscal_profile-invalid_csd",
"request_id": "req_2P9K3sample"
}
{
"type": "https://errors.invoiceapi.mx/rate_limit_exceeded",
"title": "Rate limit exceeded",
"status": 429,
"code": "rate_limit.exceeded",
"detail": "Too many requests for this key + request class (reads and writes are limited separately).",
"remediation": "Back off and retry after the number of seconds in the Retry-After header; batch work or lower your request rate.",
"doc_url": "/docs/errors#rate_limit-exceeded",
"request_id": "req_2P9K3sample"
}
{
"type": "https://errors.invoiceapi.mx/internal_error",
"title": "Internal server error",
"status": 500,
"code": "internal.error",
"detail": "An unexpected error occurred.",
"remediation": "Retry later; contact support with the request_id if it persists.",
"doc_url": "/docs/errors#internal-error",
"request_id": "req_2P9K3sample"
}

Authorizations

Authorization
string
header
required

API key: Authorization: Bearer sk_test_... or sk_live_....

Headers

Invoice-Version
string

Pin a dated API release (Stripe-style). Omit to use the current version. An unknown value returns 400 request.invalid_version. Echoed back on every response.

Example:

"2026-07-10"

Invoice-Account
string

Connect: act on behalf of one of your connected accounts (its acct_…/org_… id). Omit to act as your own organization. Not honored on /v1/api_keys.

Example:

"org_2P9connectedacct"

Idempotency-Key
string

Safely retry any POST. The first response is stored for 24h and replayed byte-for-byte for identical retries (the replay adds an idempotent-replayed: true header). Reusing the key with a different body is 409 idempotency.key_reuse; an in-flight duplicate is 409 idempotency.key_processing. This makes retrying a 502/429 safe — no duplicate stamp.

Example:

"a1b2c3d4-e5f6-4789-8abc-1234567890ab"

Body

Issuer legal name (razón social).

tax_regime
string
required

c_RegimenFiscal code, e.g. "601".

zip
string
required

Issuer place-of-issue ZIP (LugarExpedicion), 5 digits.

csd_cer
file
required

The raw CSD certificate (.cer) file — no base64 needed.

csd_key
file
required

The raw CSD private-key (.key) file — no base64 needed.

csd_password
string
required

CSD private-key password ("contraseña de la clave privada").

fiel_cer
file

The raw FIEL certificate (.cer) file — no base64 needed.

fiel_key
file

The raw FIEL private-key (.key) file — no base64 needed.

fiel_password
string

FIEL private-key password (only if uploading a FIEL).

brand_color
string

PDF accent color as #RRGGBB, e.g. "#0B5FFF".

The raw issuer logo image (PNG or JPEG) — embedded in the PDF; no data URL needed.

metadata
string

Integrator-owned metadata as a JSON string, e.g. {"order_id":"123"}.

Response

Default Response

object
enum<string>
required

Always "fiscal_profile".

Available options:
fiscal_profile
id
string
required

Fiscal-profile id, e.g. "fp_2P9K3sample".

rfc
string
required

Issuer RFC, derived from the CSD certificate.

Issuer legal name (razón social).

tax_regime
string
required

c_RegimenFiscal code of the issuer, e.g. "601".

zip
string
required

Issuer fiscal-domicile ZIP (LugarExpedicion).

csd
object
required

Public metadata of the stored CSD (never the private key).

status
enum<string>
required

Derived readiness state. "requires_action": the carta manifiesto is not yet signed, so this profile CANNOT stamp CFDIs. "active": the manifiesto is signed and the profile is authorized to stamp for its RFC. Derived from manifest_status at serialization time.

Available options:
requires_action,
active
has_fiel
boolean
required

True when a FIEL (e.firma) is stored (used to sign the carta manifiesto and for descarga masiva).

manifest_status
enum<string>
required

Carta-manifiesto signing state.

Available options:
pending_signature,
signed
manifest_signed_at
string | null
required

When the carta manifiesto was signed (ISO-8601 UTC), or null if unsigned.

next_actions
object[]
required

Actions to make this profile active (identical content to pending_actions). Empty when active.

pending_actions
object[]
required

Outstanding actions before this profile can stamp CFDIs (identical content to next_actions). Empty when active.

metadata
object
required

Integrator-owned key-value map echoed back.

brand_color
string | null
required

PDF accent color (#RRGGBB), or null if unset.

Whether a PDF logo is stored (the raw data URL is not echoed to keep responses small).

livemode
boolean
required

True if this profile was created with a live-mode key.

created_at
string
required

Creation timestamp, ISO-8601 UTC.

updated_at
string
required

Last-update timestamp, ISO-8601 UTC.