API Reference · Pessoas

Cobertura da interface de Pessoas

O Sitemap registra as operações que cada superfície consome. Aniversariantes, checklist de documentos, escrita de relações, catálogo de Representados e criação de Associação no cadastro não possuem consumidor visual de Pessoas neste escopo.

Convenções

As rotas recebem Authorization: Bearer <credencial>: JWT Appwrite, JWT próprio da API ou token de sistema. As rotas de leitura não exigem Perfil de Acesso mínimo; cada registro é filtrado pelo alcance efetivo do ator, e pessoa fora do alcance responde o mesmo 404 de pessoa inexistente. Token de sistema apenas lê. Todas as operações podem responder 401 UNAUTHORIZED (credencial ausente ou inválida) e 500 INTERNAL (falha não tratada); as tabelas de erros abaixo listam as demais condições de cada operação.

Datas civis usam YYYY-MM-DD; instantes usam ISO 8601. Listas paginadas comuns devolvem { items, nextCursor }, com nextCursor: null na última página; sem resultado, a resposta é { items: [], nextCursor: null }. Operações contadas documentam também totalItems em sua própria saída e devolvem totalItems: 0 quando não há resultado.

Corpo de erro — JSON

CampoTipoPresençaDescrição
statusCodenumberSempreRepete o status HTTP.
messagestring ou array de stringsSempreMensagem legível; no 400 de validação, uma mensagem por regra violada.
errorCodestringSempreCódigo estável do catálogo: VALIDATION_FAILED (400), RULE_VIOLATION (422), NOT_FOUND (404), FORBIDDEN (403), UNAUTHORIZED (401), CONFLICT (409), UPSTREAM_UNAVAILABLE (503), APPWRITE_UPSTREAM (502), INTERNAL (500).
errorstringCondicionalNome do status HTTP; ausente quando a exceção foi lançada com corpo textual.

Objeto Person — corpo de saída

Base de todas as respostas de pessoa. Na listagem (GET /v1/people e GET /v1/people/birthdays) os itens vêm sem emails, documents e bankAccounts; GET /v1/people acrescenta portfolioId e portfolioLabel para a Carteira vigente de que a pessoa é cliente, ambos null quando não há vínculo. A ficha completa (GET /v1/people/{id}, PATCH /v1/people/{id} e POST /v1/people) traz as três listas e acrescenta os campos projetados listados em Ficha completa.

