Emitir PDF
Factura de Crédito Electrónica C (FCE)
Factura de Crédito Electrónica C (FCE)
Template de Factura de Crédito Electrónica C (FCE).
Requisitos previos
Para poder emitir este PDF, primero necesitarás:
Nombre del template
invoice-fce-c
Parámetros
file_namestring
Nombre del archivo PDF.send_tostringOpcional
Email opcional para enviar el comprobante adjunto.templateobject
Template a utilizar para la generación del PDF.namestring
Nombre del template.paramsobject
Parámetros del template.voucher_numberinteger
Número de comprobante.sales_pointinteger
Punto de venta.issue_datestring
Fecha de emisión (DD/MM/YYYY).cae_due_datestring
Vencimiento CAE (DD/MM/YYYY).issuer_cuitinteger
CUIT emisor (11 dígitos).caeinteger
CAE (14 dígitos).issuer_business_namestring
Razón social emisor.issuer_addressstring
Domicilio emisor.issuer_iva_conditionstring
Condición IVA emisor.issuer_gross_incomestring
Ingresos brutos.issuer_activity_start_datestring
Inicio actividades (DD/MM/YYYY).receiver_namestring
Nombre receptor.receiver_addressstring
Domicilio receptor.receiver_document_typeinteger
Tipo documento receptor.receiver_document_numberinteger
Número documento receptor.receiver_iva_conditionstring
Condición IVA receptor.sale_conditionstring
Condición de venta.currency_idstring
Código de moneda. Para pesos argentinos, usar ARS.currency_ratenumber
Cotización de moneda (>0). Para pesos argentinos (ARS) el valor es 1.conceptinteger
Concepto AFIP (1=Productos, 2=Servicios, 3=Productos y Servicios).itemsobject[]
Detalle de ítems.vat_amountnumber
Importe IVA.tributes_amountnumber
Importe tributos.total_amountnumber
Importe total.billing_fromstringOpcional
Fecha desde. Requerido si concept=2 o 3.billing_tostringOpcional
Fecha hasta. Requerido si concept=2 o 3.payment_due_datestringOpcional
Vencimiento pago. Requerido si concept=2 o 3 y obligatorio en FCE.net_amount_taxednumber
Neto gravado.net_amount_untaxednumber
Neto no gravado.exempt_amountnumber
Importe exento.payment_methodstring
Medio de pago (obligatorio en FCE).invoice_footer_notestringOpcional
Opcional. Texto libre de nota al pie del comprobante. Se muestra después de los importes y antes del QR.Solicitud
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.ArrayList;
// Deben cambiar los datos por los que correspondan.
Map<String, Object> data = new LinkedHashMap<>();
data.put("file_name", "invoice_name.pdf");
data.put("send_to", "cliente@empresa.com");
Map<String, Object> template = new LinkedHashMap<>();
data.put("template", template);
template.put("name", "invoice-fce-c");
Map<String, Object> params = new LinkedHashMap<>();
template.put("params", params);
params.put("voucher_number", 97);
params.put("sales_point", 1);
params.put("issue_date", "27/02/2026");
params.put("cae_due_date", "12/03/2026");
params.put("issuer_cuit", 30123456789);
params.put("cae", 12345678901234);
params.put("issuer_business_name", "EMPRESA IMAGINARIA S.A.");
params.put("issuer_address", "Calle Falsa 123");
params.put("issuer_iva_condition", "Responsable Inscripto");
params.put("issuer_gross_income", "CM 901-123456-7");
params.put("issuer_activity_start_date", "01/01/2020");
params.put("receiver_name", "CONSUMIDOR FINAL");
params.put("receiver_address", "-");
params.put("receiver_document_type", 99);
params.put("receiver_document_number", 0);
params.put("receiver_iva_condition", "Consumidor Final");
params.put("sale_condition", "Contado");
params.put("currency_id", "ARS");
params.put("currency_rate", 1);
params.put("concept", 1);
List<Object> items = new ArrayList<Object>();
params.put("items", items);
Map<String, Object> items0 = new LinkedHashMap<>();
items.add(items0);
items0.put("code", "001");
items0.put("description", "Servicio mensual");
items0.put("quantity", 1);
items0.put("unit_price", 121);
items0.put("subtotal", 121);
params.put("vat_amount", 21);
params.put("tributes_amount", 0);
params.put("total_amount", 121);
params.put("billing_from", "01/02/2026");
params.put("billing_to", "28/02/2026");
params.put("payment_due_date", "10/03/2026");
params.put("net_amount_taxed", 100);
params.put("net_amount_untaxed", 0);
params.put("exempt_amount", 0);
params.put("payment_method", "Transferencia");
// Creamos un cliente HTTP para llamar a la API
HttpClient client = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(20))
.build();
// Realizamos la llamada a la API
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String dataJSON = gson.toJson(data);
HttpRequest.Builder request = HttpRequest.newBuilder()
.uri(new URI("https://app.afipsdk.com/api/v1/pdfs"))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(dataJSON));
// Reemplazar con tu access_token obtenido de https://app.afipsdk.com
String accessToken = "TU_TOKEN_AQUI";
request.header("Authorization", "Bearer "+ accessToken);
HttpResponse<String> requestResponse = client.send(request.build(), HttpResponse.BodyHandlers.ofString());
// En caso de error lo mostramos por consola
if (requestResponse.statusCode() >= 400) {
JsonElement errorResponse = gson.fromJson(requestResponse.body(), JsonElement.class);
System.out.println("Error en la request: " + gson.toJson(errorResponse));
return;
}
// Convertimos la respuesta en un objeto
JsonObject jsonObject = gson.fromJson(requestResponse.body(), JsonElement.class).getAsJsonObject();
// Mostramos la respuesta por consola
System.out.println(gson.toJson(jsonObject));Respuesta
{
"id": "019ca6aa-7f1b-70d2-a9c3-1f5e8b62d4c1",
"file": "https://afip-sdk-pdf-storage.s3.amazonaws.com/019ca6aa-7f1b-70d2-a9c3-1f5e8b62d4c1.pdf",
"file_expiration": "2026-03-01T20:00:00.000Z",
"file_name": "invoice_name.pdf",
"created_at": "2026-02-28T20:00:00.000Z"
}