# Documentação - Cartão Virtual _De modo a melhorar a ativação de conta, reduzir custos logísticos e incentivar compras online, temos agora uma experiência digital através de uma API de geração de Cartão Virtual, que funciona no mesmo formato dos cartões físicos, nos processos de liquidação e compra. Contendo todas as etapas de: emissão, visualização, cancelamento, bloqueio e desbloqueio, e essa feature na chamada API também é atrelada ao two-factor authentication (2FA), etapas para garantir a segurança da operação._ # Épica ### [BCARDS-22] Cartão Virtual ### Histórias - **[BCARDS-41] Criar/Ativar Cartão Virtual** - **[BCARDS-56] Visualizar Cartão Virtual** - **[BCARDS-58] Bloquear Cartão Virtual** - **[BCARDS-59] Desbloquear Cartão Virtual** - **[BCARDS-57] Cancelar Cartão Virtual** # [BCARDS-41] Criar Cartão Virtual Nesta task foi criado o endpoint de criação do cartão virtual. Esse endpoint deve receber o identificador(ID) do Marktplace e o Identificador(ID) do Holder. O Marketplace faz a chamada _POST_ no endpoint **/marketplaces/{marketplaceId}/holders/{holderId}/cards/requests/virtual** para geração do Cartão Virtual. _e o "Body" recebe os seguintes requerimentos:_ { "account_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "address_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "card_type": "string", "embossing_policy_id":"3fa85f64-5717-4562-b3fc-2c963f66afa6" "phone_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "printed_card_name": "string" } Será esperado um status de resposta da API, para solicitação de cartão criado com sucesso será: - 201 CREATED ⇾ Cartão Criado _Exemplo de resposta do "Body":_ { "external_key": "bab06abb9ebf44ec924dade0c04c0de8", "account_id": "cf245b18890a4ea4b23b27390a02bebc", "holder_id": "83593676f28b470da41160269a54060c", "marketplace_id": "f71a8951368a4cc085cf7875ff44e61c", "printed_card_name": "EXAMPLE CARD", "status": "PENDING", "created_at": "2021-06-28T10:51:33.7675467", "updated_at": "2021-06-28T10:51:33.8447605", "uri": "/marketplaces/f71a8951-368a-4cc0-85cf-7875ff44e61c /holders/83593676-f28b-470d-a411-60269a54060c/cards/bab06abb-9ebf-44ec-924d-ade0c04c0de8", "embossing_policy_id": "7710a903853b41bba678a347a1adcc6e", "card_type": "VIRTUAL" } E o status de resposta da API com falha será: - 404 NOT_FOUND ⇾ O `marketplaceId` ou `holderId`, ou política de embossamento não foram encontrados ____ _Informações importantes sobre criação do cartão:_ - O Cartão Virtual não tem senha - Deve ser retornado um número aleatório de cartão atrelado à conta do cliente - Esse cartão deve apresentar as seguintes informações: - Número do Cartão - Nome do Holder - Data de Validade - CVV (o código de segurança). - Para data de validade do cartão utilize: MM/yyyy, sendo yyyy = ano corrente + 5, por exemplo: se o ano corrente é 2020, a data de validade deverá ser 01/2025. - O valor do CVV pode ser qualquer valor numérico com três dígitos obrigatoriamente. - Exceto pelo fato do cartão virtual não ter senha e sua a validação se dar pelo CVV, ele se comporta exatamente como um cartão físico, podendo ser utilizado em praticamente todos os fluxos de compra. - O Cartão não funcionará em POS físicos, ou seja, não serão aprovadas compras digitadas em ambientes físicos, somente em E-commerces, aplicativos e serviços recorrentes. - O cartão virtual, após gerado, não terá expiração após uma compra, e sim uma data de validade. - A Zoop não armazenará os dados do Cartão, porém salva a quantidade de cartões gerados por estabelecimentos comerciais (Holders) e por Marketplace, bem como o valor transacionado. - O Cartão Virtual é criado pelo sistema da Dock e retornado na nossa API para informar o Marketplace. - Todos os cartões virtuais são bloqueados quando criados. É necessário desbloqueá-lo para começar a usar. O cartão ficara em espera em uma categoria de "análise", seguindo para pendente e assim encaminhado para o usuário fazer a ativação.  ## [BCARDS-41] Ativar Cartão Virtual Nesta task foi criado o endpoint de ativação do cartão virtual. Esse endpoint deve receber o identificador(ID) do Marktplace, o Identificador(ID) do Holder e o ExternalKey(identificador do cartão). O Marketplace faz a chamada _POST_ no endpoint **/marketplaces/{marketplaceId}/holders/{holderId}/cards/{externalKey}/activate/virtual** para ativação do cartão virtual. _e o "Body" recebe o seguinte requerimento:_ { "password": "string" } Será esperado um status de resposta da API, para solicitação de cartão ativado com sucesso será: - 200 OK ⇾ Cartão Ativado com Sucesso E retornando uma resposta. _Exemplo de resposta do “Body”:_ { "account_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "card_type": "string", "created_at": "2021-06-28T15:53:21.218Z", "embossing_policy_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "expiration_date": "2021-06-28", "external_key": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "holder_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "marketplace_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "pan": "string", "reason": "string", "status": "string", "updated_at": "2021-06-28T15:53:21.218Z", "uri": "string" } E o status de resposta da API com falha será: - 404 NOT_FOUND ⇾ O `marketplaceId`, `holderId` ou `externalKey` não representam um cartão virtual. - 412 PRECONDITION_FAILED ⇾ Uma condição prévia falhou, como uma conta bancária inválida ou o cartão não estava no status "PENDING" ao chamar o endpoint. # [BCARDS-56] Visualizar Cartão Virtual Nesta task foi criado o endpoint de visualização do cartão virtual. Esse endpoint deve receber o identificador(ID) do Marktplace, o Identificador(ID) do Holder e o ExternalKey(identificador do cartão). O Marketplace faz a chamada _GET_ no endpoint **/marketplaces/{marketplaceId}/holders/{holderId}/cards/{externalKey}/virtual** para visualização dos detalhes do cartão virtual. Será esperado um status de resposta da API, para solicitação de visualizar cartão com sucesso será: - 200 OK ⇾ Cartão encontrado com sucesso. O Corpo da resposta contém os dados do cartão. _Exemplo de resposta do “Body”:_ { "account_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "card_number": "string", "card_type": "string", "created_at": "2021-06-28T19:33:56.024Z", "cvv": "string", "embossing_policy_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "expiration_date": "string", "external_key": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "holder_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "marketplace_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "pan": "string", "plastic_name": "string", "reason": "string", "status": "string", "updated_at": "2021-06-28T19:33:56.024Z", "uri": "string" } E o status de resposta da API com falha será: - 404 NOT_FOUND ⇾ O `marketplaceId`, `holderId` ou o `externalKey` não representam um cartão virtual. - 412 PRECONDITION_FAILED ⇾ Uma condição prévia falhou, como uma conta bancária inválida. # [BCARDS-58] Bloquear Cartão Virtual Nesta task foi criado o endpoint de bloqueio do cartão virtual. Esse endpoint deve receber o identificador(ID) do Marktplace, o Identificador(ID) do Holder e o ExternalKey(identificador do cartão). O Marketplace faz a chamada _POST_ no endpoint **/marketplaces/{marketplaceId}/holders/{holderId}/cards/{externalKey}/block/virtual** para fazer o bloqueio do cartão virtual. _e o "Body" recebe o seguinte requerimento:_ { "observation": "string" } Será esperado um status de resposta da API, para cartão bloqueado com sucesso será: - 202 Accepted ⇾ Uma solicitação de bloqueio foi recebida para o cartão virtual fornecido. _Exemplo de resposta do “Body”:_ { "external_key": "70f5710822ba4642985a2b0bd9b30820", "account_id": "cf245b18890a4ea4b23b27390a02bebc", "holder_id": "83593676f28b470da41160269a54060c", "marketplace_id": "f71a8951368a4cc085cf7875ff44e61c", "pan": "4475********4867", "expiration_date": "2026-12-31", "status": "BLOCKED", "created_at": "2021-06-28T11:06:10.924589", "updated_at": "2021-06-28T11:07:09.2961585", "uri":"/marketplaces f71a8951-368a-4cc0-85cf-7875ff44e61c/holders/83593676-f28b-470d-a411-60269a54060c cards70f57108-22ba-4642-985a-2b0bd9b30820", "embossing_policy_id":"7710a903853b41bba678a347a1adcc6e", "card_type": "VIRTUAL" } E o status de resposta da API com falha será: - 404 NOT_FOUND ⇾ O `marketplaceId`, `holderId` ou o `externalKey` não representam um cartão virtual. - 412 PRECONDITION_FAILED ⇾ Uma pré-condição falhou, como o cartão estando em um estado que não pode ser bloqueado. _Informações importantes sobre bloqueio de cartão:_ - Enquanto o cartão está bloqueado, não é possível realizar operações com ele. - Para realizar o bloqueio, basta o Marketplace chamar a API de bloqueio **/block/virtual** identificando o cartão, holder e justificar o motivo do bloqueio com no máximo 100 caracteres. # [BCARDS-59] Desbloquear Cartão Virtual Nesta task foi criado o endpoint de desbloqueio do cartão virtual. Esse endpoint deve receber o identificador(ID) do Marktplace, o Identificador(ID) do Holder e o ExternalKey(identificador do cartão). O Marketplace faz a chamada _POST_ no endpoint **/marketplaces/{marketplaceId}/holders/{holderId}/cards/{externalKey}/unblock/virtual** para desbloqueio do cartão virtual. Será esperado um status de resposta da API, para solicitação de desbloqueio de cartão com sucesso será: - 202 ACCEPTED ⇾ Uma solicitação de desbloqueio foi recebida para o cartão virtual fornecido E retornando uma resposta. _Exemplo de resposta do “Body”:_ { "external_key": "70f5710822ba4642985a2b0bd9b30820", "account_id": "cf245b18890a4ea4b23b27390a02bebc", "holder_id": "83593676f28b470da41160269a54060c", "marketplace_id": "f71a8951368a4cc085cf7875ff44e61c", "pan": "4475********4867", "expiration_date": "2026-12-31", "status": "ACTIVE", "created_at": "2021-06-28T11:06:10.924589", "updated_at": "2021-06-28T11:07:42.2776369", "uri": "/marketplaces/f71a8951-368a-4cc0-85cf-7875ff44e61c/holders/83593676-f28b-470d-a411-60269a54060c/cards/70f57108-22ba-4642-985a-2b0bd9b30820", "embossing_policy_id": "7710a903853b41bba678a347a1adcc6e", "card_type": "VIRTUAL" } E o status de resposta da API com falha será: - 404 NOT_FOUND ⇾ O `marketplaceId`, `holderId` ou o `externalKey` não representam um cartão virtual. - 412 PRECONDITION_FAILED ⇾ Uma pré-condição falhou, como o cartão estando em um estado que não pode ser desbloqueado. _Informações importantes sobre desbloqueio de cartão:_ - Para o desbloqueio de qualquer cartão é chamando a API de desbloqueio da Dock: **https://caradhras.dock.tech/v1/cards/create-cartoes-desbloquear** - Após o processo de desbloqueio o cartão pode ser usado novamente para realização de operações # [BCARDS-57] Cancelar Cartão Virtual Nesta task foi criado o endpoint de cancelamento do cartão virtual. Esse endpoint deve receber o identificador(ID) do Marktplace e o Identificador(ID) do Holder. o Marketplace faz a chamada _POST_ no endpoint **/marketplaces/{marketplaceId}/holders/{holderId}/cards/{externalKey}/cancel/virtual** para cancelamento do cartão virtual _e o "Body" recebe o seguinte requerimento:_ { "observation": "string" } Será esperado um status de resposta da API, para solicitação de cancelamento do cartão com sucesso será: - 200 OK ⇾ Cartão cancelado com sucesso _Exemplo de resposta do “Body”:_ { "account_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "card_type": "string", "created_at": "2021-06-28T18:23:05.534Z", "embossing_policy_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "expiration_date": "2021-06-28", "external_key": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "holder_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "marketplace_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "pan": "string", "reason": "string", "status": "string", "updated_at": "2021-06-28T18:23:05.534Z", "uri": "string" } E o status de resposta da API com falha será: - 404 NOT_FOUND ⇾ O `marketplaceId`, `holderId` ou o `externalKey` não representam um cartão virtual. - 412 PRECONDITION_FAILED ⇾ Uma pré-condição falhou, como o cartão estando em um estado que não pode ser cancelado. _Informações importantes sobre cancelamento de cartão:_ - Cancelar o cartão virtual não cancela o cartão físico, vice e versa. ___ # Status do Cartão Virtual | Status | Descrição | | -------- | -------- | |`PENDING` |Quando está em trânsito para o domicilio do holder ou pendente de ativação `ACTIVE` |Quando está pronto para ativação e pode ser utilizado livremente pelo holder `BLOCKED` |Quando o cartão não pode ser temporariamente utilizado mas é reversível `CANCELED` |Quando o cartão não pode ser mais utilizado e está cancelado definitivamente `DENIED` |Quando a solicitação do cartão é negada no processo de onboarding da Dock `WAITING_CORRECTIONS` |Quando a Dock detecta erros semânticos nos dados cadastrais do holder `WAITING_ANALYSIS` |Quando a análise dos dados para onboard ainda não está concluída `ERROR` | Quando há um erro sistêmico no pedido desse cartão, seja Dock ou Zoop # Glossário * 2FA : Two-factor authentication - Garante que serão necessários dois fatores únicos para liberação da transação * POS : Point Of Sales - Ponto de Vendas, local onde ocorre uma transação de venda. * API : Application Programming Interface - É um conjunto de normas que possibilita a comunicação entre plataformas através de uma série de padrões e protocolos