Skip to main content
Creates a new product or service in the organization’s catalog for CFDI invoicing.

Authentication

Requires a valid Bearer token. The authenticated user must be an owner or admin of the organization.

Path Parameters

ParameterTypeRequiredDescription
organizationIdstring (UUID)YesOrganization ID

Request Body

FieldTypeRequiredDefaultDescription
descriptionstringYesProduct or service description
productKeyintegerYesSAT product/service key (clave de producto o servicio)
pricenumberYesUnit price
taxIncludedbooleanNofalseWhether taxes are already included in the price
taxabilitystringNo"01"SAT taxability code (objeto de impuesto)
taxesarrayNo[]List of applicable taxes
localTaxesarrayNo[]List of applicable local taxes
unitKeystringNo"H87"SAT unit of measure key (clave de unidad)
unitNamestringNo"Elemento"Unit of measure name
skustringNoInternal product SKU or identifier
livemodebooleanNotrueWhether this is a live mode product

Tax Object

FieldTypeRequiredDescription
typestringYesTax type (e.g. "IVA", "IEPS")
ratenumberYesTax rate as a decimal (e.g. 0.16)
withholdingbooleanNoWhether it’s a withholding tax
factorstringNoFactor type (e.g. "Tasa")

Example Request

curl -X POST http://localhost:3001/api/organizations/550e8400-e29b-41d4-a716-446655440000/products \
  -H "Authorization: Bearer <your_token>" \
  -H "Content-Type: application/json" \
  -d '{
    "description": "Ukelele",
    "productKey": 60131324,
    "price": 345.6,
    "taxIncluded": true,
    "taxability": "01",
    "taxes": [{ "type": "IVA", "rate": 0.16 }],
    "localTaxes": [],
    "unitKey": "H87",
    "unitName": "Elemento",
    "sku": "UKL-001"
  }'

Example Response

{
  "id": "590ce6c56d04f840aa8438af",
  "organizationId": "550e8400-e29b-41d4-a716-446655440000",
  "livemode": true,
  "description": "Ukelele",
  "productKey": 60131324,
  "price": 345.6,
  "taxIncluded": true,
  "taxability": "01",
  "taxes": [{ "type": "IVA", "rate": 0.16 }],
  "localTaxes": [],
  "unitKey": "H87",
  "unitName": "Elemento",
  "sku": "UKL-001",
  "createdAt": "2025-01-26T10:00:00Z",
  "updatedAt": "2025-01-26T10:00:00Z"
}

Common Errors

400 Bad Request

Missing required fields or invalid values.
{
  "statusCode": 400,
  "message": [
    "productKey must be a positive integer",
    "price must be a positive number"
  ]
}

409 Conflict

A product with the same SKU already exists in this organization.
{
  "statusCode": 409,
  "message": "A product with SKU \"UKL-001\" already exists in this organization"
}