La Pyme SDK
import { Lapyme } from "lapyme";
const lapyme = new Lapyme({
bearerAuth: process.env["LAPYME_API_KEY"] ?? "",
});
const invoice = await lapyme.sales.invoice({
saleId: "9c692e8b-0f9a-4f7c-8b99-061a2eb188ae",
idempotencyKey: crypto.randomUUID(),
});curl --request POST \
--url https://api.lapyme.com.ar/api/v1/sales/{sale_id}/invoice \
--header 'Authorization: Bearer <token>' \
--header 'Idempotency-Key: <idempotency-key>'import requests
url = "https://api.lapyme.com.ar/api/v1/sales/{sale_id}/invoice"
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>"
}
response = requests.post(url, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Idempotency-Key': '<idempotency-key>', Authorization: 'Bearer <token>'}
};
fetch('https://api.lapyme.com.ar/api/v1/sales/{sale_id}/invoice', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.lapyme.com.ar/api/v1/sales/{sale_id}/invoice",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Idempotency-Key: <idempotency-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.lapyme.com.ar/api/v1/sales/{sale_id}/invoice"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.lapyme.com.ar/api/v1/sales/{sale_id}/invoice")
.header("Idempotency-Key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.lapyme.com.ar/api/v1/sales/{sale_id}/invoice")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"request_id": "<string>",
"data": {
"sale_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "issued",
"invoice_status": "not_required",
"pdf_status": "pending",
"invoice_number": 123,
"formatted_invoice_number": "<string>",
"idempotent_replay": true,
"failure_code": "<string>",
"retryable": true
},
"warnings": [
"<unknown>"
]
}{
"request_id": "<string>",
"data": {
"sale_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "issued",
"invoice_status": "not_required",
"pdf_status": "pending",
"invoice_number": 123,
"formatted_invoice_number": "<string>",
"idempotent_replay": true,
"failure_code": "<string>",
"retryable": true
},
"warnings": [
"<unknown>"
]
}{
"request_id": "req_error_1",
"error": {
"type": "invalid_request_error",
"code": "INVALID_REQUEST",
"message": "Sale ID o Idempotency-Key inválidos",
"retryable": false,
"details": []
}
}{
"request_id": "req_error_1",
"error": {
"type": "invalid_request_error",
"code": "INVALID_REQUEST",
"message": "API key faltante o inválida",
"retryable": false,
"details": []
}
}{
"request_id": "req_error_1",
"error": {
"type": "invalid_request_error",
"code": "INVALID_REQUEST",
"message": "Scope sales:write faltante",
"retryable": false,
"details": []
}
}{
"request_id": "req_error_1",
"error": {
"type": "invalid_request_error",
"code": "INVALID_REQUEST",
"message": "Venta no encontrada en la organización",
"retryable": false,
"details": []
}
}{
"request_id": "req_error_1",
"error": {
"type": "invalid_request_error",
"code": "INVALID_REQUEST",
"message": "La venta ya fue facturada, su estado no permite facturar o la key fue reutilizada con otra solicitud",
"retryable": false,
"details": []
}
}{
"request_id": "req_error_1",
"error": {
"type": "invalid_request_error",
"code": "INVALID_REQUEST",
"message": "Configuración fiscal faltante, estado fiscal inválido o rechazo final previo al envío",
"retryable": false,
"details": []
}
}{
"request_id": "req_rate_limit_1",
"error": {
"type": "rate_limit_error",
"code": "RATE_LIMITED",
"message": "The organization request limit was reached. Try again later.",
"retryable": true,
"details": []
}
}{
"request_id": "req_error_1",
"error": {
"type": "invalid_request_error",
"code": "INVALID_REQUEST",
"message": "Error interno del servidor",
"retryable": false,
"details": []
}
}{
"request_id": "req_error_1",
"error": {
"type": "invalid_request_error",
"code": "INVALID_REQUEST",
"message": "Dependencia temporalmente no disponible",
"retryable": false,
"details": []
}
}Facturar una venta existente
Factura la venta existente identificada por saleId sin crear otra venta. Usá esta ruta para ventas importadas que ya existen en La Pyme. Requiere Idempotency-Key.
POST
/
api
/
v1
/
sales
/
{sale_id}
/
invoice
La Pyme SDK
import { Lapyme } from "lapyme";
const lapyme = new Lapyme({
bearerAuth: process.env["LAPYME_API_KEY"] ?? "",
});
const invoice = await lapyme.sales.invoice({
saleId: "9c692e8b-0f9a-4f7c-8b99-061a2eb188ae",
idempotencyKey: crypto.randomUUID(),
});curl --request POST \
--url https://api.lapyme.com.ar/api/v1/sales/{sale_id}/invoice \
--header 'Authorization: Bearer <token>' \
--header 'Idempotency-Key: <idempotency-key>'import requests
url = "https://api.lapyme.com.ar/api/v1/sales/{sale_id}/invoice"
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>"
}
response = requests.post(url, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Idempotency-Key': '<idempotency-key>', Authorization: 'Bearer <token>'}
};
fetch('https://api.lapyme.com.ar/api/v1/sales/{sale_id}/invoice', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.lapyme.com.ar/api/v1/sales/{sale_id}/invoice",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Idempotency-Key: <idempotency-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.lapyme.com.ar/api/v1/sales/{sale_id}/invoice"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.lapyme.com.ar/api/v1/sales/{sale_id}/invoice")
.header("Idempotency-Key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.lapyme.com.ar/api/v1/sales/{sale_id}/invoice")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"request_id": "<string>",
"data": {
"sale_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "issued",
"invoice_status": "not_required",
"pdf_status": "pending",
"invoice_number": 123,
"formatted_invoice_number": "<string>",
"idempotent_replay": true,
"failure_code": "<string>",
"retryable": true
},
"warnings": [
"<unknown>"
]
}{
"request_id": "<string>",
"data": {
"sale_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "issued",
"invoice_status": "not_required",
"pdf_status": "pending",
"invoice_number": 123,
"formatted_invoice_number": "<string>",
"idempotent_replay": true,
"failure_code": "<string>",
"retryable": true
},
"warnings": [
"<unknown>"
]
}{
"request_id": "req_error_1",
"error": {
"type": "invalid_request_error",
"code": "INVALID_REQUEST",
"message": "Sale ID o Idempotency-Key inválidos",
"retryable": false,
"details": []
}
}{
"request_id": "req_error_1",
"error": {
"type": "invalid_request_error",
"code": "INVALID_REQUEST",
"message": "API key faltante o inválida",
"retryable": false,
"details": []
}
}{
"request_id": "req_error_1",
"error": {
"type": "invalid_request_error",
"code": "INVALID_REQUEST",
"message": "Scope sales:write faltante",
"retryable": false,
"details": []
}
}{
"request_id": "req_error_1",
"error": {
"type": "invalid_request_error",
"code": "INVALID_REQUEST",
"message": "Venta no encontrada en la organización",
"retryable": false,
"details": []
}
}{
"request_id": "req_error_1",
"error": {
"type": "invalid_request_error",
"code": "INVALID_REQUEST",
"message": "La venta ya fue facturada, su estado no permite facturar o la key fue reutilizada con otra solicitud",
"retryable": false,
"details": []
}
}{
"request_id": "req_error_1",
"error": {
"type": "invalid_request_error",
"code": "INVALID_REQUEST",
"message": "Configuración fiscal faltante, estado fiscal inválido o rechazo final previo al envío",
"retryable": false,
"details": []
}
}{
"request_id": "req_rate_limit_1",
"error": {
"type": "rate_limit_error",
"code": "RATE_LIMITED",
"message": "The organization request limit was reached. Try again later.",
"retryable": true,
"details": []
}
}{
"request_id": "req_error_1",
"error": {
"type": "invalid_request_error",
"code": "INVALID_REQUEST",
"message": "Error interno del servidor",
"retryable": false,
"details": []
}
}{
"request_id": "req_error_1",
"error": {
"type": "invalid_request_error",
"code": "INVALID_REQUEST",
"message": "Dependencia temporalmente no disponible",
"retryable": false,
"details": []
}
}Authorizations
Incluí tu API key en el header Authorization con el prefijo Bearer.
Headers
Clave estable para deduplicar reintentos de la misma operación.
Path Parameters
ID de la venta existente
Was this page helpful?