CampoTipoDescrição
idUUIDIdentificador da Pessoa.
personTypeFISICA, JURIDICA ou nullNatureza; decide o tamanho do cpfCnpj.
namestring ou nullNome da pessoa física.
companyNamestring ou nullRazão social da pessoa jurídica.
cpfCnpjstring ou nullCPF ou CNPJ só com dígitos; único entre as pessoas.
hasNoCpfCnpjbooleanPessoa declaradamente sem CPF/CNPJ.
noCpfCnpjReasonstring ou nullJustificativa da ausência de CPF/CNPJ.
identifierstring ou nullIdentificador livre.
identityStatusconfirmado ou pendentependente quando a identidade importada precisa de revisão.
possibleDuplicateOfarray de UUIDsCandidatas a duplicata.
nucleosarray de stringsSiglas dos núcleos responsáveis, em maiúsculas.
rolesarray de PersonRolePapéis na Relação.
originUoSiglastring ou nullUnidade de origem, em maiúsculas.
originDatedata civil ou nullEntrada pela unidade de origem.
originationTypeenum ou nullComo a origem foi estabelecida.
originCitystring ou nullCidade de origem.
serviceUnitIdUUID ou nullUnidade de atendimento habitual. Em implementação.
avatarDocumentIdUUID ou nullDocumento usado como foto. Em implementação.
referredByPersonIdUUID ou nullPessoa indicadora.
referralTypePARTNER, SCOUT, CLIENT, ASSOCIATE, INTERNAL ou nullQualificação da indicação.
referralChannelWHATSAPP, INSTAGRAM, PHONE_CALL, IN_PERSON, WEBSITE, OTHER ou nullCanal de chegada.
birthDatedata civil ou nullNascimento.
genderMALE, FEMALE, OTHER ou nullGênero declarado.
generalNotesstring ou nullObservações gerais.
oabNumberstring ou nullNúmero da inscrição principal na OAB, de pessoa física ou jurídica (sociedade de advogados; pessoa jurídica a partir de nead-hub-api#84), sempre com oabUf; sem unicidade.
oabUfstring ou nullUF da inscrição, em maiúsculas; sempre com oabNumber.
isClientboolean ou nullDerivado dos processos; apenas a importação o preenche.
isOpposingPartyboolean ou nullDerivado dos processos; apenas a importação o preenche.
authorUserIdUUID ou nullUsuário que cadastrou; null após a exclusão do usuário.
phonesarray de PersonPhoneTelefones.
emailsarray de PersonEmailE-mails; ausente na listagem.
addressesarray de PersonAddressEndereços.
documentsarray de PersonIdDocumentDocumentos de identificação; ausente na listagem.
bankAccountsarray de PersonBankAccountContas bancárias; ausente na listagem.
representedPartiesarray de RepresentadosRepresentados da pessoa EXTERNAL_LAWYER, expandidos; [] para as demais. Campos em Representado.
createdAtdata e hora ISO 8601Criação.
updatedAtdata e hora ISO 8601Última atualização.

Ficha completa — campos projetados

Presentes em GET /v1/people/{id}, PATCH /v1/people/{id} e POST /v1/people, além dos campos de Person.

CampoTipoDescrição
portfolioIdUUID ou nullCarteira vigente de que a pessoa é cliente (CLIENT).
ownedPortfolioIdUUID ou nullCarteira de que a pessoa é dona (PARTNER); distinta de portfolioId.
orgUnitIdUUID ou nullProjeção de vínculo legado entre esta Pessoa e uma Unidade de Negócio.

Representado — corpo de saída

Usado em representedParties[] e nas operações de /v1/represented-parties.

CampoTipoDescrição
idstringIdentificador do Representado.
namestringNome como consta no registro.
kindCOMPANY, PUBLIC_BODY, NONPROFIT, UNION, COOPERATIVE, CONDOMINIUM, INDIVIDUAL ou OTHERTipo de Representado.
authorUserIdstring ou nullUsuário que cadastrou; null após a exclusão do usuário.
createdAtdata e hora ISO 8601Criação.
updatedAtdata e hora ISO 8601Última atualização.

Itens das listas de saída

CampoTipoDescrição
phones[].idUUIDIdentificador do item.
phones[].phoneTypestring ou nullTipo do telefone.
phones[].numberstringNúmero.
phones[].isPrimaryboolean ou nullTelefone principal.
phones[].ownershipSELF, FAMILY, WORK, THIRD_PARTY ou nullTitularidade.
phones[].contactChannelCALL_ONLY, MESSAGE_ONLY, BOTH ou nullCanal de contato.
phones[].createdAtdata e hora ISO 8601Criação do item.
emails[].idUUIDIdentificador do item.
emails[].emailTypestring ou nullTipo do e-mail.
emails[].emaile-mailEndereço.
emails[].isPrimaryboolean ou nullE-mail principal.
emails[].createdAtdata e hora ISO 8601Criação do item.
addresses[].idUUIDIdentificador do item.
addresses[].addressTypestring ou nullTipo do endereço.
addresses[].zipCodestring ou nullCEP.
addresses[].streetstring ou nullLogradouro.
addresses[].numberstring ou nullNúmero.
addresses[].complementstring ou nullComplemento.
addresses[].districtstring ou nullBairro.
addresses[].citystring ou nullCidade.
addresses[].statestring ou nullUF.
addresses[].isPrimaryboolean ou nullEndereço principal.
addresses[].referencePointsarray de stringsPontos de referência, cada um até 120 caracteres.
addresses[].createdAtdata e hora ISO 8601Criação do item.
documents[].idUUIDIdentificador do item.
documents[].documentTypestring ou nullTipo do documento.
documents[].numberstring ou nullNúmero.
documents[].issuingAuthoritystring ou nullÓrgão emissor.
documents[].issueDatedata civil ou nullEmissão.
documents[].createdAtdata e hora ISO 8601Criação do item.
bankAccounts[].idstringIdentificador do item.
bankAccounts[].bankCodestringCódigo COMPE do banco, três dígitos.
bankAccounts[].bankNamestring ou nullNome do banco.
bankAccounts[].branchNumberstringAgência, só dígitos.
bankAccounts[].branchDigitstring ou nullDígito da agência.
bankAccounts[].accountNumberstringConta, só dígitos.
bankAccounts[].accountDigitstring ou nullDígito da conta.
bankAccounts[].accountTypeCHECKING, SAVINGS, PAYMENT, SALARY ou BENEFITTipo de conta; BENEFIT em implementação.
bankAccounts[].operationstring ou nullOperação bancária. Em implementação.
bankAccounts[].notesstring ou nullObservações da conta. Em implementação.
bankAccounts[].pixKeyTypeCPF_CNPJ, EMAIL, PHONE, RANDOM ou nullTipo da chave Pix.
bankAccounts[].pixKeystring ou nullChave Pix.
bankAccounts[].holderNamestring ou nullTitular quando a conta não é da própria pessoa.
bankAccounts[].isPrimarybooleanConta principal; no máximo uma por lista.
bankAccounts[].createdAtdata e hora ISO 8601Criação do item.

Itens das listas de entrada

Usados em POST /v1/people e PATCH /v1/people/{id}. Cada lista é opcional; enviada, substitui a lista inteira.

CampoTipoObrigatório no itemDescrição
phones[].phoneTypestring ou null, até 40 caracteresNãoTipo do telefone.
phones[].numberstring, até 30 caracteresSimNúmero.
phones[].isPrimaryboolean ou nullNãoTelefone principal.
phones[].ownershipSELF, FAMILY, WORK, THIRD_PARTY ou nullNãoTitularidade.
phones[].contactChannelCALL_ONLY, MESSAGE_ONLY, BOTH ou nullNãoCanal de contato.
emails[].emailTypestring ou null, até 40 caracteresNãoTipo do e-mail.
emails[].emaile-mail, até 255 caracteresSimEndereço.
emails[].isPrimaryboolean ou nullNãoE-mail principal.
addresses[].addressTypestring ou null, até 40 caracteresNãoTipo do endereço.
addresses[].zipCodestring ou null, até 12 caracteresNãoCEP.
addresses[].streetstring ou null, até 255 caracteresNãoLogradouro.
addresses[].numberstring ou null, até 20 caracteresNãoNúmero.
addresses[].complementstring ou null, até 120 caracteresNãoComplemento.
addresses[].districtstring ou null, até 120 caracteresNãoBairro.
addresses[].citystring ou null, até 120 caracteresNãoCidade.
addresses[].statestring ou null, até 4 caracteresNãoUF.
addresses[].isPrimaryboolean ou nullNãoEndereço principal.
addresses[].referencePointsarray de até 5 stringsNãoCada ponto até 120 caracteres.
documents[].documentTypestring ou null, até 60 caracteresNãoTipo do documento.
documents[].numberstring ou null, até 60 caracteresNãoNúmero.
documents[].issuingAuthoritystring ou null, até 120 caracteresNãoÓrgão emissor.
documents[].issueDatedata civil ou nullNãoEmissão.
bankAccounts[].bankCodestring, três dígitosSimCódigo COMPE do banco.
bankAccounts[].bankNamestring ou null, até 120 caracteresNãoNome do banco.
bankAccounts[].branchNumberstring, até 10 caracteres, só dígitosSimAgência.
bankAccounts[].branchDigitstring ou null, até 2 caracteresNãoDígito da agência.
bankAccounts[].accountNumberstring, até 20 caracteres, só dígitosSimConta.
bankAccounts[].accountDigitstring ou null, até 2 caracteresNãoDígito da conta.
bankAccounts[].accountTypeCHECKING, SAVINGS, PAYMENT, SALARY ou BENEFITSimTipo de conta; BENEFIT em implementação.
bankAccounts[].operationstring ou null, até 20 caracteresNãoOperação bancária. Em implementação.
bankAccounts[].notesstring ou null, até 2000 caracteresNãoObservações da conta. Em implementação.
bankAccounts[].pixKeyTypeCPF_CNPJ, EMAIL, PHONE, RANDOM ou nullCom pixKeyTipo da chave Pix.
bankAccounts[].pixKeystring ou null, até 140 caracteresCom pixKeyTypeChave Pix.
bankAccounts[].holderNamestring ou null, até 255 caracteresNãoTitular quando a conta não é da própria pessoa.
bankAccounts[].isPrimarybooleanNãoNo máximo uma true por lista.

Registro de histórico (HistoryEntry) — corpo de saída

Usado nos itens de GET /v1/people/{id}/events e GET /v1/people/{id}/history.

CampoTipoDescrição
idstringIdentificador do registro.
resourceTypestringTipo da entidade; person para a própria pessoa.
resourceIdstringIdentificador da entidade.
resourceLabelstring ou nullRótulo da entidade.
actioncreated, updated, deleted, restored, transitioned, linked, unlinked, imported ou actionAção registrada.
eventTypestringTipo do evento, como person.created e person.updated.
summarystringResumo legível.
changesarrayCampos alterados.
changes[].fieldstringNome do campo.
changes[].labelstringRótulo do campo.
changes[].beforestring ou nullValor anterior.
changes[].afterstring ou nullValor posterior.
changes[].beforeTruncatedbooleanValor anterior truncado.
changes[].afterTruncatedbooleanValor posterior truncado.
metadataobjetoMetadados do evento.
actorKinduser, machine ou systemNatureza do ator.
actorUserIdstring ou nullUsuário ator.
actorLabelstringRótulo do ator.
occurredAtdata e hora ISO 8601Momento do acontecimento, distinto do registro.
createdAtdata e hora ISO 8601Registro.

Cadastro, listagem e ficha

POST /v1/people

Cadastra uma pessoa com os filhos embutidos e, conforme os papéis, as entidades que nascem com ela na mesma transação: Cliente da Carteira (CLIENT), Carteira própria (PARTNER), Conta da Pessoa com identidade Appwrite (account), Associação (association) e vínculos de Representação (representedPartyIds). cpfCnpj é guardado só com dígitos e originUoSigla em maiúsculas; originationType vale DECLARED_MANUAL quando a sigla chega sem tipo.

Autenticação e autorização: Bearer de usuário pessoal com Acesso de Núcleo ou superior. CLIENT e association exigem gestão institucional EXPINS; account exige Acesso Global.

Entrada — JSON

LocalCampoTipoObrigatórioCondição
CorpopersonTypeFISICA ou JURIDICA, aceita nullNãoDecide o tamanho do cpfCnpj; com account, FISICA.
Corponamestring até 255, aceita nullCondicionalname ou companyName é obrigatório.
CorpocompanyNamestring até 255, aceita nullCondicionalname ou companyName é obrigatório.
CorpocpfCnpjstring, aceita nullNãoCom ou sem máscara; guardado só com dígitos (R9).
CorpohasNoCpfCnpjbooleanNãoIncompatível com cpfCnpj.
CorponoCpfCnpjReasonstring até 120, aceita nullNãoJustificativa da ausência.
Corpoidentifierstring até 40, aceita nullNãoIdentificador livre.
CorpoidentityStatusconfirmado ou pendenteNãoEstado da identidade.
CorpopossibleDuplicateOfarray de UUIDsNãoCandidatas a duplicata.
Corponucleosarray de strings, cada uma até 16NãoNormalizadas em maiúsculas; precisam existir.
Corporolesarray de PersonRoleNãoNormalizados em maiúsculas; novas atribuições de HEADQUARTERS_UNIT são recusadas.
CorpoportfolioIdUUIDCom CLIENTCarteira do novo cliente.
CorpoportfolioEffectiveFromdata civilCom CLIENTPrimeiro dia do vínculo; até hoje.
CorpooriginUoSiglastring até 40, aceita nullCom CLIENTNormalizada em maiúsculas; LSA é recusada.
CorpooriginDatedata civil, aceita nullNãoEntrada pela unidade de origem.
CorpooriginationTypeenum, aceita nullNãoDECLARED_MANUAL quando omitido junto de originUoSigla.
CorpooriginCitystring até 120, aceita nullNãoCidade de origem.
CorposerviceUnitIdUUID, aceita nullNãoUnidade de atendimento habitual; precisa ser unidade cadastrada (RN-PESSOAS-056). Em implementação.
CorpoavatarDocumentIdUUID, aceita nullNãoDocumento usado como foto; precisa existir (RN-PESSOAS-057). Em implementação.
CorporeferredByPersonIdUUID, aceita nullNãoPrecisa existir.
CorporeferralTypePARTNER, SCOUT, CLIENT, ASSOCIATE, INTERNAL, aceita nullNãoExige referredByPersonId.
CorporeferralChannelWHATSAPP, INSTAGRAM, PHONE_CALL, IN_PERSON, WEBSITE, OTHER, aceita nullNãoCanal de chegada.
CorpobirthDatedata civil, aceita nullNãoNascimento.
CorpogenderMALE, FEMALE, OTHER, aceita nullNãoGênero declarado.
CorpogeneralNotesstring até 20000, aceita nullNãoObservações gerais.
CorpooabNumberstring até 20, aceita nullCondicionalSempre junto de oabUf. Pessoa física ou jurídica (sociedade de advogados) a partir de nead-hub-api#84; até lá, só pessoa física. Exigido com o papel EXTERNAL_LAWYER a partir de nead-hub-api#84 (no cadastro; na edição, só quando a alteração cria a falta) (RN-PESSOAS-046).
CorpooabUfstring, aceita nullCondicionalNormalizada em maiúsculas; duas letras (^[A-Z]{2}$, fora disso 400); sempre junto de oabNumber.
CorporepresentedPartyIdsarray de UUIDsNãoExige EXTERNAL_LAWYER quando não vazio; cada id precisa existir; repetição responde 400.
Corpophonesarray de telefonesNãoVer Itens das listas de entrada.
Corpoemailsarray de e-mailsNãoVer Itens das listas de entrada.
Corpoaddressesarray de endereçosNãoVer Itens das listas de entrada.
Corpodocumentsarray de documentosNãoVer Itens das listas de entrada.
CorpobankAccountsarray de contas bancáriasNãoVer Itens das listas de entrada; no máximo uma isPrimary.
CorpoaccountobjetoNãoConta da Pessoa aberta junto com o cadastro; exige USER ou ASSOCIATE e pessoa física.
Corpoaccount.emaile-mail até 254Com accountNormalizado em minúsculas.
Corpoaccount.passwordstring de 8 a 72Com accountSenha inicial.
Corpoaccount.accessProfileadmin-do-sistema, acesso-global, acesso-de-area, acesso-de-nucleo, operacional-autonomo ou operacional-restritoCom accountPerfil de Acesso concedido.
CorpoassociationobjetoNãoAssociação aberta junto com o cadastro; exige ASSOCIATE e pessoa física.
Corpoassociation.siglastring até 40, não vaziaCom associationSigla única e imutável.
Corpoassociation.lamarckPercentagestring decimal com quatro casas (^(?:0|[1-9]\d{0,2})\.\d{4}$)Com associationQuota institucional, entre 50.0000 e 100.0000.
Corpoassociation.percentagestring decimal com quatro casasNãoParticipação da pessoa; ausente, 100.0000 menos lamarckPercentage.
Corpoassociation.namestring até 255, não vaziaNãoRótulo da Associação.
Corpoassociation.effectiveFromdata civilNãoPrimeiro dia inclusivo; ausente, hoje.
Corpoassociation.effectiveTodata civilNãoÚltimo dia inclusivo; ausente mantém aberta.

Saída

HTTPCampoTipoDescrição
201Campos de Person e da ficha completaVer ConvençõesPessoa criada com os filhos, portfolioId, ownedPortfolioId, orgUnitId: null, representedParties e bankAccounts.
201accountobjeto ou nullnull quando a conta não foi solicitada.
201account.idUUIDIdentificador da conta.
201account.emailstringE-mail normalizado em minúsculas.
201account.accessProfilePerfil de AcessoPerfil concedido.
201account.activebooleanEstado da conta.
201associationobjeto ou nullnull quando não solicitada.
201association.idUUIDIdentificador da Associação.
201association.versionIdUUIDVersão inicial.
201association.portfolioIdUUIDCarteira vazia criada para a Associação.
201association.siglastringSigla em maiúsculas.
201association.namestringRótulo.
201association.effectiveFromdata civilInício inclusivo.
201association.effectiveTodata civil ou nullFim inclusivo; null aberta.
201association.lamarckPercentagestring decimalQuota institucional.
201association.percentagestring decimalParticipação da pessoa.

Erros

HTTPerrorCodeCondição
400VALIDATION_FAILEDCorpo inválido: cpfCnpj fora da regra R9 ou junto de hasNoCpfCnpj, papel fora do vocabulário, bloco orgUnit ou filho malformado.
403FORBIDDENPerfil abaixo de Acesso de Núcleo; CLIENT ou association sem gestão institucional EXPINS; account abaixo de Acesso Global; token de sistema.
404NOT_FOUNDportfolioId inexistente para CLIENT.
409CONFLICTcpfCnpj já pertence a outra pessoa; e-mail de account já cadastrado; sigla de association já cadastrada.
422RULE_VIOLATIONSem name nem companyName; núcleo inexistente; CLIENT sem originUoSigla, portfolioId ou data civil; dono da carteira sem vigência aberta; sigla inválida; indicação inconsistente; nova atribuição de HEADQUARTERS_UNIT; account sem papel USER ou ASSOCIATE ou sem pessoa física; association sem ASSOCIATE, sem pessoa física, com período invertido ou com quotas que não somam 100; representedPartyIds sem EXTERNAL_LAWYER ou com id inexistente; OAB sem par; OAB em pessoa jurídica (até nead-hub-api#84, RN-PESSOAS-046); EXTERNAL_LAWYER sem OAB (a partir de nead-hub-api#84); mais de uma conta bancária principal; Pix sem par; serviceUnitId que não é unidade cadastrada ou avatarDocumentId que não é Documento cadastrado (em implementação).
500INTERNALFalha de persistência ou de provedor de mutação; pessoa, evento, vínculo, conta e associação revertidos.
502APPWRITE_UPSTREAMAppwrite recusou a identidade de account; nada é persistido.
503UPSTREAM_UNAVAILABLEaccount solicitado com a integração Appwrite desligada.

GET /v1/people

Página alfabética do golden record (nameSortKey, id; pessoa sem nome abre a lista), já escopada no banco. Busca e filtros só estreitam o que o ator alcança. Os itens vêm sem emails, documents e bankAccounts.

Autenticação e autorização: Bearer autenticado; alcance efetivo aplicado registro a registro. Ler a Pessoa autoriza ver, somente naquela linha, o identificador e o rótulo de sua Carteira vigente. Essa projeção não concede acesso ao catálogo, à ficha nem aos demais clientes da Carteira.

Entrada

LocalCampoTipoObrigatórioCondição
QuerycursorstringNãoCursor opaco devolvido em nextCursor.
Querylimitnumber de 1 a 200Não, padrão 50Tamanho da página.
Querysearchstring até 200NãoNome, razão social, CPF/CNPJ (com ou sem máscara), telefone, e-mail primário e inscrição na OAB, ignorando caixa e acento; o termo é quebrado em até 6 palavras, e a pessoa precisa conter todas; termo com menos de 2 caracteres é ignorado. Palavra formada só por dígitos e +().-, com ao menos 2 dígitos, compara apenas os dígitos com os telefones, com ou sem máscara.
QueryoabNumberstring de 1 a 20NãoNúmero da inscrição na OAB, igualdade exata.
Queryrolearray de PersonRole, repetindo o parâmetroNãoVários papéis combinam em OU; o eixo combina em E com os demais filtros.
QuerynucleostringNãoSigla de um núcleo, caixa indiferente; desconhecida devolve página vazia.
QueryoriginUoSiglastring de 1 a 40NãoIgualdade exata, caixa indiferente.
QueryreferredByPersonIdUUIDNãoIgualdade exata; indicar não concede leitura.
QueryoriginCitystring de 1 a 120NãoIgualdade exata, sem dobra de caixa ou acento.
QueryreferralChannelWHATSAPP, INSTAGRAM, PHONE_CALL, IN_PERSON, WEBSITE ou OTHERNãoIgualdade exata.
QuerycreatedFromISO 8601NãoInício inclusivo do cadastro no hub (createdAt); data sem hora conta como meia-noite UTC.
QuerycreatedToISO 8601NãoFim inclusivo do cadastro no hub.

Saída

HTTPCampoTipoDescrição
200itemsarray de PersonListItemDtoCampos de Person, sem emails, documents e bankAccounts, mais portfolioId (UUID da Carteira vigente ou null) e portfolioLabel (sigla da unidade/associação ou nome da pessoa parceira dona da Carteira, com o tipo do dono; null sem vínculo). Vínculo inconsistente — mais de uma Carteira vigente ou dono indisponível — não interrompe a listagem: a pessoa sai com os dois campos null e a inconsistência fica registrada no log da API.
200nextCursorstring ou nullCursor da próxima página; null na última.
200totalItemsnúmero inteiro não negativoTotal de pessoas sob o mesmo alcance e filtros, sem aplicar cursor nem limite.

Erros

HTTPerrorCodeCondição
400VALIDATION_FAILEDCursor malformado; role ou referralChannel fora do vocabulário; nucleo fora de 1 a 16 caracteres; referredByPersonId fora do formato UUID; createdFrom ou createdTo fora do ISO 8601; limit fora de 1 a 200.

GET /v1/people/birthdays

Aniversariantes de um dia, sob o mesmo escopo da listagem, em ordem de cadastro. Só mês e dia contam.

Autenticação e autorização: Bearer autenticado; alcance efetivo aplicado registro a registro.

Entrada

LocalCampoTipoObrigatórioCondição
Querydatedata civilNãoAno ignorado; omitido, hoje em America/Recife.
QuerycursorstringNãoCursor opaco devolvido em nextCursor.
Querylimitnumber de 1 a 200Não, padrão 50Tamanho da página.

Saída

HTTPCampoTipoDescrição
200datedata civilDia consultado.
200itemsarray de PersonAniversariantes; sem emails, documents e bankAccounts.
200nextCursorstring ou nullCursor da próxima página.

Erros

HTTPerrorCodeCondição
400VALIDATION_FAILEDdate fora do formato ou dia inexistente; cursor malformado; limit fora de 1 a 200.

GET /v1/people/{id}

A ficha completa: a pessoa com todos os filhos, representedParties expandidos e os campos projetados portfolioId, ownedPortfolioId e orgUnitId.

Autenticação e autorização: Bearer autenticado; pessoa no alcance do ator.

Entrada

LocalCampoTipoObrigatórioCondição
CaminhoidUUIDSimIdentificador da Pessoa.

Saída

HTTPCampoTipoDescrição
200Campos de Person e da ficha completaVer ConvençõesPessoa com os filhos, portfolioId, ownedPortfolioId, orgUnitId, representedParties e bankAccounts.

Erros

HTTPerrorCodeCondição
400VALIDATION_FAILEDid fora do formato UUID.
404NOT_FOUNDPessoa inexistente ou fora do alcance do ator.

PATCH /v1/people/{id}

Altera campos e substitui as listas de filhos presentes no corpo (omitir mantém, [] apaga). Os campos de originação só a presidência altera depois do cadastro. Cada campo cujo valor difere do gravado entra em person.updated. Ganhar o papel PARTNER cria a Carteira própria; perdê-lo a apaga, ou responde 422 se ela já teve cliente.

Autenticação e autorização: Bearer de usuário pessoal com a pessoa no alcance; campos de originação exigem PRES ou acesso institucional; transição de CLIENT exige gestão institucional EXPINS.

Entrada — JSON

Aceita os mesmos campos de POST /v1/people, exceto account e association, todos opcionais, e acrescenta portfolioEffectiveTo.

LocalCampoTipoObrigatórioCondição
CaminhoidUUIDSimIdentificador da Pessoa.
CorpoCampos de POST /v1/people, exceto account e associationVer POST /v1/peopleNãoApenas os campos enviados mudam; representedPartyIds substitui o conjunto inteiro e [] desvincula todos.
CorpoportfolioIdUUIDAo conceder CLIENTCarteira do cliente.
CorpoportfolioEffectiveFromdata civilAo conceder CLIENTPrimeiro dia do vínculo; até hoje.
CorpoportfolioEffectiveTodata civil YYYY-MM-DDAo retirar CLIENTÚltimo dia inclusivo do vínculo; ontem civil.

Saída

HTTPCampoTipoDescrição
200Campos de Person e da ficha completaVer ConvençõesFicha completa atualizada, com portfolioId, ownedPortfolioId, orgUnitId, representedParties e bankAccounts.

Erros

HTTPerrorCodeCondição
400VALIDATION_FAILEDid fora do formato UUID ou corpo inválido (cpfCnpj fora da regra R9, papel fora do vocabulário, bloco orgUnit, filho malformado).
403FORBIDDENCampo de originação fora da presidência; transição de CLIENT sem gestão institucional EXPINS; token de sistema.
404NOT_FOUNDPessoa inexistente ou fora do alcance; portfolioId inexistente na promoção a CLIENT.
409CONFLICTcpfCnpj duplicado; vínculo de carteira concorrente; pessoa alterada concorrentemente.
422RULE_VIOLATIONPromoção a CLIENT sem origem, portfolioId ou data; remoção sem portfolioEffectiveTo igual a ontem civil; troca de carteira por PATCH; dono sem vigência; nova atribuição de HEADQUARTERS_UNIT; remoção de PARTNER com clientes na Carteira; remoção de EXTERNAL_LAWYER com Representados sem enviar []; representedPartyIds sem EXTERNAL_LAWYER ou com id inexistente; OAB sem par; OAB em pessoa jurídica (até nead-hub-api#84, RN-PESSOAS-046); edição que acrescenta EXTERNAL_LAWYER sem OAB ou apaga a OAB de quem tem o papel (a partir de nead-hub-api#84); mais de uma conta bancária principal; Pix sem par; serviceUnitId ou avatarDocumentId alterado para referência inexistente (em implementação); demais regras de Pessoa.
500INTERNALProvedor de mutação inválido ou falha de persistência; pessoa, evento e vínculo revertidos.

Trilha e histórico

GET /v1/people/{id}/events

Trilha da pessoa, do evento mais recente ao mais antigo, sob a mesma leitura do registro. Pessoa sem eventos responde { items: [], nextCursor: null }.

Autenticação e autorização: Bearer autenticado; pessoa no alcance do ator.

Entrada

LocalCampoTipoObrigatórioCondição
CaminhoidUUIDSimIdentificador da Pessoa.
QuerycursorstringNãoCursor opaco devolvido em nextCursor.
Querylimitnumber de 1 a 200Não, padrão 50Tamanho da página.

Saída

HTTPCampoTipoDescrição
200itemsarray de HistoryEntryVer Convenções.
200nextCursorstring ou nullCursor da próxima página.

Erros

HTTPerrorCodeCondição
400VALIDATION_FAILEDid fora do formato UUID ou cursor inválido.
404NOT_FOUNDPessoa inexistente ou fora do alcance do ator.

GET /v1/people/{id}/history

Linha do tempo única da pessoa, incluindo entrevistas e demais vínculos.

Autenticação e autorização: Bearer autenticado; pessoa no alcance do ator.

Entrada

LocalCampoTipoObrigatórioCondição
CaminhoidUUIDSimIdentificador da Pessoa.
QuerycursorstringNãoCursor opaco devolvido em nextCursor.
Querylimitnumber de 1 a 200Não, padrão 50Tamanho da página.
QueryresourceTypestring no padrão ^[a-z][a-z0-9-]{0,63}$NãoRestringe a um tipo de entidade.

Saída

HTTPCampoTipoDescrição
200itemsarray de HistoryEntryVer Convenções.
200nextCursorstring ou nullCursor da próxima página.

Erros

HTTPerrorCodeCondição
400VALIDATION_FAILEDid fora do formato UUID, cursor ou filtro inválido.
404NOT_FOUNDPessoa inexistente ou fora do alcance do ator.

Relacionamentos entre pessoas

GET /v1/people/{personId}/relationships

Relações da âncora, do ponto de vista dela, em ordem de criação. relationType pode ser um tipo de leitura que não existe no banco.

Autenticação e autorização: Bearer autenticado; âncora no alcance do ator.

Entrada

LocalCampoTipoObrigatórioCondição
CaminhopersonIdUUIDSimPessoa âncora.
QuerycursorstringNãoCursor opaco devolvido em nextCursor.
Querylimitnumber de 1 a 200Não, padrão 50Tamanho da página.
Queryexpandtrue ou falseNãotrue resolve a contraparte em person; ausente ou false, person não sai.

Saída

HTTPCampoTipoDescrição
200items[].idstringIdentificador da relação, o mesmo pelas duas pontas.
200items[].relationTypeenum de 21 valoresLaço do ponto de vista da âncora para personId.
200items[].personIdstringOutra ponta; sempre presente.
200items[].notestring ou nullObservação livre.
200items[].authorUserIdstring ou nullUsuário que registrou; null após a exclusão do usuário.
200items[].createdAtdata e hora ISO 8601Registro.
200items[].personobjetoApenas com expand=true.
200items[].person.idstringContraparte.
200items[].person.namestring ou nullNome ou razão social; null fora do alcance do ator ou sem nome.
200nextCursorstring ou nullCursor da próxima página.

Erros

HTTPerrorCodeCondição
400VALIDATION_FAILEDpersonId fora do formato UUID, cursor inválido ou expand fora de true/false.
404NOT_FOUNDPessoa inexistente ou fora do alcance do ator.

POST /v1/people/{personId}/relationships

Registra a relação a partir de qualquer ponta: PARENT de A para B e CHILD de B para A gravam a mesma linha, na forma canônica. Responde a relação vista da âncora.

Autenticação e autorização: Bearer de usuário pessoal com alteração da âncora; a contraparte só precisa existir.

Entrada — JSON

LocalCampoTipoObrigatórioCondição
CaminhopersonIdUUIDSimPessoa âncora.
CorpopersonIdUUIDSimOutra ponta; precisa existir e ser diferente da âncora.
CorporelationTypeSPOUSE, SIBLING, COUSIN, SIBLING_IN_LAW, FRIEND, PARENT, CHILD, GRANDPARENT, GRANDCHILD, UNCLE_AUNT, NEPHEW_NIECE, PARENT_IN_LAW, CHILD_IN_LAW, LEGAL_GUARDIAN, WARD, ADOPTIVE_PARENT, ADOPTED_CHILD, TUTOR, TUTELAGE_WARD, CURATOR ou CURATORSHIP_WARDSimLaço do ponto de vista da âncora para a outra ponta.
Corponotestring até 255NãoObservação livre.

Saída

HTTPCampoTipoDescrição
201idstringIdentificador da relação.
201relationTypeenumLaço do ponto de vista da âncora.
201personIdstringOutra ponta.
201notestring ou nullObservação livre.
201authorUserIdstring ou nullUsuário que registrou.
201createdAtdata e hora ISO 8601Registro.

Erros

HTTPerrorCodeCondição
400VALIDATION_FAILEDpersonId fora do formato UUID ou corpo inválido (relationType fora do vocabulário, note acima de 255).
404NOT_FOUNDÂncora inexistente ou fora do alcance do ator.
409CONFLICTRelação já existente, pedida por qualquer ponta, ou contradição com relação registrada entre as mesmas pessoas; message nomeia o id e o tipo.
422RULE_VIOLATIONAutorrelação ou personId do corpo que não é uma pessoa cadastrada.

DELETE /v1/people/{personId}/relationships/{relationshipId}

Apaga a relação; ela some das duas pontas.

Autenticação e autorização: Bearer de usuário pessoal com alteração da âncora.

Entrada

LocalCampoTipoObrigatórioCondição
CaminhopersonIdUUIDSimPessoa âncora.
CaminhorelationshipIdUUIDSimRelação da âncora.

Saída

HTTPCampoTipoDescrição
204—Sem corpoRelação apagada.

Erros

HTTPerrorCodeCondição
400VALIDATION_FAILEDpersonId ou relationshipId fora do formato UUID.
404NOT_FOUNDÂncora inexistente ou fora do alcance; relação inexistente ou que não é da âncora.

Registros de relacionamento

Estado: em implementação na API.

Criação, alteração e exclusão gravam no histórico da Pessoa o registro como ficou ou, na exclusão, como estava, em metadata (type, content, preferenceCategory, attentionKind, caseId, detail). A linha do tempo desses registros é lida por GET /v1/people/{id}/history?resourceType=person-relationship-record.

GET /v1/people/{personId}/relationship-records

Lista os registros de relacionamento da Pessoa do mais recente ao mais antigo (createdAt e id decrescentes), paginados por cursor.

Autenticação e autorização: Bearer autenticado; Pessoa no alcance de leitura do ator.

Entrada

LocalCampoTipoObrigatórioCondição
CaminhopersonIdUUIDSimPessoa dona dos registros.
QuerycursorstringNãoCursor opaco devolvido em nextCursor.
Querylimitnumber de 1 a 200Não, padrão 50Tamanho da página.

Saída

HTTPCampoTipoDescrição
200items[].idUUIDIdentificador do registro.
200items[].personIdUUIDPessoa dona do registro.
200items[].typeEXPECTATION, PREFERENCE, AFFINITY ou ATTENTIONExpectativa, Preferência, Afinidade ou Atenção.
200items[].contentstringTexto do registro.
200items[].preferenceCategorySERVICE_CHANNEL, COMMUNICATION_FORM, SERVICE_HOURS, OTHER ou nullCategoria da preferência; só em PREFERENCE. Em implementação.
200items[].attentionKindDOCUMENTS, EXPERT_EXAM, HEARING, FEES, CALL_IN, APPOINTMENT ou nullTipo da etiqueta; só em ATTENTION. Em implementação.
200items[].caseIdUUID ou nullProcesso em que a pessoa é cliente; só em EXPECTATION; null após a exclusão do processo. Em implementação.
200items[].detailstring ou nullRelato completo em AFFINITY; processo, data, local ou outra informação em ATTENTION. Em implementação.
200items[].authorUserIdUUID ou nullAutor; null após a exclusão do usuário.
200items[].createdAtdata e hora ISO 8601Data do registro.
200items[].updatedAtdata e hora ISO 8601Data da última alteração.
200nextCursorstring ou nullCursor da próxima página.

Erros

HTTPerrorCodeCondição
400VALIDATION_FAILEDpersonId fora do formato UUID ou cursor inválido.
401UNAUTHORIZEDSem credencial válida.
403FORBIDDENAlcance efetivo do ator indisponível ou inválido.
404NOT_FOUNDPessoa inexistente ou fora do alcance do ator.
500INTERNALFalha não tratada.

POST /v1/people/{personId}/relationship-records

Cria um registro de relacionamento e grava person-relationship-record.created no histórico da Pessoa.

Autenticação e autorização: Bearer de usuário pessoal com a mesma autorização de edição da Pessoa (RN-PESSOAS-062).

Entrada — JSON

LocalCampoTipoObrigatórioCondição
CaminhopersonIdUUIDSimPessoa dona do registro.
CorpotypeEXPECTATION, PREFERENCE, AFFINITY ou ATTENTIONSimTipo do registro.
Corpocontentstring não vazia, até 2000SimTexto do registro; gravado aparado.
CorpopreferenceCategorySERVICE_CHANNEL, COMMUNICATION_FORM, SERVICE_HOURS ou OTHER, aceita nullNãoSó em PREFERENCE. Em implementação.
CorpoattentionKindDOCUMENTS, EXPERT_EXAM, HEARING, FEES, CALL_IN ou APPOINTMENT, aceita nullCom ATTENTIONSó em ATTENTION, e obrigatório nele. Em implementação.
CorpocaseIdUUID, aceita nullNãoSó em EXPECTATION; processo em que a pessoa é cliente. Em implementação.
Corpodetailstring até 5000, aceita nullNãoSó em AFFINITY e ATTENTION; gravado aparado. Em implementação.

Saída

HTTPCampoTipoDescrição
201id, personId, type, content, preferenceCategory, attentionKind, caseId, detail, authorUserId, createdAt, updatedAtVer GETRegistro criado com o mesmo schema de items[] da listagem; authorUserId é o ator.

Erros

HTTPerrorCodeCondição
400VALIDATION_FAILEDpersonId fora do formato UUID; type fora do vocabulário; content vazio ou acima de 2000.
401UNAUTHORIZEDSem credencial válida.
403FORBIDDENToken de sistema.
404NOT_FOUNDPessoa inexistente ou fora do alcance do ator.
422RULE_VIOLATIONCampo enviado a tipo que não o aceita; ATTENTION sem attentionKind; caseId de processo em que a pessoa não é cliente. Em implementação.
500INTERNALFalha não tratada.

PATCH /v1/people/{personId}/relationship-records/{id}

Altera o tipo, o texto ou os campos próprios do tipo e grava person-relationship-record.updated no histórico da Pessoa. Campo ausente não muda.

Autenticação e autorização: Bearer de usuário pessoal com a mesma autorização de edição da Pessoa (RN-PESSOAS-062).

Entrada — JSON

LocalCampoTipoObrigatórioCondição
CaminhopersonIdUUIDSimPessoa dona do registro.
CaminhoidUUIDSimRegistro alterado.
CorpotypeEXPECTATION, PREFERENCE, AFFINITY ou ATTENTIONNãoNovo tipo.
Corpocontentstring não vazia, até 2000NãoNovo texto; gravado aparado.
CorpopreferenceCategorySERVICE_CHANNEL, COMMUNICATION_FORM, SERVICE_HOURS ou OTHER, aceita nullNãoSó em PREFERENCE. Em implementação.
CorpoattentionKindDOCUMENTS, EXPERT_EXAM, HEARING, FEES, CALL_IN ou APPOINTMENT, aceita nullNãoSó em ATTENTION, e obrigatório nele. Em implementação.
CorpocaseIdUUID, aceita nullNãoSó em EXPECTATION; processo em que a pessoa é cliente. Em implementação.
Corpodetailstring até 5000, aceita nullNãoSó em AFFINITY e ATTENTION; gravado aparado. Em implementação.

Saída

HTTPCampoTipoDescrição
200id, personId, type, content, preferenceCategory, attentionKind, caseId, detail, authorUserId, createdAt, updatedAtVer GETRegistro alterado com o mesmo schema de items[] da listagem.

Erros

HTTPerrorCodeCondição
400VALIDATION_FAILEDpersonId ou id fora do formato UUID; corpo inválido.
401UNAUTHORIZEDSem credencial válida.
403FORBIDDENToken de sistema.
404NOT_FOUNDPessoa inexistente ou fora do alcance; registro inexistente ou de outra Pessoa.
422RULE_VIOLATIONCampo enviado a tipo que não o aceita; ATTENTION sem attentionKind; caseId de processo em que a pessoa não é cliente. Em implementação.
500INTERNALFalha não tratada.

DELETE /v1/people/{personId}/relationship-records/{id}

Exclui o registro e grava person-relationship-record.deleted no histórico da Pessoa.

Autenticação e autorização: Bearer de usuário pessoal com a mesma autorização de edição da Pessoa (RN-PESSOAS-062).

Entrada

LocalCampoTipoObrigatórioCondição
CaminhopersonIdUUIDSimPessoa dona do registro.
CaminhoidUUIDSimRegistro excluído.

Saída

HTTPCampoTipoDescrição
204—Sem corpoRegistro excluído.

Erros

HTTPerrorCodeCondição
400VALIDATION_FAILEDpersonId ou id fora do formato UUID.
401UNAUTHORIZEDSem credencial válida.
403FORBIDDENToken de sistema.
404NOT_FOUNDPessoa inexistente ou fora do alcance; registro inexistente ou de outra Pessoa.
500INTERNALFalha não tratada.

Notas de atendimento

Estado: em implementação na API.

A nota de atendimento é o registro simplificado feito na Ficha da Pessoa: texto, forma, quem iniciou, finalidade, satisfação, autor e data. Ela usa os vocabulários de modo, canal, direção e finalidade do Registro de Atendimento, mas não é um Registro de Atendimento (/v1/service-records) e não tem unidade, núcleo, assuntos nem ciclo de vida (RN-PESSOAS-066).

GET /v1/people/{personId}/service-notes

Lista as notas de atendimento da Pessoa do mais recente ao mais antigo (createdAt e id decrescentes), paginadas por cursor.

Autenticação e autorização: Bearer autenticado; Pessoa no alcance de leitura do ator.

Entrada

LocalCampoTipoObrigatórioCondição
CaminhopersonIdUUIDSimPessoa atendida.
QuerycursorstringNãoCursor opaco devolvido em nextCursor.
Querylimitnumber de 1 a 200Não, padrão 50Tamanho da página.

Saída

HTTPCampoTipoDescrição
200items[].idUUIDIdentificador da nota.
200items[].personIdUUIDPessoa atendida.
200items[].contentstringO que foi tratado no atendimento: texto ou HTML do editor da ficha, com menções.
200items[].modePRESENCIAL, REMOTO ou nullForma do atendimento; null só em nota registrada antes do campo.
200items[].channelWHATSAPP, TELEFONE, VIDEOCONFERENCIA, EMAIL, REDE_SOCIAL ou nullCanal remoto; null quando presencial ou em nota registrada antes do campo.
200items[].directionINBOUND, OUTBOUND ou nullQuem iniciou: INBOUND (Recebido) ou OUTBOUND (Realizado); null só em nota registrada antes do campo.
200items[].purposeAVULSO, ENTREVISTA_INAUGURAL, ACOMPANHAMENTO, SOLICITACAO, ORIENTACAO, FINANCEIRO ou nullFinalidade; null quando não informada.
200items[].satisfactionSATISFEITO, INDIFERENTE, INSATISFEITO, CRITICO, SEM_RESPOSTA ou nullSatisfação da pessoa; null quando não informada.
200items[].authorUserIdUUID ou nullUsuário que registrou; null após a exclusão do usuário.
200items[].createdAtdata e hora ISO 8601Data do atendimento: o instante do registro.
200nextCursorstring ou nullCursor da próxima página.

Erros

HTTPerrorCodeCondição
400VALIDATION_FAILEDpersonId fora do formato UUID ou cursor inválido.
401UNAUTHORIZEDSem credencial válida.
403FORBIDDENAlcance efetivo do ator indisponível ou inválido.
404NOT_FOUNDPessoa inexistente ou fora do alcance do ator.
500INTERNALFalha não tratada.

POST /v1/people/{personId}/service-notes

Registra uma nota de atendimento e grava person-service-note.created no histórico da Pessoa.

Autenticação e autorização: Bearer de usuário pessoal com a autorização de edição da Pessoa.

Entrada — JSON

LocalCampoTipoObrigatórioCondição
CaminhopersonIdUUIDSimPessoa atendida.
Corpocontentstring com texto, até 20000SimO que foi tratado: texto ou o HTML do editor da ficha, como o relato da entrevista, com menções; gravado aparado. Marcação sem texto (<p></p>) é recusada.
CorpomodePRESENCIAL ou REMOTOSimForma do atendimento.
CorpochannelWHATSAPP, TELEFONE, VIDEOCONFERENCIA, EMAIL ou REDE_SOCIAL, aceita nullCom REMOTOCanal remoto; obrigatório quando mode é REMOTO e ausente (ou null) quando é PRESENCIAL.
CorpodirectionINBOUND ou OUTBOUNDSimQuem iniciou: INBOUND (Recebido) ou OUTBOUND (Realizado).
CorpopurposeAVULSO, ENTREVISTA_INAUGURAL, ACOMPANHAMENTO, SOLICITACAO, ORIENTACAO ou FINANCEIRO, aceita nullNãoFinalidade, um único valor.
CorposatisfactionSATISFEITO, INDIFERENTE, INSATISFEITO, CRITICO ou SEM_RESPOSTA, aceita nullNãoSatisfação da pessoa.

Saída

HTTPCampoTipoDescrição
201id, personId, content, mode, channel, direction, purpose, satisfaction, authorUserId, createdAtVer GETNota registrada; authorUserId é o ator.

Erros

HTTPerrorCodeCondição
400VALIDATION_FAILEDpersonId fora do formato UUID; corpo inválido, sem mode ou direction, ou com valor fora dos vocabulários.
401UNAUTHORIZEDSem credencial válida.
403FORBIDDENToken de sistema.
404NOT_FOUNDPessoa inexistente, fora do alcance ou sem permissão de editá-la.
422RULE_VIOLATIONmode REMOTO sem channel, ou mode PRESENCIAL com channel.
500INTERNALFalha não tratada.

Resumo do Relacionamento

Estado: em implementação na API.

Texto gerado a partir dos registros de relacionamento da Pessoa, conforme RN-PESSOAS-068.

GET /v1/people/{personId}/relationship-summary

Lê o último resumo e informa se ele reflete os dados atuais. Ler nunca gera texto.

Autenticação e autorização: Bearer autenticado; Pessoa no alcance de leitura do ator.

Entrada

LocalCampoTipoObrigatórioCondição
CaminhopersonIdUUIDSimPessoa resumida.

Saída

HTTPCampoTipoDescrição
200textstring ou nullÚltimo texto gerado; null quando ainda não houve geração.
200generatedAtdata e hora ISO 8601 ou nullQuando o texto foi gerado; null sem texto.
200upToDatebooleantrue quando o texto reflete os dados atuais; false pede POST …/refresh.

Erros

HTTPerrorCodeCondição
400VALIDATION_FAILEDpersonId fora do formato UUID.
401UNAUTHORIZEDSem credencial válida.
404NOT_FOUNDPessoa inexistente ou fora do alcance do ator.
500INTERNALFalha não tratada.

POST /v1/people/{personId}/relationship-summary/refresh

Avalia a mudança dos dados de origem e gera novo resumo somente quando ela é material (RN-PESSOAS-068). Não recebe corpo.

Autenticação e autorização: Bearer de usuário pessoal; Pessoa no alcance de leitura do ator.

Entrada

LocalCampoTipoObrigatórioCondição
CaminhopersonIdUUIDSimPessoa resumida.

Saída

HTTPCampoTipoDescrição
200textstring ou nullÚltimo texto gerado; null quando ainda não houve geração.
200generatedAtdata e hora ISO 8601 ou nullQuando o texto foi gerado; null sem texto.
200upToDatebooleantrue quando o texto reflete os dados atuais; false pede POST …/refresh.

Falha da avaliação ou do provedor não responde erro: devolve o texto anterior com upToDate: false.

Erros

HTTPerrorCodeCondição
400VALIDATION_FAILEDpersonId fora do formato UUID.
401UNAUTHORIZEDSem credencial válida.
403FORBIDDENToken de sistema.
404NOT_FOUNDPessoa inexistente ou fora do alcance do ator.
500INTERNALFalha não tratada.

Credenciais de serviço

Credencial de acesso da Pessoa a um serviço externo. A senha é gravada cifrada e só sai em claro pela operação própria de leitura da senha, que registra a leitura no histórico da Pessoa. Criação, alteração, exclusão e leitura da senha gravam person-credential.created, .updated, .deleted e .secret-viewed.

GET /v1/people/{personId}/credentials

Lista as credenciais da Pessoa em ordem de criação, sem a senha.

Autenticação e autorização: Bearer de usuário com Acesso de Núcleo ou superior; Pessoa no alcance de leitura do ator.

Entrada

LocalCampoTipoObrigatórioCondição
CaminhopersonIdUUIDSimPessoa dona da credencial.
QuerycursorstringNãoCursor opaco devolvido em nextCursor.
Querylimitnumber de 1 a 200Não, padrão 50Tamanho da página.

Saída

HTTPCampoTipoDescrição
200items[].idUUIDIdentificador da credencial.
200items[].personIdUUIDPessoa dona da credencial.
200items[].servicestringServiço externo.
200items[].loginstringLogin no serviço.
200items[].urlstring ou nullEndereço de acesso ao serviço. Em implementação.
200items[].authorUserIdUUID ou nullUsuário que registrou a credencial.
200items[].createdAt, items[].updatedAtdata e hora ISO 8601Trilha temporal.
200nextCursorstring ou nullCursor da próxima página.

Erros

HTTPerrorCodeCondição
400VALIDATION_FAILEDpersonId fora do formato UUID ou cursor inválido.
401UNAUTHORIZEDSem credencial válida.
403FORBIDDENPerfil abaixo de Acesso de Núcleo.
404NOT_FOUNDPessoa inexistente ou fora do alcance; credencial inexistente ou de outra Pessoa.
503UPSTREAM_UNAVAILABLECredencial de serviço desligada no servidor.

POST /v1/people/{personId}/credentials

Registra uma credencial de serviço.

Autenticação e autorização: Bearer de usuário com Acesso de Núcleo ou superior e a autorização de edição da Pessoa.

Entrada

LocalCampoTipoObrigatórioCondição
CaminhopersonIdUUIDSimPessoa dona da credencial.
Corposervicestring não vazia, até 60SimServiço externo a que a credencial dá acesso.
Corpologinstring não vazia, até 255SimLogin no serviço.
Corpourlstring até 2048, aceita nullNãoEndereço de acesso ao serviço; http ou https com protocolo explícito. url em implementação.
Corposecretstring não vazia, até 255SimSenha em claro; gravada só cifrada e nunca devolvida por esta operação.

Saída

HTTPCampoTipoDescrição
201id, personId, service, login, url, authorUserId, createdAt, updatedAtVer GETCredencial criada, sem a senha.

Erros

HTTPerrorCodeCondição
400VALIDATION_FAILEDpersonId fora do formato UUID ou corpo inválido.
401UNAUTHORIZEDSem credencial válida.
403FORBIDDENPerfil abaixo de Acesso de Núcleo.
404NOT_FOUNDPessoa inexistente ou fora do alcance; credencial inexistente ou de outra Pessoa.
503UPSTREAM_UNAVAILABLECredencial de serviço desligada no servidor.

PATCH /v1/people/{personId}/credentials/{id}

Altera os campos enviados; campo ausente não muda. secret enviado substitui a senha cifrada.

Autenticação e autorização: Bearer de usuário com Acesso de Núcleo ou superior e a autorização de edição da Pessoa.

Entrada

LocalCampoTipoObrigatórioCondição
CaminhopersonIdUUIDSimPessoa dona da credencial.
CaminhoidUUIDSimCredencial.
Corposervicestring não vazia, até 60NãoServiço externo a que a credencial dá acesso.
Corpologinstring não vazia, até 255NãoLogin no serviço.
Corpourlstring até 2048, aceita nullNãoEndereço de acesso ao serviço; http ou https com protocolo explícito. url em implementação.
Corposecretstring não vazia, até 255NãoSenha em claro; gravada só cifrada e nunca devolvida por esta operação.

Saída

HTTPCampoTipoDescrição
200id, personId, service, login, url, authorUserId, createdAt, updatedAtVer GETCredencial alterada, sem a senha.

Erros

HTTPerrorCodeCondição
400VALIDATION_FAILEDid fora do formato UUID ou corpo inválido.
401UNAUTHORIZEDSem credencial válida.
403FORBIDDENPerfil abaixo de Acesso de Núcleo.
404NOT_FOUNDPessoa inexistente ou fora do alcance; credencial inexistente ou de outra Pessoa.
503UPSTREAM_UNAVAILABLECredencial de serviço desligada no servidor.

DELETE /v1/people/{personId}/credentials/{id}

Exclui a credencial.

Autenticação e autorização: Bearer de usuário com Acesso de Núcleo ou superior e a autorização de edição da Pessoa.

Entrada

LocalCampoTipoObrigatórioCondição
CaminhopersonIdUUIDSimPessoa dona da credencial.
CaminhoidUUIDSimCredencial.

Saída

HTTPCampoTipoDescrição
204—Sem corpoCredencial excluída.

Erros

HTTPerrorCodeCondição
400VALIDATION_FAILEDpersonId ou id fora do formato UUID.
401UNAUTHORIZEDSem credencial válida.
403FORBIDDENPerfil abaixo de Acesso de Núcleo.
404NOT_FOUNDPessoa inexistente ou fora do alcance; credencial inexistente ou de outra Pessoa.
503UPSTREAM_UNAVAILABLECredencial de serviço desligada no servidor.

GET /v1/people/{personId}/credentials/{id}/secret

Devolve a senha em claro e grava person-credential.secret-viewed no histórico da Pessoa a cada leitura.

Autenticação e autorização: Bearer de usuário com Acesso de Núcleo ou superior; Pessoa no alcance de leitura do ator.

Entrada

LocalCampoTipoObrigatórioCondição
CaminhopersonIdUUIDSimPessoa dona da credencial.
CaminhoidUUIDSimCredencial.

Saída

HTTPCampoTipoDescrição
200secretstringSenha em claro da credencial.

Erros

HTTPerrorCodeCondição
400VALIDATION_FAILEDpersonId ou id fora do formato UUID.
401UNAUTHORIZEDSem credencial válida.
403FORBIDDENPerfil abaixo de Acesso de Núcleo.
404NOT_FOUNDPessoa inexistente ou fora do alcance; credencial inexistente ou de outra Pessoa.
503UPSTREAM_UNAVAILABLECredencial de serviço desligada no servidor.

Checklist de documentos

GET /v1/people/{personId}/document-checklist

Os quatro itens do checklist, sempre presentes, mesmo sem nenhum confirmado.

Autenticação e autorização: Bearer autenticado; pessoa no alcance do ator.

Entrada

LocalCampoTipoObrigatórioCondição
CaminhopersonIdUUIDSimIdentificador da Pessoa.

Saída

HTTPCampoTipoDescrição
200[]array de 4 itensUm item por kind.
200[].personIdstringIdentificador da Pessoa.
200[].kindprocuracao, identidade_cpf, comprovante_residencia ou contrato_honorariosTipo do item.
200[].statuspendente ou confirmadoEstado do item.
200[].authorUserIdstring ou nullAutor da última mudança; null quando nunca tocado ou autor excluído.
200[].createdAtdata e hora ISO 8601 ou nullnull quando o item é virtual.
200[].updatedAtdata e hora ISO 8601 ou nullnull quando o item é virtual.

Erros

HTTPerrorCodeCondição
400VALIDATION_FAILEDpersonId fora do formato UUID.
404NOT_FOUNDPessoa inexistente ou fora do alcance do ator.

PATCH /v1/people/{personId}/document-checklist/{kind}

Confirma ou marca pendente um item; upsert idempotente, sem máquina de estados.

Autenticação e autorização: Bearer de usuário pessoal com Acesso de Núcleo ou superior e pessoa no alcance.

Entrada — JSON

LocalCampoTipoObrigatórioCondição
CaminhopersonIdUUIDSimIdentificador da Pessoa.
Caminhokindprocuracao, identidade_cpf, comprovante_residencia ou contrato_honorariosSimTipo do item.
Corpostatuspendente ou confirmadoSimNovo estado; reversível.

Saída

HTTPCampoTipoDescrição
200personIdstringIdentificador da Pessoa.
200kindenumTipo do item.
200statuspendente ou confirmadoEstado gravado.
200authorUserIdstring ou nullAutor da mudança.
200createdAtdata e hora ISO 8601Criação do item.
200updatedAtdata e hora ISO 8601Última mudança.

Erros

HTTPerrorCodeCondição
400VALIDATION_FAILEDpersonId fora do formato UUID, kind fora dos quatro tipos ou status fora do enum.
403FORBIDDENPerfil abaixo de Acesso de Núcleo.
404NOT_FOUNDPessoa inexistente ou fora do alcance do ator.

Catálogo de Representados

Catálogo institucional de quem um advogado externo representa. Não tem escopo por núcleo: qualquer usuário autenticado lê; a escrita exige Acesso de Núcleo ou superior.

GET /v1/represented-parties

Página do catálogo, do mais antigo ao mais novo, com busca por nome e filtro por tipo.

Autenticação e autorização: Bearer autenticado.

Entrada

LocalCampoTipoObrigatórioCondição
Querysearchstring até 255NãoBusca por nome, ignorando caixa; termo em branco é ignorado.
QuerykindCOMPANY, PUBLIC_BODY, NONPROFIT, UNION, COOPERATIVE, CONDOMINIUM, INDIVIDUAL ou OTHERNãoSomente Representados de um tipo.
QuerycursorstringNãoCursor opaco devolvido em nextCursor.
Querylimitnumber de 1 a 200Não, padrão 50Tamanho da página.

Saída

HTTPCampoTipoDescrição
200itemsarray de RepresentadosVer Representado em Convenções.
200nextCursorstring ou nullCursor da próxima página.

Erros

HTTPerrorCodeCondição
400VALIDATION_FAILEDCursor malformado; limit fora de 1 a 200; search acima de 255; kind fora do vocabulário.

POST /v1/represented-parties

Cadastra um Representado.

Autenticação e autorização: Bearer de usuário pessoal com Acesso de Núcleo ou superior.

Entrada — JSON

LocalCampoTipoObrigatórioCondição
Corponamestring de 1 a 255SimAparado.
CorpokindCOMPANY, PUBLIC_BODY, NONPROFIT, UNION, COOPERATIVE, CONDOMINIUM, INDIVIDUAL ou OTHERSimTipo de Representado.

Saída

HTTPCampoTipoDescrição
201Campos de RepresentadoVer ConvençõesRepresentado criado.

Erros

HTTPerrorCodeCondição
400VALIDATION_FAILEDname fora de 1 a 255; kind fora do vocabulário; propriedade desconhecida.
403FORBIDDENPerfil abaixo de Acesso de Núcleo ou token de sistema.
409CONFLICTJá existe Representado com este nome e este tipo, sem distinção de caixa.

GET /v1/represented-parties/{id}

Um Representado do catálogo.

Autenticação e autorização: Bearer autenticado.

Entrada

LocalCampoTipoObrigatórioCondição
CaminhoidUUIDSimIdentificador do Representado.

Saída

HTTPCampoTipoDescrição
200Campos de RepresentadoVer ConvençõesRepresentado.

Erros

HTTPerrorCodeCondição
400VALIDATION_FAILEDid fora do formato UUID.
404NOT_FOUNDRepresentado inexistente.

PATCH /v1/represented-parties/{id}

Altera nome e/ou tipo; o par resultante continua único.

Autenticação e autorização: Bearer de usuário pessoal com Acesso de Núcleo ou superior.

Entrada — JSON

LocalCampoTipoObrigatórioCondição
CaminhoidUUIDSimIdentificador do Representado.
Corponamestring de 1 a 255NãoAparado.
Corpokindenum de tipo de RepresentadoNãoDentro do vocabulário fechado.

Saída

HTTPCampoTipoDescrição
200Campos de RepresentadoVer ConvençõesRepresentado atualizado.

Erros

HTTPerrorCodeCondição
400VALIDATION_FAILEDid fora do formato UUID ou corpo inválido.
403FORBIDDENPerfil abaixo de Acesso de Núcleo ou token de sistema.
404NOT_FOUNDRepresentado inexistente.
409CONFLICTJá existe Representado com este nome e este tipo.

DELETE /v1/represented-parties/{id}

Apaga o Representado.

Autenticação e autorização: Bearer de usuário pessoal com Acesso de Núcleo ou superior.

Entrada

LocalCampoTipoObrigatórioCondição
CaminhoidUUIDSimIdentificador do Representado.

Saída

HTTPCampoTipoDescrição
204—Sem corpoRepresentado apagado.

Erros

HTTPerrorCodeCondição
400VALIDATION_FAILEDid fora do formato UUID.
403FORBIDDENPerfil abaixo de Acesso de Núcleo ou token de sistema.
404NOT_FOUNDRepresentado inexistente.
409CONFLICTRepresentado ainda vinculado a alguma pessoa.

Operações de outros domínios sob /v1/people

As rotas abaixo são montadas sob o caminho da pessoa, aplicam o alcance da pessoa e pertencem a outros domínios, que documentam seus contratos:

  • GET e POST /v1/people/{personId}/portfolio-transfers — histórico e transferência de Cliente da Carteira (Expansão; exige gestão EXPINS).

  • GET /v1/portfolios?ownerPersonId= e GET /v1/portfolios/{id} — carteira própria da Pessoa Parceira (Expansão; PortfolioDto traz ownerPersonId).

  • GET /v1/people/{personId}/dossier — Documentos e dossiês.

  • GET /v1/people/{personId}/service-desk/tickets e GET /v1/people/{personId}/service-desk/messages — Integrações (DigiSac).

Integração com Projuris Legado

As consultas externas de anexos, processos e entrevistas pertencerão ao módulo Projuris Legado. O contrato está pendente de revisão pelo responsável; esta seção não especifica endpoints vigentes para essas consultas.

Camadas do domínio