Merchants

Integre e gerencie os merchants da sua organization — crie, atualize, desative ou exclua merchants, revise o histórico de atividades deles e gerencie seus membros e convites.

Um merchant é um negócio que você integra à sua organization. Todo recurso voltado a pagamentos no Tokeflow — clientes, transações, pedidos, catálogo, conectores — pertence a exatamente um merchant, portanto o merchant é a unidade de isolamento para dados, configuração de roteamento e escopo de chaves de API.

Esta página cobre a superfície de merchants em nível de organization: listar e integrar merchants, atualizar seus detalhes, desativá-los, ler seu histórico de atividades e gerenciar os membros (usuários do dashboard) de cada merchant. Criar um merchant também provisiona seu primeiro proprietário: você informa um primary_email, e o Tokeflow envia a essa pessoa um convite para o dashboard do merchant.

Esses endpoints aceitam apenas chaves de API de Organization. Chaves de Merchant são restritas a um único merchant e não podem gerenciar o cadastro de merchants — chamadas com uma chave de Merchant retornam 403. Consulte Autenticação.

Ciclo de vida do merchant

Dois momentos do ciclo de vida merecem atenção. Primeiro, uma vez que um merchant é credenciado nas redes de cartões (para o provisionamento de tokens de rede), os campos enviados no credenciamento — name, website, mcc e o endereço — ficam fixos nas redes e não podem mais ser alterados via PATCH. Segundo, a exclusão é reservada para merchants criados por engano: um merchant com qualquer atividade é mantido para relatórios e reconciliação, e o DELETE recusa a operação com 409. Desative-o em vez disso.

O objeto de merchant

FieldTypeDescription
idstringID exclusivo do merchant, prefixado com mrc_.
organization_idstringOrganization à qual este merchant pertence, prefixado com org_.
namestringNome do merchant.
slugstringSlug do merchant — identificador único, seguro para uso em URL. Gerado automaticamente na criação quando não informado.
external_referencestring | nullSua própria referência/ID para este merchant, devolvida nas respostas para fins de reconciliação.
business_registration_numberstringNúmero de registro empresarial (identificação fiscal — CNPJ, EIN, VAT).
mccstringMerchant Category Code (MCC), quatro dígitos.
phone_numberstringNúmero de telefone de contato, no formato E.164. A entrada é aceita em qualquer formato legível por humanos e normalizada antes do armazenamento, então as respostas sempre trazem a forma canônica.
addressobjectEndereço do merchant. Consulte O objeto de endereço.
websitestring | nullURL do site oficial.
network_tokens_enabledbooleanSe o provisionamento de network tokens está ligado para os cartões salvos neste merchant. Opt-in explícito, false por padrão; veja Network tokens.
saved_card_checkout_enabledbooleanSe o servidor deste merchant pode pagar uma sessão de checkout com um cartão salvo do cliente (credencial de provedor armazenada, sem CVV). Opt-in explícito, false por padrão; veja Checkout com cartão salvo.
statusstringUm dos seguintes: active, inactive, suspended.
created_atstringTimestamp de quando o merchant foi criado (ISO 8601 UTC).
updated_atstringTimestamp da última atualização do merchant (ISO 8601 UTC).

Status do merchant

ValueMeaning
activeOperando normalmente. Novos merchants são criados neste status.
inactiveDesativado. Use para retirar um merchant mantendo seus registros para relatórios.
suspendedBloqueado temporariamente pela organization.

Network tokens

A Tokeflow pode provisionar um network token para cada cartão salvo em um merchant, para que as credenciais armazenadas continuem funcionando após reemissões e vencimentos. O provisionamento é um opt-in explícito por merchant: network_tokens_enabled é false para um merchant novo e nada é provisionado até que você o defina como true via PATCH. Os tokens são cobrados por provisionamento, e o merchant precisa estar credenciado nas redes de cartão antes (o credenciamento acontece automaticamente quando website, mcc e o endereço estão completos). Desligar a flag interrompe novos provisionamentos; os cartões salvos continuam funcionando pelas credenciais de provedor guardadas no cadastro, que são também o que as cobranças em um clique usam.

