Cadastro do Portador

A interface de programação referente ao Cadastro do Portador é primariamente composta por consultas que retornam o tipo `CardHolder` e destes consultam-se os campos como nome, documentos, endereços, contatos e demais informações.

Primeiros passos

  1. Leia Introdução ao GraphQL, com exemplos reais da nossa API.
  2. Crie um usuário no portal do desenvolvedor.
  3. Cadastre sua primeira aplicação.
  4. Utilize o dashboard para acessar suas configurações de acesso.
  5. Para explorar rapidamente as APIs aqui na página de documentação, use o console de GraphQL, na seção de referências. Nele, você pode ver as consultas de exemplo, executá-las e alterá-las.

Primeiros passos na plataforma de Desenvolvedores Elo

Jaydson GomesDesenvolvedor Evangelista

O portador é um usuário do sistema (User) o qual possuí cartões. Este usuário é denomidado CardHolder e gerencia cartões (Card) e carteiras (Wallet). Um portador (CardHolder) pode cadastrar, consultar, editar e deletar seus cartões, como também pode associar seus cartões ás suas carteiras. Este pode ser uma pessoa física, que possua cartões, ou pessoa jurídica que possua cartões corporativos.

Essa seção tem como objetivo detalhar alguns processos e trazer o passo-a-passo para integração com itens da API de Cadastro de Portador ELO.

Todas as requisições realizadas junto à API da ELO deverão utilizar o protocolo HTTPS, e deverão ter em seus cabeçalhos os dados necessários para o acesso ao serviço. São eles:

  • client_id: Identificador gerado quando o desenvolvedor cria uma aplicação no portal e que pode ser encontrado nas configurações da dashboard da aplicação.
  • Authorization ou access_token: Aqui é um ponto importante que deve ter bastante atenção do desenvolvedor. Enquanto o usuário não realizou o login na API é obrigatório o envio do Authorization. Após o login o desenvolvedor deve enviar apenas o access_token obtido.

Authorization

O Authorization pode ser obtido concatenando o texto "Basic " ao resultado da codificação em Base 64 dos campos client_id e client_secret concatenados com :.

Abaixo um exemplo de pseudo-código para gerar o authorization:

var authorization = "Basic " + base64(client_id + ":" + client_secret);

e a seguir temos um exemplo de Authorization já definido no header da requisição:

Authorization : Basic ZjkyMTIxNzMtZTcwNS0zNzNiLWE2OTgtNjE5MjNlMzc4MzU5OjAyYWI1Mjg4LTkyZGItM2FiMy05OWZkLWZhYzRhZjg1N2Q4MQ==

Para que seja possível iniciar a jornada dentro da plataforma de APIs da Elo, é necessário que um usuário seja criado. Para esse processo o desenvolvedor deverá usar a função createUser disponibilizada pela API. Esta função pode ser utilizada de duas maneiras:

  • O usuário utilizará o nome de usuário e senha como meio de autenticação.
  • O usuário utilizará uma rede social suportada pela plataforma da ELO como meio de autenticação.

A seguir é demonstrado uma visão geral desse processo.

Fluxo de criação de um usuário

fluxoCreateUser

Um exemplo da utilização da função createUser usando o nome de usuário e senha como autenticação é demonstrado a seguir.

Exemplo do corpo da requisição:

mutation{
  createUser(input:{
    clientMutationId: "123",
    username: "username",
    bcryptPassword: "$2a$12$oumE.pnRbsdi.c4KYsyNWOJoVyfi2jMKDe102Er5uGCdzd49SvE1Y",
    name: "name",
    firstName: "firstName",
    lastName: "lastName",
        contacts: [{
            type: PHONE
            context: "CASA"
            value: "19 123456789"
        }]
    displayName: "displayName",
    legalIds:{
      cpf: "1234567890",
      rg:{
        number: "234567890",
        issuerOrganization: "SSP",
        issuerState: "SP",
        issueDate: "2020-12-03"
      }
    }
  })
  {
    clientMutationId,
    id,
    name
  }
}

Exemplo da resposta da API:

{
   "data": {
        "createUser": {
            "id": "89bd51d6-8eaf-31a5-bd2c-1fve81d17db4",
            "name": "name"
        }
   }
}

No exemplo acima o campo id é o access_token que deve ser utilizado caso o usuário faça alguma requisição a algum recurso da API. Nesse cenário não é necessário que o usuário faça login após a criação pois o mesmo já foi feito implicitamente pela função createUser e o token de acesso pode ser utilizado até sua expiração.

Um exemplo da utilização da função createUser usando uma rede social é demonstrado a seguir.

Exemplo do corpo da requisição:

mutation{
  createUser(input:{
    clientMutationId: "123",
    username: "username",
    socialNetwork:{
      provider: "FACEBOOK",
      username: "usernameFacebook@gmail.com"
    },
    oauth:{
      accessToken: "EAACEdEose0cBAPZAVQLY5qPqEfqPPPviCy5NYbYBX7zLndQWDiUZBOBMC5Ry...",
      refreshToken: "",
      scopes: "email",
      expiryTimestamp: "2018-03-01T00:00:00Z"
    },
    name: "name",
    firstName: "firstName",
    lastName: "lastName",
    displayName: "displayName",
    legalIds:{
      cpf: "1234567890",
      rg:{
        number: "234567890",
        issuerOrganization: "SSP",
        issuerState: "SP",
        issueDate: "2020-12-03"
      }
    }
  })
  {
    clientMutationId,
    id,
    name
  }
}

A resposta da criação do usuário usando uma rede social é a mesma do exemplo anterior.

Tipos de Usuário

Após a criação, um determinado usuário pode assumir 3 tipos distintos na plataforma da Elo, sendo eles:

  • Card Holder: Um usuário portador de um ou mais cartões Elo;
  • Card Issuer: Um usuário que emite cartões Elo;
  • Merchant: Um estabelecimento comercial que realiza transações com cartões Elo;

Cada tipo possui sua forma de ser associado, com informações pertinentes a cada um. Um usuário só pode ter um tipo associado ao mesmo tempo, logo, se um usuário está associado a um CardHolder e tenta se associar a um Merchant um erro será retornado. Neste caso, é necessário remover a associação do CardHolder do usuário e, somente depois, realizar a associação ao novo tipo.

Para associar um CardHolder ao usuário basta utilizar a função createCardHolderForUser, a mutation abaixo é um exemplo de sua utilização. Por questão de segurança o campo userId não se refere ao real id do usuário, e sim ao access_token do mesmo.

Exemplo do corpo da requisição:

mutation{
    createCardHolderForUser(input:{
        clientMutationId: "123",
        userId: "33744898-9844-4864-a0ca-046d50fdaf15",
        companyName: "companyName",
        companyLegalName: "companyLegalName",
        companylegalIds: {
            cnpj: "1234567890"
        }
    })
    {
        clientMutationId,
        user{
            id,
            verified,
            name,
            displayName
        },
        cardHolder{
            id,
            name,
            companyName,
            companyLegalName
        }
    }
}

Neste exemplo estamos criando o CardHolder e associando o mesmo ao usuário identificado pelo access_token, que é refletido no campo userId. Os dados retornados após a criação e associação do CardHolder ao usuário, serão os que foram definidos na parte inferior da mutation.

Para associar um CardIssuer ao usuário basta utilizar a função addCardIssuerToUser, a seguir temos a chamada para esta mutation como exemplo de utilização. Por questão de segurança o campo userId não se refere ao real id do usuário, e sim ao access_token do mesmo.

Exemplo do corpo da requisição:

mutation{
    addCardIssuerToUser(input:{
        clientMutationId: "123",
        userId: "97c7fb10-174c-4e23-8feb-926d1d23a035",
        cardIssuerId: "1b253372-8215-4567-a54d-4fa78dadf0f6"
    })
    {
        clientMutationId,
        user{
            id,
            verified,
            name,
            displayName
        },
        cardIssuer{
            id,
            name,
            legalName
        }
    }
}

