Skip to content

Payment instruments

Last updated: April 29, 2022

Store a customer's card or bank account as a payment instrument to reuse it in future payments or payouts.


Create a card payment instrument

You can store a card as a payment instrument in two ways: using the /payments endpoint, or using the /instruments endpoint.

In both cases, you can create a payment instrument for a new customer, or an existing one:

  • If you provide a new email in the customer object, a new customer will be created and linked with the new payment instrument.
  • If you supply an existing customer ID or email, the new payment instrument will be linked to that existing customer.

Using the /payments endpoint

Make a payment (with a card token or full card details) or verify a card with the /payments endpoint, and the ID of the newly created payment instrument will be included in the response.

For the full API specification, see the API reference.

We recommend this flow if you perform payments with us, because we will check the card is valid before storing it.

Endpoints

    post

    https://api.checkout.com/payments

    Copied!

    Request example

    In this example, the ID of an existing customer has been supplied, so the payment instrument will be linked to this existing customer.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    {
    "source": {
    "type": "token",
    "token": "tok_4gzeau5o2uqubbk6fufs3m7p54"
    },
    "amount": 6500,
    "currency": "USD",
    "customer": {
    "customer.id": "cus_udst2tfldj6upmye2reztkmm4i"
    }
    }

    Response example

    If the request was successful, you will receive 201 success response. This will include a source.id (prefixed with src_) – this is the payment instrument ID. You can use this in future payment requests.

    It will also include the customer.id (prefixed with cus_) – the ID of the customer to which the new payment instrument has been linked.

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      53
      {
      "id": "pay_mbabizu24mvu3mela5njyhpit4",
      "action_id": "act_mbabizu24mvu3mela5njyhpit4",
      "amount": 6500,
      "currency": "USD",
      "approved": true,
      "status": "Authorized",
      "auth_code": "770687",
      "eci": "05",
      "scheme_id": "638284745624527",
      "response_code": "10000",
      "response_summary": "Approved",
      "risk": {
      "flagged": false
      },
      "source": {
      "id": "src_nwd3m4in3hkuddfpjsaevunhdy",
      "type": "card",
      "expiry_month": 9,
      "expiry_year": 2022,
      "scheme": "Visa",
      "last4": "4242",
      "fingerprint": "F31828E2BDABAE63EB694903825CDD36041CC6ED461440B81415895855502832",
      "bin": "424242",
      "card_type": "Credit",
      "card_category": "Consumer",
      "issuer": "JPMORGAN CHASE BANK NA",
      "issuer_country": "US",
      "product_id": "A",
      "product_type": "Visa Traditional",
      "avs_check": "S",
      "cvv_check": ""
      },
      "customer": {
      "id": "cus_udst2tfldj6upmye2reztkmm4i"
      },
      "processed_on": "2019-01-25T11:03:36Z",
      "reference": "ORD-5023-4E89",
      "_links": {
      "self": {
      "href": "https://api.sandbox.checkout.com/payments/pay_mbabizu24mvu3mela5njyhpit4"
      },
      "actions": {
      "href": "https://api.sandbox.checkout.com/payments/pay_mbabizu24mvu3mela5njyhpit4/actions"
      },
      "capture": {
      "href": "https://api.sandbox.checkout.com/payments/pay_mbabizu24mvu3mela5njyhpit4/captures"
      },
      "void": {
      "href": "https://api.sandbox.checkout.com/payments/pay_mbabizu24mvu3mela5njyhpit4/voids"
      }
      }
      }

      Using the /instruments endpoint

      Alternatively, you can convert a card token into a payment instrument using the /instruments endpoint.

      For the full API specification, see the API reference.

      Using this flow will not check the card is valid before storing it.

      Endpoints

        post

        https://api.checkout.com/instruments

        Copied!

        Request example

        In this example, a new customer email and name is provided. This will create a new customer and the payment instrument will automatically become this customer's default instrument.

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        {
        "type": "token",
        "token": "tok_asoto22g2fsu7prwomy12sgfsa",
        "account_holder": {
        "billing_address": {
        "address_line1": "Checkout.com",
        "address_line2": "90 Tottenham Court Road",
        "city": "London",
        "state": "London",
        "zip": "W1T 4TJ",
        "country": "GB"
        },
        "phone": {
        "country_code": "975",
        "number": "174217187"
        }
        },
        "customer": {
        "email": "JohnTest@test.com",
        "name": "John Test"
        }
        }

        Response example

        If the request was successful, you will receive a 201 success response. This will include the newly created payment instrument id (prefixed with src_), which you can now use in future payment requests.

        It will also include the details of the customer to which the new instrument has been linked.

          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          17
          18
          19
          20
          21
          {
          "id": "src_wmlfc3zyhqzehihu7giusaaawu",
          "type": "card",
          "fingerprint": "string",
          "expiry_month": 6,
          "expiry_year": 2025,
          "scheme": "VISA",
          "last4": "9996",
          "bin": "454347",
          "card_type": "Credit",
          "card_category": "Consumer",
          "issuer": "GOTHAM STATE BANK",
          "issuer_country": "US",
          "product_id": "F",
          "product_type": "CLASSIC",
          "customer": {
          "id": "cus_y3oqhf46pyzuxjbcn2giaqnb44",
          "email": "JohnTest@test.com",
          "name": "John Test"
          }
          }

          Create a bank account payment instrument

          Get bank account field formatting

          Before creating a bank account payment instrument, use the get bank account field formatting endpoint to check which fields are required for the country and currency of the account.

          You can explore the required fields for each country we support in our formatting guide.

          Create the instrument

          Convert bank account details into a bank account payment instrument using the /instruments endpoint.

          For the full API specification, see the API reference.

          Endpoints

            post

            https://api.checkout.com/instruments

            Copied!

            Request example

            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            11
            12
            13
            14
            15
            16
            17
            18
            19
            20
            21
            22
            23
            24
            25
            26
            27
            28
            29
            30
            31
            32
            33
            34
            35
            36
            37
            38
            39
            40
            41
            42
            43
            44
            45
            46
            47
            48
            49
            50
            51
            52
            53
            54
            55
            56
            57
            {
            "type": "bank_account",
            "account_type": "savings",
            "account_number": "13654567455",
            "bank_code": "123-456",
            "branch_code": "6443",
            "iban": "HU93116000060000000012345676",
            "bban": "3704 0044 0532 0130 00",
            "swift_bic": "37040044",
            "currency": "GBP",
            "country": "GB",
            "account_holder": {
            "type": "individual",
            "first_name": "John",
            "last_name": "Smith",
            "company_name": "Test company",
            "tax_id": "123456",
            "date_of_birth": "1986-01-01",
            "country_of_birth": "GB",
            "residential_status": "resident",
            "billing_address": {
            "address_line1": "Checkout.com",
            "address_line2": "90 Tottenham Court Road",
            "city": "London",
            "state": "London",
            "zip": "W1T 4TJ",
            "country": "GB"
            },
            "phone": {
            "country_code": "+1",
            "number": "415 555 2671"
            },
            "identification": {
            "type": "passport",
            "number": "09876",
            "issuing_country": "US"
            },
            "email": "test.user@checkout.com"
            },
            "bank": {
            "name": "Lloyds TSB",
            "branch": "Bournemouth",
            "address": {
            "address_line1": "Checkout.com",
            "address_line2": "90 Tottenham Court Road",
            "city": "London",
            "state": "London",
            "zip": "W1T 4TJ",
            "country": "GB"
            }
            },
            "customer": {
            "id": "cus_y3oqhf46pyzuxjbcn2giaqnb44",
            "email": "brucewayne@gmail.com",
            "name": "Bruce Wayne"
            }
            }

            Response example

            If successful, the response will include the id (prefixed with src_) of the newly created bank account payment instrument, which you can now use in payout requests, and a fingerprint, which is a unique token that can identify this instrument across all customers.

              1
              2
              3
              4
              5
              6
              7
              8
              9
              10
              {
              "type": "bank_account",
              "fingerprint": "vnsdrvikkvre3dtrjjvlm5du4q",
              "customer": {
              "id": "cus_y3oqhf46pyzuxjbcn2giaqnb44",
              "email": "brucewayne@gmail.com",
              "name": "Bruce Wayne"
              },
              "id": "src_wmlfc3zyhqzehihu7giusaaawu"
              }

              Test different payment instrument scenarios using our testing guide.


              Get instrument details

              To retrieve the details of a particular payment instrument, pass the instrument's id into the following endpoint.

              For the full API specification, see the API reference.

              Endpoints

                get

                https://api.checkout.com/instruments/{id}

                Copied!

                Response example

                If successful, you will receive a 200 success response containing all the details of the payment instrument.

                  1
                  2
                  3
                  4
                  5
                  6
                  7
                  8
                  9
                  10
                  11
                  12
                  13
                  14
                  15
                  16
                  17
                  18
                  19
                  20
                  21
                  22
                  23
                  24
                  25
                  26
                  27
                  28
                  29
                  30
                  31
                  32
                  33
                  34
                  35
                  36
                  37
                  {
                  "id": "src_lmyvsjadlxxu7kqlgevt6ebkra",
                  "type": "card",
                  "fingerprint": "vnsdrvikkvre3dtrjjvlm5du4q",
                  "expiry_month": 6,
                  "expiry_year": 2025,
                  "name": "John Test",
                  "scheme": "VISA",
                  "last4": "9996",
                  "bin": "454347",
                  "card_type": "Credit",
                  "card_category": "Consumer",
                  "issuer": "GOTHAM STATE BANK",
                  "issuer_country": "US",
                  "product_id": "F",
                  "product_type": "CLASSIC",
                  "account_holder": {
                  "billing_address": {
                  "address_line1": "Checkout.com",
                  "address_line2": "90 Tottenham Court Road",
                  "city": "London",
                  "state": "London",
                  "zip": "W1T 4TJ",
                  "country": "GB"
                  },
                  "phone": {
                  "country_code": "975",
                  "number": "174217187"
                  }
                  },
                  "customer": {
                  "id": "cus_gajmdgunwwlehbctuj6a3sifpm",
                  "email": "JohnTest@test.com",
                  "name": "John Test",
                  "default": true
                  }
                  }

                  Update instrument details

                  To update the details of a payment instrument, use the following request. For example, you can update the expiry month and year of the stored card, or make it the default payment instrument of the customer associated with the card.

                  For the full API specification, see the API reference.

                  Endpoints

                    patch

                    https://api.checkout.com/instruments/{id}

                    Copied!

                    Request example

                      1
                      2
                      3
                      4
                      5
                      6
                      7
                      8
                      9
                      10
                      11
                      12
                      13
                      14
                      15
                      16
                      17
                      18
                      19
                      20
                      21
                      22
                      23
                      {
                      "expiry_month": 6,
                      "expiry_year": 2025,
                      "name": "John Test",
                      "account_holder": {
                      "billing_address": {
                      "address_line1": "Checkout.com",
                      "address_line2": "90 Tottenham Court Road",
                      "city": "London",
                      "state": "London",
                      "zip": "W1T 4TJ",
                      "country": "GB"
                      },
                      "phone": {
                      "country_code": "975",
                      "number": "174217187"
                      }
                      },
                      "customer": {
                      "id": "cus_gajmdgunwwlehbctuj6a3sifpm",
                      "default": true
                      }
                      }

                      Response example

                      If successful, you will receive a 200 success response containing the fingerprint of the updated card instrument – a token you can use to identify the card across all customers.

                        1
                        2
                        3
                        4
                        {
                        "type": "card",
                        "fingerprint": "vnsdrvikkvre3dtrjjvlm5du4q"
                        }

                        Delete an instrument

                        If you want to delete a payment instrument, pass the instrument's id in the following request.

                        For the full API specification, see the API reference.

                        Endpoints

                          delete

                          https://api.checkout.com/instruments/{id}

                          Copied!

                          Response

                          If the instrument was successfully deleted, you will receive a 204 success response.