Checkout com cartão salvo

saved_card_checkout_enabled permite que seu servidor pague uma sessão de checkout com um cartão que o cliente salvou antes — checkout_session_id mais payment_instrument_id e credential_on_file: true em POST /transactions — em vez de pedir o cartão de novo. Ele é false para todo merchant até que você o defina como true via PATCH. Ativá-lo é uma declaração de que seu servidor autentica o cliente antes de identificá-lo em uma sessão: em uma sessão, a Tokeflow nunca vê o portador do cartão, então a cobrança depende do seu login. Enquanto estiver desativado, qualquer uso de cartão salvo em uma sessão sem um card_ciphertext_id novo é recusado com 400.

Configurações que a Tokeflow pode sobrescrever

network_tokens_enabled e saved_card_checkout_enabled são configurações próprias do merchant. A Tokeflow também pode ligar ou desligar qualquer um desses recursos para uma organization inteira ou para um único merchant — por exemplo, durante a liberação gradual de um recurso — e essa configuração prevalece. O valor que você lê no merchant é, portanto, o que você escolheu, e o comportamento efetivo pode ser diferente dele. Uma requisição recusada por causa de uma configuração da Tokeflow diz isso na mensagem de erro; para que ela seja revista, entre em contato com a equipe da Tokeflow.

O objeto de endereço

FieldTypeDescription
line_1stringRua e número.
line_2stringApartamento, sala, etc. Opcional.
zip_codestringCEP/código postal.
citystringCidade.
statestringCódigo do estado/província.
countrystringCódigo de país ISO 3166-1 alfa-2, por exemplo BR.

O objeto de membro

Membros são os usuários do dashboard de um merchant. Um membro é uma associação: o vínculo entre uma identidade de usuário (única por e-mail dentro da sua organization) e um merchant, com um papel. A mesma pessoa pode ter associações em vários merchants.

FieldTypeDescription
membership_idstringID da associação — identifica este vínculo de usuário com este merchant.
user_idstringID do usuário — a identidade subjacente, compartilhada entre as associações do usuário.
emailstringE-mail do usuário.
namestringNome de exibição do usuário.
rolestringPapel dentro do merchant: owner, admin ou viewer.
joined_atstringData em que o usuário ingressou no merchant.
statusstringactive assim que o convite é aceito, pending até lá.
invitation_expires_atstring | nullQuando o convite pendente expira; null quando o membro está active.

Endpoints

GET/api/v1/merchants

OrgMerchant

Autenticação: apenas chave de Organization. Escopo: merchants:read.

Retorna uma lista paginada dos merchants pertencentes à organization autenticada. Permite filtrar por status.

Parâmetros de consulta

FieldTypeRequiredDescription
statusstringNãoFiltrar por status: active, inactive ou suspended.
pageintegerNãoNúmero da página, indexado a partir de 1 (padrão 1, mínimo 1).
limitintegerNãoItens por página (padrão 20, máximo 100).

Exemplo de requisição

curl -G https://api.tokeflow.com/api/v1/merchants \
  -H "Authorization: Bearer sk_live_org_…" \
  --data-urlencode "status=active" \
  --data-urlencode "page=1" \
  --data-urlencode "limit=20"

Exemplo de resposta — 200 OK

{
  "data": [
    {
      "id": "mrc_123",
      "organization_id": "org_123",
      "name": "John's Store",
      "slug": "johns-store",
      "external_reference": "internal_id_99",
      "business_registration_number": "12345678000199",
      "mcc": "5732",
      "phone_number": "+5511999990000",
      "address": {
        "line_1": "Av Paulista, 1000",
        "line_2": "Conj 42",
        "zip_code": "01310-100",
        "city": "São Paulo",
        "state": "SP",
        "country": "BR"
      },
      "website": "https://johnsstore.com.br",
      "network_tokens_enabled": false,
      "saved_card_checkout_enabled": false,
      "status": "active",
      "created_at": "2025-01-15T10:30:00Z",
      "updated_at": "2025-11-28T12:10:00Z"
    }
  ],
  "meta": {
    "pagination": {
      "page": 1,
      "limit": 20,
      "total": 6,
      "total_pages": 1,
      "has_next": false,
      "has_prev": false
    }
  }
}