Neste exemplo estamos associando um CardIssuer ao usuário identificado pelo access_token, que é refletido no campo userId. Os dados retornados após à associação do CardIssuer ao usuário, serão os que foram definidos na parte inferior da mutation.

Para associar um Mechant ao usuário basta utilizar a função addMerchantToUser, a seguir temos um exemplo de sua utilização. Por questão de segurança o campo userId não se refere ao real id do usuário, e sim ao access_token do mesmo.

Exemplo do corpo da requisição:

mutation{
    addMerchantToUser(input:{
        clientMutationId: "123",
        userId: "14991673-f5b9-43b8-8cb3-8da353b9b70c",
        merchantId: "b86eb0ef-0c21-4ea5-b407-9f113a229190"
    })
    {
        clientMutationId,
        user{
            id,
            verified,
            name,
            displayName
        },
        merchant{
            id,
            name,
            legalName
        }
    }
}

Neste exemplo estamos associando um Merchant ao usuário identificado pelo access_token, que é refletido no campo userId. Os dados retornados após à associação do Merchant ao usuário, serão os que foram definidos na parte inferior da mutation.

Outras interações

Para consultar um usuário basta utilizar uma Query de usuário, como no exemplo abaixo.

query {
   user(id: "70fa9e70-1b41-3f68-8df9-b207d76929f6") {
        id,
        username
        cardHolders{
            id
            name
            companyName
        }
    }
}

Para atualizar um usuário basta utilizar a função updateUser, a seguir temos um exemplo de sua utilização. Por questão de segurança o campo id não se refere ao real id do usuário, e sim ao access_token do mesmo.

mutation {  
    updateUser(input:{
        id: "0c9cd95a-365e-40d3-89c2-63c35340a0fa",
        firstName: "firstName changed"
    }) {
        user{
            id
            firstName
        }
    }
}

Neste exemplo estamos atualizando o firstName (primeiro nome) do usuário, porém outros atributos também podem ser atualizados.

Para deletar um usuário basta utilizar a função deleteUser, a seguir temos um exemplo de sua utilização. Por questão de segurança o campo userId não se refere ao real id do usuário, e sim ao access_token do mesmo.

mutation {  
    deleteUser(input:{
        userId: "e29e5d4b-c5f6-45c9-90e0-26b21fed43f9"
    }) {
        userId
        username
        displayName
    }
}

Neste exemplo estamos deletando o usuário com identificação informada no campo userId.

O campo bcryptPassword presente no cadastro de usuário refere-se aos dados sensíveis de acesso do usuário à API. Estes dados são o nome de usuário e senha criptografados usando o algoritmo conhecido como bcrypt. Os passos para utilização desse algoritmo com os parâmetros requisitados pela API da ELO são descritos abaixo:

1º Passo: Gerar um salt a partir do nome de usuário:

  • Aplicar o algoritmo SHA256 no nome do usuário e reservar os 16 primeiros caracteres.
  • Aplicar a codificação Base64 sobre o resultado do item anterior utilizando o alfabeto customizado do algoritmo bcrypt. O alfabeto utilizado pelo bcrypt utiliza "." ao invés de "+" e começa com "./". Segue abaixo:

    ./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789

  • Concatenar o resultado do item anterior com o texto "$2a$12". Exemplo de resultado:

    $2a$12$N9qo8uLOickgx2ZMRZoMye

2º Passo: Aplicar o algoritmo bcrypt utilizando a senha do usuário e o salt gerado no primeiro passo:

  • Aplicar o algoritmo SHA256 na senha do usuário.
  • Aplicar a codificação Base64 sobre o resultado do item anterior.
  • Aplicar o algoritmo bcrypt utilizando o resultado do item anterior e o salt gerado no primeiro passo.

NOTA: O custo utilizado pelo algoritmo do bcrypt deve ser igual a 12.

Para ter acesso às APIs da Elo o usuário deve possuir um access_token válido e para isso ele deve efetuar login na plataforma. O processo de login pode ser realizado de duas formas: utilizando um nome de usuário e senha via createLoginSalt ou utilizando uma rede social via socialNetworkOAuthLogin.

Veja na figura abaixo os dois exemplos:

login

Caso o usuário queira utilizar o nome de usuário e senha ele primeiro deve fazer uso da chamada createLoginSalt. Essa função retorna um salt que deve ser utilizado para gerar o challenge que será enviado no processo de login (Mais detalhes sobre como obter o challenge seram descritos posteriormente). Um exemplo dessa chamada pode ser vista abaixo.

Exemplo do corpo da requisição:

mutation {
    createLoginSalt(input:{
        username: "UserNameToLogin"
    }) 
    {
        username, 
        salt
    }
}

Exemplo da resposta da API:

{
  "data": {
    "createLoginSalt": {
      "username": "UserNameToLogin",
      "salt": "$2a$05$J/dgZmXIN23mEZtvkxDYeO"
    }
  }
}

Na sequência é necessário fazer uso da chamada login. Esta requisição é necessária para dar acesso ao usuário às demais chamadas da API. Desta forma, no retorno dessa chamada é disponibilizado o access_token que identifica o usuário de forma única.

Exemplo do corpo da requisição:

mutation {
    login(input:{
        clientMutationId: "0123456789",
        username: "UserNameToLogin",
        challenge:"$2a$05$J/dgZmXIN23mEZtvkxDYeOtRsNEY4xMU9HHkcBVMpiUlFSFBuhtxy"
    }) 
    {
        clientMutationId,
        accessToken
    }
}

Exemplo da resposta da API:

{
   "data": {
       "login": {
           "clientMutationId": "0123456789",
           "accessToken": "b64a0e34-24c5-39eb-b457-0c7331d176f0"
       }
   }
}

Caso o usuário queira utilizar uma rede social para se autenticar na API da Elo ele deverá fazer uso da chamada socialNetworkOAuthLogin. Assim como no fluxo descrito anteriormente, no retorno da função também é disponibilizado o access_token que identifica o usuário de forma única.

Exemplo do corpo da requisição:

mutation {
    socialNetworkOAuthLogin(input:{ 
        clientMutationId: "0123456789", 
        provider: "FACEBOOK", 
        username: "user.name@gmail.com",  
        accessToken:"AAECEdEose0cBANynsVcZChZBxB3ysAuxDeZC3ZB4eIzkUKJnvoaTO1Vf4gyj8sl9bFFNPlnGU0Qsnh2fys7gcymWE7lKL64ygGLCJAtgyJtNq4YSGBkdDZBcgnAGZBKaGiI6emZCap8WJYO8ex06ZAZB75IdWnDtPoGCF8yPQnW4JZALHgeL1A1o6ZC5nz5uLD2lnVoUpkxAr1CNQABCD"
    }) 
    {
        clientMutationId,
        accessToken
    }
}

Exemplo da resposta da API:

{
    "data": {
        "login": {
            "clientMutationId": "0123456789",
            "accessToken": "120faef6-5f31-3e74-afb2-864151c52880"
        }
    }
}

O campo challenge presente no login de usuário refere-se ao resultado do desafio (challenge) de login. É um Hash utilizando o algoritmo bcrypt com salt (fornecido por createLoginSalt) e conteúdo sendo o bcryptPassword (especificado em User).

Os passos são os mesmos da geração do bcryptPassword, porém com dois passos a mais.

Após gerar o bcryptPassword:

  • Gerar um salt a partir da função createLoginSalt.
  • Aplicar o algoritmo bcrypt utilizando o bcryptPassword e o salt gerado no item anterior.

NOTA: O resultado final deve estar no formato padrão, com prefixo, custo, salt e por fim o valor computado em Base64, totalizando 60 caracteres.

Exemplo de challenge: $2a$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy.

Caso um usuário não lembre sua senha e precise fazer o reset, existe um fluxo de Reset de Senha que pode ser feito. O primeiro passo é solicitar o envio de um pedido de reset de senha. Isso é feito através da mutation requestPasswordReset:

