curl --request POST \
--url https://api.uvvipay.com.br/v1/submerchants \
--header 'Content-Type: multipart/form-data' \
--header 'client-id: <api-key>' \
--header 'client-secret: <api-key>' \
--header 'x-idempotency-key: <x-idempotency-key>' \
--form email=contato@exemplo.com.br \
--form phone=11999999999 \
--form documentType=cnpj \
--form documentNumber=12345678000199 \
--form addressStreetNumber=1000 \
--form 'bankAccount={
"bankingDataType": "bank_account",
"bankName": "Banco do Brasil",
"bankAgency": "1234",
"bankAccount": "56789",
"bankAccountDv": "0",
"bankAccountType": "conta_corrente",
"bankCode": "001",
"ispb": "00000000"
}' \
--form 'legalName=João da Silva' \
--form url=https://exemplo.com.br \
--form legalType=LTDA \
--form addressZipCode=01310100 \
--form 'addressStreet=Avenida Paulista' \
--form 'addressComplement=Conjunto 101' \
--form 'addressNeighborhood=Bela Vista' \
--form 'addressCity=São Paulo' \
--form addressState=SP \
--form addressCountry=BR \
--form contratoSocial='@example-file' \
--form cartaoCnpj='@example-file' \
--form documentoFrente='@example-file' \
--form documentoVerso='@example-file' \
--form selfieComDocumento='@example-file' \
--form cnhCompleta='@example-file'import requests
url = "https://api.uvvipay.com.br/v1/submerchants"
files = {
"contratoSocial": ("example-file", open("example-file", "rb")),
"cartaoCnpj": ("example-file", open("example-file", "rb")),
"documentoFrente": ("example-file", open("example-file", "rb")),
"documentoVerso": ("example-file", open("example-file", "rb")),
"selfieComDocumento": ("example-file", open("example-file", "rb")),
"cnhCompleta": ("example-file", open("example-file", "rb"))
}
payload = {
"email": "contato@exemplo.com.br",
"phone": "11999999999",
"documentType": "cnpj",
"documentNumber": "12345678000199",
"addressStreetNumber": "1000",
"bankAccount": "{
\"bankingDataType\": \"bank_account\",
\"bankName\": \"Banco do Brasil\",
\"bankAgency\": \"1234\",
\"bankAccount\": \"56789\",
\"bankAccountDv\": \"0\",
\"bankAccountType\": \"conta_corrente\",
\"bankCode\": \"001\",
\"ispb\": \"00000000\"
}",
"legalName": "João da Silva",
"url": "https://exemplo.com.br",
"legalType": "LTDA",
"addressZipCode": "01310100",
"addressStreet": "Avenida Paulista",
"addressComplement": "Conjunto 101",
"addressNeighborhood": "Bela Vista",
"addressCity": "São Paulo",
"addressState": "SP",
"addressCountry": "BR"
}
headers = {
"client-secret": "<api-key>",
"client-id": "<api-key>",
"x-idempotency-key": "<x-idempotency-key>"
}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('email', 'contato@exemplo.com.br');
form.append('phone', '11999999999');
form.append('documentType', 'cnpj');
form.append('documentNumber', '12345678000199');
form.append('addressStreetNumber', '1000');
form.append('bankAccount', '{
"bankingDataType": "bank_account",
"bankName": "Banco do Brasil",
"bankAgency": "1234",
"bankAccount": "56789",
"bankAccountDv": "0",
"bankAccountType": "conta_corrente",
"bankCode": "001",
"ispb": "00000000"
}');
form.append('legalName', 'João da Silva');
form.append('url', 'https://exemplo.com.br');
form.append('legalType', 'LTDA');
form.append('addressZipCode', '01310100');
form.append('addressStreet', 'Avenida Paulista');
form.append('addressComplement', 'Conjunto 101');
form.append('addressNeighborhood', 'Bela Vista');
form.append('addressCity', 'São Paulo');
form.append('addressState', 'SP');
form.append('addressCountry', 'BR');
form.append('contratoSocial', '<string>');
form.append('cartaoCnpj', '<string>');
form.append('documentoFrente', '<string>');
form.append('documentoVerso', '<string>');
form.append('selfieComDocumento', '<string>');
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/v1/submerchants', 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/v1/submerchants",
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=\"email\"\r\n\r\ncontato@exemplo.com.br\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"phone\"\r\n\r\n11999999999\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentType\"\r\n\r\ncnpj\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentNumber\"\r\n\r\n12345678000199\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressStreetNumber\"\r\n\r\n1000\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"bankAccount\"\r\n\r\n{\r\n \"bankingDataType\": \"bank_account\",\r\n \"bankName\": \"Banco do Brasil\",\r\n \"bankAgency\": \"1234\",\r\n \"bankAccount\": \"56789\",\r\n \"bankAccountDv\": \"0\",\r\n \"bankAccountType\": \"conta_corrente\",\r\n \"bankCode\": \"001\",\r\n \"ispb\": \"00000000\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"legalName\"\r\n\r\nJoão da Silva\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"url\"\r\n\r\nhttps://exemplo.com.br\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"legalType\"\r\n\r\nLTDA\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressZipCode\"\r\n\r\n01310100\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressStreet\"\r\n\r\nAvenida Paulista\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressComplement\"\r\n\r\nConjunto 101\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressNeighborhood\"\r\n\r\nBela Vista\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressCity\"\r\n\r\nSão Paulo\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressState\"\r\n\r\nSP\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressCountry\"\r\n\r\nBR\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"contratoSocial\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cartaoCnpj\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentoFrente\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentoVerso\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"selfieComDocumento\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cnhCompleta\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\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/v1/submerchants"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"email\"\r\n\r\ncontato@exemplo.com.br\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"phone\"\r\n\r\n11999999999\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentType\"\r\n\r\ncnpj\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentNumber\"\r\n\r\n12345678000199\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressStreetNumber\"\r\n\r\n1000\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"bankAccount\"\r\n\r\n{\r\n \"bankingDataType\": \"bank_account\",\r\n \"bankName\": \"Banco do Brasil\",\r\n \"bankAgency\": \"1234\",\r\n \"bankAccount\": \"56789\",\r\n \"bankAccountDv\": \"0\",\r\n \"bankAccountType\": \"conta_corrente\",\r\n \"bankCode\": \"001\",\r\n \"ispb\": \"00000000\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"legalName\"\r\n\r\nJoão da Silva\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"url\"\r\n\r\nhttps://exemplo.com.br\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"legalType\"\r\n\r\nLTDA\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressZipCode\"\r\n\r\n01310100\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressStreet\"\r\n\r\nAvenida Paulista\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressComplement\"\r\n\r\nConjunto 101\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressNeighborhood\"\r\n\r\nBela Vista\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressCity\"\r\n\r\nSão Paulo\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressState\"\r\n\r\nSP\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressCountry\"\r\n\r\nBR\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"contratoSocial\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cartaoCnpj\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentoFrente\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentoVerso\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"selfieComDocumento\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cnhCompleta\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\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/v1/submerchants")
.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=\"email\"\r\n\r\ncontato@exemplo.com.br\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"phone\"\r\n\r\n11999999999\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentType\"\r\n\r\ncnpj\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentNumber\"\r\n\r\n12345678000199\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressStreetNumber\"\r\n\r\n1000\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"bankAccount\"\r\n\r\n{\r\n \"bankingDataType\": \"bank_account\",\r\n \"bankName\": \"Banco do Brasil\",\r\n \"bankAgency\": \"1234\",\r\n \"bankAccount\": \"56789\",\r\n \"bankAccountDv\": \"0\",\r\n \"bankAccountType\": \"conta_corrente\",\r\n \"bankCode\": \"001\",\r\n \"ispb\": \"00000000\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"legalName\"\r\n\r\nJoão da Silva\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"url\"\r\n\r\nhttps://exemplo.com.br\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"legalType\"\r\n\r\nLTDA\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressZipCode\"\r\n\r\n01310100\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressStreet\"\r\n\r\nAvenida Paulista\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressComplement\"\r\n\r\nConjunto 101\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressNeighborhood\"\r\n\r\nBela Vista\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressCity\"\r\n\r\nSão Paulo\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressState\"\r\n\r\nSP\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressCountry\"\r\n\r\nBR\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"contratoSocial\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cartaoCnpj\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentoFrente\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentoVerso\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"selfieComDocumento\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cnhCompleta\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.uvvipay.com.br/v1/submerchants")
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=\"email\"\r\n\r\ncontato@exemplo.com.br\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"phone\"\r\n\r\n11999999999\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentType\"\r\n\r\ncnpj\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentNumber\"\r\n\r\n12345678000199\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressStreetNumber\"\r\n\r\n1000\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"bankAccount\"\r\n\r\n{\r\n \"bankingDataType\": \"bank_account\",\r\n \"bankName\": \"Banco do Brasil\",\r\n \"bankAgency\": \"1234\",\r\n \"bankAccount\": \"56789\",\r\n \"bankAccountDv\": \"0\",\r\n \"bankAccountType\": \"conta_corrente\",\r\n \"bankCode\": \"001\",\r\n \"ispb\": \"00000000\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"legalName\"\r\n\r\nJoão da Silva\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"url\"\r\n\r\nhttps://exemplo.com.br\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"legalType\"\r\n\r\nLTDA\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressZipCode\"\r\n\r\n01310100\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressStreet\"\r\n\r\nAvenida Paulista\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressComplement\"\r\n\r\nConjunto 101\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressNeighborhood\"\r\n\r\nBela Vista\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressCity\"\r\n\r\nSão Paulo\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressState\"\r\n\r\nSP\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressCountry\"\r\n\r\nBR\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"contratoSocial\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cartaoCnpj\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentoFrente\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentoVerso\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"selfieComDocumento\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cnhCompleta\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"message": "Subconta criada com sucesso",
"id": "5b9f3d6a-3a2c-4d6f-9b9e-0a1b2c3d4e5f"
}Criar subconta
Cria uma nova subconta vinculada ao merchant autenticado. Aceita upload de documentos via multipart/form-data (arquivos binários; base64 não é aceito). Os documentos obrigatórios variam conforme o documentType — consulte a descrição de cada campo.
curl --request POST \
--url https://api.uvvipay.com.br/v1/submerchants \
--header 'Content-Type: multipart/form-data' \
--header 'client-id: <api-key>' \
--header 'client-secret: <api-key>' \
--header 'x-idempotency-key: <x-idempotency-key>' \
--form email=contato@exemplo.com.br \
--form phone=11999999999 \
--form documentType=cnpj \
--form documentNumber=12345678000199 \
--form addressStreetNumber=1000 \
--form 'bankAccount={
"bankingDataType": "bank_account",
"bankName": "Banco do Brasil",
"bankAgency": "1234",
"bankAccount": "56789",
"bankAccountDv": "0",
"bankAccountType": "conta_corrente",
"bankCode": "001",
"ispb": "00000000"
}' \
--form 'legalName=João da Silva' \
--form url=https://exemplo.com.br \
--form legalType=LTDA \
--form addressZipCode=01310100 \
--form 'addressStreet=Avenida Paulista' \
--form 'addressComplement=Conjunto 101' \
--form 'addressNeighborhood=Bela Vista' \
--form 'addressCity=São Paulo' \
--form addressState=SP \
--form addressCountry=BR \
--form contratoSocial='@example-file' \
--form cartaoCnpj='@example-file' \
--form documentoFrente='@example-file' \
--form documentoVerso='@example-file' \
--form selfieComDocumento='@example-file' \
--form cnhCompleta='@example-file'import requests
url = "https://api.uvvipay.com.br/v1/submerchants"
files = {
"contratoSocial": ("example-file", open("example-file", "rb")),
"cartaoCnpj": ("example-file", open("example-file", "rb")),
"documentoFrente": ("example-file", open("example-file", "rb")),
"documentoVerso": ("example-file", open("example-file", "rb")),
"selfieComDocumento": ("example-file", open("example-file", "rb")),
"cnhCompleta": ("example-file", open("example-file", "rb"))
}
payload = {
"email": "contato@exemplo.com.br",
"phone": "11999999999",
"documentType": "cnpj",
"documentNumber": "12345678000199",
"addressStreetNumber": "1000",
"bankAccount": "{
\"bankingDataType\": \"bank_account\",
\"bankName\": \"Banco do Brasil\",
\"bankAgency\": \"1234\",
\"bankAccount\": \"56789\",
\"bankAccountDv\": \"0\",
\"bankAccountType\": \"conta_corrente\",
\"bankCode\": \"001\",
\"ispb\": \"00000000\"
}",
"legalName": "João da Silva",
"url": "https://exemplo.com.br",
"legalType": "LTDA",
"addressZipCode": "01310100",
"addressStreet": "Avenida Paulista",
"addressComplement": "Conjunto 101",
"addressNeighborhood": "Bela Vista",
"addressCity": "São Paulo",
"addressState": "SP",
"addressCountry": "BR"
}
headers = {
"client-secret": "<api-key>",
"client-id": "<api-key>",
"x-idempotency-key": "<x-idempotency-key>"
}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('email', 'contato@exemplo.com.br');
form.append('phone', '11999999999');
form.append('documentType', 'cnpj');
form.append('documentNumber', '12345678000199');
form.append('addressStreetNumber', '1000');
form.append('bankAccount', '{
"bankingDataType": "bank_account",
"bankName": "Banco do Brasil",
"bankAgency": "1234",
"bankAccount": "56789",
"bankAccountDv": "0",
"bankAccountType": "conta_corrente",
"bankCode": "001",
"ispb": "00000000"
}');
form.append('legalName', 'João da Silva');
form.append('url', 'https://exemplo.com.br');
form.append('legalType', 'LTDA');
form.append('addressZipCode', '01310100');
form.append('addressStreet', 'Avenida Paulista');
form.append('addressComplement', 'Conjunto 101');
form.append('addressNeighborhood', 'Bela Vista');
form.append('addressCity', 'São Paulo');
form.append('addressState', 'SP');
form.append('addressCountry', 'BR');
form.append('contratoSocial', '<string>');
form.append('cartaoCnpj', '<string>');
form.append('documentoFrente', '<string>');
form.append('documentoVerso', '<string>');
form.append('selfieComDocumento', '<string>');
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/v1/submerchants', 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/v1/submerchants",
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=\"email\"\r\n\r\ncontato@exemplo.com.br\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"phone\"\r\n\r\n11999999999\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentType\"\r\n\r\ncnpj\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentNumber\"\r\n\r\n12345678000199\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressStreetNumber\"\r\n\r\n1000\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"bankAccount\"\r\n\r\n{\r\n \"bankingDataType\": \"bank_account\",\r\n \"bankName\": \"Banco do Brasil\",\r\n \"bankAgency\": \"1234\",\r\n \"bankAccount\": \"56789\",\r\n \"bankAccountDv\": \"0\",\r\n \"bankAccountType\": \"conta_corrente\",\r\n \"bankCode\": \"001\",\r\n \"ispb\": \"00000000\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"legalName\"\r\n\r\nJoão da Silva\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"url\"\r\n\r\nhttps://exemplo.com.br\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"legalType\"\r\n\r\nLTDA\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressZipCode\"\r\n\r\n01310100\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressStreet\"\r\n\r\nAvenida Paulista\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressComplement\"\r\n\r\nConjunto 101\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressNeighborhood\"\r\n\r\nBela Vista\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressCity\"\r\n\r\nSão Paulo\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressState\"\r\n\r\nSP\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressCountry\"\r\n\r\nBR\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"contratoSocial\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cartaoCnpj\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentoFrente\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentoVerso\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"selfieComDocumento\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cnhCompleta\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\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/v1/submerchants"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"email\"\r\n\r\ncontato@exemplo.com.br\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"phone\"\r\n\r\n11999999999\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentType\"\r\n\r\ncnpj\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentNumber\"\r\n\r\n12345678000199\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressStreetNumber\"\r\n\r\n1000\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"bankAccount\"\r\n\r\n{\r\n \"bankingDataType\": \"bank_account\",\r\n \"bankName\": \"Banco do Brasil\",\r\n \"bankAgency\": \"1234\",\r\n \"bankAccount\": \"56789\",\r\n \"bankAccountDv\": \"0\",\r\n \"bankAccountType\": \"conta_corrente\",\r\n \"bankCode\": \"001\",\r\n \"ispb\": \"00000000\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"legalName\"\r\n\r\nJoão da Silva\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"url\"\r\n\r\nhttps://exemplo.com.br\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"legalType\"\r\n\r\nLTDA\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressZipCode\"\r\n\r\n01310100\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressStreet\"\r\n\r\nAvenida Paulista\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressComplement\"\r\n\r\nConjunto 101\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressNeighborhood\"\r\n\r\nBela Vista\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressCity\"\r\n\r\nSão Paulo\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressState\"\r\n\r\nSP\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressCountry\"\r\n\r\nBR\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"contratoSocial\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cartaoCnpj\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentoFrente\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentoVerso\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"selfieComDocumento\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cnhCompleta\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\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/v1/submerchants")
.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=\"email\"\r\n\r\ncontato@exemplo.com.br\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"phone\"\r\n\r\n11999999999\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentType\"\r\n\r\ncnpj\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentNumber\"\r\n\r\n12345678000199\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressStreetNumber\"\r\n\r\n1000\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"bankAccount\"\r\n\r\n{\r\n \"bankingDataType\": \"bank_account\",\r\n \"bankName\": \"Banco do Brasil\",\r\n \"bankAgency\": \"1234\",\r\n \"bankAccount\": \"56789\",\r\n \"bankAccountDv\": \"0\",\r\n \"bankAccountType\": \"conta_corrente\",\r\n \"bankCode\": \"001\",\r\n \"ispb\": \"00000000\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"legalName\"\r\n\r\nJoão da Silva\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"url\"\r\n\r\nhttps://exemplo.com.br\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"legalType\"\r\n\r\nLTDA\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressZipCode\"\r\n\r\n01310100\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressStreet\"\r\n\r\nAvenida Paulista\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressComplement\"\r\n\r\nConjunto 101\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressNeighborhood\"\r\n\r\nBela Vista\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressCity\"\r\n\r\nSão Paulo\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressState\"\r\n\r\nSP\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressCountry\"\r\n\r\nBR\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"contratoSocial\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cartaoCnpj\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentoFrente\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentoVerso\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"selfieComDocumento\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cnhCompleta\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.uvvipay.com.br/v1/submerchants")
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=\"email\"\r\n\r\ncontato@exemplo.com.br\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"phone\"\r\n\r\n11999999999\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentType\"\r\n\r\ncnpj\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentNumber\"\r\n\r\n12345678000199\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressStreetNumber\"\r\n\r\n1000\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"bankAccount\"\r\n\r\n{\r\n \"bankingDataType\": \"bank_account\",\r\n \"bankName\": \"Banco do Brasil\",\r\n \"bankAgency\": \"1234\",\r\n \"bankAccount\": \"56789\",\r\n \"bankAccountDv\": \"0\",\r\n \"bankAccountType\": \"conta_corrente\",\r\n \"bankCode\": \"001\",\r\n \"ispb\": \"00000000\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"legalName\"\r\n\r\nJoão da Silva\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"url\"\r\n\r\nhttps://exemplo.com.br\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"legalType\"\r\n\r\nLTDA\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressZipCode\"\r\n\r\n01310100\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressStreet\"\r\n\r\nAvenida Paulista\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressComplement\"\r\n\r\nConjunto 101\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressNeighborhood\"\r\n\r\nBela Vista\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressCity\"\r\n\r\nSão Paulo\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressState\"\r\n\r\nSP\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"addressCountry\"\r\n\r\nBR\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"contratoSocial\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cartaoCnpj\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentoFrente\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentoVerso\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"selfieComDocumento\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cnhCompleta\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"message": "Subconta criada com sucesso",
"id": "5b9f3d6a-3a2c-4d6f-9b9e-0a1b2c3d4e5f"
}Formato do envio
A requisição deve sermultipart/form-data: os campos de texto vão como form
fields e cada documento vai como file part (arquivo binário — PDF ou
imagem).
Documentos obrigatórios
Os arquivos exigidos dependem dodocumentType da subconta:
| Campo | CNPJ | CPF |
|---|---|---|
cartaoCnpj | Obrigatório | Não se aplica |
contratoSocial | Obrigatório | Não se aplica |
selfieComDocumento | Obrigatório | Obrigatório |
documentoFrente | Obrigatório¹ | Obrigatório¹ |
documentoVerso | Obrigatório¹ | Obrigatório¹ |
cnhCompleta | Opcional — substitui frente/verso | Opcional — substitui frente/verso |
cnhCompleta (frente e verso em um único arquivo) é
enviada. Para documentType: cnpj, os documentos de identidade são do
representante legal.
Se algum documento obrigatório faltar, a resposta 400 lista os campos ausentes
em missingDocuments.
Exemplo
curl -X POST https://api.uvvipay.com.br/v1/submerchants \
-H "CLIENT-ID: seu-client-id" \
-H "CLIENT-SECRET: seu-client-secret" \
-H "x-idempotency-key: 4f7b2c1e-0000-0000-0000-000000000000" \
-F "documentType=cnpj" \
-F "documentNumber=12345678000190" \
-F "email=parceiro@exemplo.com.br" \
-F "phone=11999999999" \
-F "addressStreetNumber=100" \
-F 'bankAccount={"bankingDataType":"bank_account","bankName":"Nubank","bankCode":"260","bankAgency":"0001","bankAccount":"1234567","bankAccountDv":"8","bankAccountType":"conta_corrente"}' \
-F "cartaoCnpj=@cartao-cnpj.pdf" \
-F "contratoSocial=@contrato-social.pdf" \
-F "selfieComDocumento=@selfie.jpg" \
-F "cnhCompleta=@cnh.jpg" # dispensa documentoFrente e documentoVerso
FormData com Blob/stream do arquivo — nunca
JSON.stringify com o conteúdo em base64.Headers
Secret da credencial do merchant
ID público da credencial do merchant
UUID gerado pelo cliente para garantir idempotência
Body
Email de contato da subconta
255"contato@exemplo.com.br"
Telefone de contato
20"11999999999"
Tipo do documento
cpf, cnpj "cnpj"
Número do documento (apenas dígitos, 11 para CPF ou 14 para CNPJ)
20"12345678000199"
Número do endereço
20"1000"
Dados bancários da subconta. Pode ser enviado como JSON string em multipart/form-data. A chave PIX é criada automaticamente com o documento do cadastro (CPF ou CNPJ).
Show child attributes
Show child attributes
Nome legal (obrigatório quando documentType = cpf)
255"João da Silva"
URL do site da subconta
255"https://exemplo.com.br"
Tipo jurídico
255"LTDA"
CEP (obrigatório quando documentType = cpf)
10"01310100"
Logradouro do endereço
255"Avenida Paulista"
Complemento do endereço
255"Conjunto 101"
Bairro do endereço
100"Bela Vista"
Cidade do endereço
100"São Paulo"
UF do endereço (2 caracteres)
2"SP"
País do endereço (ISO Alpha-2)
2"BR"
Contrato social (PDF/imagem). Obrigatório para documentType cnpj; não se aplica a cpf. Enviar como arquivo binário via multipart/form-data — base64 não é aceito
Cartão CNPJ (PDF/imagem). Obrigatório para documentType cnpj; não se aplica a cpf. Enviar como arquivo binário via multipart/form-data — base64 não é aceito
Foto da frente do documento de identidade (do representante legal quando cnpj). Obrigatória, exceto se cnhCompleta for enviada. Arquivo binário via multipart/form-data — base64 não é aceito
Foto do verso do documento de identidade (do representante legal quando cnpj). Obrigatória, exceto se cnhCompleta for enviada. Arquivo binário via multipart/form-data — base64 não é aceito
Selfie segurando o documento. Sempre obrigatória. Arquivo binário via multipart/form-data — base64 não é aceito
CNH completa, frente e verso em um único arquivo. Opcional — quando enviada, dispensa documentoFrente e documentoVerso. Arquivo binário via multipart/form-data — base64 não é aceito