Consulte Paginação e filtragem para saber como percorrer todas as páginas.


POST/api/v1/merchants

OrgMerchant

Autenticação: apenas chave de Organization. Escopo: merchants:write.

Integra um novo merchant à sua organization. O merchant é criado com status active, e a pessoa em primary_email se torna seu primeiro proprietário: se já existir um usuário com esse e-mail na sua organization, ele recebe uma associação no novo merchant; caso contrário, uma identidade é provisionada e um e-mail de convite é enviado para que a pessoa defina uma senha. Os e-mails são comparados sem diferenciar maiúsculas de minúsculas.

Campos da requisição

FieldTypeRequiredDescription
namestringSimNome comercial do merchant. Deve conter pelo menos um caractere alfanumérico.
primary_emailstringSimE-mail do proprietário inicial do merchant. O endereço é a identidade — veja acima.
primary_namestringNãoNome de exibição opcional para o proprietário do merchant.
external_referencestringNãoSua própria referência/ID para este merchant.
business_registration_numberstringNãoNúmero de registro empresarial (CNPJ, EIN, VAT).
mccstringNãoMerchant Category Code (MCC), quatro dígitos (por exemplo, 5732).
websitestringNãoURL do site do merchant. Obrigatório antes que sessões 3DS possam ser criadas para o merchant.
phone_numberstringNãoNúmero de telefone comercial em formato internacional.
addressobjectNãoEndereço comercial. Consulte O objeto de endereço.
slugstringNãoSlug único para o merchant. Gerado automaticamente quando não informado.

Exemplo de requisição

curl -X POST https://api.tokeflow.com/api/v1/merchants \
  -H "Authorization: Bearer sk_live_org_…" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "John'\''s Store",
    "primary_email": "owner@johnsstore.com",
    "primary_name": "John Smith",
    "external_reference": "internal_id_99",
    "business_registration_number": "12345678000199",
    "mcc": "5732",
    "website": "https://johnsstore.com.br",
    "phone_number": "+55 11 99999-0000",
    "address": {
      "line_1": "Av Paulista, 1000",
      "zip_code": "01310-100",
      "city": "São Paulo",
      "state": "SP",
      "country": "BR"
    }
  }'

Exemplo de resposta — 201 Created

{
  "id": "mrc_123",
  "organization_id": "org_123",
  "name": "John's Store",
  "slug": "johns-store",
  "external_reference": "internal_id_99",
  "status": "active",
  "created_at": "2025-11-28T12:10:00Z"
}

A resposta de criação é um recibo compacto. Busque o objeto de merchant completo com GET /api/v1/merchants/:id. O proprietário que você provisionou via primary_email aparece na lista de membros do merchant com papel owner e status pending até que o convite seja aceito.


GET/api/v1/merchants/:id

OrgMerchant

Autenticação: apenas chave de Organization. Escopo: merchants:read.

Recupera um único merchant pertencente à organization autenticada. Retorna o objeto de merchant completo.

Exemplo de requisição

curl https://api.tokeflow.com/api/v1/merchants/mrc_123 \
  -H "Authorization: Bearer sk_live_org_…"

Exemplo de resposta — 200 OK

{
  "id": "mrc_123",
  "organization_id": "org_123",
  "name": "John's Store",
  "slug": "johns-store",
  "external_reference": "internal_id_99",
  "business_registration_number": "12345678000199",
  "mcc": "5732",
  "phone_number": "+5511999990000",
  "address": {
    "line_1": "Av Paulista, 1000",
    "line_2": "Conj 42",
    "zip_code": "01310-100",
    "city": "São Paulo",
    "state": "SP",
    "country": "BR"
  },
  "website": "https://johnsstore.com.br",
  "network_tokens_enabled": false,
  "saved_card_checkout_enabled": false,
  "status": "active",
  "created_at": "2025-01-15T10:30:00Z",
  "updated_at": "2025-01-15T10:30:00Z"
}