mutation {
    requestPasswordReset(input: {
        clientMutationId: "123456",
        legalId: {
            cpf: "12345678900"
        },
        email: "seu.email@provedor.com"
    }) {
        clientMutationId
        maskedEmail
    }
}

Essa mutation pode ser realizada enviando o campo email ou o campo phone, mas nunca ambos. Eles também precisam ser os mesmos contatos enviados no momento do cadastro.

Após isso, será enviado um e-mail ou um SMS para o contato especificado, com um token que será usado para fazer o reset da senha, através da mutation passwordReset:

mutation {
    passwordReset(input: {
        clientMutationId: "1234567",
        legalId: {
            cpf: "12345678900"
        },
        email: "seu.email@provedor.com",
        bcryptPassword: "$2a$12$yOCCL/0cbkvc5Lj/.EfnKeHm3oBPq28rGYbs8ayG8tbRYw4qtXflW",
        token: "C68M59"
    }) {
        clientMutationId
        user {
            id
            verified
            username
            name
            firstName
        }
    }
}

O bcryptPassword enviado nessa mutation precisa ser gerado com o mesmo username do usuário cadastrado e com a nova senha. Para saber como gerar esse campo, ver a seção BcryptPassword.

Para criar um cartão é necessário utilizar a função createCard. Esta requisição é responsável por criar um novo cartão associado ao usuário que o criou. Para poder fazer uso dessa função o usuário deve ser um portador (CardHolder). Abaixo é demonstrado uma visão geral do processo de criação de um cartão.

createCard fluxo1

Um exemplo da utilização do createCard pode ser visto abaixo.

privada

mutation {
    createCard(input: {
        clientMutationId: "123",             
        sensitive:"eyJhbGciOiJFQ0RILUVTIiwiZW5jIjoiQTEyOENCQy1IUzI1NiIsImVway...",
        holderId: "9e5d64e4-409f-4900-b3b6-28319950fe5b",
        billingAddress: {
            context: "Casa",
            number: 123,
            country: "BRA",
            city: "Campinas",
            state: "São Paulo",
            zip: "1234",
            place: "via"
        }
    })
    {
        clientMutationId,
        card {
            id,
            last4,
            billingAddress{
            context,
            country,
            city
            }
        }
    }
}

Apoś a criação do cartão serão retornados os dados solicitados pelo usuário na parte inferior da mutation.

O campo sensitive é o conteúdo sensível (Número do cartão, Nome do portador, Vencimento, etc) gerado a partir de um processo de assinatura e criptografia, cujo payload foi assinado a partir do uso de uma a chave privada do usuário e na sequência criptografado fazendo uso de uma chave pública do servidor. Mais detalhes desse campo na seção Sensitive.

O campo holderId é o id do CardHolder que foi associado ao usuário. Logo não é o id (access_token) do usuário, e sim do CardHolder associado a ele.

Outras interações

Para consultar cartões utilizando filtros utiliza-se a Query cards, abaixo segue um exemplo de utilização.

pública

query {  
    cards(filter:{
        status:ACTIVE
    }) {
        edges{
            node{
                id
                last4
                expiry{
                    month
                    year
                }
            }
        }
    }
}

Neste exemplo estamos buscandos todos os cartões ativos. Outros filtros podem ser aplicados para esta consulta, como também pode ser solicitado outros retornos.

Para consultar cartão por identificador global único é utilizado a consulta node. Abaixo segue um exemplo de utilização.

pública

query {  
    node(id: "b63dcf70-08ae-423f-9459-db580b3d6e95") {
        ... on Card {
            id
            last4
            status {
                status
            }
            bin {
                number
            }
        }
    }
}

Neste exemplo estamos solicitando uma consulta de nó (node) onde o identificador global único refere-se a um cartão. Outras informações de retorno podem ser solicitadas nesta requisição.

Também é possível listar os cartões pela consulta de usuário, como no exemplo abaixo.

privada

query {  
    user {
        cardHolders{
            cards{
                edges{
                    node{
                        id
                        last4
                        expiry{
                            month
                            year
                        }
                    }
                }
            }
        }
    }
}

Nesta requisição estamos listando os cartões de um portador utilizando a Query de usuário. Outras informações podem ser solicitadas no retorno desta consulta.

Para atualizar um cartão é utilizado a função updateCard. Abaixo segue um exemplo de utilização.

privada

mutation {
    updateCard(input:{
        holderId: "d6f9605c-8da9-484a-bdb4-3e483db232ee",
        billingAddress:{
            country: "coutnry changed",
            city: "city changed",
            state: "SP changed",
            number: 32,
            place: "place changed"
        }
        status:SUSPENDED
    }) {
        card {
            id
            last4
            expiry{
                month
                year
            }
        }
    }
}

Neste exemplo estamos atualizando algumas informações do endereço de cobrança do cartão e o seu status. O cartão é identificado pelo campo holderId. Outras informações podem ser atualizadas além do endereço e status.

Para deletar um cartão é utilizado a função deleteCard. Abaixo segue um exemplo de utilização.

privada

mutation {
    deleteCard(input:{
        cardId: "c049ac20-084b-46f1-ac03-817e855b5811"
    }) {
        cardId
        last4
        bin {
            number
        }
    }
}

Neste exemplo estamos deletando o cartão identificado pelo campo cardId, e solictando algumas informações do mesmo.

O campo sensitive presente no cadastro de cartão refere-se aos dados sensíveis de um cartão (número do cartão, código de verificação, validade e etc). Estes dados estarão assinados e criptografados por um processo de criptografia para garantir sua segurança.

O primeiro passo na geração deste campo é ter os dados no formato JSON como descrito abaixo:

  • pan: O número da conta primária (Primary Account Number), também conhecido como "número do cartão" físico. Exemplo: "1234567890123456".
  • expiry: Data de validade do cartão, ou seja, quando ele expira. É um objeto composto pelas chaves month e year descritas a seguir. Exemplo: {"month": 2, "year": 2020}.

    month: Mês da validade do cartão. Número inteiro entre 1 (Janeiro) e 12 (Dezembro).
    year: Ano da validade do cartão. Número inteiro com 4 dígitos (2017, não 17).

  • name: Nome do portador do cartão. Exemplo: "João da Silva".
  • csc: Código de segurança do cartão (Card Security Code), usualmente impresso na parte de trás do cartão físico.
  • cscEntryTime: Data e horário quando o CSC (Código de Segurança do Cartão) foi digitado. É necessário quando o CSC é gerado por um chaveiro/token baseado em tempo. Deve estar no formato ISO 8601. Exemplo: "2017-06-01T12:00:00-03:00".
  • authCode: Código de autorização. Este código não é o CSC (Código de Segurança do Cartão) pois não está impresso no cartão. Exemplo: "AB123Z1Y".
  • authCodeEntryTime: Data e horário quando o código de autorização (authCode) foi digitado. Deve estar no formato ISO 8601. Exemplo: "2017-06-01T12:00:00-03:00".

NOTA: a autorização é feita com os campos csc ou authCode e seus respectivos horários de entrada. Apenas um deles deve ser especificado.

O segundo passo é assinar os dados utilizando JSON Web Signature (JWS) em formato compacto, e utilizando Elliptic Curve (EC) como algorítimo de assinatura.

O terceiro passo é criptografar os dados do passo anterior utilizando a chave pública do servidor, que pode ser obtida a partir da query:

query {
    serverPublicKey {
        key
    }
}

Tal criptografia será realizada utilizando JSON Web Encryption (JWE) em formato compacto, e EC como algoritimo de criptografia.

A estrutura de assinatura e criptografia segue a seguinte ideia:

JWE.Encrypt(recipient=ServerKey, format=compact,
     JWS.Sign(issuer=UserKey, format=compact,
         JSON.Stringify(CardSensitiveInput)
     )
)

O quarto passo é cadastrar a chave pública do cliente a qual foi utilizada para assinar os dados sensíveis. Desta forma o servidor poderá validar a assinatura do cliente no processo de descriptografia do campo sensitive. Abaixo segue um exemplo da mutation de cadastro de chave pública.

