Update a product partially (deprecated)
Scopeproducts:writeUpdates only the fields present in the body, leaving every other field of the product as it
is — in particular main_tax, irpf_rate and equivalence_surcharge_rate, which PUT
resets.
- Null vs omitted: a field sent as
nullis cleared, which is different from omitting it (seePatchProductRequest). The result goes through the same validation asPUT. - Deprecated: use
PATCH /v1/companies/{company_id}/products/{product_id}, which behaves identically.
Retires on 9 December 2026. See the migration guide for what moved where and what changes when you switch.
Keys are prefixed beel_sk_, and each one carries the scopes it was created with: a key
short of the scope an operation needs is answered 403. The scope an operation requires
is shown next to its title, and the full catalogue lives in the Scopes reference.
Keys are created from the BeeL dashboard. They are secret credentials: do not share them or commit them to source control.
In: header
Path Parameters
Product unique UUID
uuidUnique alphanumeric product code. Send null to clear it.
^[a-zA-Z0-9_-]*$length <= 50Product/service name. Cannot be cleared.
length <= 255Detailed description. Send null to clear it.
"PRODUCT" | "SERVICE" | "CONSULTING" | "SOFTWARE" | "TRAINING" | "OTHER"Suggested default price. Send null to clear it.
0.00010 <= valueUnit of measure. Send null to clear it.
length <= 50Equivalence surcharge percentage. Send null to state that none
applies (equivalent to 0).
The merged result must be coherent with the regime key: if this
PATCH does not send main_tax.regime_key, the stored regime is
adjusted automatically (18 when the merged surcharge is > 0,
01 when it is not). With an explicit regime_key in this PATCH,
an incoherent combination is rejected with a 422
(SURCHARGE_REQUIRES_REGIME / REGIME_REQUIRES_SURCHARGE).
0.010 <= value <= 100IRPF withholding percentage. Send null to state that none
applies (equivalent to 0).
The rate must be one of IrpfPercentage (INVALID_IRPF otherwise) and one
the company can bear, the same check as an invoice line (see
WithholdingOptions in the tax configuration): an entity gets the rates of
individuals rejected with IRPF_RATE_NOT_FOR_CORPORATE_ISSUER, and an individual gets
9.5 rejected with IRPF_RATE_ONLY_FOR_CORPORATE_ISSUER.
0.010 <= value <= 100Indicates whether the product is active.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X PATCH "https://app.beel.es/api/v1/products/497f6eca-6276-4993-bfeb-53cbbbba6f08" \ -H "Content-Type: application/json" \ -d '{}'{
"success": true,
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"code": "SERV-001",
"name": "Technical consulting",
"description": "Specialized technical consulting services in web development",
"category": "CONSULTING",
"default_price": 85.5,
"unit": "hours",
"main_tax": {
"type": "IVA",
"percentage": 21,
"regime_key": "01"
},
"equivalence_surcharge_rate": 5.2,
"irpf_rate": 15,
"active": true,
"created_at": "2025-01-18T10:30:00Z",
"updated_at": "2025-01-18T15:45:30Z"
},
"meta": {
"timestamp": "2025-01-15T10:30:00Z",
"request_id": "4bf92f3577b34da6a3ce929d0e0e4736"
}
}{
"success": false,
"error": {
"code": "BAD_REQUEST",
"message": "Invalid request"
},
"meta": {
"timestamp": "2025-01-15T10:30:00Z",
"request_id": "4bf92f3577b34da6a3ce929d0e0e4736"
}
}{
"success": false,
"error": {
"code": "UNAUTHORIZED",
"message": "Authentication is required to access this resource"
},
"meta": {
"timestamp": "2025-01-15T10:30:00Z",
"request_id": "4bf92f3577b34da6a3ce929d0e0e4736"
}
}{
"success": false,
"error": {
"code": "FORBIDDEN",
"message": "You do not have permission to access this resource"
},
"meta": {
"timestamp": "2025-01-15T10:30:00Z",
"request_id": "4bf92f3577b34da6a3ce929d0e0e4736"
}
}{
"success": false,
"error": {
"code": "INVOICE_NOT_FOUND",
"message": "Invoice not found"
},
"meta": {
"timestamp": "2025-01-15T10:30:00Z",
"request_id": "4bf92f3577b34da6a3ce929d0e0e4736"
}
}{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "The provided data is not valid",
"details": {
"field": "specific error message"
}
},
"meta": {
"timestamp": "2025-01-15T10:30:00Z",
"request_id": "4bf92f3577b34da6a3ce929d0e0e4736"
},
"type": "https://docs.beel.es/errors/INVOICE_NO_LINES",
"title": "INVOICE_NO_LINES",
"detail": "The invoice must have at least one line",
"instance": "/v1/invoices/abc-123"
}{
"success": false,
"error": {
"code": "UNPROCESSABLE_ENTITY",
"message": "Data cannot be processed",
"details": {
"field": "Specific error description"
}
},
"meta": {
"timestamp": "2025-01-15T10:30:00Z",
"request_id": "4bf92f3577b34da6a3ce929d0e0e4736"
}
}{
"success": false,
"error": {
"code": "INTERNAL_ERROR",
"message": "Internal server error"
},
"meta": {
"timestamp": "2025-01-15T10:30:00Z",
"request_id": "4bf92f3577b34da6a3ce929d0e0e4736"
}
}{
"success": false,
"error": {
"code": "UNSUPPORTED_MEDIA_TYPE",
"message": "Unsupported media type: text/plain. Supported: application/json"
},
"meta": {
"timestamp": "2025-01-15T10:30:00Z",
"request_id": "4bf92f3577b34da6a3ce929d0e0e4736"
}
}Replace a product (deprecated) PUT
Replaces an existing product with the body you send. - **Not a partial update:** leaving out `main_tax`, `equivalence_surcharge_rate` or `irpf_rate` resets them to the creation defaults (IVA 21%, 0% and 0%), so send the product complete. To change only some fields, use `PATCH /v1/companies/{company_id}/products/{product_id}`. - **Deprecated:** this route will be retired on the date announced in its `Sunset` response header. The canonical form has a single update verb, `PATCH /v1/companies/{company_id}/products/{product_id}`, which is not a drop-in replacement for this one: it changes only the fields present in the body and resets nothing on its own. To reproduce a total replacement, send every field and pass `null` in the ones you want cleared. **Retires on 9 December 2026.** See the [migration guide](https://docs.beel.es/changelog/resources-under-the-nif) for what moved where and what changes when you switch.
Delete a product (deprecated) DELETE
Deletes a product from the catalog. - **Deprecated:** use `DELETE /v1/companies/{company_id}/products/{product_id}`, which behaves identically. **Retires on 9 December 2026.** See the [migration guide](https://docs.beel.es/changelog/resources-under-the-nif) for what moved where and what changes when you switch.