Um 404 (not_found_error) é retornado se o merchant não existir ou não pertencer à organization autenticada.


PATCH/api/v1/merchants/:id

OrgMerchant

Autenticação: apenas chave de Organization. Escopo: merchants:write.

Atualiza um merchant. Todos os campos do corpo são opcionais; apenas os campos enviados são alterados.

Uma vez que o merchant esteja credenciado nas redes de cartões, os campos enviados no credenciamento — name, website, mcc e address — ficam fixos nas redes e não podem mais ser alterados; tentar fazê-lo retorna 409 (conflict_error). status, phone_number, business_registration_number e external_reference permanecem editáveis durante toda a vida do merchant.

Campos da requisição

FieldTypeRequiredDescription
namestringNãoNome do merchant. Deve conter pelo menos um caractere alfanumérico. Bloqueado após o credenciamento na rede de cartões.
statusstringNãoUm dos seguintes: active, inactive, suspended.
external_referencestringNãoSua própria referência/ID para este merchant.
business_registration_numberstringNãoNúmero de registro empresarial (CNPJ, EIN, VAT).
mccstringNãoMerchant Category Code (MCC), quatro dígitos. Bloqueado após o credenciamento na rede de cartões.
websitestringNãoURL do site do merchant. Obrigatório antes que sessões 3DS possam ser criadas para o merchant. Bloqueado após o credenciamento na rede de cartões.
phone_numberstringNãoNúmero de telefone comercial em formato internacional.
addressobjectNãoEndereço comercial. Consulte O objeto de endereço. Bloqueado após o credenciamento na rede de cartões.
network_tokens_enabledbooleanNãoInclui este merchant (true) ou o retira (false) do provisionamento de network tokens para seus cartões salvos. Veja Network tokens.
saved_card_checkout_enabledbooleanNãoInclui este merchant (true) ou o retira (false) do pagamento de sessões de checkout com o cartão salvo de um cliente. Deve ser um booleano JSON — a string "false" é rejeitada. Veja Checkout com cartão salvo.

Exemplo de requisição — desativar um merchant

curl -X PATCH https://api.tokeflow.com/api/v1/merchants/mrc_123 \
  -H "Authorization: Bearer sk_live_org_…" \
  -H "Content-Type: application/json" \
  -d '{ "status": "inactive" }'

Exemplo de resposta — 200 OK

{
  "id": "mrc_123",
  "organization_id": "org_123",
  "name": "John's Store",
  "slug": "johns-store",
  "external_reference": "internal_id_99",
  "business_registration_number": "12345678000199",
  "mcc": "5732",
  "phone_number": "+5511999990000",
  "address": {
    "line_1": "Av Paulista, 1000",
    "line_2": "Conj 42",
    "zip_code": "01310-100",
    "city": "São Paulo",
    "state": "SP",
    "country": "BR"
  },
  "website": "https://johnsstore.com.br",
  "network_tokens_enabled": false,
  "saved_card_checkout_enabled": false,
  "status": "inactive",
  "created_at": "2025-01-15T10:30:00Z",
  "updated_at": "2025-11-28T14:00:00Z"
}

DELETE/api/v1/merchants/:id

OrgMerchant

Autenticação: apenas chave de Organization. Escopo: merchants:write.

Exclui permanentemente um merchant que nunca foi usado — sem transações, pedidos, clientes, catálogo, formas de pagamento salvas, chaves de API ativas ou credenciamento na rede de cartões. Qualquer outro caso é recusado com 409, porque merchants com atividade são mantidos para relatórios e reconciliação.