pública

mutation {
    addPublicKeyToUser(input:{
        clientMutationId:"012", 
        userId:"bdc89491-f1f4-32f7-bad2-f44ae3b88aa6", 
        key:"{\"kty\":\"EC\", \"kid\":\"my-public-key-id-1\", \"x\":\"g_Sr4WwVDt5Qy3KonZyXqFwWykTR9KVMCt8Sx-dXSB8\",\"y\":\"ydSE-mUMtuhBTI_txDpd2ivb7e6FNzxq4e_18iHFZ2U\",\"crv\":\"P-256\"}",
        format:JWK
}) {
        clientMutationId, 
        user{
            id,
            firstName
            ,lastName
        }, 
        publicKey{
            key
        }
    }
}

NOTA: o quarto passo só é necessário caso a chave pública que assinou os dados sensíveis não tenha sido cadastrada anteriormente.

A carteira é uma forma do usuário organizar seus cartões. Para criar uma carteira utilizando a API da ELO basta que o usuário seja um portador (CardHolder) e faça uso da função CreateWallet. Um exemplo de utilização dessa função pode ser vista abaixo:

pública

mutation { 
    createWallet(
        input: { 
            clientMutationId: "123", 
            cardHolderId: "fdf9f98e-a6ac-4878-ad45-cc133e4ca168", 
            name: "Carteira"
        }
    ) {
        clientMutationId, 
        wallet{ 
            id, 
            name, 
            holder{
                name, 
                firstName, 
                displayName
            }
        }
    }
}

Após a criação da carteira serão retornados seus dados e a partir deles é possível fazer seu gerenciamento adicionando ou removendo cartões. Abaixo temos um exemplo de cada operação possível com a carteira criada.

Adicionar um cartão à carteira:

pública

mutation {
    addCardToWallet(
        input:{
            clientMutationId:"123", 
            walletId: "770d83de-f022-4c4e-b12d-e62f3d2d1d51", 
            cardId: "2fde85bf-6935-4e9b-8262-94d82e08e4bd"
        }
    ) { 
        clientMutationId, 
        wallet{ 
            id,
            name 
        }, 
        card{
            id
        }
    }
}

Remover cartão de uma carteira:

pública

mutation{
    removeCardFromWallet(
        input:{
            clientMutationId: "012", 
            walletId: "770d83de-f022-4c4e-b12d-e62f3d2d1d51", 
            cardId: "2fde85bf-6935-4e9b-8262-94d82e08e4bd"}
    ) {
        clientMutationId, 
        wallet{
            name
        }, 
        card{
            id
        }
    }
}

Atualizar a carteira:

pública

mutation{
  updateWallet(
      input: {
          clientMutationId: "123",
          walletId: "770d83de-f022-4c4e-b12d-e62f3d2d1d51",
          name: "Carteira Principal"
        }
    ) {
        wallet {
            id,
            name
        }
    }
}

NOTA: Só é possível atualizar o nome da carteira.

Remover a carteira:

pública

mutation{
    deleteWallet(
        input:{
            clientMutationId: "012", 
            walletId: "770d83de-f022-4c4e-b12d-e62f3d2d1d51"
        }
    ) { 
        clientMutationId, 
        walletId, 
        name
    }
}

Termos de Uso podem ser adicionados ao usuário, isso siginifica que o mesmo aceitou tal termo. Para listar os termos de uso basta utilizar a query agreementTerms.

query{
  agreementTerms(filter:{
    nameContains: "",
    agreementTermIds: [
      "",
      ""
    ]
  })
  {
    pageInfo{
      hasPreviousPage
      hasNextPage
    }
    totalCount
    edges{
      cursor
      node{
        id
        title
        description
        url
      }
    }
  }
}

Obs: Filtros podem ser aplicados na consulta de termos de uso, mais detalhes podem ser encontrados no argumento filter AgreementTermFilterInput

Adicionar Termo de Uso ao usuário:

Para adicionar um termo de uso ao usuário utiliza-se a mutation addAgreementToUser.

mutation {
  addAgreementToUser(input: {
    clientMutationId: "012", 
    userId: "b1ca0944-7822-3538-920d-58b233154608", 
    agreementTermId: "e32a7918-eef5-41af-909b-f4c93cee2e22"
  }) {
    clientMutationId
    user {
      id
      username
      firstName
      lastName
      displayName
    }
    agreement {
      agreementTerm {
        id
        title
        description
        url
      }
    }
  }
}

Remover Termo de uso do usuário:

Para remover um termo de uso do usuário utiliza-se a mutation removeAgreementFromUser

mutation {
  removeAgreementFromUser(input: {
    clientMutationId: "013", 
    userId: "b1ca0944-7822-3538-920d-58b233154608", 
    agreementTermId: "e32a7918-eef5-41af-909b-f4c93cee2e22"
  }) {
    user {
      id
      firstName
      lastName
    }
    agreementTerm {
      id
      description
      url
    }
  }
}

Consulta

Consultar dados de portador utilizando a consulta de usuário:

privada

query {
   user(id: "70fa9e70-1b41-3f68-8df9-b207d76929f6") {
        id,
        username
        cardHolders{
            id
            name
            companyName
        }
    }
}

NOTA: o parâmetro id se refere ao access_token do usuário.

Dados de um portador via ID

Consultar o nome, CPF, RG e data de nascimento de um portador dado o identificador global único:

pública

query {
   node(id: "B8B1582B-1C2C-406B-9FC3-ACA842049207") {
      ... on CardHolder {
         firstName
         lastName
         legalIds {
            cpf {
               number
            }
            rg {
               number
               issuerOrganization
               issuerState
               issueDate
            }
         }
         birthday
      }
   }
}

NOTA: o parâmetro id se refere ao identificador global único do portador (CardHolder).

  • Access_token:: Código de acesso disponibilizado pela API após a realização do login e que deve ser utilizado pelo desenvolvedor ao realizar as chamadas aos recursos disponibilizados. Ele é utilizado para validação do acesso e identificação do usuário que está realizando as operações na API.
  • Bcrypt: Algoritmo de criptografia do tipo hash utilizado para segurança de senhas (Wikipedia). No contexto desta API é o resultado do algoritmo bcrypt sobre o nome de usuário e senha.
  • BIN: Número de Identificação do Banco (Bank Identification Number). O BIN é relativo aos números iniciais de um cartão e identifica o emissor e produtos associados ao mesmo.
  • CardIssuer: Um usuário do tipo pessoa jurídica que emite cartões. Também conhecido como Emissor.
  • CardHolder: Um usuário do tipo pessoa física ou jurídica que possui cartões. Também conhecido como Portador.
  • Challenge: Resultado do algoritmo bcrypt aplicado sobre o bcrypt do nome do usuário e senha, e do salt.
  • Client_id: Identificador utilizado pela API para verificar e validar qual a aplicação está fazendo uso dos recursos disponibilizados. Sua geração é feita no momento que o desenvolvedor cria uma nova aplicação no portal de desenvolvedores.
  • Merchant: Um usuário do tipo pessoa jurídica que é um estabelecimento comercial e realiza transações com cartões.
  • PAN: Número da conta primária (Primary Account Number), também conhecido como "número do cartão".
  • Salt: Dado gerado de forma aleatório que é usado no algoritmo de criptografia junto da senha como uma forma de proteção evitando que o hash de dois dados iguais gerem o mesmo resultado.
  • Sensitive: Conteúdo sensível (Número do cartão, Nome do portador, Vencimento, etc) gerado a partir de um processo de assinatura e criptografia, cujo payload foi assinado a partir do uso de uma a chave privada do usuário e na sequência criptografado fazendo uso de uma chave pública do servidor.
  • Wallet: Carteira virtual utilizada para organizar cartões criados pelo portador dentro da API da ELO.



Argumentos:

id: ID obrigatório



Argumentos:

first: Int

after: String

last: Int

before: String



Argumentos:

first: Int

after: String

last: Int

before: String



Argumentos:

id: String

username: String

legalId: LegalIdsInput

