Faktur

POST /v1/documents/credit-notes/partial-refund

Scope: documents:write

Devolución parcial de líneas específicas de una factura autorizada. El servidor resuelve cada línea por índice o por código y construye la nota de crédito.

Campos del body

CampoTipoObligatorioDescripción
originalAccessKeystringClave de acceso de 49 dígitos de la factura autorizada.
reasonstringMotivo. Máx. 300 chars.
linesarrayAl menos 1 línea a devolver. Cada elemento: lineIndex o mainCode, y quantity.
issueDatestringNoYYYY-MM-DD. Si se omite, se usa la fecha del día.

Por cada elemento en lines: usar lineIndex o mainCode (no ambos, no ninguno). quantity es obligatorio y no puede superar la cantidad original de esa línea.

Respuesta y errores

201: Nota de crédito. Modo síncrono por defecto; ?async=true para asíncrono.

HTTPerror.codeCuándo
422ORIGINAL_DOCUMENT_NOT_FOUNDFactura no encontrada.
422ORIGINAL_DOCUMENT_NOT_AUTHORIZEDFactura no está AUTHORIZED.
422INVALID_LINE_REFERENCELínea sin lineIndex ni mainCode.
422INVALID_LINE_INDEXlineIndex fuera de rango.
422LINE_NOT_FOUNDmainCode no existe en la factura original.
422QUANTITY_INVALIDquantity ≤ 0.
422QUANTITY_EXCEEDS_ORIGINALquantity mayor que la cantidad original.
422DUPLICATE_LINE_INDEXlineIndex repetido en lines.

Ejemplo por índice de línea

{
  "originalAccessKey": "0703202601099123456000110010010000000024000000011",
  "reason": "Devolución parcial — ítems defectuosos",
  "lines": [
    { "lineIndex": 0, "quantity": 2 },
    { "lineIndex": 2, "quantity": 1 }
  ]
}

Ejemplo por código de producto

{
  "originalAccessKey": "0703202601099123456000110010010000000024000000011",
  "reason": "Devolución por código de producto",
  "lines": [
    { "mainCode": "PROD-001", "quantity": 3 },
    { "mainCode": "SRV-CONS", "quantity": 1 }
  ]
}

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 parcial — ítems defectuosos',
  lines: [
    { lineIndex: 0, quantity: 2 },
    { lineIndex: 2, quantity: 1 }
  ]
};

const response = await fetch(`${API_BASE_URL}/v1/documents/credit-notes/partial-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);
}