Este endpoint existe para o caso de um merchant criado por engano — espere que a recusa seja o resultado mais comum. Para retirar um merchant que já tem histórico, defina seu status como inactive com PATCH em vez disso.

Exemplo de requisição

curl -X DELETE https://api.tokeflow.com/api/v1/merchants/mrc_123 \
  -H "Authorization: Bearer sk_live_org_…"

Códigos de resposta

CodeWhen
204 No ContentMerchant excluído. Sem corpo na resposta.
404 Not FoundO merchant não existe ou não é seu.
409 ConflictO merchant tem atividade ou está credenciado nas redes de cartões. Desative-o em vez disso.

GET/api/v1/merchants/:id/activity

OrgMerchant

Autenticação: apenas chave de Organization. Escopo: merchants:read.

Recupera o histórico de atividades paginado de um merchant pertencente à organization autenticada. Cada registro descreve uma ação administrativa realizada no merchant — o que mudou, por quem e quando — o que faz deste o complemento de auditoria dos endpoints acima.

Parâmetros de consulta

FieldTypeRequiredDescription
pageintegerNãoNúmero da página, indexado a partir de 1 (padrão 1, mínimo 1).
limitintegerNãoItens por página (padrão 20, máximo 100).

Exemplo de requisição

curl -G https://api.tokeflow.com/api/v1/merchants/mrc_123/activity \
  -H "Authorization: Bearer sk_live_org_…" \
  --data-urlencode "page=1" \
  --data-urlencode "limit=20"

Retorna 200 OK com uma lista paginada de registros de atividade, ou 404 se o merchant não existir ou não pertencer à sua organization.


GET/api/v1/merchants/:merchant_id/members

OrgMerchant

Autenticação: apenas chave de Organization. Escopo: merchants:read.

Lista os usuários com escopo em um merchant específico. Retorna um array paginado de objetos de membro, incluindo convites pendentes.

Parâmetros de consulta

FieldTypeRequiredDescription
pageintegerNãoNúmero da página, indexado a partir de 1 (padrão 1, mínimo 1).
limitintegerNãoItens por página (padrão 20, máximo 100).

Exemplo de requisição

curl -G https://api.tokeflow.com/api/v1/merchants/mrc_123/members \
  -H "Authorization: Bearer sk_live_org_…" \
  --data-urlencode "page=1" \
  --data-urlencode "limit=20"

Exemplo de resposta — 200 OK

{
  "data": [
    {
      "membership_id": "mum_5e8d21",
      "user_id": "usr_3c9f10",
      "email": "owner@johnsstore.com",
      "name": "John Smith",
      "role": "owner",
      "joined_at": "2025-11-28T12:10:00Z",
      "status": "active",
      "invitation_expires_at": null
    },
    {
      "membership_id": "mum_7a4b90",
      "user_id": "usr_b81c22",
      "email": "team@johnsstore.com",
      "name": "team@johnsstore.com",
      "role": "admin",
      "joined_at": "2025-12-01T09:00:00Z",
      "status": "pending",
      "invitation_expires_at": "2025-12-08T09:00:00Z"
    }
  ],
  "meta": {
    "pagination": {
      "page": 1,
      "limit": 20,
      "total": 2,
      "total_pages": 1,
      "has_next": false,
      "has_prev": false
    }
  }
}

POST/api/v1/merchants/:merchant_id/members

OrgMerchant

Autenticação: apenas chave de Organization. Escopo: merchants:write.

Convida um usuário para um merchant por e-mail. O Tokeflow localiza ou cria a identidade do usuário dentro da sua organization e adiciona uma associação no merchant com o papel informado, depois envia um e-mail de convite para que o destinatário defina uma senha. Se a pessoa já tiver uma identidade na sua organization (de outro merchant, por exemplo), essa identidade é reutilizada — o endereço de e-mail é a identidade.

Campos da requisição

FieldTypeRequiredDescription
emailstringSimE-mail do usuário a ser convidado para o merchant.
rolestringSimPapel a ser atribuído dentro do merchant: owner, admin ou viewer.
namestringNãoNome de exibição opcional (usa o e-mail como padrão).

