Crear producto
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/productos"), Headers = { { "X-Api-Key", "<X-Api-Key>" }, }, Content = new StringContent("{ \"codigo\": \"SERV-001\", \"nombre\": \"Hora de consultoria TI\", \"precio_unitario\": 50000, \"unidad\": \"HR\", \"es_exento\": false, \"categoria\": \"Servicios\" }") { Headers = { ContentType = new MediaTypeHeaderValue("application/json") } }};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/productos")) .header("X-Api-Key", "<X-Api-Key>") .header("Content-Type", "application/json") .method("POST", HttpRequest.BodyPublishers.ofString("{ \"codigo\": \"SERV-001\", \"nombre\": \"Hora de consultoria TI\", \"precio_unitario\": 50000, \"unidad\": \"HR\", \"es_exento\": false, \"categoria\": \"Servicios\" }")) .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/productos';const options = { method: 'POST', headers: {'X-Api-Key': '<X-Api-Key>', 'Content-Type': 'application/json'}, body: '{"codigo":"SERV-001","nombre":"Hora de consultoria TI","precio_unitario":50000,"unidad":"HR","es_exento":false,"categoria":"Servicios"}'};
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/productos \ --header 'Content-Type: application/json' \ --header 'X-Api-Key: <X-Api-Key>' \ --data '{ "codigo": "SERV-001", "nombre": "Hora de consultoria TI", "precio_unitario": 50000, "unidad": "HR", "es_exento": false, "categoria": "Servicios" }'Crea un producto o servicio en el catálogo de la empresa. El codigo
(si se envía) debe ser único dentro de la empresa.
Beta privada: las escrituras vía API key están en beta privada (solicitar acceso: hola@simplo.cl); 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
Precio en CLP (entero, sin decimales)
Example
{ "codigo": "SERV-001", "nombre": "Hora de consultoria TI", "precio_unitario": 50000, "unidad": "HR", "es_exento": false, "categoria": "Servicios"}Respuestas
Sección titulada «Respuestas»Producto creado
object
Example
{ "codigo": "PROD-001", "nombre": "Hora de consultoria TI", "precio_unitario": 50000, "unidad": "HR"}Datos inválidos (nombre vacio, precio negativo)
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"}Producto con este código ya existe para la empresa
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"}