Subir certificado digital (PFX/P12)
using System.Net.Http.Headers;var client = new HttpClient();var request = new HttpRequestMessage{ Method = HttpMethod.Post, RequestUri = new Uri("https://api.simplo.cl/api/v1/billing/empresa/certificado/pfx"), Headers = { { "X-Api-Key", "<X-Api-Key>" }, }, Content = new MultipartFormDataContent { new StringContent("") { Headers = { ContentType = new MediaTypeHeaderValue("application/octet-stream"), ContentDisposition = new ContentDispositionHeaderValue("form-data") { Name = "file", FileName = "file", } } }, new StringContent("example") { Headers = { ContentType = new MediaTypeHeaderValue("text/plain"), ContentDisposition = new ContentDispositionHeaderValue("form-data") { Name = "password", } } }, new StringContent("12345678-9") { Headers = { ContentType = new MediaTypeHeaderValue("text/plain"), ContentDisposition = new ContentDispositionHeaderValue("form-data") { Name = "rut_firmante", } } }, },};using (var response = await client.SendAsync(request)){ response.EnsureSuccessStatusCode(); var body = await response.Content.ReadAsStringAsync(); Console.WriteLine(body);}HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.simplo.cl/api/v1/billing/empresa/certificado/pfx")) .header("X-Api-Key", "<X-Api-Key>") .header("Content-Type", "multipart/form-data; boundary=---011000010111000001101001") .method("POST", HttpRequest.BodyPublishers.ofString("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"file\"\r\nContent-Type: application/octet-stream\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"password\"\r\nContent-Type: text/plain\r\n\r\nexample\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"rut_firmante\"\r\nContent-Type: text/plain\r\n\r\n12345678-9\r\n-----011000010111000001101001--\r\n")) .build();HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());System.out.println(response.body());const url = 'https://api.simplo.cl/api/v1/billing/empresa/certificado/pfx';const form = new FormData();form.append('file', 'file');form.append('password', 'example');form.append('rut_firmante', '12345678-9');
const options = {method: 'POST', headers: {'X-Api-Key': '<X-Api-Key>'}};
options.body = form;
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.simplo.cl/api/v1/billing/empresa/certificado/pfx \ --header 'Content-Type: multipart/form-data' \ --header 'X-Api-Key: <X-Api-Key>' \ --form file=@file \ --form password=example \ --form rut_firmante=12345678-9Sube un certificado digital en formato .pfx o .p12 vía
multipart/form-data. El servidor convierte el PFX internamente y
almacena el certificado encriptado; la clave privada nunca se expone
en la API. Requiere rol admin. Tamaño máximo del archivo: 50KB.
Beta privada: las escrituras vía API key están en beta privada (solicitar acceso: [email protected]); las API keys hoy operan en modo lectura.
Autenticación
Sección titulada «Autenticación»Cuerpo de la peticiónrequerido
Sección titulada «Cuerpo de la peticiónrequerido»object
Archivo .pfx o .p12 del certificado digital (max 50KB)
Password del certificado PFX
RUT del firmante (con dígito verificador)
Example
12345678-9Respuestas
Sección titulada «Respuestas»Certificado subido y procesado
object
Días restantes hasta vencimiento
Example
{ "rut_firmante": "12345678-9"}PFX inválido, password incorrecto, o archivo demasiado grande
object
Código de error máquina-legible
Mensaje descriptivo del error. Este es el campo canónico para clientes nuevos.
Alias de compatibilidad de message mantenido hacia atrás.
object
Campo con error (dot notation para nested)
Código de validación
Mensaje descriptivo
Acción recomendada para el cliente
Severidad opcional del error
Contexto estructurado opcional para debugging
object
Example
{ "code": "VALIDATION_ERROR", "message": "Error de validacion en los campos enviados", "details": [ { "field": "receptor.rut", "code": "INVALID_RUT", "message": "RUT invalido: digito verificador no coincide" } ], "severity": "critical"}Token o API key inválido o ausente
object
Código de error máquina-legible
Mensaje descriptivo del error. Este es el campo canónico para clientes nuevos.
Alias de compatibilidad de message mantenido hacia atrás.
object
Campo con error (dot notation para nested)
Código de validación
Mensaje descriptivo
Acción recomendada para el cliente
Severidad opcional del error
Contexto estructurado opcional para debugging
object
Example
{ "code": "VALIDATION_ERROR", "message": "Error de validacion en los campos enviados", "details": [ { "field": "receptor.rut", "code": "INVALID_RUT", "message": "RUT invalido: digito verificador no coincide" } ], "severity": "critical"}Requiere rol admin
object
Código de error máquina-legible
Mensaje descriptivo del error. Este es el campo canónico para clientes nuevos.
Alias de compatibilidad de message mantenido hacia atrás.
object
Campo con error (dot notation para nested)
Código de validación
Mensaje descriptivo
Acción recomendada para el cliente
Severidad opcional del error
Contexto estructurado opcional para debugging
object
Example
{ "code": "VALIDATION_ERROR", "message": "Error de validacion en los campos enviados", "details": [ { "field": "receptor.rut", "code": "INVALID_RUT", "message": "RUT invalido: digito verificador no coincide" } ], "severity": "critical"}