cURL
curl --request POST \
--url https://api.portabilidade.moneyp.dev.br/api/v1/Portabilidade/Retencao/incluirassinante \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"nuPortabilidade": "<string>",
"numeroCCB": "<string>",
"codigoProposta": "<string>",
"documento": "<string>",
"email": "<string>",
"telefoneCelular": "<string>",
"notificarPorEmail": true,
"notificarPorWhatsApp": true,
"notificarPorSMS": true,
"codigoIdentificador": "<string>"
}
'import requests
url = "https://api.portabilidade.moneyp.dev.br/api/v1/Portabilidade/Retencao/incluirassinante"
payload = {
"nuPortabilidade": "<string>",
"numeroCCB": "<string>",
"codigoProposta": "<string>",
"documento": "<string>",
"email": "<string>",
"telefoneCelular": "<string>",
"notificarPorEmail": True,
"notificarPorWhatsApp": True,
"notificarPorSMS": True,
"codigoIdentificador": "<string>"
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
nuPortabilidade: '<string>',
numeroCCB: '<string>',
codigoProposta: '<string>',
documento: '<string>',
email: '<string>',
telefoneCelular: '<string>',
notificarPorEmail: true,
notificarPorWhatsApp: true,
notificarPorSMS: true,
codigoIdentificador: '<string>'
})
};
fetch('https://api.portabilidade.moneyp.dev.br/api/v1/Portabilidade/Retencao/incluirassinante', 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.portabilidade.moneyp.dev.br/api/v1/Portabilidade/Retencao/incluirassinante",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'nuPortabilidade' => '<string>',
'numeroCCB' => '<string>',
'codigoProposta' => '<string>',
'documento' => '<string>',
'email' => '<string>',
'telefoneCelular' => '<string>',
'notificarPorEmail' => true,
'notificarPorWhatsApp' => true,
'notificarPorSMS' => true,
'codigoIdentificador' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"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://api.portabilidade.moneyp.dev.br/api/v1/Portabilidade/Retencao/incluirassinante"
payload := strings.NewReader("{\n \"nuPortabilidade\": \"<string>\",\n \"numeroCCB\": \"<string>\",\n \"codigoProposta\": \"<string>\",\n \"documento\": \"<string>\",\n \"email\": \"<string>\",\n \"telefoneCelular\": \"<string>\",\n \"notificarPorEmail\": true,\n \"notificarPorWhatsApp\": true,\n \"notificarPorSMS\": true,\n \"codigoIdentificador\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
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.post("https://api.portabilidade.moneyp.dev.br/api/v1/Portabilidade/Retencao/incluirassinante")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"nuPortabilidade\": \"<string>\",\n \"numeroCCB\": \"<string>\",\n \"codigoProposta\": \"<string>\",\n \"documento\": \"<string>\",\n \"email\": \"<string>\",\n \"telefoneCelular\": \"<string>\",\n \"notificarPorEmail\": true,\n \"notificarPorWhatsApp\": true,\n \"notificarPorSMS\": true,\n \"codigoIdentificador\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.portabilidade.moneyp.dev.br/api/v1/Portabilidade/Retencao/incluirassinante")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"nuPortabilidade\": \"<string>\",\n \"numeroCCB\": \"<string>\",\n \"codigoProposta\": \"<string>\",\n \"documento\": \"<string>\",\n \"email\": \"<string>\",\n \"telefoneCelular\": \"<string>\",\n \"notificarPorEmail\": true,\n \"notificarPorWhatsApp\": true,\n \"notificarPorSMS\": true,\n \"codigoIdentificador\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"assinaturaId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "<string>",
"dataLimiteAssinatura": "2023-11-07T05:31:56Z"
},
"errors": [
{
"code": "<string>",
"message": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>"
}{
"success": true,
"data": {
"assinaturaId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "<string>",
"dataLimiteAssinatura": "2023-11-07T05:31:56Z"
},
"errors": [
{
"code": "<string>",
"message": "<string>"
}
]
}Portabilidade
Retenção - Incluir Assinante
Inicia a retenção de uma portabilidade, notificando o cliente para assinatura do Termo de Retenção.
cURL
curl --request POST \
--url https://api.portabilidade.moneyp.dev.br/api/v1/Portabilidade/Retencao/incluirassinante \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"nuPortabilidade": "<string>",
"numeroCCB": "<string>",
"codigoProposta": "<string>",
"documento": "<string>",
"email": "<string>",
"telefoneCelular": "<string>",
"notificarPorEmail": true,
"notificarPorWhatsApp": true,
"notificarPorSMS": true,
"codigoIdentificador": "<string>"
}
'import requests
url = "https://api.portabilidade.moneyp.dev.br/api/v1/Portabilidade/Retencao/incluirassinante"
payload = {
"nuPortabilidade": "<string>",
"numeroCCB": "<string>",
"codigoProposta": "<string>",
"documento": "<string>",
"email": "<string>",
"telefoneCelular": "<string>",
"notificarPorEmail": True,
"notificarPorWhatsApp": True,
"notificarPorSMS": True,
"codigoIdentificador": "<string>"
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
nuPortabilidade: '<string>',
numeroCCB: '<string>',
codigoProposta: '<string>',
documento: '<string>',
email: '<string>',
telefoneCelular: '<string>',
notificarPorEmail: true,
notificarPorWhatsApp: true,
notificarPorSMS: true,
codigoIdentificador: '<string>'
})
};
fetch('https://api.portabilidade.moneyp.dev.br/api/v1/Portabilidade/Retencao/incluirassinante', 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.portabilidade.moneyp.dev.br/api/v1/Portabilidade/Retencao/incluirassinante",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'nuPortabilidade' => '<string>',
'numeroCCB' => '<string>',
'codigoProposta' => '<string>',
'documento' => '<string>',
'email' => '<string>',
'telefoneCelular' => '<string>',
'notificarPorEmail' => true,
'notificarPorWhatsApp' => true,
'notificarPorSMS' => true,
'codigoIdentificador' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"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://api.portabilidade.moneyp.dev.br/api/v1/Portabilidade/Retencao/incluirassinante"
payload := strings.NewReader("{\n \"nuPortabilidade\": \"<string>\",\n \"numeroCCB\": \"<string>\",\n \"codigoProposta\": \"<string>\",\n \"documento\": \"<string>\",\n \"email\": \"<string>\",\n \"telefoneCelular\": \"<string>\",\n \"notificarPorEmail\": true,\n \"notificarPorWhatsApp\": true,\n \"notificarPorSMS\": true,\n \"codigoIdentificador\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
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.post("https://api.portabilidade.moneyp.dev.br/api/v1/Portabilidade/Retencao/incluirassinante")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"nuPortabilidade\": \"<string>\",\n \"numeroCCB\": \"<string>\",\n \"codigoProposta\": \"<string>\",\n \"documento\": \"<string>\",\n \"email\": \"<string>\",\n \"telefoneCelular\": \"<string>\",\n \"notificarPorEmail\": true,\n \"notificarPorWhatsApp\": true,\n \"notificarPorSMS\": true,\n \"codigoIdentificador\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.portabilidade.moneyp.dev.br/api/v1/Portabilidade/Retencao/incluirassinante")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"nuPortabilidade\": \"<string>\",\n \"numeroCCB\": \"<string>\",\n \"codigoProposta\": \"<string>\",\n \"documento\": \"<string>\",\n \"email\": \"<string>\",\n \"telefoneCelular\": \"<string>\",\n \"notificarPorEmail\": true,\n \"notificarPorWhatsApp\": true,\n \"notificarPorSMS\": true,\n \"codigoIdentificador\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"assinaturaId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "<string>",
"dataLimiteAssinatura": "2023-11-07T05:31:56Z"
},
"errors": [
{
"code": "<string>",
"message": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>"
}{
"success": true,
"data": {
"assinaturaId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "<string>",
"dataLimiteAssinatura": "2023-11-07T05:31:56Z"
},
"errors": [
{
"code": "<string>",
"message": "<string>"
}
]
}Inclui o cliente como assinante do Termo de Retenção de Portabilidade e dispara, automaticamente, toda a jornada de retenção digital: geração do termo, notificação do cliente, coleta da assinatura e envio da evidência à Núclea.
Quando usar
Utilize este endpoint quando decidir formalizar a retenção do cliente por assinatura digital do Termo de Retenção.O que acontece depois da chamada
A chamada só cria a assinatura; o restante da jornada é automático:- Validação síncrona — a BMP confirma que
nuPortabilidadeexiste, pertence à carteira do parceiro autenticado e ainda está dentro do prazo regulatório (D+2). Fora disso, a requisição é rejeitada e nenhuma assinatura é criada. - Geração do Termo — PDF pré-preenchido com os dados do cliente, contrato e portabilidade, a partir do modelo padronizado pela Autorregulação.
- Envio do link de assinatura — pelos canais marcados como
true(notificarPorEmail,notificarPorWhatsApp,notificarPorSMS); quando mais de um canal é indicado, o envio ocorre simultaneamente em todos. O link é único, seguro e expira ao final do prazo D+1 (dataLimiteAssinatura) — após isso, o cliente não consegue mais acessá-lo. - Coleta da assinatura — o cliente assina digitalmente; a BMP registra IP/geolocalização e gera o código de autenticação (Hash) exigido pela Núclea, consolidando o PDF final.
- Envio ao Repositório de Evidências da Núclea — dentro da janela de operação do repositório (5h–18h) e ainda dentro do D+2.
- Montagem e envio da estrutura de retenção à CTC, encerrando a jornada com aceite ou recusa da retenção.
statusAssinatura em Consultar Portabilidades.
Parâmetros da Requisição
string
obrigatório
Número CTC da portabilidade em retenção (mesmo valor retornado como
nuPortabilidade na consulta gerencial). Deve existir e pertencer à carteira do parceiro autenticado.string
Número da Cédula de Crédito Bancário do contrato retido.
string
Identificador da proposta no CaaS (equivalente ao
codigoProposta retornado na consulta gerencial).string
CPF do cliente titular do contrato.
string
E-mail do cliente, usado quando
notificarPorEmail for true.string
Telefone celular do cliente, usado quando
notificarPorWhatsApp e/ou notificarPorSMS forem true.boolean
Se
true, envia o link de assinatura do Termo de Retenção por e-mail.boolean
Se
true, envia o link de assinatura do Termo de Retenção por WhatsApp.boolean
Se
true, envia o link de assinatura do Termo de Retenção por SMS.string
Identificador de controle do próprio parceiro para esta solicitação de retenção (referência/rastreabilidade do lado do parceiro).
Ao menos um canal de notificação deve ser indicado (
notificarPorEmail, notificarPorWhatsApp ou notificarPorSMS), com o respectivo dado de contato preenchido — sem isso o cliente não recebe o link de assinatura. Regra de validação exata a confirmar com o time responsável.Campos da Resposta
| Campo | Tipo | Descrição |
|---|---|---|
assinaturaId | guid | Identificador único da jornada de assinatura do Termo de Retenção, criado para essa nuPortabilidade. Não é enviado como campo separado nos eventos de callback — aparece embutido na URL linkAssinatura do evento DOCUMENTO_ENVIADO. |
status | string | Situação textual da assinatura no momento da criação (Criada) — o ciclo de vida completo é o mesmo descrito em statusAssinatura na consulta gerencial |
dataLimiteAssinatura | datetime | Prazo final (D+1, calculado em dias úteis) para o cliente assinar o Termo — após esse horário o link de assinatura expira |
O restante da jornada é acompanhado pelo campo
statusAssinatura do endpoint Consultar Portabilidades, ou pelos eventos recebidos na URL cadastrada em Cadastrar Callback — PORTABILIDADE_SOLICITADA, DOCUMENTO_ENVIADO, ASSINATURA_COLETADA e TIMEOUT_ASSINATURA. Correlação sempre por nuPortabilidade; ver detalhes em Eventos de Callback.Autorizações
Informe o token
Corpo
application/jsontext/jsonapplication/*+json
Esta página foi útil?