socialNetwork: SocialNetworkInput

cardHolderId: String

merchantId: String



Argumentos:

first: Int

after: String

last: Int

before: String






Argumentos:

input: AddCardToWalletInput obrigatório



Argumentos:

input: RemoveCardFromWalletInput obrigatório



Argumentos:

input: CreateWalletInput obrigatório



Argumentos:

input: DeleteWalletInput obrigatório



Argumentos:

input: UpdateWalletInput obrigatório



Argumentos:

input: CreateLoginSaltInput obrigatório



Argumentos:

input: LoginInput obrigatório



Argumentos:

input: SocialNetworkOAuthLoginInput obrigatório



Argumentos:

input: CreateUserInput obrigatório



Argumentos:

input: CreateCardInput obrigatório



Argumentos:

input: DeleteCardInput obrigatório



Argumentos:

input: UpdateCardInput obrigatório



Argumentos:

input: RequestPasswordResetInput obrigatório



Argumentos:

input: PasswordResetInput obrigatório



Argumentos:

input: DeleteUserInput obrigatório



Argumentos:

input: UpdateUserInput obrigatório



Argumentos:

input: CreateCardHolderForUserInput obrigatório



Argumentos:

input: AddCardIssuerToUserInput obrigatório



Argumentos:

input: AddMerchantToUserInput obrigatório



Argumentos:

input: AddPublicKeyToUserInput obrigatório



Argumentos:

input: AddAgreementToUserInput obrigatório



Argumentos:

input: RemoveAgreementFromUserInput obrigatório






Campos:

currency

:

String obrigatório

min

:

Float

max

:

Float


Campos:

min

:

Int

max

:

Int


Campos:

maxUsage

:

Int

expiry

:

DateTime

allowedTxAmounts

:

lista de CardCurrencyRangeInput obrigatório

allowedIdCodes

:

lista de ID obrigatório

allowedMerchantCategories

:

lista de MerchantCategoryRangeInput obrigatório

deniedMerchantCategories

:

lista de MerchantCategoryRangeInput obrigatório


Campos:

status

:

CardStatus

usageConstraints

:

CardUsageConstraintsInput

cardHolderServiceId

:

ID

funding

:

CardFunding

cardProductId

:

ID

cardBrandId

:

ID

cardCaptureId

:

ID

cardUsageId

:

ID

cardNetworkId

:

ID

cardIssuerId

:

ID


Campos:

ip

:

String

deviceType

:

DeviceType

merchantUserId

:

String

walletId

:

ID


Campos:


Campos:

startDate

:

Date

endDate

:

Date

originCountry

:

String

destinationCountry

:

String


Campos:

startDate

:

Date

endDate

:

Date

categoryId

:

ID


Campos:

startDate

:

Date

endDate

:

Date

categoryId

:

ID


Campos:

id

:

ID obrigatório


Campos:

startTimestamp

:

DateTime

endTimestamp

:

DateTime

includeMerchantCategories

:

lista de MerchantCategoryRangeInput obrigatório

excludeMerchantCategories

:

lista de MerchantCategoryRangeInput obrigatório

captureId

:

ID

usageId

:

ID


Campos:

startTimestamp

:

DateTime

endTimestamp

:

DateTime

includeMerchantCategories

:

lista de MerchantCategoryRangeInput obrigatório

excludeMerchantCategories

:

lista de MerchantCategoryRangeInput obrigatório


Campos:

cardTransactionId

:

ID

codeCapture

:

Int

codeUsage

:

Int

iso

:

Int

startTimestamp

:

DateTime

endTimestamp

:

DateTime


Campos:

filter

:

String


Campos:

cnpj

:

String


Campos:

number

:

String obrigatório

issuerOrganization

:

String

issuerState

:

String

issueDate

:

Date


Campos:

cpf

:

String

cnpj

:

String

rg

:

RGInput


Campos:

provider

:

String obrigatório

username

:

String obrigatório


Campos:

nameContains

:

String

agreementTermIds

:

lista de ID obrigatório

isWalletDigital

:

Boolean


Campos:

clientMutationId

:

String

walletId

:

ID obrigatório

cardId

:

ID

sensitive

:

String


Campos:

clientMutationId

:

String

walletId

:

ID obrigatório

cardId

:

ID obrigatório


Campos:

clientMutationId

:

String

name

:

String obrigatório


Campos:

clientMutationId

:

String

walletId

:

ID obrigatório


Campos:

clientMutationId

:

String

walletId

:

ID obrigatório

name

:

String obrigatório


Campos:

clientMutationId

:

String

username

:

String obrigatório


Campos:

clientMutationId

:

String

username

:

String obrigatório

challenge

:

String obrigatório


Campos:

clientMutationId

:

String

provider

:

String obrigatório

username

:

String obrigatório

accessToken

:

String


Campos:

accessToken

:

String obrigatório

refreshToken

:

String

scopes

:

lista de String obrigatório

expiryTimestamp

:

DateTime


Campos:

personal

:

Float obrigatório

family

:

Float obrigatório

currency

:

String obrigatório


Campos:

type

:

PersonContactType obrigatório

context

:

String

value

:

String obrigatório


Campos:

context

:

String

country

:

String obrigatório

city

:

String obrigatório

state

:

String obrigatório

stateAbbrev

:

String

zip

:

String

district

:

String

kind

:

String

number

:

Int obrigatório

place

:

String obrigatório

complement

:

String

reference

:

String

instructions

:

String

lon

:

Float

lat

:

Float


Campos:

clientMutationId

:

String

username

:

String

bcryptPassword

:

String

socialNetwork

:

SocialNetworkInput

name

:

String obrigatório

firstName

:

String

lastName

:

String

displayName

:

String

legalIds

:

LegalIdsInput obrigatório

birthday

:

Date

gender

:

Gender

maritalStatus

:

MaritalStatus

occupationId

:

ID

contacts

:

lista de PersonContactInput obrigatório

addresses

:

lista de AddressInput obrigatório


Campos:

clientMutationId

:

String

sensitive

:

String obrigatório

holderId

:

ID obrigatório

billingAddress

:

AddressInput

usageConstraints

:

CardUsageConstraintsInput


Campos:

clientMutationId

:

String

cardId

:

ID obrigatório


Campos:

clientMutationId

:

String

holderId

:

ID obrigatório

billingAddress

:

AddressInput

usageConstraints

:

CardUsageConstraintsInput

status

:

CardStatus


Campos:

clientMutationId

:

String

legalId

:

LegalIdsInput obrigatório

email

:

String

phone

:

String


Campos:

clientMutationId

:

String

legalId

:

LegalIdsInput obrigatório

email

:

String

phone

:

String

token

:

String obrigatório

bcryptPassword

:

String obrigatório


Campos:

clientMutationId

:

String

userId

:

ID obrigatório


Campos:

clientMutationId

:

String

id

:

ID obrigatório

username

:

String

name

:

String

firstName

:

String

lastName

:

String

displayName

:

String

legalIds

:

LegalIdsInput

birthday

:

Date

gender

:

Gender

maritalStatus

:

MaritalStatus

occupationId

:

ID

contacts

:


addresses

:

lista de AddressInput


Campos:

clientMutationId

:

String

userId

:

ID obrigatório

companyName

:

String

companyLegalName

:

String

companylegalIds

:

CompanyLegalIdsInput


Campos:

clientMutationId

:

String

userId

:

ID obrigatório

cardIssuerId

:

ID obrigatório


Campos:

clientMutationId

:

String

userId

:

ID obrigatório

merchantId

:

ID obrigatório


Campos:

clientMutationId

:

String

userId

:

ID obrigatório

key

:

String obrigatório

format

:

CryptoKeyFormat


Campos:

clientMutationId

:

String

userId

:

ID obrigatório

agreementTermId

:

ID obrigatório

timestamp

:

DateTime


Campos:

clientMutationId

:

String

userId

:

ID obrigatório

agreementTermId

:

ID obrigatório





Campos:

hasPreviousPage

:

Boolean obrigatório

