# `Worldpay.Tokens`
[🔗](https://github.com/iamkanishka/worldpay/blob/v1.0.0/lib/worldpay/access/tokens.ex#L1)

Worldpay **Tokens API** — Worldpay tokens and Network tokens (NPTs).

## Worldpay tokens

    # Create
    {:ok, token} = Worldpay.Tokens.create(%{
      "paymentInstrument" => %{"type" => "card/front", "cardNumber" => "4444333322221111", ...},
      "merchant" => %{"entity" => "default"}
    }, config)

    token_href = get_in(token, ["tokenPaymentInstrument", "href"])

## Network tokens (NPTs — Visa / Mastercard)

    {:ok, npt} = Worldpay.Tokens.create_network_token(%{...}, config)

    # Provision cryptogram per CIT
    {:ok, cg} = Worldpay.Tokens.provision_cryptogram(npt_id, config)

# `create`

```elixir
@spec create(map(), Worldpay.Config.t()) ::
  {:ok, map()} | {:error, Worldpay.Error.t()}
```

Create a Worldpay token.

# `create_network_token`

```elixir
@spec create_network_token(map(), Worldpay.Config.t()) ::
  {:ok, map()} | {:error, Worldpay.Error.t()}
```

Provision a Visa or Mastercard network token (NPT).

# `delete`

```elixir
@spec delete(String.t(), Worldpay.Config.t()) ::
  {:ok, nil} | {:error, Worldpay.Error.t()}
```

Delete a Worldpay token.

# `delete_network_token`

```elixir
@spec delete_network_token(String.t(), Worldpay.Config.t()) ::
  {:ok, nil} | {:error, Worldpay.Error.t()}
```

Delete a network token.

# `detokenize`

```elixir
@spec detokenize(String.t(), Worldpay.Config.t()) ::
  {:ok, map()} | {:error, Worldpay.Error.t()}
```

Detokenize — retrieve the raw card number from a token.

**Warning:** Only available to PCI-accredited merchants. Increases PCI scope.

# `get`

```elixir
@spec get(String.t(), Worldpay.Config.t()) ::
  {:ok, map()} | {:error, Worldpay.Error.t()}
```

Retrieve a Worldpay token by ID.

# `get_network_token`

```elixir
@spec get_network_token(String.t(), Worldpay.Config.t()) ::
  {:ok, map()} | {:error, Worldpay.Error.t()}
```

Query a network token by ID.

# `provision_cryptogram`

```elixir
@spec provision_cryptogram(String.t(), Worldpay.Config.t()) ::
  {:ok, map()} | {:error, Worldpay.Error.t()}
```

Provision a cryptogram for a network token.

Required for every Customer Initiated Transaction using a network token,
unless Worldpay auto-provisions it (Payments API orchestrated flow only).

# `update`

```elixir
@spec update(String.t(), map(), Worldpay.Config.t()) ::
  {:ok, map()} | {:error, Worldpay.Error.t()}
```

Update a Worldpay token.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
