POST /v1/documents/credit-notes/full-refund
Scope: documents:write
Devolución total de una factura autorizada. El servidor carga comprador e ítems desde la factura original y construye la nota de crédito automáticamente. Solo envías tres campos.
Campos del body
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
originalAccessKey | string | Sí | Clave de acceso de 49 dígitos numéricos de la factura autorizada. |
reason | string | Sí | Motivo de la nota de crédito. Máx. 300 chars. Sin saltos de línea. |
issueDate | string | No | Fecha YYYY-MM-DD. Si se omite, se usa la fecha del día. No puede ser futura. |
Respuesta y errores
201: Documento nota de crédito (misma estructura que factura). Modo síncrono por defecto; ?async=true para asíncrono.
| HTTP | error.code | Cuándo |
|---|---|---|
| 401 | INVALID_API_KEY | API Key inválida. |
| 402 | TX_LIMIT_REACHED | Límite de transacciones. |
| 422 | ORIGINAL_DOCUMENT_NOT_FOUND | No existe factura con esa clave en la empresa. |
| 422 | ORIGINAL_DOCUMENT_NOT_AUTHORIZED | La factura referenciada no está en estado AUTHORIZED. |
| 422 | FUTURE_ISSUE_DATE | issueDate es futura. |
Ejemplo (body)
{
"originalAccessKey": "0703202601099123456000110010010000000024000000011",
"reason": "Devolución total — producto defectuoso"
} Ejemplo en JavaScript
const API_BASE_URL = 'https://live.faktur.com.ec';
const API_KEY = 'sk_...';
const API_SECRET = 'tu-secret';
const body = {
originalAccessKey: '0703202601099123456000110010010000000024000000011',
reason: 'Devolución total — producto defectuoso'
};
const response = await fetch(`${API_BASE_URL}/v1/documents/credit-notes/full-refund`, {
method: 'POST',
headers: {
'X-API-Key': API_KEY,
'X-API-Secret': API_SECRET,
'Content-Type': 'application/json'
},
body: JSON.stringify(body)
});
const json = await response.json();
if (json.success) {
console.log('Nota de crédito:', json.data.accessKey, json.data.status);
} else {
console.error('Error:', json.error?.code, json.error?.message);
}