hasNextPage

:

Boolean obrigatório

startCursor

:

String

endCursor

:

String


Campos:

month

:

Int obrigatório

year

:

Int obrigatório


Campos:

number

:

String obrigatório


Campos:

number

:

String obrigatório


Campos:

number

:

String obrigatório

issuerOrganization

:

String

issuerState

:

String

issueDate

:

Date


Campos:

cnpj

:

CNPJ

cpf

:

CPF

rg

:

RG


Campos:

personal

:

Float

family

:

Float

currency

:

String


Campos:

id

:

ID obrigatório

display

:

String obrigatório


Campos:

url

:

String obrigatório

width

:

Int obrigatório

height

:

Int obrigatório

mimeType

:

String obrigatório


Campos:

type

:

PersonContactType obrigatório

context

:

String

value

:

String obrigatório

verified

:

VerifiedStatus


Campos:

context

:

String

country

:

String obrigatório

city

:

String obrigatório

state

(


abbrev:

Boolean

)

:

String

zip

:

String

district

:

String

kind

:

String

number

:

Int

place

:

String obrigatório

complement

:

String

reference

:

String

instructions

:

String

lon

:

Float

lat

:

Float


Campos:

id

:

ID obrigatório

name

:

String obrigatório

holder

:

CardHolder obrigatório

cards

(


first:

Int

after:

String

last:

Int

before:

String

)

:

CardsConnection


Campos:

pageInfo

:

PageInfo obrigatório

edges

:

lista de CardsEdge

totalCount

:

Int


Campos:

pageInfo

:

PageInfo obrigatório

edges

:

lista de CardTokensEdge

totalCount

:

Int


Campos:

pageInfo

:

PageInfo obrigatório

edges

:


totalCount

:

Int


Campos:

pageInfo

:

PageInfo obrigatório

totalCount

:

Int


Campos:

pageInfo

:

PageInfo obrigatório

totalCount

:

Int


Campos:

pageInfo

:

PageInfo obrigatório

edges

:


totalCount

:

Int


Campos:

id

:

ID obrigatório

name

:

String

firstName

:

String

lastName

:

String

displayName

:

String

companyName

:

String

companyLegalName

:

String

legalIds

:

LegalIds

birthday

:

Date

age

:

Int

gender

:

Gender

maritalStatus

:

MaritalStatus

occupation

(


language:

String

)

:

PersonOccupation

image

(


width:

Int

height:

Int

mimeType:

String

)

:

ImageUrl

contacts

:

lista de PersonContact obrigatório

addresses

:

lista de Address obrigatório

wallets

:

lista de Wallet obrigatório

cards

(


first:

Int

after:

String

last:

Int

before:

String

)

:

CardsConnection

cardTokens

(


first:

Int

after:

String

last:

Int

before:

String

)

:

CardTokensConnection

travelInsurances

(


first:

Int

after:

String

last:

Int

before:

String

)

:

TravelInsurancesConnection

extendedWarrantyInsurances

(


first:

Int

after:

String

last:

Int

before:

String

)

:

ExtendedWarrantyInsurancesConnection

purchaseProtectionInsurances

(


first:

Int

after:

String

last:

Int

before:

String

)

:

PurchaseProtectionInsurancesConnection

homeAssistences

(


first:

Int

after:

String

last:

Int

before:

String

)

:

HomeAssistencesConnection


Campos:

cursor

:

String obrigatório

node

:

Card


Campos:

id

:

ID obrigatório

sensitive

(


keyId:

String

)

:

String

last4

:

String

expiry

:

CardExpiry

holder

:

CardHolder

billingAddress

:

Address

status

:

CardStatusInterface obrigatório

usageConstraints

:

CardUsageConstraints

availableServices

:

lista de CardHolderService obrigatório

usedServices

:

lista de CardHolderService obrigatório

bin

:

BIN

funding

:

CardFunding

product

:

CardProduct

isInternational

:

Boolean

isCompany

:

Boolean

isToken

:

Boolean

cardTokens

:

CardTokensConnection

brand

:

CardBrand

allowedCaptures

:

lista de CardCapture obrigatório

usages

:

lista de CardUsage obrigatório

network

:

CardNetwork

issuer

:

CardIssuer

metadata

:

CardMetadata

trackings

:

lista de Track

transactions

(


first:

Int

after:

String

last:

Int

before:

String

)

:

CardTransactionsConnection

transactionsSummary

:

lista de CardTransactionCategorySummary obrigatório

fraudTransactions

(


first:

Int

after:

String

last:

Int

before:

String

)

:

CardFraudTransactionsConnection

queueFraudTransactions

(


first:

Int

after:

String

last:

Int

before:

String

)

:

CardFraudTransactionsConnection


Campos:

id

:

ID obrigatório

sensitive

(


keyId:

String

)

:

String

last4

:

String

expiry

:

CardExpiry

holder

:

CardHolder

billingAddress

:

Address

status

:

CardStatusInterface obrigatório

usageConstraints

:

CardUsageConstraints

availableServices

:

lista de CardHolderService obrigatório

usedServices

:

lista de CardHolderService obrigatório

bin

:

BIN

funding

:

CardFunding

product

:

CardProduct

isInternational

:

Boolean

isCompany

:

Boolean

isToken

:

Boolean

brand

:

CardBrand

allowedCaptures

:

lista de CardCapture obrigatório

usages

:

lista de CardUsage obrigatório

network

:

CardNetwork

issuer

:

CardIssuer

metadata

:

CardMetadata

transactions

(


first:

Int

after:

String

last:

Int

before:

String

)

:

CardTransactionsConnection

transactionsSummary

:

lista de CardTransactionCategorySummary obrigatório

card

:

Card

origin

:

CardTokenOrigin


Campos:

cursor

:

String obrigatório

node

:

CardToken


Campos:

id

:

ID obrigatório

cardHolder

:

CardHolder obrigatório

bin

:

BIN obrigatório

merchant

:

MerchantInsurance

journey

:

Journey obrigatório

startDate

:

Date obrigatório

endDate

:

Date obrigatório

companyInsurance

:

String obrigatório


Campos:

cursor

:

String obrigatório


Campos:

id

:

ID obrigatório

insuranceId

:

ID obrigatório

cardHolder

:

CardHolder obrigatório

bin

:

BIN obrigatório

status

:

CardHolderInsuranceStatus obrigatório

merchant

:

MerchantInsurance

startDate

:

Date obrigatório

endDate

:

Date obrigatório

companyInsurance

:

String

invoiceNumber

:

String

invoiceDate

:

Date

serialNumber

:

String

category

(


language:

String

)

:

ExtendedWarrantyProductCategory

brand

:

String

model

:

String

description

:

String

value

:

Float

extendedWarrantyMonths

:

Int

manufacturerWarrantyMonths

:

Int


Campos:

cursor

:

String obrigatório


Campos:

id

:

ID obrigatório

insuranceId

:

ID obrigatório

cardHolder

:

CardHolder obrigatório

merchant

:

MerchantInsurance

bin

:

BIN obrigatório

status

:

CardHolderInsuranceStatus obrigatório

startDate

:

Date obrigatório

endDate

:

Date obrigatório

companyInsurance

:

String obrigatório

invoiceNumber

:

String obrigatório

invoiceDate

:

Date obrigatório

serialNumber

:

String

category

(


language:

String

)

:

PurchaseProtectionProductCategory

brand

:

String obrigatório

model

:

String obrigatório

description

:

String obrigatório

value

:

Float obrigatório

coverageDays

:

Int


Campos:

cursor

:

String obrigatório


Campos:

id

:

ID obrigatório

openedAt

:

DateTime obrigatório

updatedAt

:

DateTime

cardHolder

:

CardHolder obrigatório

bin

:

BIN obrigatório

status

:

HomeAssistenceStatus obrigatório

type

:

HomeAssistenceType obrigatório

address

:

Address obrigatório

person

:

PersonType obrigatório

providerAssistence

:

ProviderAssistence

description

:

String obrigatório