Exemplo de requisição

curl -X POST https://api.tokeflow.com/api/v1/merchants/mrc_123/members \
  -H "Authorization: Bearer sk_live_org_…" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "team@johnsstore.com",
    "name": "Store Team",
    "role": "admin"
  }'

Exemplo de resposta — 201 Created

{
  "membership_id": "mum_7a4b90",
  "user_id": "usr_b81c22",
  "email": "team@johnsstore.com",
  "name": "Store Team",
  "role": "admin",
  "joined_at": "2025-12-01T09:00:00Z",
  "status": "pending",
  "invitation_expires_at": "2025-12-08T09:00:00Z"
}

O membro permanece pending até que o convite seja aceito. Se ele expirar antes, reenvie-o.


PATCH/api/v1/merchants/:merchant_id/members/:membership_id

OrgMerchant

Autenticação: apenas chave de Organization. Escopo: merchants:write.

Atualiza o papel de um usuário dentro de um merchant.

Campos da requisição

FieldTypeRequiredDescription
rolestringSimNovo papel para o membro: owner, admin ou viewer.

Exemplo de requisição

curl -X PATCH https://api.tokeflow.com/api/v1/merchants/mrc_123/members/mum_7a4b90 \
  -H "Authorization: Bearer sk_live_org_…" \
  -H "Content-Type: application/json" \
  -d '{ "role": "viewer" }'

Retorna 204 No Content em caso de sucesso. Sem corpo na resposta.


DELETE/api/v1/merchants/:merchant_id/members/:membership_id

OrgMerchant

Autenticação: apenas chave de Organization. Escopo: merchants:write.

Remove um usuário de um merchant. Apenas a associação é removida — a identidade de usuário subjacente mantém quaisquer associações que possua em outros merchants na sua organization.

Exemplo de requisição

curl -X DELETE https://api.tokeflow.com/api/v1/merchants/mrc_123/members/mum_7a4b90 \
  -H "Authorization: Bearer sk_live_org_…"

Retorna 204 No Content em caso de sucesso. Sem corpo na resposta.


POST/api/v1/merchants/:merchant_id/members/:membership_id/resend

OrgMerchant

Autenticação: apenas chave de Organization. Escopo: merchants:write.

Reenvia um convite pendente do merchant. O token do convite e sua expiração são rotacionados — o link antigo do e-mail deixa de funcionar — e o e-mail de convite é enviado novamente. Retorna 409 (conflict_error) se o usuário já tiver aceitado.

Exemplo de requisição

curl -X POST https://api.tokeflow.com/api/v1/merchants/mrc_123/members/mum_7a4b90/resend \
  -H "Authorization: Bearer sk_live_org_…"

Exemplo de resposta — 200 OK

{
  "membership_id": "mum_7a4b90",
  "user_id": "usr_b81c22",
  "email": "team@johnsstore.com",
  "name": "Store Team",
  "role": "admin",
  "joined_at": "2025-12-01T09:00:00Z",
  "status": "pending",
  "invitation_expires_at": "2025-12-15T10:00:00Z"
}

Observe o invitation_expires_at atualizado — a contagem regressiva reinicia a partir do reenvio.


Erros

Todo erro usa o envelope padrão. Os casos mais comuns para este recurso:

HTTPtypeTypical cause
400validation_errorCampo obrigatório ausente, mcc malformado, ou um name sem caracteres alfanuméricos.
401authentication_errorChave de API ausente ou inválida.
403authorization_errorUma chave de Merchant foi usada — esta superfície requer uma chave de Organization — ou a chave não possui o escopo necessário.
404not_found_errorMerchant (ou associação) não encontrado ou não pertencente à sua organization.
409conflict_errorExcluir um merchant com atividade, alterar um campo bloqueado pela rede após o credenciamento, ou reenviar um convite já aceito.

Consulte Erros para o envelope completo e o catálogo de tipos.

Relacionados

Nesta página