curl --request PUT \
--url https://billing.basaltic.sh/v1/profile \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"company_name": "<string>",
"country": "BR",
"tax_id": "<string>",
"foreign_tax_id": "<string>",
"no_tax_id_reason": "<string>",
"email": "jsmith@example.com",
"phone": "<string>",
"street_name": "<string>",
"street_number": "<string>",
"complement": "<string>",
"neighborhood": "<string>",
"city": "<string>",
"municipality_code": "3550308",
"state": "<string>",
"postal_code": "<string>"
}
'import requests
url = "https://billing.basaltic.sh/v1/profile"
payload = {
"company_name": "<string>",
"country": "BR",
"tax_id": "<string>",
"foreign_tax_id": "<string>",
"no_tax_id_reason": "<string>",
"email": "jsmith@example.com",
"phone": "<string>",
"street_name": "<string>",
"street_number": "<string>",
"complement": "<string>",
"neighborhood": "<string>",
"city": "<string>",
"municipality_code": "3550308",
"state": "<string>",
"postal_code": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
company_name: '<string>',
country: 'BR',
tax_id: '<string>',
foreign_tax_id: '<string>',
no_tax_id_reason: '<string>',
email: 'jsmith@example.com',
phone: '<string>',
street_name: '<string>',
street_number: '<string>',
complement: '<string>',
neighborhood: '<string>',
city: '<string>',
municipality_code: '3550308',
state: '<string>',
postal_code: '<string>'
})
};
fetch('https://billing.basaltic.sh/v1/profile', 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://billing.basaltic.sh/v1/profile",
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([
'company_name' => '<string>',
'country' => 'BR',
'tax_id' => '<string>',
'foreign_tax_id' => '<string>',
'no_tax_id_reason' => '<string>',
'email' => 'jsmith@example.com',
'phone' => '<string>',
'street_name' => '<string>',
'street_number' => '<string>',
'complement' => '<string>',
'neighborhood' => '<string>',
'city' => '<string>',
'municipality_code' => '3550308',
'state' => '<string>',
'postal_code' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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://billing.basaltic.sh/v1/profile"
payload := strings.NewReader("{\n \"company_name\": \"<string>\",\n \"country\": \"BR\",\n \"tax_id\": \"<string>\",\n \"foreign_tax_id\": \"<string>\",\n \"no_tax_id_reason\": \"<string>\",\n \"email\": \"jsmith@example.com\",\n \"phone\": \"<string>\",\n \"street_name\": \"<string>\",\n \"street_number\": \"<string>\",\n \"complement\": \"<string>\",\n \"neighborhood\": \"<string>\",\n \"city\": \"<string>\",\n \"municipality_code\": \"3550308\",\n \"state\": \"<string>\",\n \"postal_code\": \"<string>\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://billing.basaltic.sh/v1/profile")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"company_name\": \"<string>\",\n \"country\": \"BR\",\n \"tax_id\": \"<string>\",\n \"foreign_tax_id\": \"<string>\",\n \"no_tax_id_reason\": \"<string>\",\n \"email\": \"jsmith@example.com\",\n \"phone\": \"<string>\",\n \"street_name\": \"<string>\",\n \"street_number\": \"<string>\",\n \"complement\": \"<string>\",\n \"neighborhood\": \"<string>\",\n \"city\": \"<string>\",\n \"municipality_code\": \"3550308\",\n \"state\": \"<string>\",\n \"postal_code\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://billing.basaltic.sh/v1/profile")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"company_name\": \"<string>\",\n \"country\": \"BR\",\n \"tax_id\": \"<string>\",\n \"foreign_tax_id\": \"<string>\",\n \"no_tax_id_reason\": \"<string>\",\n \"email\": \"jsmith@example.com\",\n \"phone\": \"<string>\",\n \"street_name\": \"<string>\",\n \"street_number\": \"<string>\",\n \"complement\": \"<string>\",\n \"neighborhood\": \"<string>\",\n \"city\": \"<string>\",\n \"municipality_code\": \"3550308\",\n \"state\": \"<string>\",\n \"postal_code\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"customer_type": "",
"company_name": "<string>",
"country": "BR",
"tax_id": "<string>",
"foreign_tax_id": "<string>",
"no_tax_id_reason": "<string>",
"email": "jsmith@example.com",
"phone": "<string>",
"street_name": "<string>",
"street_number": "<string>",
"complement": "<string>",
"neighborhood": "<string>",
"city": "<string>",
"municipality_code": "3550308",
"state": "<string>",
"postal_code": "<string>",
"ready": true,
"missing_fields": [
"<string>"
]
}{
"error": {
"code": "INVALID_INPUT",
"message": "Invalid request parameters",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "Authentication required",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "ACCESS_DENIED",
"message": "You don't have permission to perform this action",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}Guardar detalles de facturación de la organización
Reemplaza los detalles de facturación para futuros documentos fiscales. Los documentos preparados o emitidos existentes conservan su instantánea de destinatario. Un perfil completo finaliza el paso de incorporación de los detalles de facturación y permite que los flujos de trabajo fiscales en espera continúen.
curl --request PUT \
--url https://billing.basaltic.sh/v1/profile \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"company_name": "<string>",
"country": "BR",
"tax_id": "<string>",
"foreign_tax_id": "<string>",
"no_tax_id_reason": "<string>",
"email": "jsmith@example.com",
"phone": "<string>",
"street_name": "<string>",
"street_number": "<string>",
"complement": "<string>",
"neighborhood": "<string>",
"city": "<string>",
"municipality_code": "3550308",
"state": "<string>",
"postal_code": "<string>"
}
'import requests
url = "https://billing.basaltic.sh/v1/profile"
payload = {
"company_name": "<string>",
"country": "BR",
"tax_id": "<string>",
"foreign_tax_id": "<string>",
"no_tax_id_reason": "<string>",
"email": "jsmith@example.com",
"phone": "<string>",
"street_name": "<string>",
"street_number": "<string>",
"complement": "<string>",
"neighborhood": "<string>",
"city": "<string>",
"municipality_code": "3550308",
"state": "<string>",
"postal_code": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
company_name: '<string>',
country: 'BR',
tax_id: '<string>',
foreign_tax_id: '<string>',
no_tax_id_reason: '<string>',
email: 'jsmith@example.com',
phone: '<string>',
street_name: '<string>',
street_number: '<string>',
complement: '<string>',
neighborhood: '<string>',
city: '<string>',
municipality_code: '3550308',
state: '<string>',
postal_code: '<string>'
})
};
fetch('https://billing.basaltic.sh/v1/profile', 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://billing.basaltic.sh/v1/profile",
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([
'company_name' => '<string>',
'country' => 'BR',
'tax_id' => '<string>',
'foreign_tax_id' => '<string>',
'no_tax_id_reason' => '<string>',
'email' => 'jsmith@example.com',
'phone' => '<string>',
'street_name' => '<string>',
'street_number' => '<string>',
'complement' => '<string>',
'neighborhood' => '<string>',
'city' => '<string>',
'municipality_code' => '3550308',
'state' => '<string>',
'postal_code' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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://billing.basaltic.sh/v1/profile"
payload := strings.NewReader("{\n \"company_name\": \"<string>\",\n \"country\": \"BR\",\n \"tax_id\": \"<string>\",\n \"foreign_tax_id\": \"<string>\",\n \"no_tax_id_reason\": \"<string>\",\n \"email\": \"jsmith@example.com\",\n \"phone\": \"<string>\",\n \"street_name\": \"<string>\",\n \"street_number\": \"<string>\",\n \"complement\": \"<string>\",\n \"neighborhood\": \"<string>\",\n \"city\": \"<string>\",\n \"municipality_code\": \"3550308\",\n \"state\": \"<string>\",\n \"postal_code\": \"<string>\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://billing.basaltic.sh/v1/profile")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"company_name\": \"<string>\",\n \"country\": \"BR\",\n \"tax_id\": \"<string>\",\n \"foreign_tax_id\": \"<string>\",\n \"no_tax_id_reason\": \"<string>\",\n \"email\": \"jsmith@example.com\",\n \"phone\": \"<string>\",\n \"street_name\": \"<string>\",\n \"street_number\": \"<string>\",\n \"complement\": \"<string>\",\n \"neighborhood\": \"<string>\",\n \"city\": \"<string>\",\n \"municipality_code\": \"3550308\",\n \"state\": \"<string>\",\n \"postal_code\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://billing.basaltic.sh/v1/profile")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"company_name\": \"<string>\",\n \"country\": \"BR\",\n \"tax_id\": \"<string>\",\n \"foreign_tax_id\": \"<string>\",\n \"no_tax_id_reason\": \"<string>\",\n \"email\": \"jsmith@example.com\",\n \"phone\": \"<string>\",\n \"street_name\": \"<string>\",\n \"street_number\": \"<string>\",\n \"complement\": \"<string>\",\n \"neighborhood\": \"<string>\",\n \"city\": \"<string>\",\n \"municipality_code\": \"3550308\",\n \"state\": \"<string>\",\n \"postal_code\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"customer_type": "",
"company_name": "<string>",
"country": "BR",
"tax_id": "<string>",
"foreign_tax_id": "<string>",
"no_tax_id_reason": "<string>",
"email": "jsmith@example.com",
"phone": "<string>",
"street_name": "<string>",
"street_number": "<string>",
"complement": "<string>",
"neighborhood": "<string>",
"city": "<string>",
"municipality_code": "3550308",
"state": "<string>",
"postal_code": "<string>",
"ready": true,
"missing_fields": [
"<string>"
]
}{
"error": {
"code": "INVALID_INPUT",
"message": "Invalid request parameters",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "Authentication required",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "ACCESS_DENIED",
"message": "You don't have permission to perform this action",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}billing:UpdateBillingProfile. Consulta permisos de facturación para obtener la lista completa, lo que cubre cada una y un ejemplo de política.Autorizaciones
Un token bearer de OAuth 2.0, enviado como Authorization: Bearer <token>. Esta es la forma recomendada de autenticación.
Obtén el token intercambiando el par de claves de acceso de una cuenta de servicio en POST /v1/oauth/token con grant_type=client_credentials. Es el flujo estándar de credenciales de cliente; las bibliotecas compatibles con OAuth pueden obtener y renovar el token por ti.
curl -s -u "$KEY_ID:$SECRET" -d grant_type=client_credentials \
https://iam.basaltic.sh/v1/oauth/token
Los tokens duran una hora por defecto. El mismo par de claves de acceso también sirve como credencial AWS SigV4 para el endpoint de objetos compatible con S3, que solo acepta ese método de autenticación.
Cuerpo
Destinatario de facturación de la organización. Los borradores incompletos se guardan; listo se convierte en verdadero solo después de que todos los campos específicos del país sean válidos. La incorporación de nuevos usuarios se completa después de este paso.
, individual, company Nombre legal completo de la persona o empresa.
75ISO 3166-1 alpha-2 código de país.
2"BR"
CPF para una persona física brasileña o CNPJ para una empresa brasileña. Los dígitos de verificación son validados.
Identificador extranjero; no validado como documento brasileño.
50Requerido para un destinatario extranjero sin identificación fiscal.
100Correo electrónico de facturación para la entrega de facturas fiscales. El formulario de incorporación lo rellena previamente desde el correo electrónico del usuario que ha iniciado sesión.
755050103030100Código de municipio de siete dígitos del IBGE, requerido para un beneficiario brasileño.
"3550308"
UF de dos letras para Brasil; estado/provincia de forma libre en el extranjero.
100CEP de ocho dígitos para Brasil; código postal internacional opcional en el extranjero.
20Respuesta
Detalles guardados, disponibilidad y campos faltantes.
Destinatario de facturación de la organización. Los borradores incompletos se guardan; listo se convierte en verdadero solo después de que todos los campos específicos del país sean válidos. La incorporación de nuevos usuarios se completa después de este paso.
, individual, company Nombre legal completo de la persona o empresa.
75ISO 3166-1 alpha-2 código de país.
2"BR"
CPF para una persona física brasileña o CNPJ para una empresa brasileña. Los dígitos de verificación son validados.
Identificador extranjero; no validado como documento brasileño.
50Requerido para un destinatario extranjero sin identificación fiscal.
100Correo electrónico de facturación para la entrega de facturas fiscales. El formulario de incorporación lo rellena previamente desde el correo electrónico del usuario que ha iniciado sesión.
755050103030100Código de municipio de siete dígitos del IBGE, requerido para un beneficiario brasileño.
"3550308"
UF de dos letras para Brasil; estado/provincia de forma libre en el extranjero.
100CEP de ocho dígitos para Brasil; código postal internacional opcional en el extranjero.
20