Campos:

cursor

:

String obrigatório


Campos:

maxUsage

:

Int

expiry

:

DateTime

allowedTxAmounts

:

lista de CardCurrencyRange obrigatório

allowedMerchants

:

lista de Merchant obrigatório

allowedMerchantCategories

:

lista de MerchantCategory obrigatório

deniedMerchantCategories

:

lista de MerchantCategory obrigatório


Campos:

id

:

ID obrigatório

name

:

String obrigatório

description

:

String

image

(


width:

Int

height:

Int

mimeType:

String

)

:

ImageUrl

url

:

String

discounts

:

Discounts


Campos:

number

:

String obrigatório

panSizeRange

:

IntRange obrigatório

funding

:

CardFunding obrigatório

product

:

CardProduct obrigatório

country

:

String obrigatório

isInternational

:

Boolean obrigatório

regexp

:

String obrigatório

isCompany

:

Boolean obrigatório

isToken

:

Boolean obrigatório

brand

:

CardBrand obrigatório

allowedCaptures

:

lista obrigatória de CardCapture obrigatório

usages

:

lista obrigatória de CardUsage obrigatório

network

:

CardNetwork obrigatório

issuer

:

CardIssuer obrigatório

metadata

:

CardMetadata obrigatório

services

:

lista obrigatória de CardHolderService obrigatório

creditSettlementBankNumber

:

Int

debitSettlementBankNumber

:

Int


Campos:

id

:

ID obrigatório

code

:

CodeProduct obrigatório

name

:

String obrigatório

image

(


width:

Int

height:

Int

mimeType:

String

)

:

ImageUrl

url

:

String


Campos:

id

:

ID obrigatório

name

:

String obrigatório

image

(


width:

Int

height:

Int

mimeType:

String

)

:

ImageUrl

url

:

String


Campos:

id

:

ID obrigatório

name

:

String obrigatório

code

:

Int obrigatório


Campos:

id

:

ID obrigatório

name

:

String obrigatório

code

:

Int obrigatório


Campos:

id

:

ID obrigatório

name

:

String obrigatório

image

(


width:

Int

height:

Int

mimeType:

String

)

:

ImageUrl

url

:

String


Campos:

id

:

ID obrigatório

name

:

String obrigatório

legalName

:

String obrigatório

description

:

String

image

(


width:

Int

height:

Int

mimeType:

String

)

:

ImageUrl

legalIds

:

CompanyLegalIds obrigatório

contacts

:

lista obrigatória de CompanyContact obrigatório

addresses

:

lista obrigatória de Address obrigatório

url

:

String

cards

(


first:

Int

after:

String

last:

Int

before:

String

)

:

CardsConnection


Campos:

image

(


width:

Int

height:

Int

mimeType:

String

)

:

ImageUrl

backgroundColor

:

String

foregroundColor

:

String

issuer

:

String

brand

:

String

product

:

String


Campos:

type

:

TrackType obrigatório

key

:

String obrigatório

value

:

String obrigatório


Campos:

pageInfo

:

PageInfo obrigatório

edges

:


totalCount

:

Int


Campos:

category

:

MerchantCategory obrigatório

count

:

Int obrigatório

value

:

String obrigatório


Campos:

pageInfo

:

PageInfo obrigatório

edges

:


totalCount

:

Int


Campos:

currency

:

String obrigatório

min

:

Float

max

:

Float


Campos:

id

:

ID obrigatório

name

:

String obrigatório

legalName

:

String obrigatório

description

:

String

image

(


width:

Int

height:

Int

mimeType:

String

)

:

ImageUrl

legalIds

:

CompanyLegalIds obrigatório

contacts

:

lista obrigatória de CompanyContact obrigatório

addresses

:

lista obrigatória de Address obrigatório

url

:

String

categories

:

lista obrigatória de MerchantCategory obrigatório

transactionFees

:

lista de MerchantTransactionFees obrigatório

cardTransactions

(


first:

Int

after:

String

last:

Int

before:

String

)

:

CardTransactionsConnection


Campos:

id

:

ID obrigatório

iso

:

Int obrigatório

name

(


language:

String

)

:

String obrigatório

image

(


width:

Int

height:

Int

mimeType:

String

)

:

ImageUrl

transactionFees

:

lista de MerchantTransactionFees obrigatório

merchants

(


first:

Int

after:

String

last:

Int

before:

String

)

:

MerchantsConnection


Campos:

holderOrAdditional

:

Int

companion

:

Int


Campos:

min

:

Int obrigatório

max

:

Int obrigatório


Campos:

cnpj

:

CNPJ


Campos:

type

:

CompanyContactType obrigatório

context

:

String

value

:

String obrigatório


Campos:

cursor

:

String obrigatório


Campos:

cursor

:

String obrigatório


Campos:

lon

:

Float obrigatório

lat

:

Float obrigatório

alt

:

Float

precision

:

Float


Campos:

userAgent

:

String

brand

:

String

model

:

String

type

:

DeviceType

serialNumber

:

String

imei

:

String

os

:

String


Campos:

timestamp

:

DateTime obrigatório

ip

(


ipv6Mapped:

Boolean

)

:

String

geolocation

:

Geolocation

device

:

Device

merchant

:

Merchant

merchantUserId

:

String

wallet

:

Wallet


Campos:

legalId

:

String obrigatório

name

:

String obrigatório

legalName

:

String obrigatório


Campos:

tripNumber

:

Int

tripLocator

:

String

type

:

TripType

departure

:

Layover

arrival

:

Layover

travelers

:

lista obrigatória de TravelInsuranceTraveler obrigatório


Campos:

leisure

:

Boolean obrigatório

business

:

Boolean obrigatório

adventure

:

Boolean obrigatório


Campos:

companyTravel

:

String

journeyLocator

:

String

trips

:

lista obrigatória de Trip obrigatório

purpose

:

TravelPurpose


Campos:

id

:

ID obrigatório

display

:

String obrigatório


Campos:

id

:

ID obrigatório

display

:

String obrigatório

products

:

lista obrigatória de ProductCategory obrigatório


Campos:

id

:

ID obrigatório

display

:

String obrigatório

products

:

lista obrigatória de ProductCategory obrigatório


Campos:

name

:

String obrigatório

contacts

:

lista obrigatória de PersonContact obrigatório


Campos:

legalId

:

String obrigatório

name

:

String obrigatório

legalName

:

String obrigatório


Campos:

name

:

String obrigatório

code

:

String obrigatório

legalIds

:

LegalIds

contacts

:

lista obrigatória de PersonContact obrigatório

geolocation

:

Geolocation

merchant

:

MerchantAssistence


Campos:

cardUsage

:

CardUsage obrigatório

expiry

:

DateTime

installments

:

Int obrigatório

totalCost

:

Float obrigatório

processingCost

:

Float obrigatório

installmentsCost

:

Float obrigatório

marketingCost

:

Float obrigatório

acquiringServiceCost

:

Float obrigatório


Campos:

cardUsage

:

CardUsage obrigatório

installmentsRange

:

IntRange

lastModified

:

DateTime obrigatório

expiry

:

DateTime

marketingFee

:

Float obrigatório

marketingFeeCeilValue

:

Float

acquiringServiceFee

:

Float obrigatório

acquiringServiceFeeCeilValue

:

Float

processingCost

:

Float obrigatório

additionalInstallmentCost

:

Float

calc

(


transactionValue:

Float obrigatório

installments:

Int

)

:

MerchantTransactionFeesCalc obrigatório


Campos:

cursor

:

String obrigatório

node

:

Merchant


Campos:

pageInfo

:

PageInfo obrigatório

edges

:

lista de MerchantsEdge

totalCount

:

Int


Campos:

currency

:

String

balance

:

String


Campos:

id

:

ID obrigatório

capture

:

CardCapture obrigatório

usage

:

CardUsage

bin

:

BIN

merchant

:

Merchant

currency

:

String obrigatório

value

:

String obrigatório

installments

:

Int obrigatório

timestamp

:

DateTime obrigatório

