curl --request POST \
--url https://api.uvvipay.com.br/v2/submerchants/onboarding/pj \
--header 'Content-Type: multipart/form-data' \
--header 'client-id: <api-key>' \
--header 'client-secret: <api-key>' \
--header 'x-idempotency-key: <x-idempotency-key>' \
--form cnpj=12345678000199 \
--form representativeCpf=12345678901 \
--form 'representativeName=Maria Souza' \
--form birthDate=1985-05-20 \
--form 'phone=+5511888888888' \
--form 'bankAccount={
"bankAccountType": "conta_corrente",
"bankName": "Banco do Brasil",
"bankCode": "001",
"bankAgency": "1234",
"bankAccount": "56789",
"bankAccountDv": "0",
"ispb": "00000000"
}' \
--form 'documentoFrente=<string>' \
--form 'documentoVerso=<string>' \
--form 'selfie=<string>' \
--form 'contratoSocial=<string>' \
--form 'cartaoCnpj=<string>' \
--form email=contato@empresa.com \
--form 'cnhCompleta=<string>'import requests
url = "https://api.uvvipay.com.br/v2/submerchants/onboarding/pj"
payload = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cnpj\"\r\n\r\n12345678000199\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"representativeCpf\"\r\n\r\n12345678901\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"representativeName\"\r\n\r\nMaria Souza\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"birthDate\"\r\n\r\n1985-05-20\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"phone\"\r\n\r\n+5511888888888\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"bankAccount\"\r\n\r\n{\r\n \"bankAccountType\": \"conta_corrente\",\r\n \"bankName\": \"Banco do Brasil\",\r\n \"bankCode\": \"001\",\r\n \"bankAgency\": \"1234\",\r\n \"bankAccount\": \"56789\",\r\n \"bankAccountDv\": \"0\",\r\n \"ispb\": \"00000000\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentoFrente\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentoVerso\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"selfie\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"contratoSocial\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cartaoCnpj\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"email\"\r\n\r\ncontato@empresa.com\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cnhCompleta\"\r\n\r\n<string>\r\n-----011000010111000001101001--"
headers = {
"client-secret": "<api-key>",
"client-id": "<api-key>",
"x-idempotency-key": "<x-idempotency-key>",
"Content-Type": "multipart/form-data"
}
response = requests.post(url, data=payload, headers=headers)
print(response.text)const form = new FormData();
form.append('cnpj', '12345678000199');
form.append('representativeCpf', '12345678901');
form.append('representativeName', 'Maria Souza');
form.append('birthDate', '1985-05-20');
form.append('phone', '+5511888888888');
form.append('bankAccount', '{
"bankAccountType": "conta_corrente",
"bankName": "Banco do Brasil",
"bankCode": "001",
"bankAgency": "1234",
"bankAccount": "56789",
"bankAccountDv": "0",
"ispb": "00000000"
}');
form.append('documentoFrente', '<string>');
form.append('documentoVerso', '<string>');
form.append('selfie', '<string>');
form.append('contratoSocial', '<string>');
form.append('cartaoCnpj', '<string>');
form.append('email', 'contato@empresa.com');
form.append('cnhCompleta', '<string>');
const options = {
method: 'POST',
headers: {
'client-secret': '<api-key>',
'client-id': '<api-key>',
'x-idempotency-key': '<x-idempotency-key>'
}
};
options.body = form;
fetch('https://api.uvvipay.com.br/v2/submerchants/onboarding/pj', 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.uvvipay.com.br/v2/submerchants/onboarding/pj",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cnpj\"\r\n\r\n12345678000199\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"representativeCpf\"\r\n\r\n12345678901\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"representativeName\"\r\n\r\nMaria Souza\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"birthDate\"\r\n\r\n1985-05-20\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"phone\"\r\n\r\n+5511888888888\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"bankAccount\"\r\n\r\n{\r\n \"bankAccountType\": \"conta_corrente\",\r\n \"bankName\": \"Banco do Brasil\",\r\n \"bankCode\": \"001\",\r\n \"bankAgency\": \"1234\",\r\n \"bankAccount\": \"56789\",\r\n \"bankAccountDv\": \"0\",\r\n \"ispb\": \"00000000\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentoFrente\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentoVerso\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"selfie\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"contratoSocial\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cartaoCnpj\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"email\"\r\n\r\ncontato@empresa.com\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cnhCompleta\"\r\n\r\n<string>\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Content-Type: multipart/form-data",
"client-id: <api-key>",
"client-secret: <api-key>",
"x-idempotency-key: <x-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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.uvvipay.com.br/v2/submerchants/onboarding/pj"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cnpj\"\r\n\r\n12345678000199\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"representativeCpf\"\r\n\r\n12345678901\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"representativeName\"\r\n\r\nMaria Souza\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"birthDate\"\r\n\r\n1985-05-20\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"phone\"\r\n\r\n+5511888888888\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"bankAccount\"\r\n\r\n{\r\n \"bankAccountType\": \"conta_corrente\",\r\n \"bankName\": \"Banco do Brasil\",\r\n \"bankCode\": \"001\",\r\n \"bankAgency\": \"1234\",\r\n \"bankAccount\": \"56789\",\r\n \"bankAccountDv\": \"0\",\r\n \"ispb\": \"00000000\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentoFrente\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentoVerso\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"selfie\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"contratoSocial\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cartaoCnpj\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"email\"\r\n\r\ncontato@empresa.com\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cnhCompleta\"\r\n\r\n<string>\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("client-secret", "<api-key>")
req.Header.Add("client-id", "<api-key>")
req.Header.Add("x-idempotency-key", "<x-idempotency-key>")
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.uvvipay.com.br/v2/submerchants/onboarding/pj")
.header("client-secret", "<api-key>")
.header("client-id", "<api-key>")
.header("x-idempotency-key", "<x-idempotency-key>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cnpj\"\r\n\r\n12345678000199\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"representativeCpf\"\r\n\r\n12345678901\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"representativeName\"\r\n\r\nMaria Souza\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"birthDate\"\r\n\r\n1985-05-20\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"phone\"\r\n\r\n+5511888888888\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"bankAccount\"\r\n\r\n{\r\n \"bankAccountType\": \"conta_corrente\",\r\n \"bankName\": \"Banco do Brasil\",\r\n \"bankCode\": \"001\",\r\n \"bankAgency\": \"1234\",\r\n \"bankAccount\": \"56789\",\r\n \"bankAccountDv\": \"0\",\r\n \"ispb\": \"00000000\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentoFrente\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentoVerso\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"selfie\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"contratoSocial\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cartaoCnpj\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"email\"\r\n\r\ncontato@empresa.com\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cnhCompleta\"\r\n\r\n<string>\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.uvvipay.com.br/v2/submerchants/onboarding/pj")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["client-secret"] = '<api-key>'
request["client-id"] = '<api-key>'
request["x-idempotency-key"] = '<x-idempotency-key>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cnpj\"\r\n\r\n12345678000199\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"representativeCpf\"\r\n\r\n12345678901\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"representativeName\"\r\n\r\nMaria Souza\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"birthDate\"\r\n\r\n1985-05-20\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"phone\"\r\n\r\n+5511888888888\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"bankAccount\"\r\n\r\n{\r\n \"bankAccountType\": \"conta_corrente\",\r\n \"bankName\": \"Banco do Brasil\",\r\n \"bankCode\": \"001\",\r\n \"bankAgency\": \"1234\",\r\n \"bankAccount\": \"56789\",\r\n \"bankAccountDv\": \"0\",\r\n \"ispb\": \"00000000\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentoFrente\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentoVerso\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"selfie\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"contratoSocial\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cartaoCnpj\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"email\"\r\n\r\ncontato@empresa.com\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cnhCompleta\"\r\n\r\n<string>\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"registration_id": "2f1c8b9a-4d3e-4f6a-9b1c-0a1b2c3d4e5f",
"status": "submitted"
}{
"message": "Tipo de arquivo não permitido: application/octet-stream. Tipos aceitos: application/pdf, image/jpeg, image/jpg, image/png, image/gif, application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document",
"error": "Bad Request",
"statusCode": 400
}Onboarding PJ
Inicia o onboarding assíncrono de subconta pessoa jurídica via multipart/form-data. Retorna 202 com registration_id e status.
curl --request POST \
--url https://api.uvvipay.com.br/v2/submerchants/onboarding/pj \
--header 'Content-Type: multipart/form-data' \
--header 'client-id: <api-key>' \
--header 'client-secret: <api-key>' \
--header 'x-idempotency-key: <x-idempotency-key>' \
--form cnpj=12345678000199 \
--form representativeCpf=12345678901 \
--form 'representativeName=Maria Souza' \
--form birthDate=1985-05-20 \
--form 'phone=+5511888888888' \
--form 'bankAccount={
"bankAccountType": "conta_corrente",
"bankName": "Banco do Brasil",
"bankCode": "001",
"bankAgency": "1234",
"bankAccount": "56789",
"bankAccountDv": "0",
"ispb": "00000000"
}' \
--form 'documentoFrente=<string>' \
--form 'documentoVerso=<string>' \
--form 'selfie=<string>' \
--form 'contratoSocial=<string>' \
--form 'cartaoCnpj=<string>' \
--form email=contato@empresa.com \
--form 'cnhCompleta=<string>'import requests
url = "https://api.uvvipay.com.br/v2/submerchants/onboarding/pj"
payload = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cnpj\"\r\n\r\n12345678000199\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"representativeCpf\"\r\n\r\n12345678901\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"representativeName\"\r\n\r\nMaria Souza\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"birthDate\"\r\n\r\n1985-05-20\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"phone\"\r\n\r\n+5511888888888\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"bankAccount\"\r\n\r\n{\r\n \"bankAccountType\": \"conta_corrente\",\r\n \"bankName\": \"Banco do Brasil\",\r\n \"bankCode\": \"001\",\r\n \"bankAgency\": \"1234\",\r\n \"bankAccount\": \"56789\",\r\n \"bankAccountDv\": \"0\",\r\n \"ispb\": \"00000000\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentoFrente\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentoVerso\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"selfie\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"contratoSocial\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cartaoCnpj\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"email\"\r\n\r\ncontato@empresa.com\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cnhCompleta\"\r\n\r\n<string>\r\n-----011000010111000001101001--"
headers = {
"client-secret": "<api-key>",
"client-id": "<api-key>",
"x-idempotency-key": "<x-idempotency-key>",
"Content-Type": "multipart/form-data"
}
response = requests.post(url, data=payload, headers=headers)
print(response.text)const form = new FormData();
form.append('cnpj', '12345678000199');
form.append('representativeCpf', '12345678901');
form.append('representativeName', 'Maria Souza');
form.append('birthDate', '1985-05-20');
form.append('phone', '+5511888888888');
form.append('bankAccount', '{
"bankAccountType": "conta_corrente",
"bankName": "Banco do Brasil",
"bankCode": "001",
"bankAgency": "1234",
"bankAccount": "56789",
"bankAccountDv": "0",
"ispb": "00000000"
}');
form.append('documentoFrente', '<string>');
form.append('documentoVerso', '<string>');
form.append('selfie', '<string>');
form.append('contratoSocial', '<string>');
form.append('cartaoCnpj', '<string>');
form.append('email', 'contato@empresa.com');
form.append('cnhCompleta', '<string>');
const options = {
method: 'POST',
headers: {
'client-secret': '<api-key>',
'client-id': '<api-key>',
'x-idempotency-key': '<x-idempotency-key>'
}
};
options.body = form;
fetch('https://api.uvvipay.com.br/v2/submerchants/onboarding/pj', 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.uvvipay.com.br/v2/submerchants/onboarding/pj",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cnpj\"\r\n\r\n12345678000199\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"representativeCpf\"\r\n\r\n12345678901\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"representativeName\"\r\n\r\nMaria Souza\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"birthDate\"\r\n\r\n1985-05-20\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"phone\"\r\n\r\n+5511888888888\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"bankAccount\"\r\n\r\n{\r\n \"bankAccountType\": \"conta_corrente\",\r\n \"bankName\": \"Banco do Brasil\",\r\n \"bankCode\": \"001\",\r\n \"bankAgency\": \"1234\",\r\n \"bankAccount\": \"56789\",\r\n \"bankAccountDv\": \"0\",\r\n \"ispb\": \"00000000\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentoFrente\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentoVerso\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"selfie\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"contratoSocial\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cartaoCnpj\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"email\"\r\n\r\ncontato@empresa.com\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cnhCompleta\"\r\n\r\n<string>\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Content-Type: multipart/form-data",
"client-id: <api-key>",
"client-secret: <api-key>",
"x-idempotency-key: <x-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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.uvvipay.com.br/v2/submerchants/onboarding/pj"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cnpj\"\r\n\r\n12345678000199\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"representativeCpf\"\r\n\r\n12345678901\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"representativeName\"\r\n\r\nMaria Souza\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"birthDate\"\r\n\r\n1985-05-20\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"phone\"\r\n\r\n+5511888888888\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"bankAccount\"\r\n\r\n{\r\n \"bankAccountType\": \"conta_corrente\",\r\n \"bankName\": \"Banco do Brasil\",\r\n \"bankCode\": \"001\",\r\n \"bankAgency\": \"1234\",\r\n \"bankAccount\": \"56789\",\r\n \"bankAccountDv\": \"0\",\r\n \"ispb\": \"00000000\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentoFrente\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentoVerso\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"selfie\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"contratoSocial\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cartaoCnpj\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"email\"\r\n\r\ncontato@empresa.com\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cnhCompleta\"\r\n\r\n<string>\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("client-secret", "<api-key>")
req.Header.Add("client-id", "<api-key>")
req.Header.Add("x-idempotency-key", "<x-idempotency-key>")
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.uvvipay.com.br/v2/submerchants/onboarding/pj")
.header("client-secret", "<api-key>")
.header("client-id", "<api-key>")
.header("x-idempotency-key", "<x-idempotency-key>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cnpj\"\r\n\r\n12345678000199\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"representativeCpf\"\r\n\r\n12345678901\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"representativeName\"\r\n\r\nMaria Souza\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"birthDate\"\r\n\r\n1985-05-20\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"phone\"\r\n\r\n+5511888888888\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"bankAccount\"\r\n\r\n{\r\n \"bankAccountType\": \"conta_corrente\",\r\n \"bankName\": \"Banco do Brasil\",\r\n \"bankCode\": \"001\",\r\n \"bankAgency\": \"1234\",\r\n \"bankAccount\": \"56789\",\r\n \"bankAccountDv\": \"0\",\r\n \"ispb\": \"00000000\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentoFrente\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentoVerso\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"selfie\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"contratoSocial\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cartaoCnpj\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"email\"\r\n\r\ncontato@empresa.com\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cnhCompleta\"\r\n\r\n<string>\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.uvvipay.com.br/v2/submerchants/onboarding/pj")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["client-secret"] = '<api-key>'
request["client-id"] = '<api-key>'
request["x-idempotency-key"] = '<x-idempotency-key>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cnpj\"\r\n\r\n12345678000199\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"representativeCpf\"\r\n\r\n12345678901\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"representativeName\"\r\n\r\nMaria Souza\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"birthDate\"\r\n\r\n1985-05-20\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"phone\"\r\n\r\n+5511888888888\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"bankAccount\"\r\n\r\n{\r\n \"bankAccountType\": \"conta_corrente\",\r\n \"bankName\": \"Banco do Brasil\",\r\n \"bankCode\": \"001\",\r\n \"bankAgency\": \"1234\",\r\n \"bankAccount\": \"56789\",\r\n \"bankAccountDv\": \"0\",\r\n \"ispb\": \"00000000\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentoFrente\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentoVerso\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"selfie\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"contratoSocial\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cartaoCnpj\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"email\"\r\n\r\ncontato@empresa.com\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cnhCompleta\"\r\n\r\n<string>\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"registration_id": "2f1c8b9a-4d3e-4f6a-9b1c-0a1b2c3d4e5f",
"status": "submitted"
}{
"message": "Tipo de arquivo não permitido: application/octet-stream. Tipos aceitos: application/pdf, image/jpeg, image/jpg, image/png, image/gif, application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document",
"error": "Bad Request",
"statusCode": 400
}POST /v2/submerchants/onboarding/pj
Inicia o onboarding de uma subconta PJ. A requisição é multipart/form-data
e retorna 202 Accepted com o registration_id e o status inicial.
202 com
registration_id. Exige headers client-id + client-secret e
x-idempotency-key (UUID v4).Arquivos (multipart)
Envie uma das opções de documento de identidade do representante, a selfie, e os documentos da empresa:| Campo | Obrigatório | Descrição |
|---|---|---|
documentoFrente | Condicional | Frente do RG/CIN do representante |
documentoVerso | Condicional | Verso do RG/CIN do representante |
cnhCompleta | Condicional | CNH completa do representante (alternativa a frente+verso) |
selfie | Sim | Selfie do representante (rosto) |
contratoSocial | Sim | Contrato social |
cartaoCnpj | Sim | Cartão CNPJ |
- Envie
documentoFrenteedocumentoVerso, oucnhCompleta. - O campo da selfie é
selfie(não use maisselfieComDocumento).
Tipo do arquivo
Cada parte do multipart precisa doContent-Type do arquivo. PDF usa
application/pdf. JPEG usa image/jpeg. Sem tipo, o cliente envia
application/octet-stream e a API responde 400.
Tipos aceitos:
application/pdfimage/jpegimage/jpgimage/pngimage/gifapplication/mswordapplication/vnd.openxmlformats-officedocument.wordprocessingml.document
-F "contratoSocial=@contrato.pdf;type=application/pdf" e
-F "selfie=@selfie.jpg;type=image/jpeg".
{
"message": "Tipo de arquivo não permitido: application/octet-stream. Tipos aceitos: application/pdf, image/jpeg, image/jpg, image/png, image/gif, application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document",
"error": "Bad Request",
"statusCode": 400
}
documentoFrente e documentoVerso do representante, ou envie
cnhCompleta. Envie também selfie, contratoSocial e cartaoCnpj. O
campo da selfie é selfie. Não use selfieComDocumento. Depois do 202,
consulte o status com o registration_id. Veja o guia Subcontas.Headers
Secret da credencial do merchant
ID público da credencial do merchant
UUID v4 gerado pelo cliente. Usado como externalId da subconta.
Body
- Option 1
- Option 2
CNPJ da empresa (14 dígitos)
"12345678000199"
CPF do representante (11 dígitos)
"12345678901"
Nome completo do representante
255"Maria Souza"
Data de nascimento do representante (YYYY-MM-DD)
"1985-05-20"
Telefone no formato E.164
"+5511888888888"
Dados bancários. Em multipart, envie como JSON string.
Show child attributes
Show child attributes
Frente do RG/CIN do representante. Obrigatório com documentoVerso, se não enviar cnhCompleta. Content-Type aceito: application/pdf, image/jpeg, image/jpg, image/png, image/gif, application/msword ou application/vnd.openxmlformats-officedocument.wordprocessingml.document. application/octet-stream é recusado com 400.
Verso do RG/CIN do representante. Obrigatório com documentoFrente, se não enviar cnhCompleta. Content-Type aceito: application/pdf, image/jpeg, image/jpg, image/png, image/gif, application/msword ou application/vnd.openxmlformats-officedocument.wordprocessingml.document. application/octet-stream é recusado com 400.
Selfie do representante (rosto). Não use selfieComDocumento. Content-Type aceito: application/pdf, image/jpeg, image/jpg, image/png, image/gif, application/msword ou application/vnd.openxmlformats-officedocument.wordprocessingml.document. application/octet-stream é recusado com 400.
Contrato social (PDF ou imagem). Content-Type aceito: application/pdf, image/jpeg, image/jpg, image/png, image/gif, application/msword ou application/vnd.openxmlformats-officedocument.wordprocessingml.document. application/octet-stream é recusado com 400.
Cartão CNPJ (PDF ou imagem). Content-Type aceito: application/pdf, image/jpeg, image/jpg, image/png, image/gif, application/msword ou application/vnd.openxmlformats-officedocument.wordprocessingml.document. application/octet-stream é recusado com 400.
Email de contato (opcional)
255"contato@empresa.com"
CNH completa do representante. Alternativa a documentoFrente + documentoVerso. Content-Type aceito: application/pdf, image/jpeg, image/jpg, image/png, image/gif, application/msword ou application/vnd.openxmlformats-officedocument.wordprocessingml.document. application/octet-stream é recusado com 400.

