curl --request PUT \
--url https://docs.pymo.uy/v1/companies/{companyRut}/inSobres/cfes/{cfeId}/cfeStatus \
--header 'Content-Type: application/json' \
--cookie connect.sid= \
--data '
{
"cfeStatus": "ACCEPTED"
}
'import requests
url = "https://docs.pymo.uy/v1/companies/{companyRut}/inSobres/cfes/{cfeId}/cfeStatus"
payload = { "cfeStatus": "ACCEPTED" }
headers = {
"cookie": "connect.sid=",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {cookie: 'connect.sid=', 'Content-Type': 'application/json'},
body: JSON.stringify({cfeStatus: 'ACCEPTED'})
};
fetch('https://docs.pymo.uy/v1/companies/{companyRut}/inSobres/cfes/{cfeId}/cfeStatus', 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://docs.pymo.uy/v1/companies/{companyRut}/inSobres/cfes/{cfeId}/cfeStatus",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'cfeStatus' => 'ACCEPTED'
]),
CURLOPT_COOKIE => "connect.sid=",
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://docs.pymo.uy/v1/companies/{companyRut}/inSobres/cfes/{cfeId}/cfeStatus"
payload := strings.NewReader("{\n \"cfeStatus\": \"ACCEPTED\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("cookie", "connect.sid=")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://docs.pymo.uy/v1/companies/{companyRut}/inSobres/cfes/{cfeId}/cfeStatus")
.header("cookie", "connect.sid=")
.header("Content-Type", "application/json")
.body("{\n \"cfeStatus\": \"ACCEPTED\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://docs.pymo.uy/v1/companies/{companyRut}/inSobres/cfes/{cfeId}/cfeStatus")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["cookie"] = 'connect.sid='
request["Content-Type"] = 'application/json'
request.body = "{\n \"cfeStatus\": \"ACCEPTED\"\n}"
response = http.request(request)
puts response.read_body{
"payload": {
"receivedSobres": {
"cfeStatus": "REJECTED",
"cfeErrors": [],
"_id": "5b07643607a00450535d0c05",
"CFE": {
"…": "(contenido omitido en la anotación de origen)"
},
"Adenda": "..."
}
},
"status": "SUCCESS"
}{
"payload": {},
"message": {
"code": "UNAUTHORIZED",
"value": "Debe iniciar sesión."
},
"status": "FAIL"
}{
"payload": {},
"message": {
"code": "FORBIDDEN",
"value": "No tiene permisos para realizar esta acción."
},
"status": "FAIL"
}Aceptar o rechazar un CFE recibido
Acepta o rechaza un CFE recibido.
Acceso: restringida. Requiere sesión, y sólo opera sobre el RUT de tu propia empresa: pedir otro RUT responde 403 FORBIDDEN.
curl --request PUT \
--url https://docs.pymo.uy/v1/companies/{companyRut}/inSobres/cfes/{cfeId}/cfeStatus \
--header 'Content-Type: application/json' \
--cookie connect.sid= \
--data '
{
"cfeStatus": "ACCEPTED"
}
'import requests
url = "https://docs.pymo.uy/v1/companies/{companyRut}/inSobres/cfes/{cfeId}/cfeStatus"
payload = { "cfeStatus": "ACCEPTED" }
headers = {
"cookie": "connect.sid=",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {cookie: 'connect.sid=', 'Content-Type': 'application/json'},
body: JSON.stringify({cfeStatus: 'ACCEPTED'})
};
fetch('https://docs.pymo.uy/v1/companies/{companyRut}/inSobres/cfes/{cfeId}/cfeStatus', 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://docs.pymo.uy/v1/companies/{companyRut}/inSobres/cfes/{cfeId}/cfeStatus",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'cfeStatus' => 'ACCEPTED'
]),
CURLOPT_COOKIE => "connect.sid=",
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://docs.pymo.uy/v1/companies/{companyRut}/inSobres/cfes/{cfeId}/cfeStatus"
payload := strings.NewReader("{\n \"cfeStatus\": \"ACCEPTED\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("cookie", "connect.sid=")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://docs.pymo.uy/v1/companies/{companyRut}/inSobres/cfes/{cfeId}/cfeStatus")
.header("cookie", "connect.sid=")
.header("Content-Type", "application/json")
.body("{\n \"cfeStatus\": \"ACCEPTED\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://docs.pymo.uy/v1/companies/{companyRut}/inSobres/cfes/{cfeId}/cfeStatus")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["cookie"] = 'connect.sid='
request["Content-Type"] = 'application/json'
request.body = "{\n \"cfeStatus\": \"ACCEPTED\"\n}"
response = http.request(request)
puts response.read_body{
"payload": {
"receivedSobres": {
"cfeStatus": "REJECTED",
"cfeErrors": [],
"_id": "5b07643607a00450535d0c05",
"CFE": {
"…": "(contenido omitido en la anotación de origen)"
},
"Adenda": "..."
}
},
"status": "SUCCESS"
}{
"payload": {},
"message": {
"code": "UNAUTHORIZED",
"value": "Debe iniciar sesión."
},
"status": "FAIL"
}{
"payload": {},
"message": {
"code": "FORBIDDEN",
"value": "No tiene permisos para realizar esta acción."
},
"status": "FAIL"
}Autorizaciones
Sesión por cookie de POST /v1/login, válida 1 hora. Ver Autenticación.
Parámetros de ruta
"219999990008"
Cuerpo
Aceptar o rechazar un CFE recibido.
Este esquema es más estricto que el servicio, a propósito. El gateway acepta cualquier string y trata todo lo que no sea exactamente ACCEPTED como un rechazo, sin validar ni avisar: un "accepted" en minúscula, un body vacío o un typo rechazan el comprobante del proveedor con 200 SUCCESS. Restringir el enum acá hace que un cliente generado desde este spec no pueda cometer ese error.
No lo alinees con el código "para que coincida": la divergencia es la protección.
ACCEPTED, REJECTED Respuesta
Éxito
Envoltorio común a todas las respuestas. status no se deduce del código HTTP: hay al menos nueve lugares en el gateway que responden HTTP 200 con status: "FAIL" (por ejemplo CFE_NOT_FOUND y DGI_COMPANY_NOT_READY_YET). Un cliente tiene que leer status, no el código.
Los datos de la respuesta. {} cuando el endpoint no devuelve nada.
De las 82 claves de mensaje del gateway, 29 son SUCCESS y 53 FAIL. Es lo que hay que mirar para saber si la llamada funcionó.
SUCCESS, FAIL Presente cuando la operación tiene algo que decir. Las lecturas simples responden sólo payload y status.
Show child attributes
Show child attributes