approvalCode

:

String

prePaid

:

PrePaid


Campos:

date

:

DateTime obrigatório

code

:

ID obrigatório

decision

:

String obrigatório


Campos:

cardTransaction

:

CardTransaction obrigatório

last4

:

String

authorization

:

Authorization obrigatório

status

:

CardFraudTransactionStatus obrigatório

reference

:

String

codePos

:

ID obrigatório

liability

:

LiabilityType

codeEic

:

Int obrigatório

flaggedAt

:

DateTime

arn

:

Int obrigatório

initiated

:

InitiatedType obrigatório

settled

:

Date obrigatório


Campos:

IataCode

:

String

IcaoCode

:

String

city

:

String obrigatório

country

:

String obrigatório

dateTime

:

DateTime obrigatório


Campos:

insurances

:

lista de InsuranceTraveler obrigatório

legalIds

:

InsuranceLegalIds obrigatório

name

:

String obrigatório

birthday

:

Date obrigatório

gender

:

Gender obrigatório

pregnancyWeeks

:

Int

maritalStatus

:

MaritalStatus obrigatório

occupation

(


language:

String

)

:

PersonOccupation

address

:

Address obrigatório

contacts

:

lista de PersonContact obrigatório

politicalExposure

:

Boolean obrigatório


Campos:

cursor

:

String obrigatório

node

:

CardHolder


Campos:

pageInfo

:

PageInfo obrigatório

edges

:

lista de CardHoldersEdge

totalCount

:

Int


Campos:

insuranceId

:

ID obrigatório

description

:

String obrigatório

status

:

CardHolderInsuranceStatus obrigatório


Campos:

cpf

:

CPF obrigatório

rg

:

RG


Campos:

id

:

ID obrigatório

title

:

String obrigatório

description

:

String

url

:

String

isWalletDigital

:

Boolean


Campos:

agreementTerm

:

AgreementTerm obrigatório

timestamp

:

DateTime obrigatório


Campos:

accessToken

:

String obrigatório

timestamp

:

DateTime obrigatório

ip

(


ipv6Mapped:

Boolean

)

:

String

geolocation

:

Geolocation

device

:

Device


Campos:

id

:

String obrigatório

key

(


)

:

String obrigatório

fingerprint

:

String obrigatório


Campos:

id

:

ID obrigatório

verified

:

VerifiedStatus

username

:

String

name

:

String

firstName

:

String

lastName

:

String

displayName

:

String

legalIds

:

LegalIds

birthday

:

Date

age

:

Int

gender

:

Gender

maritalStatus

:

MaritalStatus

occupation

(


language:

String

)

:

PersonOccupation

image

(


width:

Int

height:

Int

mimeType:

String

)

:

ImageUrl

contacts

:

lista de PersonContact obrigatório

addresses

:

lista de Address obrigatório

cardHolders

:

lista de CardHolder obrigatório

merchants

:

lista de Merchant obrigatório

cardIssuers

:

lista de CardIssuer obrigatório

socialNetworks

:

lista de SocialNetworkInterface obrigatório

agreements

:

lista de UserAgreement obrigatório

accessTokens

:

lista de AccessTokenInfo obrigatório

publicKeys

:

lista de PublicKey obrigatório


Campos:

cursor

:

String obrigatório


Campos:

pageInfo

:

PageInfo obrigatório

edges

:


totalCount

:

Int


Campos:

clientMutationId

:

String

wallet

:

Wallet

card

:

Card


Campos:

clientMutationId

:

String

wallet

:

Wallet

card

:

Card


Campos:

clientMutationId

:

String

wallet

:

Wallet

holder

:

CardHolder


Campos:

clientMutationId

:

String

walletId

:

ID

name

:

String

holder

:

CardHolder


Campos:

clientMutationId

:

String

wallet

:

Wallet


Campos:

clientMutationId

:

String

username

:

String obrigatório

salt

:

String obrigatório

expiry

:

DateTime obrigatório


Campos:

clientMutationId

:

String

accessToken

:

String


Campos:

clientMutationId

:

String

id

:

ID obrigatório

name

:

String


Campos:

clientMutationId

:

String

card

:

Card


Campos:

clientMutationId

:

String

cardId

:

ID obrigatório

last4

:

String

expiry

:

CardExpiry

holder

:

CardHolder

bin

:

BIN


Campos:

clientMutationId

:

String

card

:

Card


Campos:

clientMutationId

:

String

maskedEmail

:

String

maskedPhone

:

String


Campos:

clientMutationId

:

String

user

:

User


Campos:

clientMutationId

:

String

userId

:

ID obrigatório

username

:

String obrigatório

name

:

String

firstName

:

String

lastName

:

String

displayName

:

String


Campos:

clientMutationId

:

String

user

:

User


Campos:

clientMutationId

:

String

user

:

User

cardHolder

:

CardHolder


Campos:

clientMutationId

:

String

user

:

User

cardIssuer

:

CardIssuer


Campos:

clientMutationId

:

String

user

:

User

merchant

:

Merchant


Campos:

clientMutationId

:

String

user

:

User

publicKey

:

PublicKey


Campos:

clientMutationId

:

String

user

:

User

agreement

:

UserAgreement


Campos:

clientMutationId

:

String

user

:

User

agreementTerm

:

AgreementTerm





Campos:

id

:

ID obrigatório


Campos:

status

:

CardStatus obrigatório


Campos:

provider

:

String obrigatório

username

:

String obrigatório





Valores possíveis:


INACTIVE


ACTIVE


SUSPENDED





Valores possíveis:


CREDIT


DEBIT


MULTIPLE


MEAL


FOOD





Valores possíveis:


FEMALE


MALE





Valores possíveis:


DIVORCED


MARRIED


SINGLE


WIDOWED


COMMON_LAW_MARRIED





Valores possíveis:


PHONE


EMAIL


IM


OTHER





Valores possíveis:


UNVERIFIED


PENDING


VERIFIED


FAILED


NOT_APPLICABLE





Valores possíveis:


RECEIVED


HIRED


CANCELED





Valores possíveis:


SERVICE_REQUESTED


TO_BE_CONFIRMED


CONFIRMED


PROVIDER_UNDER_WAY


PROVIDER_ON_SERVICE


COMPLETED





Valores possíveis:


PLUMBER


LOCKSMITH


ELECTRICIAN


GLAZIER





Valores possíveis:


BASIC


BUSINESS


CORPORATE


ELO_PLUS


SHOPPING


GRAFITE


NANQUIM


AWARDS


CORPORATE_EXPENDITURE


TRAVEL


CORPORATE_NANQUIM


GRAFITE_BUSINESS


PAYMENT_OF_SUPPLIERS


GENERAL_USE


GIFT_CARD


PAYMENTS


ELO_PLUS_ENTERPRISE


PREPAID_ENTERPRISE


NANQUIM_CORPORATE_DINERS





Valores possíveis:


SELLER





Valores possíveis:


DESKTOP


LAPTOP


SMARTPHONE


TABLET


E_READER


WATCH


OTHER_WEARABLE


CAR


MOTORCYCLE


BOAT


AIRPLANE


OTHER_VEHICLE


PORTABLE_GAME_CONSOLE


GAME_CONSOLE


CAMERA


SMARTTV


PORTABLE_MEDIA_DEVICE


MEDIA_DEVICE


HOME_APPLIANCE





Valores possíveis:


PHONE


EMAIL


IM


OTHER





Valores possíveis:


APPROVED


REJECTED


RETURNED


REFUNDED


CHARGEBACK





Valores possíveis:


USER


CELLULAR


WIFI


GPS





Valores possíveis:


RECEIVED


IN_PROGRESS


PROCESSED


COMPLETED





Valores possíveis:


YES


NO


NOT_APPLICABLE





Valores possíveis:


CARD_ISSUER


CARD_HOLDER





Valores possíveis:


AIR


SEA


ROAD





Valores possíveis:


JWK


PEM


X509





Valores possíveis:


SHA1


SHA256


SHA384


SHA512