# Contas e perfis de usuário

OfferHub separa **identidade do usuário**, **contas financeiras**, e **aplicação de custódia (escrow)** em sistemas distintos.

Essa separação é intencional e necessária para:

* minimizar o risco de custódia,
* evitar armazenar dados financeiros sensíveis,
* manter compatibilidade com o escopo da API da Airtm,
* manter o Trustless Work focado na aplicação (enforcement).

***

### Responsabilidades do Sistema

#### OfferHub + Supabase (Identidade & Perfil)

Gerenciado por **Supabase**.

Responsabilidades:

* registro e login do usuário
* autenticação e sessões
* dados de perfil do marketplace
* papéis de usuário (comprador / vendedor)
* vinculação de contas externas (referência Airtm)

Recomenda-se Supabase porque fornece:

* auth (email, OAuth, magic links)
* segurança em nível de linha
* auditabilidade
* integração fácil com serviços de backend

***

#### Airtm (Conta Financeira & KYC)

Totalmente gerenciado por **Airtm**.

Responsabilidades:

* KYC e conformidade
* criação de conta financeira
* saldos
* depósitos (recargas)
* saques (pagamentos)
* contas bancárias virtuais e conexões locais

OfferHub faz **não** armazenar:

* documentos de identidade
* detalhes bancários
* saldos

***

#### Trustless Work (Escrow & Aplicação)

Gerenciado por **Trustless Work na Stellar**.

Responsabilidades:

* criação de custódia por pedido
* rastreamento de marcos
* estados de disputas
* aplicação de liberação e reembolso

O Trustless Work nunca gerencia usuários diretamente. Ele apenas aplica **papéis e assinaturas**.

***

### Fluxo de Criação de Usuário (Referência)

#### Passo 1 — Registro & Login

```
Usuário → Interface OfferHub
Interface OfferHub → Supabase Auth
Supabase → Sessão do usuário estabelecida
```

Neste ponto:

* o usuário existe no OfferHub
* o usuário tem um registro de perfil
* ainda não são permitidas ações financeiras

#### Passo 2 — Vinculação de Conta Airtm (KYC)

Quando o usuário tenta uma ação financeira (recarga, venda, saque):

```
OfferHub → Verificar: Airtm vinculado?
Se NÃO:
  → Redirecionar o usuário para o onboarding hospedado pela Airtm
```

O usuário completa na Airtm:

* registro ou login
* verificação de identidade (KYC)
* prontidão da conta

***

#### Passo 3 — Callback & Vinculação da Airtm

```
Airtm → Redirecionamento/callback para o OfferHub
OfferHub recebe:
  - airtm_user_id (ou referência)
```

OfferHub armazena a referência no Supabase:

```json
{
  "user_id": "offerhub_user_123",
  "airtm_user_id": "airtm_user_abc"
}
```

Nenhuma credencial ou saldo é armazenado.

***

#### Passo 4 — Usuário Está Habilitado Financeiramente

Após a vinculação:

* o usuário pode recarregar o saldo
* o usuário pode financiar custódias
* o usuário pode receber pagamentos

Todas as ações financeiras são orquestradas através das APIs da Airtm usando a identidade vinculada.

***

### Por Que Este Modelo é Usado

#### Por Que o Supabase Gerencia Perfis

* Identidade do marketplace ≠ identidade financeira
* Controle de acesso mais limpo
* Gerenciamento de papéis mais fácil (comprador / vendedor)
* Evita aumento do escopo de conformidade

#### Por Que a Airtm Gerencia o KYC

* Entidade regulada
* Projetada para conformidade financeira
* Evita duplicar fluxos de KYC

#### Por Que o OfferHub Apenas Orquestra

* Reduz o risco legal e técnico
* Mantém a arquitetura modular
* Torna o modelo reutilizável com outros provedores

***

### Diagrama de Sequência (Simplificado)

```
Usuário → UI → Supabase (registro/login)
Usuário → UI → Airtm (onboarding KYC)
Airtm → OfferHub (referência do usuário)
OfferHub → Supabase (vínculo armazenado)
```

***

### Restrição de Design (Importante)

OfferHub **não deve**:

* criar usuários Airtm via API
* armazenar documentos de KYC
* atuar como custodiante

Se uma plataforma exigir controle custodial completo, OfferHub não é o padrão correto.

***

### Resumo

OfferHub trata:

* **Supabase** como o sistema de registro para usuários
* **Airtm** como o sistema de registro para dinheiro
* **Trustless Work** como o sistema de registro para aplicação de custódia

O próprio OfferHub permanece como uma camada de orquestração.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.trustlesswork.com/trustless-work/v1-pt/dapps-oss/offerhub-marketplace/fluxos-principais/contas-e-perfis-de-usuario.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
