NAV Navbar

Introduction

The Sezzle API v2 is intended for merchants interested in accepting Sezzle as a payment option while using the latest features offered by v2.

In addition to supporting individually authorized transactions for a single purchase of goods or services, v2 also supports tokenization of a customer for future transactions.

Sezzle offers integrations with some of the most popular eCommerce platforms.
Note that v1 indicates support for v1 API only.
Please choose your platform to see the relevant documentation:
1. 3DCart v1
2. BigCommerce
3. Bold Cashier v1
4. BuyItLive v1
5. CommentSold v1
6. Magento 1 v1
7. Magento 2
8. NopCommerce v1
9. Salesforce Commerce Cloud
10. Shopify v1
11. Wix
12. WooCommerce v1
13. Zoey v1

Field or header names in bold case followed by an asterisk are required. For example, this_is_required* is a required field whereas this_is_optional is not.

If you have any questions regarding our API, please reach out to our team by email at dev@sezzle.com.

Integration Flow

Order payment flow

order flow

  1. Merchant calls /v2/session with order and intent of AUTH or CAPTURE. Optionally, the merchant can send customer information.
  2. Sezzle returns order uuid and checkout URL.
  3. Merchant redirects customer to Sezzle checkout URL.
  4. Customer completes the Sezzle checkout and is redirected to the session complete URL.
    • If the intent was to CAPTURE, Sezzle will capture the total order amount.
    • If the intent was to AUTH, Sezzle will only authorize the total order amount and the merchant can call /v2/order later to release or capture amounts using the order uuid.

Customer tokenization

customer tokenization

  1. Merchant calls /v2/session with customer tokenize of true. Optionally, the merchant can send customer information.
  2. Sezzle returns the tokenize session token and approval URL.
  3. Merchant redirects customer to Sezzle approval URL.
  4. Customer can agree (or disagree) to allow future Sezzle transactions by the merchant and is redirected to the session complete URL. If the customer agrees to be tokenized, Sezzle will add a query parameter to the complete URL named customer-uuid, allowing the merchant to get the uuid of the customer.
    • Alternatively, the merchant can call /v2/token with this tokenize session token to get the uuid of the customer.
  5. Merchant can subsequently charge the customer by calling /v2/customer to create an order using the customer-uuid.
    • If successful, merchant can call /v2/order to release, capture, or refund the order.

Authentication

Obtain Authentication Token

To authorize, use the following format:

Request Body

{
    "public_key": "myPublicKey",
    "private_key": "myPrivateKey"
}

Make sure to replace keys with your API keys from your Merchant Dashboard.

Response Body

{
    "token": "authToken",
    "expiration_date": "2017-01-01T01:30:25.388940303Z",
    "merchant_uuid": "merchant1234567890"
}

POST https://gateway.sezzle.com/v2/authentication

Sezzle uses scoped API keys to allow access to the API. You can find/generate these keys on your merchant dashboard once you have been approved by Sezzle.

Once you have a valid token, it must be used as a Header for subsequent requests to our API, using the format below.

Authorization: Bearer authToken

Sessions

A session represents an order, a tokenization of a customer, or both. Use the session endpoints to post a new session or get the details of an existing session.

Create a session

Request Body

{
  "cancel_url": {
    "href": "https://sezzle.com/cart",
    "method": "GET"
  },
  "complete_url": {
    "href": "https://sezzle.com/complete",
    "method": "GET"
  },
  "customer": {
    "tokenize": true,
    "email": "john.doe@sezzle.com",
    "first_name": "John",
    "last_name": "Doe",
    "phone": "5555045294",
    "dob": "1990-02-25",
    "billing_address": {
      "name": "John Doe",
      "street": "123 W Lake St",
      "street2": "Unit 104",
      "city": "Minneapolis",
      "state": "MN",
      "postal_code": "55408",
      "country_code": "US",
      "phone_number": "5555045294"
    },
    "shipping_address": {
      "name": "John Doe",
      "street": "123 W Lake St",
      "street2": "Unit 104",
      "city": "Minneapolis",
      "state": "MN",
      "postal_code": "55408",
      "country_code": "US",
      "phone_number": "5555045294"
    }
  },
  "order": {
    "intent": "CAPTURE",
    "reference_id": "ord_12345",
    "description": "sezzle-store - #12749253509255",
    "requires_shipping_info": true,
    "items": [
        {
          "name": "widget",
          "sku": "sku123456",
          "quantity": 1,
          "price": {
              "amount_in_cents": 1000,
              "currency": "USD"
          }
        }
    ],
     "discounts": [
        {
          "name": "20% off",
          "amount": {
              "amount_in_cents": 1000,
              "currency": "USD"
          }
        }
    ],
    "metadata": {
      "location_id": "123",
      "store_name": "Downtown Minneapolis",
      "store_manager": "Jane Doe"
    },
     "shipping_amount": {
        "amount_in_cents": 1000,
        "currency": "USD"
    },
   "tax_amount": {
        "amount_in_cents": 1000,
        "currency": "USD"
    },
    "order_amount": {
      "amount_in_cents": 10000,
      "currency": "USD"
    }
  }
}

Response Body

{
  "uuid": "fadbc642-05a4-4e38-9e74-80e325623af9",
  "links": [
    {
      "href": "https://gateway.sezzle.com/v2/session/fadbc642-05a4-4e38-9e74-80e325623af9",
      "method": "GET",
      "rel": "self"
    }
  ],
  "order": {
    "uuid": "12a34bc5-6de7-890f-g123-4hi1238jk902",
    "checkout_url": "https://checkout.sezzle.com/?id=12a34bc5-6de7-890f-g123-4hi1238jk902",
    "intent": "CAPTURE",
    "links": [
      {
        "href": "https://gateway.sezzle.com/v2/order/12a34bc5-6de7-890f-g123-4hi1238jk902",
        "method": "GET",
        "rel": "self"
      },
      {
        "href": "https://gateway.sezzle.com/v2/order/12a34bc5-6de7-890f-g123-4hi1238jk902",
        "method": "PATCH",
        "rel": "self"
      },
      {
        "href": "https://gateway.sezzle.com/v2/order/12a34bc5-6de7-890f-g123-4hi1238jk902/release",
        "method": "POST",
        "rel": "release"
      },
      {
        "href": "https://gateway.sezzle.com/v2/order/12a34bc5-6de7-890f-g123-4hi1238jk902/capture",
        "method": "POST",
        "rel": "capture"
      },
      {
        "href": "https://gateway.sezzle.com/v2/order/12a34bc5-6de7-890f-g123-4hi1238jk902/refund",
        "method": "POST",
        "rel": "refund"
      }
    ]
  },
  "tokenize": {
    "token": "7ec98824-67cc-469c-86ab-f9e047f9cf1a",
    "expiration": "2020-04-27T14:46:59Z",
    "approval_url": "https://dashboard.sezzle.com/customer/checkout-approval?merchant-request-id=3f3244fd-78ce-4994-af0c-b8c760d47794",
    "links": [
      {
        "href": "https://gateway.sezzle.com/v2/token/7ec98824-67cc-469c-86ab-f9e047f9cf1a/session",
        "method": "GET",
        "rel": "token"
      }
    ]
  }
}

POST https://gateway.sezzle.com/v2/session

This endpoint creates a session in our system, and it returns the URL that you should redirect the user to. You can use a session to create an order, tokenize a customer, or both.

We suggest you provide as much optional information about the user as you have available, since this will speed up our checkout process and increase conversion.

If you submit an order with a session, then Sezzle is able to handle the entire checkout process after an order has been provided. However, if your flow requires that the user confirm their checkout on your site after being approved by Sezzle, you may set the intent parameter to AUTH with the session request. In this flow, Sezzle will not complete the transaction unless you make a capture request. Capture requests can be made to capture all or part of the original order amount.

If you tokenize a customer, then the customer will have the option to agree to allow you to process future transactions on their behalf. This gives you the ability to preapprove, authorize, and capture future transactions on behalf of the customer.

Session Object

A valid request contains at a minimum an Order object or a Customer object with tokenize set to true.

Parameter Type Description
cancel_url* object The HTTP request information used to redirect the customer in the case of a cancellation
complete_url* object The HTTP request infromation used to redirect the customer upon completion of the session
customer object The customer for this session
order object The order for this session

URL Object

This is used for both the cancel and complete URL objects

Parameter Type Description
href* string The URL used when redirecting a customer
method string The HTTP request method used when redirecting a customer. Currently only the GET method is supported. If omitted, will default to GET.

Customer object

Parameter Type Description
tokenize boolean Determines whether to tokenize customer. If omitted, will default to false.
email string The customer’s email address
first_name string The customer’s first name
last_name string The customer’s last name
phone string The customer’s phone number
dob string The customer’s date of birth in YYYY-MM-DD format
billing_address object The customer’s billing address
shipping_address object The customer’s shipping address

Address Object

This format is used for both billing_address and shipping_address in the Customer object.

Parameter Type Description
name string The name on the address
street string The street and number of the address
street2 string The apt or unit
city string The city
state string The 2 character state code
postal_code string The postal delivery code
country_code string The 2 character country code
phone_number string The phone number at the delivery location

Order object

Parameter Type Description
intent* string Accepted values are “AUTH” or “CAPTURE”. If your checkout flow requires the user to confirm their checkout on your site after being approved by Sezzle, use “AUTH” as your intent. If you prefer the checkout be captured immediately, use “CAPTURE”.
reference_id* string Your reference ID for this order
description* string Your description for this order
order_amount* object A Price object containing the amount of the order, which must be at least 100. All fields of the Price object are required.
requires_shipping_info boolean Flag to indicate if you would like us to collect shipping information for this checkout from the customer. If omitted, defaults to false.
items object The items being purchased
discounts object The discounts applied to this order. Must be included in total
metadata object Object for any custom data you want to submit with the checkout. You are not limited to the key-value pairs shown in the example, and you may use any key-value pairs you like
shipping_amount object The shipping fees applied to this order. Must be included in the total
tax_amount object The taxes applied to this order. Must be included in the total
checkout_expiration string The expiration for the order checkout. Must be in yyyy-mm-dd format

Item Object

Parameter Type Description
name string The name of the item
sku string The sku identifier
quantity int The quantity purchased
price object The price object

Discount Object

Parameter Type Description
name string The description of the discount
amount object A price object

Metadata Object

Use the metadata object for any additional information you would like to attach to the checkout. All values must be strings.

Parameter Type Description
some_field_name string Custom metadata field
some_other_field_name string Custom metadata field

Shipping Amount Object

A price object

Tax Amount Object

A price object

Price Object

The price object is used for items, discounts, shipping amount, tax amount, and order amount.

Parameter Type Description
amount_in_cents int The amount of the item in cents
currency string The 3 character currency code as defined by ISO 4217

Get a session

GET https://gateway.sezzle.com/v2/session/{session_uuid}

You can retrieve the details of an existing session using this endpoint.

Response Body

{
  "uuid": "fadbc642-05a4-4e38-9e74-80e325623af9",
  "links": [
    {
      "href": "https://gateway.sezzle.com/v2/session/fadbc642-05a4-4e38-9e74-80e325623af9",
      "method": "GET",
      "rel": "self"
    }
  ],
  "order": {
    "uuid": "12a34bc5-6de7-890f-g123-4hi1238jk902",
    "intent": "CAPTURE",
    "checkout_url": "https://checkout.sezzle.com/?id=12a34bc5-6de7-890f-g123-4hi1238jk902",
    "links": [
      {
        "href": "https://gateway.sezzle.com/v2/order/12a34bc5-6de7-890f-g123-4hi1238jk902",
        "method": "GET",
        "rel": "self"
      },
      {
        "href": "https://gateway.sezzle.com/v2/order/12a34bc5-6de7-890f-g123-4hi1238jk902",
        "method": "PATCH",
        "rel": "self"
      },
      {
        "href": "https://gateway.sezzle.com/v2/order/12a34bc5-6de7-890f-g123-4hi1238jk902/release",
        "method": "POST",
        "rel": "release"
      },
      {
        "href": "https://gateway.sezzle.com/v2/order/12a34bc5-6de7-890f-g123-4hi1238jk902/capture",
        "method": "POST",
        "rel": "capture"
      },
      {
        "href": "https://gateway.sezzle.com/v2/order/12a34bc5-6de7-890f-g123-4hi1238jk902/refund",
        "method": "POST",
        "rel": "refund"
      }
    ]
  },
  "tokenize": {
    "token": "7ec98824-67cc-469c-86ab-f9e047f9cf1a",
    "expiration": "2020-04-27T14:46:59Z",
    "approval_url": "https://dashboard.sezzle.com/customer/checkout-approval?merchant-request-id=3f3244fd-78ce-4994-af0c-b8c760d47794",
    "links": [
      {
        "href": "https://gateway.sezzle.com/v2/token/7ec98824-67cc-469c-86ab-f9e047f9cf1a/session ",
        "method": "GET",
        "rel": "token"
      }
    ]
  }
}

Orders

Use the orders endpoints to get order details, update an order, release an amount by order, capture an amount by order, or refund an amount by order.

Get an order

GET https://gateway.sezzle.com/v2/order/{order_uuid}

Use this endpoint to get details on an existing order

Response Body

{
  "uuid": "12a34bc5-6de7-890f-g123-4hi1238jk902",
  "links": [
    {
      "href": "https://gateway.sezzle.com/v2/order/12a34bc5-6de7-890f-g123-4hi1238jk902",
      "method": "GET",
      "rel": "self"
    },
    {
      "href": "https://gateway.sezzle.com/v2/order/12a34bc5-6de7-890f-g123-4hi1238jk902",
      "method": "PATCH",
      "rel": "self"
    },
    {
      "href": "https://gateway.sezzle.com/v2/order/12a34bc5-6de7-890f-g123-4hi1238jk902/release",
      "method": "POST",
      "rel": "release"
    },
    {
      "href": "https://gateway.sezzle.com/v2/order/12a34bc5-6de7-890f-g123-4hi1238jk902/capture",
      "method": "POST",
      "rel": "capture"
    },
    {
      "href": "https://gateway.sezzle.com/v2/order/12a34bc5-6de7-890f-g123-4hi1238jk902/refund",
      "method": "POST",
      "rel": "refund"
    }
  ],
  "intent": "AUTH",
  "expiration": "2020-04-23T16:13:44Z",
  "reference_id": "ord_12345",
  "description": "sezzle-store - #12749253509255",
  "metadata": {
    "location_id": "123",
    "store_name": "Downtown Minneapolis",
    "store_manager": "Jane Doe"
  },
  "order_amount": {
    "amount_in_cents": 10000,
    "currency": "USD"
  },
  "items": [
    {
      "name": "widget",
      "sku": "sku123456",
      "quantity": 1,
      "price": {
        "amount_in_cents": 1000,
        "currency": "USD"
      }
    }
  ],
  "customer": {
    "email": "john.doe@sezzle.com",
    "first_name": "John",
    "last_name": "Doe",
    "phone": "5555045294",
    "dob": "1990-02-25",
    "billing_address": {
      "name": "John Doe",
      "street": "123 W Lake St",
      "street2": "Unit 104",
      "city": "Minneapolis",
      "state": "MN",
      "postal_code": "55408",
      "country_code": "US",
      "phone_number": "5555045294"
    },
    "shipping_address": {
      "name": "John Doe",
      "street": "123 W Lake St",
      "street2": "Unit 104",
      "city": "Minneapolis",
      "state": "MN",
      "postal_code": "55408",
      "country_code": "US",
      "phone_number": "5555045294"
    }
  },
  "authorization": {
    "authorization_amount": {
      "amount_in_cents": 10000,
      "currency": "USD"
    },
    "approved": true,
    "expiration":"2020-04-23T16:13:44Z" ,
    "releases": [
      {
        "uuid": "4b4d217c-18f1-4bfb-996e-767470c04661",
        "amount": {
          "amount_in_cents": 3000,
          "currency": "USD"
        }
      }
    ],
    "captures": [
      {
        "uuid": "f4415e94-e562-47cc-94f3-92279f27dc20",
        "amount": {
          "amount_in_cents": 7000,
          "currency": "USD"
        }
      }
    ],
    "refunds": [
      {
        "uuid": "83162d2f-d5f1-43ad-91ed-e8231920ce6d",
        "amount": {
          "amount_in_cents": 1000,
          "currency": "USD"
        }
      }
    ]
  } 
}

Update an order

PATCH https://gateway.sezzle.com/v2/order/{order_uuid}

User this endpoint to update an existing order. At this point only the reference ID can be updated.

Request Body

{
  "reference_id": "ord_9876"
}

Update Order Object

Parameter Type Description
reference_id* string Your reference ID for this order

There is no response body for this request. If successful, we return an HTTP 204 Status No Content.

Release amount by order

POST https://gateway.sezzle.com/v2/order/{order_uuid}/release

Use this endpoint to release an amount by order.

Request Body

{
  "amount_in_cents": 5000,
  "currency": "USD"
}

Release Order Object

A price Object

Price Object

Parameter Type Description
amount_in_cents* number The amount you would like to release on this order, in cents
currency* string The 3 character currency code as defined by ISO 4217

Response Body

{
  "uuid": "6c9db5d4-d09a-4224-860a-b5438ac32ca8"
}

Capture amount by order

POST https://gateway.sezzle.com/v2/order/{order_uuid}/capture

Use this endpoint to capture an amount by order.

Request Body

{
  "capture_amount": {
    "amount_in_cents": 5000,
    "currency": "USD"
  },
  "partial_capture": true
}

Capture Amount By Order Object

Parameter Type Description
capture_amount* object Details the amount and currency being captured
partial_capture boolean Determines whether this capture is a partial capture.

Capture Amount Object

A price object.

Price Object

Parameter Type Description
amount_in_cents* string The amount to be captured, in cents
currency* string The 3 character currency code as defined by ISO 4217

Response Body

{
  "uuid": "6c9db5d4-d09a-4224-860a-b5438ac32ca8"
}

Refund amount by order

POST https://gateway.sezzle.com/v2/order/{order_uuid}/refund

Use this endpoint to refund an amount by order

Request Body

{
  "amount_in_cents": 5000,
  "currency": "USD"
}

Refund Amount Object

A price object.

Price Object

Parameter Type Description
amount_in_cents* string The amount in cents to be refunded, in cents
currency* string The 3 character currency code as defined by ISO 4217

Response Body

{
  "uuid": "6c9db5d4-d09a-4224-860a-b5438ac32ca8"
}

Customers

Use the customers endpoints to get a list of customers, get details on an existing customer, delete a customer, preapprove an amount for the customer, or create an order for a customer.

Get a list of customers

GET https://gateway.sezzle.com/v2/customer

You can retrieve a list of existing customers using this endpoint.

Response Body

[
  {
    "uuid": "a9d8e15c-5e4a-4201-aa8f-7540f934a9a2",
    "expiration":  "2020-04-28T17:58:11Z",
    "links": [
      {
        "href": "https://gateway.sezzle.com/v2/customer/a9d8e15c-5e4a-4201-aa8f-7540f934a9a2",
        "method": "GET",
        "rel": "self" 
      },
      {
        "href": "https://gateway.sezzle.com/v2/customer/a9d8e15c-5e4a-4201-aa8f-7540f934a9a2",
        "method": "DELETE",
        "rel": "self" 
      },
      {
        "href": "https://gateway.sezzle.com/v2/customer/a9d8e15c-5e4a-4201-aa8f-7540f934a9a2/preapprove",
        "method": "POST",
        "rel": "preapprove" 
      },
      {
        "href": "https://gateway.sezzle.com/v2/customer/a9d8e15c-5e4a-4201-aa8f-7540f934a9a2/order",
        "method": "POST",
        "rel": "order" 
      },
    ]
  }
]

Get a customer

GET https://gateway.sezzle.com/v2/customer/{customer_uuid}

You can use this endpoint to get details on an existing customer

Response Body

{ 
  "uuid": "a9d8e15c-5e4a-4201-aa8f-7540f934a9a2",
  "links": [
    {
      "href": "https://gateway.sezzle.com/v2/customer/a9d8e15c-5e4a-4201-aa8f-7540f934a9a2",
      "method": "GET",
      "rel": "self" 
    },
    {
      "href": "https://gateway.sezzle.com/v2/customer/a9d8e15c-5e4a-4201-aa8f-7540f934a9a2",
      "method": "DELETE",
      "rel": "self" 
    },
    {
      "href": "https://gateway.sezzle.com/v2/customer/a9d8e15c-5e4a-4201-aa8f-7540f934a9a2/preapprove",
      "method": "POST",
      "rel": "preapprove" 
    },
    {
      "href": "https://gateway.sezzle.com/v2/customer/a9d8e15c-5e4a-4201-aa8f-7540f934a9a2/order",
      "method": "POST",
      "rel": "order" 
    },
  ],
  "email": "john.doe@sezzle.com",
  "first_name": "John",
  "last_name": "Doe",
  "phone": "5555045294",
  "dob": "1990-02-25",
  "billing_address": {
    "name": "John Doe",
    "street": "123 W Lake St",
    "street2": "Unit 104",
    "city": "Minneapolis",
    "state": "MN",
    "postal_code": "55408",
    "country_code": "US",
    "phone_number": "5555045294"
  }
}

Delete a customer

DELETE https://gateway.sezzle.com/v2/customer/{customer_uuid}

You can use this endpoint to delete an existing customer

There is no response body for this request. If successful, we return an HTTP 204 Status No Content.

Preapprove amount by customer

POST https://gateway.sezzle.com/v2/customer/{customer_uuid}/preapprove

You can use this endpoint to preapprove an amount for a customer

Request Body

{
  "amount_in_cents": 5000,
  "currency": "USD"
}

Preapprove Object

A price Object

Price Object

Parameter Type Description
amount_in_cents* number The amount you would like to preapprove, in cents
currency* string The 3 character currency code as defined by ISO 4217

Response Body

{
  "uuid": "6c9db5d4-d09a-4224-860a-b5438ac32ca8",
  "approved": true
}

Create order by customer

POST https://gateway.sezzle.com/v2/customer/{customer_uuid}/order

You can use this endpoint to create an order for a customer

Header Parameters

Parameter
Type Description
Sezzle-Request-Id string A unique, merchant-generated ID. Use this header to enforce idempotency when authorizing order payment.

Request Body

{
  "intent": "AUTH",
  "reference_id": "monthly_sub_123",  
  "order_amount": {
    "amount_in_cents": 5000,
    "currency": "USD"
  }
}

Order Payment Object

Parameter Type Description
intent* string Accepted values are “AUTH” or “CAPTURE”
reference_id* string A reference ID for the order
order_amount* object The amount and currency of the order

Order Amount Object

A price object. The amount must be greater than 99.

Price Object

Parameter Type Description
amount_in_cents* number The amount you would like to authorize, in cents
currency* string The 3 character currency code as defined by ISO 4217

Response Body

{
  "uuid": "6c9db5d4-d09a-4224-860a-b5438ac32ca8",
  "links": [
    {
      "href": "https://gateway.sezzle.com/v2/order/6c9db5d4-d09a-4224-860a-b5438ac32ca8",
      "method": "GET",
      "rel": "self" 
    },
    {
      "href": "https://gateway.sezzle.com/v2/order/6c9db5d4-d09a-4224-860a-b5438ac32ca8",
      "method": "PATCH",
      "rel": "self"
    },
    {
      "href": "https://gateway.sezzle.com/v2/order/6c9db5d4-d09a-4224-860a-b5438ac32ca8/release",
      "method": "POST",
      "rel": "release" 
    },
    {
      "href": "https://gateway.sezzle.com/v2/order/6c9db5d4-d09a-4224-860a-b5438ac32ca8/capture",
      "method": "POST",
      "rel": "capture" 
    },
    {
      "href": "https://gateway.sezzle.com/v2/order/6c9db5d4-d09a-4224-860a-b5438ac32ca8/refund",
      "method": "POST",
      "rel": "refund" 
    },
  ],
  "intent": "AUTH",
  "reference_id": "monthly_sub_123",  
  "order_amount": {
    "amount_in_cents": 5000,
    "currency": "USD"
  },
  "authorization": {
    "authorization_amount": {
      "amount_in_cents": 5000,
      "currency": "USD"
    },
    "approved": true,
    "expiration":"2020-04-23T16:13:44Z"
  }
}

Tokenization

Use the token endpoints to get the status of a customer tokenization

Get session tokenization

GET https://gateway.sezzle.com/v2/token/{token}/session

You can use this endpoint to get the current state of a session (tokenize) token

If the customer is not tokenized, then the customer object will be empty.

Response Body

{
  "token": "4f8cf865-2089-4423-85fd-ea833a16b62d",
  "expiration": "2020-04-29T19:31:54Z",
  "links": [
    {
      "href": "https://gateway.sezzle.com/v2/token/4f8cf865-2089-4423-85fd-ea833a16b62d/session",
      "method": "GET",
      "rel": "self" 
    }
  ],
  "customer": {
    "uuid": "a9d8e15c-5e4a-4201-aa8f-7540f934a9a2",
    "expiration": "2020-10-13T14:29:41Z",
    "links": [
      {
        "href": "https://gateway.sezzle.com/v2/customer/a9d8e15c-5e4a-4201-aa8f-7540f934a9a2",
        "method": "GET",
        "rel": "self" 
      }
    ]
  }
}

Reports

Settlement Reports

These endpoints allow you to view a list of payout summaries or a detailed report of an individual payout.

Settlement Summaries Response Body

[
    {
        "uuid": "b7916fbe-f30a-4435-b411-124634287a8ca",
        "payout_currency": "USD",
        "payout_date": "2019-12-09T15:52:33Z",
        "net_settlement_amount": 9370,
        "forex_fees": 0,
        "status": "Complete"
    },
    {
        "uuid": "c51343hba-d54b-5641-e341-15235523b3at",
        "payout_currency": "USD",
        "payout_date": "2019-12-10T15:52:33Z",
        "net_settlement_amount": 23470,
        "forex_fees": 0,
        "status": "Complete"
    }
]

Settlement Summaries Request

GET https://gateway.sezzle.com/v2/settlements/summaries

Query Parameter Description
start-date* The start date for the report. Must be in yyyy-mm-dd format.
end-date The end date for the report. Must be in yyyy-mm-dd format. If omitted, will default to the current date.
offset The offset for the report. Limit is 20.
currency-code The ISO-4217 currency code of the account. If omitted, will default to USD.

Settlement Details Response

total_order_amount,total_refund_amount,total_fee_amount,total_returned_fee_amount,total_chargeback_amount,total_chargeback_reversal_amount,total_interest_transfer_amount,total_correction_amount,total_referral_revenue_transfer_amount,total_bank_account_withdrawals,total_bank_account_withdrawal_reversals,forex_fees,net_settlement_amount,payment_uuid,settlement_currency,payout_date,payout_status
703.20,-5.00,-43.80,.30,0.00,0.00,-4.30,1.71,10.00,100.00,-100.00,0.00,693.61,a5c13qt1-4126-41d3-2fq8-9ca431f51431,USD,2019-11-02 00:05:00 +0000 UTC,Complete
type,order_capture_date,order_created_at,event_date,order_uuid,customer_order_id,external_reference_id,amount,posting_currency,type_code,chargeback_code,sezzle_order_id
ORDER,2019-11-01T19:09:50Z,2019-11-01T19:09:50Z,2019-10-22T19:09:50Z,bm99f-31vu1-kg00e-rae1g,1,12345,500.00,USD,001,,66d78e86-fd96-4266-9217-b769c102a0a0
ORDER,2019-11-01T19:09:50Z,2019-11-01T19:09:50Z,2019-10-22T19:09:50Z,va13d-474s9-3000e-nungg,13,12346,200.00,USD,001,,5e0d4886-8c3d-4d4e-901a-2046a06c1e0f
ORDER,2019-11-01T20:00:01Z,2019-11-01T00:00:01Z,2019-11-01T00:00:01Z,as41g-4v4s9-3000e-nunh0,1,12347,1.40,USD,001,,a2c1a142-96ad-48c9-93d2-1acaaee9f073
ORDER,2019-11-01T20:00:01Z,2019-11-01T20:00:01Z,2019-11-01T20:00:01Z,as62l-5ptqs-9g00e-pvk10,2,12348,1.80,USD,001,,3f62dcba-f5a4-41be-ad8f-53e938b5f310
FEE,2019-11-01T19:09:50Z,2019-11-01T19:09:50Z,2019-11-01T19:09:50Z,bm99f-31vu1-kg00e-rae1g,1,12345,-30.00,USD,003,,66d78e86-fd96-4266-9217-b769c102a0a0
FEE,2019-11-01T19:09:50Z,2019-11-01T19:09:50Z,2019-11-01T19:09:50Z,va13d-474s9-3000e-nungg,13,12346,-12.00,USD,003,,5e0d4886-8c3d-4d4e-901a-2046a06c1e0f
FEE,2019-11-01T20:00:01Z,2019-11-01T00:00:01Z,2019-11-01T20:00:01Z,as41g-4v4s9-3000e-nunh0,1,12347,-1.20,USD,003,,a2c1a142-96ad-48c9-93d2-1acaaee9f073
FEE,2019-11-01T20:00:01Z,2019-11-01T20:00:01Z,2019-11-01T20:00:01Z,as62l-5ptqs-9g00e-pvk10,2,12348,-0.60,USD,003,,3f62dcba-f5a4-41be-ad8f-53e938b5f310
REFUND,2019-10-22T19:09:50Z,2019-10-22T19:09:50Z,2019-11-01T19:09:50Z,bm5rm-vg2js-1tsky-c2dsky,8,12344,5.00,USD,002,,e4194956-de70-4958-9da4-6c05f276fdab
RETURNED_FEE,2019-10-22T19:09:50Z,2019-10-22T19:09:50Z,2019-11-01T19:09:50Z,bm5rm-vg2js-1tsky-c2dsky,7,12344,.30,USD,004,,e4194956-de70-4958-9da4-6c05f276fdab
CORRECTION,,,2019-11-01T17:00:01Z,,,,-1.29,,007,
CORRECTION,,,2019-11-01T17:00:01Z,,,,3.00,,007,
INTEREST_TRANSFER,,,2019-11-01T18:00:01Z,,,,-4.30,,008,
REFERRAL_REVENUE_TRANSFER,,,2019-11-01T15:00:01Z,,,,10.00,,009,
BANK_ACCOUNT_WITHDRAWAL,,,2019-11-02T00:05:00Z,,,,100.00,,010,
BANK_ACCOUNT_WITHDRAWAL_REVERSAL,,,2019-11-02T00:05:00Z,,,,-100.00,,011,

Settlement Details Request

GET https://gateway.sezzle.com/v2/settlements/details/{payout_uuid}

Query Parameter Description
metadata An optional comma-separated list of metadata keys. To add a metadata key as a column to the report line items, include the key in this list. When applicable, the value of the metadata key will be added to the line item. If no line items contain the metadata key, the key will not be added as a column.

The settlement details response contains two sections. The first two rows are a summary of the payout. The remaining rows contain the individual line items that contributed to the payout.

Summary column definitions:

Column Header Description
Total order amount The sum of all orders on this payout.
Total refund amount The sum of all refunds on this payout.
Total fee amount The sum of all fees on this payout.
Total returned fee amount The sum of all returned fees on this payout.
Total chargeback amount The sum of all chargebacks on this payout.
Total chargeback reversal amount The sum of all chargeback reversals on this payout.
Total interest transfer amount The sum of all interest transfers on this payout. If you are not participating in the interest program, this field will be omitted.
Total correction amount The sum of all corrections on this payout.
Total referral revenue transfer amount The sum of all referral revenue transfers on this payout.
Total bank account withdrawal amount The sum of all bank account withdrawals.
Total bank account withdrawal reversal amount The sum of all bank account withdrawal reversals, which reflect a bank account withdrawal that has failed.
Forex fees The cost of foreign exchange fees associated with this payout.
Net settlement amount Net amount of settlement.
Payment uuid The UUID for this payout.
Settlement currency The currency in which this payout was sent.
Payout date The date this payout was sent.
Payout status The current status of this payout.

Line item column definitions:

Column Header Description
Type Describes the type of event (Order, Fee, Refund, etc.).
Order capture date The date at which the order was captured. This field is empty if the order has not yet been captured.
Order created at The date at which the order was created.
Event date The date at which the event took place.
Order uuid The uuid associated with the order.
Customer order id The customer’s order number.
External reference id The external reference ID submitted with the order.
Amount The amount of the event.
Posting currency The customer’s currency code.
Type code A numeric code that corresponds with the Type field.
Chargeback code A numeric code that corresponds with the type of chargeback submitted.
Sezzle order ID The internal ID Sezzle has assigned to this order

Interest Account Reports

Sezzle gives merchants the option to enroll in an interest account program. If you are enrolled in the interest account program, you can use these endpoints to get the current balance and activity on the interest account. Fractions of cents are tracked to properly calculate daily interest accrual even if the interest balance is low.

Interest Account Balance Response Body

{
  "interest_balance": 5183.4624
}

Interest Account Balance Request

GET https://gateway.sezzle.com/v2/interest/balance

Query Parameter Description
currency-code The ISO-4217 currency code of the interest account. If omitted, will default to USD.

Interest Account Activity Response Body

type,event_date,interest_account_change_amount,interest_account_balance_after_change
INTEREST_PAYOUT,2019-12-21T19:10:00Z,122.8718,5101.4676 
INTEREST_WITHDRAWAL,2019-12-21T19:20:00Z,-26.1000,5075.3676 
INTEREST_ACCRUAL,2019-12-21T19:15:00Z,1.0702,5182.3922
INTEREST_ACCRUAL,2019-12-22T19:15:00Z,1.0702,5183.4624

Interest Account Activity Request

GET https://gateway.sezzle.com/v2/interest/activity

Query Parameter Description
start-date* The start date for the report. Must be in yyyy-mm-dd format.
end-date The end date for the report. Must be in yyyy-mm-dd format. If omitted, will default to the current date.
offset The offset for the report. Limit is 20.
currency-code The ISO-4217 currency code of the interest account. If omitted, will default to USD.

Webhooks

You can use these endpoints to configure your webhooks

Create webhooks

POST https://gateway.sezzle.com/v2/webhooks

This endpoint can be used to subscribe to webhooks

Request Body

{
  "url": "https://example.com/webhooks",
  "events": [
    "customer.tokenized"
  ]
}

Webhooks Object

Parameter Type Description
url* string The url you are using to receive webhooks
events* array An array of events to subscribe to

Response Body

{
  "uuid": "747cf28a-bb5c-46a8-a288-d9b006fd6113",
  "links": [
  ]
}

Valid Webhook Events

Currently we accept the following Webhook events

Event Description
customer.tokenized This webhook is called when a customer is tokenized
order.authorized This webhook is called when an order is authorized by Sezzle
order.captured This webhook is called when an order is captured by Sezzle
order.refunded This webhook is called when an order is refunded by Sezzle

List webhooks

GET https://gateway.sezzle.com/v2/webhooks

You can get a list of your webhooks using this endpoint

Response Body

[
  {
    "uuid": "747cf28a-bb5c-46a8-a288-d9b006fd6113",
    "links": [
      {}
    ],
    "url": "https://example.com/webhooks",
    "events": [
      "customer.tokenized"
    ]
  }
]

Delete webhooks

DELETE https://gateway.sezzle.com/v2/webhooks/{webhooks_uuid}

You can delete your webhooks using this endpoint

There is no response body for this request. If successful, we return an HTTP 204 Status No Content.

Errors

v2 endpoints will return an array of standardized error objects.

We attempt to keep these errors as consistent as possible, and will announce any changes in advance if they are required.

Error Response Body

[
  {
    "code": "invalid",
    "location": "order.amount.amount_in_cents",
    "message": "Order amount must be greater than $0.99",
    "debug_uuid": "919f40d0-874b-4d98-810d-ed2246a8ad77"
  }
]

Javascript SDK

The Javascript SDK is for creating an in-context checkout by hosting the Sezzle checkout in a modal iframe or pop-up window.

Features

Installing the SDK

Implement the SDK

Button Configuration

Button Placeholder

<div id="sezzle-smart-button-container"></div>

Button Customization

<div id="sezzle-smart-button-container" style="text-align: center"
     templateText="Pay with %%logo%%"
     borderType="semi-rounded"
     customClass="action,primary,checkout">
</div>
Attribute Description
templateText Text that will prepended with the Sezzle logo. Default is Checkout with %%logo%%
borderType Options are square and semi-rounded
customClass Custom classes to be applied
paddingX X-axis padding. Default is 13px
paddingY Y-axis padding. Default is 7px
width Width of the button
height Height of the button. Default is 20%

Checkout Configuration

Configure Checkout

const checkout = new Checkout({
            'mode': "iframe",
            'publicKey': "xxxx",
            'apiMode': "sandbox",
            'apiVersion': "v2"
        });
Attribute Options
mode iframe|popup|redirect
apiMode sandbox|live
apiVersion v2|v1
publicKey* xxxx (used only when creating a checkout or capturing payment)

Render the Sezzle Button

Render Button

checkout.renderSezzleButton("sezzle-smart-button-container");

Call renderSezzleButton passing the id of the placeholder element defined in Button Configuration, above.

Initialize the Checkout

Initialize Checkout

checkout.init({
            onClick: function () {},
            onComplete : function () {},
            onCancel: function () {},
            onFailure: function () {}
        });

The SDK requires the following event handlers:

Event Description
onClick* Sezzle Button is clicked by the user
onComplete* Sezzle payment is successfully completed
onCancel* Sezzle payment is cancelled
onFailure* Sezzle payment has failed

Hosting the Checkout

To be implemented in the onClick handler. There are two methods for hosting a checkout.

Start Checkout with URL

event.preventDefault();
checkout.startCheckout({
    checkout_url: "https://checkout.sezzle.com/?id=example"
});

Start Checkout with Payload

event.preventDefault();
checkout.startCheckout({
    checkout_payload: "<session_object>"
});

Capture the Payment

To be implemented in the onComplete handler.

Configure payload as detailed in Capture Amount by Order object

Capture Payment

checkout.capturePayment({
                    payload: {
                        capture_amount: {
                            amount_in_cents: 5000,
                            currency: "USD"
                        },
                        partial_capture: true
                    }
                });

Mobile SDK

The Mobile SDK is for integrating the Sezzle checkout and widget into a native mobile app.

Android

The Android SDK is available in Gradle or Maven.

iOS

The iOS SDK is available in CocoaPods.

SezzleJS

Purpose

SezzleJS serves to load our sales widgets to web pages. The widgets will not show unless a config is provided before the script is loaded. The repository for this project can be found at https://github.com/sezzle/sezzle-js.

Configuring the Widgets

An example of how to configure the widget:

    document.sezzleConfig = 
    {
        targetXPath: ['.price'],
        renderToPath: ['..'],
        urlMatch: 'product',
        theme: 'light',
        scaleFactor: 1.0,
        logoSize: 1.00,
        logoStyle: {'margin': '0px 0px -4px 1px','transformOrigin': 'center top'},
        altVersionTemplate: {
          'en': 'or 4 interest-free payments of %%price%% with %%logo%% %%info%%',
          'fr': 'ou 4 paiements de %%price%% sans intérêts avec %%logo%% %%info%%'
        },
        splitPriceElementsOn: '-',
        ignoredPriceElements: ['.Price-compareAt'],
        ignoredFormattedPriceText: ['Subtotal', 'Total:', 'Sold Out'],
        hideClasses: ['.afterpay-paragraph'],
        fontFamily: 'inherit',
        fontSize: 12,
        fontWeight: 300,
        color: 'inherit',
        alignment: 'auto',
        alignmentSwitchMinWidth: 768,
        alignmentSwitchType: 'center',
        lineHeight: '13px',
        maxWidth: 400,
        marginTop: 0,
        marginBottom: 0,
        marginLeft: 0,
        marginRight: 0,
        language: navigator.language,
        forcedShow: false
    }

Only the targetXPath is required in the local config. Each key using the default value may be removed from the sezzleConfig, and the default values will be used automatically.

The config must be specified in a property of the document object called document.sezzleConfig. SezzleJS also provides various options to customize the widget’s position and appearance. The explanation for all the options can be found below:

targetXPath (required)

Purpose: Path to the element in the webpage where the product price text value will be detected.
Type: string, or array of strings
Default: “
Additional Details: Specify one path if only one price element is targeted. Specify multiple paths in an array if multiple price elements are targeted. The path may contain multiple subpaths. All subpaths need to be separated by the ’/’ character. IDs need to be preceded by a ’#’ character. Classes needed to be preceded by a ’.’ character. Tag names need to be followed by the applicable index. The format of a tagname is as follows: tagName-Index (e.g. 'SPAN-2’). The indexes are zero-based, such that the first element of the specified type within the parent element is at index 0.

Example: ’#ProductSection/.product-price/SPAN-1’ would target the 2nd 'SPAN’ element contained within elements that contain the 'product-price’ class which are contained within the element with an ID of 'ProductSection’.

An example of targetXPath:

<div id="ProductSection">
    <div class="product-price">
        <span>Price: </span>
        <span>$15.99</span>
    </div>
</div>
<script type="text/javascript">
    document.sezzleConfig = {
        targetXPath: '#ProductSection/.product-price/SPAN-1'
    }
</script>

renderToPath (optional)

Purpose: Path to the element in the webpage relative to targetXPath where the Sezzle widget should be rendered.
Type: string, or array of strings
Default: ’..’
Additional Details: Path to the element below which the widget should render (widget’s previous element sibling). If you wish to place widgets in multiple places, you can pass multiple paths in an array. The price path at the nth index of the targetXPath array will be rendered at the path given at the nth index of the renderToPath array. If you do not pass anything to the nth index of the renderToPath array but there is a path at the nth index of targetXPath, then the widget will default to be rendered directly below the parent of the corresponding target element.
’./’ will place the widget as the next element sibling of the target element.
’../’ means go up one parent element.
As with targetXPath, prepend IDs with ’#’, classes with ’.’, and append tag names with the index (tagName-Index). It is recommended to keep the renderToPath as simple as possible to maximize compatibility.

urlMatch (optional)

Purpose: Specific word appearing in the url of pages where the widget config should be applied.
Type: string
Default: ”
Additional Details: Typical values are 'product’ or 'cart’, as applicable

theme (optional)

Purpose: Updates the logo color to coordinate and contrast with different background colors of websites.
Type: string
Options: dark, light, grayscale, black-flat, white, white-flat
Default: 'light’

scaleFactor (optional)

Purpose: Ratio at which to scale the Sezzle widget.
Type: number
Default: 1.0

logoSize (optional)

Purpose: Ratio at which to scale the Sezzle logo.
Type: number
Default: 1.00
Additional Details: The space the logo occupies between the widget text and the More Info link/icon is determined by the font size. When dramatically scaling the widget, it may be necessary to override the styling to adjust the left and right margins of the logo using logoStyle.

logoStyle (optional)

Purpose: Custom styling to apply to the Sezzle logo within the widget, particularly when using logoSize.
Type: object
Default: {}
Additional Details: The object will accept any CSS styling in JSON format. Keys must be surrounded by “, given in camelCase instead of kebob-case, and separated from the following key by a comma instead of a semi-colon.

altVersionTemplate (optional)

Purpose: Text content of the widget. Also changes the arrangement of price, logo, and the info/learn-more icon within the widget.
Type: string, or object
Default: {en: 'or 4 interest-free payments of %%price%% with %%logo%% %%info%%’, fr: 'ou 4 paiements de %%price%% sans intérêts avec %%logo%% %%info%%’}
Additional Details: Currently available templates: %%price%%, %%logo%%, %%link%%, %%info%%, %%question-mark%%, %%line-break%%

splitPriceElementsOn (optional)

Purpose: Character or string at which to split the price elements (for elements with price ranges).
Type: string
Default: ”
Additional Details: Certain websites, especially WooCommerce websites, have price ranges as their price element (e.g. $650 - $1000). Setting this field to the character or string which separates the prices (e.g. in the case above, it is ’-’) enables the widgets to parse the price elements separately. For instance, setting this field to ’-’ would cause the widget to render the widget price above as $162.50 - $250.00.

An example of splitPriceElementsOn:

<div class="price">
    <span class="woocommerce-Price-amount">$12</span>
    " - "
    <span class="woocommerce-Price-amount">$15</span>
</div>
<script type="text/javascript">
    document.sezzleConfig = {
        targetXPath: '.price/.woocommerce-Price-amount',
        splitPriceElementsOn: '-',
        relatedElementActions: [{
            relatedPath: '.',
          initialAction:(e, t)=> {
              if(e.nextSibling&&" – "===e.nextSibling.textContent) {
          let i=(e.nextElementSibling.innerText.replace(",", "").substr(1)/4).toFixed(2);
          t.getElementsByClassName("sezzle-price-split")[0].innerText+=" - $"+i
              }
          }
        }, 
        {
            relatedPath: '.',
            initialAction:(e, t)=> {
        e.previousSibling&&" –" ===e.previousSibling.textContent&&(t.style="display: none")
            }
        }]
    }
</script>

ignoredPriceElements (optional)

Purpose: Child elements of targetXPath to be disregarded when detecting the price and rendering the widget.
Type: array of strings
Default: []
Additional Details: ignoredPriceElements can be used to solve targetXPath variations between sale and regular-priced items. In this case, targetXPath should point to the parent element surrounding the old and the new prices, then ignoredPriceElements will specify the old/compare-at price element. As with targetXPath, prepend IDs with ’#’, classes with ’.’, and append tag names with the index (tagName-Index).

An example of ignoredPriceElements:

<span class="ProductMeta__PriceList">
    <span class="product__price--regular">$20</span>
    <span class="product__price--sale">$15</span>
</span>
<script type="text/javascript">
    document.sezzleConfig = {
        targetXPath: '.ProductMeta__PriceList',
        ignoredPriceElements: ['.product__price--regular']
    }
</script>

ignoredFormattedPriceText (optional)

Purpose: Text strings within the targetXPath to be disregarded when detecting the price and rendering the widget.
Type: array of strings
Default: ['Subtotal’, 'Total:’, 'Sold Out’]

hideClasses (optional)

Purpose: Classes of elements that should be hidden when Sezzle’s logo is showing. This is useful for hiding a product similar to Sezzle that is not available in a country where Sezzle is.
Type: array of strings
Default: []

fontFamily (optional)

Purpose: Font family of the widget text.
Type: string
Default: 'inherit’

fontSize (optional)

Purpose: Font size of the widget text in pixels.
Type: number
Default: 12
Additional Details: Enter numbers only. Do not enter the unit (e.g. px)!

fontWeight (optional)

Purpose: Boldness of the widget text.
Type: number
Default: 300
Additional Details: 100 is the lightest, 900 is the boldest.

color (optional)

Purpose: Color of the widget text.
Type: string
Default: 'inherit’
Additional Details: Accepts all kinds of values (hexadecimal, rgb(), hsl(), etc…)

alignment (optional)

Purpose: Alignment of the widget relative to the parent element.
Type: string
Options: left, center, right, auto
Default: 'auto’

alignmentSwitchMinWidth (optional)

Purpose: Screen width in pixels below which the alignment switches to alignmentSwitchType instead of alignment.
Type: number
Default: 0
Additional Details: The most common breakpoint is 768 (handheld vs desktop). alignmentSwitchMinWidth is typically only necessary when alignment is not auto.

alignmentSwitchType (optional)

Purpose: Alignment of the widget relative to the parent element to be applied when the viewport width is narrower than alignmentSwitchMinWidth.
Type: string
Options: left, center, right, auto
Default: 'auto’

lineHeight (optional)

Purpose: Content height of the widget.
Type: string
Default: '13px’
Additional Details: Include unit (e.g.: px)

maxWidth (optional)

Purpose: Maximum width of the widget element in pixels.
Type: number
Default: 400
Additional Details: 200 to render the widget nicely on 2 lines, 120 for 3 lines.

marginTop (optional)

Purpose: Amount of space above the widget in pixels.
Type: number
Default: 0

marginBottom (optional)

Purpose: Amount of space below the widget in pixels.
Type: number
Default: 0

marginLeft (optional)

Purpose: Amount of space left of the widget in pixels.
Type: number
Default: 0

marginRight (optional)

Purpose: Amount of space right of the widget in pixels.
Type: number
Default: 0

language (optional)

Purpose: Language in which the widget text should be rendered.
Type: string
Options: 'en’, 'fr’
Default: navigator.language
Additional Details: To match the selected language in the window instead of the user’s default browser language, use document.querySelector('html’).lang. Currently, SezzleJS only supports 'en’ and 'fr’

forcedShow (optional)

Purpose: Shows the widget in every country if true. Shows the widget in only the United States and Canada if false.
Type: boolean
Options: false, true
Default: false

Uploading the Widgets

After building up the config, it is time to upload the widgets to your webpages! SezzleJS needs to be called in the HTML of the webpage in order for the widgets to be rendered. Place the config and the SezzleJS script at the bottom of the code file for the HTML page, and you should be all set!

Placing the following code snippet into your HTML loads SezzleJS into the webpage.

<script src="https://widget.sezzle.com/v1/javascript/price-widget?uuid={{replace_with_your_merchant_id}}"></script>

The SezzleJS script reflecting the applicable merchant ID must be called only after the config is specified (document.sezzleConfig is defined). Here is a complete example:

<script type="text/javascript">
    document.sezzleConfig = 
      {
        targetXPath: ['.price'],
        renderToPath: ['..'],
        urlMatch: 'product',
        theme: 'light',
        scaleFactor: 1.0,
        logoSize: 1.00,
        logoStyle: {'margin': '0px 0px -4px 1px','transformOrigin': 'center top'},
        altVersionTemplate: {
          'en': 'or 4 interest-free payments of %%price%% with %%logo%% %%info%%',
          'fr': 'ou 4 paiements de %%price%% sans intérêts avec %%logo%% %%info%%'
        },
        splitPriceElementsOn: '-',
        ignoredPriceElements: ['.Price-compareAt'],
        ignoredFormattedPriceText: ['Subtotal', 'Total:', 'Sold Out'],
        hideClasses: ['.afterpay-paragraph'],
        fontFamily: 'inherit',
        fontSize: 12,
        fontWeight: 300,
        color: 'inherit',
        alignment: 'auto',
        alignmentSwitchMinWidth: 768,
        alignmentSwitchType: 'center',
        lineHeight: '13px',
        maxWidth: 400,
        marginTop: 0,
        marginBottom: 0,
        marginLeft: 0,
        marginRight: 0,
        language: navigator.language,
        forcedShow: false
    }
</script>
<script src="https://widget.sezzle.com/v1/javascript/price-widget?uuid=12a34bc5-6de7-890f-g123-4hi5678jk901"></script>

The “simple” configuration above is intended for a single template of code (product or cart page) individually. Alternatively, a single configuration could be created for the entire webpage using an array of objects called configGroups. The Sezzle.js script will determine which configGroup(s) applies to the active webpage and render the widget(s) accordingly.

<script type="text/javascript">
document.sezzleConfig = {
  configGroups: [
    {
        targetXPath: ['.price'],
        renderToPath: ['..'],
        urlMatch: 'product',
        theme: 'light',
        scaleFactor: 1.0,
        logoSize: 1.00,
        logoStyle: {'margin': '0px 0px -4px 1px','transformOrigin': 'center top'},
        altVersionTemplate: {
          'en': 'or 4 interest-free payments of %%price%% with %%logo%% %%info%%',
          'fr': 'ou 4 paiements de %%price%% sans intérêts avec %%logo%% %%info%%'
        },
        splitPriceElementsOn: '-',
        ignoredPriceElements: ['.Price-compareAt'],
        ignoredFormattedPriceText: ['Subtotal', 'Total:', 'Sold Out'],
        hideClasses: ['.afterpay-paragraph'],
        fontFamily: 'inherit',
        fontSize: 12,
        fontWeight: 300,
        color: 'inherit',
        alignment: 'auto',
        alignmentSwitchMinWidth: 768,
        alignmentSwitchType: 'center',
        lineHeight: '13px',
        maxWidth: 400,
        marginTop: 0,
        marginBottom: 0,
        marginLeft: 0,
        marginRight: 0
    },
    {
      targetXPath: '.cart__subtotal',
      renderToPath: '../..', 
      urlMatch: 'cart',
    }
  ],
  forcedShow: false,
  language: document.querySelector('html').lang || navigator.language,
}
</script>
<script src="https://widget.sezzle.com/v1/javascript/price-widget?uuid=12a34bc5-6de7-890f-g123-4hi5678jk901"></script>

Testing

While you are working on the integration, you should test it before going live. Please use this section for information on testing.

Sandbox

API Endpoint https://sandbox.gateway.sezzle.com/v2
Sandbox Dashboard https://sandbox.dashboard.sezzle.com/merchant

Test Data

You can use the following test data to test your integration

Card

Card Number 4242424242424242
CVV/CVC any (3 numbers)
Expiration Date any
Name any
Address any

Phone and other information

  1. Please use any valid US or CA phone number.
  2. The expected OTP is 123123.
  3. Personal information does not need to be real.

Open API

The OpenAPI Specification (OAS) defines a standard, language-agnostic interface to RESTful APIs which allows both humans and computers to discover and understand the capabilities of the service without access to source code, documentation, or through network traffic inspection.

Specification

View the Sezzle v2 OpenAPI Specification.

Client Generator

The OpenAPI Specification can be imported into the Swagger Editor to easily generate a Sezzle client in a variety of programming languages. If your language is not supported by Swagger, an alternate tool is OpenAPI Generator.

Platform Integrations

BigCommerce

This guide describes how to integrate Sezzle into your BigCommerce website so that you can provide Sezzle as a payment option for your customers. After integrating Sezzle, your BigCommerce site will:

  1. Offer Sezzle as a payment option on the checkout page.
  2. Refund Sezzle payments from your BigCommerce order management system.
  3. Display Sezzle promotional messaging.
  4. Authorize and capture payments.

This integration is only available with BigCommerce’s Optimized One Page Checkout.

Integration Steps Overview

  1. Enable Sezzle as an online payment method
  2. Install and configure the Sezzle BigCommerce App
  3. Test your integration
  4. (Optional) Sandbox Testing

Before You Begin

  1. You should have a Sezzle merchant account.
    • Please visit our signup page if you don’t have an account.
  2. Make sure you have the following Sezzle details handy.
  3. Familiarize yourself with the transaction flow when buying with Sezzle.

Enable Sezzle as an online payment method

  1. Go to Store Setup > Payments.
    payment_methods
  2. Go to Online Payment Methods, find Sezzle and click Set up.
    offline-payment_methods
  3. Copy your Public Key and Private Key from your Sezzle Merchant Dashboard, and paste them into the corresponding fields.
  4. Select the Transaction Type.
    • Note: If you select Authorize only, payment will only be authorized and will have to be captured later in BigCommerce.
  5. Select the Test Mode: No(Recommended), or Yes for testing.
  6. Click on Save.

Install the Sezzle BigCommerce App

  1. Log in to your website’s BigCommerce store admin page.
  2. In the left sidebar, click Apps > Marketplace.
  3. Click BigCommerce.com/Apps. bigcommerce_apps
  4. Search for Sezzle. search_sezzle
  5. Click Sezzle, then click Get This App. sezzle_app_bigcommerce_marketplace
  6. Click Install. sezzle_app_install_step1
  7. Check the PCI Compliance box, then click Confirm to start the installation. sezzle_app_install_step2

BigCommerce Sandbox Testing

  1. Select the Test Mode as Yes from Sezzle Settings in Payments section of BigCommerce admin. Make sure you are doing this on your dev/staging website. bigcommerce sandbox testing
  2. On your website, add an item to the cart, then proceed to Checkout and select Sezzle as the payment method.
  3. Click Place Order and you should be redirected to the Sezzle checkout page. If prompted, sign in. onepage bigcommerce payment movement
  4. Enter the payment details using test data, then click Complete Order.
  5. After the payment is completed on Sezzle, you should be redirected back to your website and see a successful payment page.
  6. Sandbox testing is complete. You can log in to your Sezzle Merchant Sandbox Dashboard to see the test order you just placed.

BigCommerce Live Checkout

  1. Select the Test Mode as No(Recommended) from Sezzle Settings in Payments section of BigCommerce admin.
  2. On your website, add an item to your cart, then proceed to Checkout and select Sezzle as the payment method. bigcommerce checkout
  3. Click Place Order. onepage bigcommerce payment movement
  4. If you are redirected to the Sezzle checkout page, your integration is complete. Congratulations! sezzle checkout
  5. Warning Don’t complete the payment. Your checkout is now live, so you will be charged if you complete it.

Widget Pre-Configuration

  1. Make sure you have the Sezzle App installed in your store.
  2. Go to Apps > Sezzle.
  3. Copy your Merchant ID from your Sezzle Merchant Dashboard, and paste them into the corresponding fields in the Sezzle App of your BigCommerce admin.
  4. Check the Add Sezzle Widget Script box. This will inject the widget script into the product and cart pages of your store.
  5. Save the configuration.
    sezzle_app_control_panel
  6. Go to Storefront > Script Manager. Confirm that the Sezzle Widget scripts appear in the list of installed scripts.
    sezzle_app_script_manager
  7. Widget is now ready to be configured.
  8. For finalizing the widget configuration, click Request Addition of Widgets in the widget step of your Sezzle Merchant Dashboard Setup Checklist.

Troubleshooting

If testing was unsuccessful, review the following:

Manual Theme Integration

If the Sezzle App fails to maintain the widget script on the product pages, or to add the script manually for additional pages, complete the following steps:

  1. Go to Storefront > Script Manager.
  2. Click the Create a Script button.
  3. Set Name of script to Sezzle Widget.
  4. Set Location on page to Footer.
  5. Set Select pages where script will be added to All pages.
  6. Set Script category to Essential.
  7. Set Script type to Script.
  8. In the Script content area, copy+paste the script, then click Save.

The script to be inserted into your webpage is as follows:

Template: <script src="https://widget.sezzle.com/v1/javascript/price-widget?uuid={sezzle_merchant_uuid}"></script>

Note: Update {sezzle_merchant_uuid} in the above script template to reflect your site’s Merchant ID (removing the curly brackets), which can be found in the Sezzle Merchant Dashboard.

Example: <script src="https://widget.sezzle.com/v1/javascript/price-widget?uuid=12a34bc5-6de7-890f-g123-4hi5678jk901"></script>

Instructions may vary slightly depending on your active plug-ins. If the issue persists after completing the above steps, look for other available features that allow the addition of a custom HTML code snippet to the site footer. If no such feature is found, the below steps may be followed as a last resort:

  1. Go to Storefront > My Themes.
  2. In your Current Theme, click Advanced then select Edit Theme Files.
  3. In the confirmation window, click Edit Theme Files.
  4. In the file list, go to templates > pages, then select product.html.
  5. Copy+paste the script into the very bottom of the file, then click Save and Apply Files.
  6. Repeat the previous step for the cart.html file.

For any kind of assistance, reach out to merchantsupport@sezzle.com.

Uninstall Steps

  1. Go to Apps > My Apps.
  2. Under the Sezzle App, click Uninstall. sezzle uninstall
  3. Toggle the button against Sezzle under Store Setup>Payments>Online Payment Methods to disable Sezzle as a payment option.

Magento 2

This guide describes how to integrate Sezzle into your Magento 2 website so that you can provide Sezzle as a payment option for your customers.

Sezzle’s Magento 2 extension is certified in the marketplace and can also be downloaded from github.

After integrating Sezzle, your site will:

  1. Offer Sezzle as a payment option on the checkout page.
  2. Refund Sezzle payments from your Magento 2 order management system.
  3. Display Sezzle promotional messaging.
  4. Authorize and capture payments.
  5. Offer instant and delayed capture.

Integration Steps Overview

  1. Install and configure the Sezzle Magento 2 extension
  2. Test your integration
  3. (Optional) Sandbox Testing

Before You Begin

  1. You should have a Sezzle merchant account.
    • Please visit our signup page if you don’t have an account.
  2. Make sure you have the following Sezzle details handy.
  3. Familiarize yourself with the transaction flow when buying with Sezzle.

Install the Sezzle Magento 2 Extension

In the following section, [magento] refers to your Magento 2 root directory.

Using the Composer

Go to the Magento 2 installation directory, then run the below commands:

  1. composer require sezzle/sezzlepay
  2. php bin/magento setup:upgrade
  3. php bin/magento setup:di:compile
  4. php bin/magento setup:static-content:deploy
  5. php bin/magento cache:clean

Manual Method

  1. Download the .zip file from Sezzle’s github repository.
  2. Unzip the file
  3. Navigate to Magento [Magento]/app/code/ using SFTP or SSH.
  4. Copy Sezzle directory from unzipped folder to [Magento]/app/code/.
  5. Open a terminal window and run the following command to enable Sezzle:
    • php bin/magento module:enable Sezzle_Sezzlepay
  6. Run the Magento setup upgrade:
    • php bin/magento setup:upgrade
  7. Run the Magento Dependencies Injection Compile:
    • php bin/`magento` setup:di:compile
  8. Run the Magento Static Content deployment:
    • php bin/magento setup:static-content:deploy
  9. Log in to Magento Admin and navigate to System > Cache Management.
  10. Flush the cache storage by selecting Flush Cache Storage.

You can now directly navigate from the Configuration Page to get signed up for Sezzle. To do so, you need to click on Register for Sezzle which will redirect you to the Sezzle Merchant Signup Page. If you have the details already, you can simply click on I've already set up Sezzle, I want to edit my settings to move ahead.

  1. In your Magento 2 [Magento]/app/code/ directory, create a directory named Sezzle.
  2. Inside the new Sezzle directory, create a directory named Sezzlepay.
  3. Inside the new Sezzlepay directory, extract the files from this repository.
  4. Open the command line and run these commands:
    • php bin/magento module:enable Sezzle_Sezzlepay
    • php bin/magento setup:upgrade
    • php bin/magento setup:di:compile
    • php bin/magento setup:static-content:deploy
  5. Log in to your Magento 2 admin and go to System/Cache Management.
  6. Flush the cache storage by selecting Flush Cache Storage.

Upgrade the Magento 2 Extension

Using the Composer

  1. Open terminal and navigate to Magento root path.
  2. Execute the following commands in the terminal:
    • composer update sezzle/sezzlepay
    • php bin/magento setup:upgrade
    • php bin/magento setup:di:compile
    • php bin/magento setup:static-content:deploy
    • php bin/magento cache:clean

Configure Sezzle

Payment Configuration

In-Context Configuration

Settlement Report Configuration

Widget Configuration

Developer Configuration

Your store is now ready to accept payments through Sezzle.

Frontend Functionality

Capture Payment

Refund Payment

Release Payment

Order Verification in Magento Admin

Order Verification in Sezzle Merchant Dashboard

Customer Tokenization Details

Settlement Reports

Magento 2 Sandbox Testing

Magento 2 Live Checkout

  1. In the Sezzle configuration page of your Magento 2 admin, enter the API Keys from your Sezzle Merchant Dashboard and disable Sandbox/Test as the API Mode, then save the configuration.
  2. On your website, add an item to the cart, then proceed to Checkout and select Sezzle as the payment method.
  3. Click Place Order.
  4. If you are redirected to the Sezzle checkout page, your integration is complete. Congratulations! sezzle checkout
  5. Warning Don’t complete the payment. Your checkout is now live, so you will be charged if you complete it.

Troubleshooting

If testing was unsuccessful, review the following:

Salesforce Commerce Cloud

This guide describes how to integrate Sezzle into your Salesforce Commerce Cloud website so that you can provide Sezzle as a payment option for your customers. This integration supports sites built with both the SiteGenesis and Reference Architecture. After integrating Sezzle, your site will:

  1. Offer Sezzle as a payment option on the checkout page.
  2. Refund Sezzle payments from your order management system.
  3. Display Sezzle promotional messaging.
  4. Authorize and capture payments.

Please contact our team at dev@sezzle.com to request installation documentation for the Salesforce cartridge.

Wix

This guide describes how to integrate Sezzle into your Wix website so that you can provide Sezzle as a payment option for your customers. After integrating Sezzle, your site will:

  1. Offer Sezzle as a payment option on the checkout page.
  2. Refund Sezzle payments from your Wix order management system.
  3. Display Sezzle promotional messaging.
  4. Authorize and capture payments.

Integration Steps Overview

  1. Add Sezzle to your store as a payment method
  2. Test your integration

Before You Begin

  1. You should have a Sezzle merchant account.
  2. Make sure you have the following Sezzle details handy.
  3. Familiarize yourself with the transaction flow when buying with Sezzle.

Add Payment Method

  1. From your Wix store dashboard, select Settings, and Accept Payments.
  2. Choose the Add Payment Methods button in the upper right, select Sezzle from the list, and click the Add button. Sezzle will be added to the list of Payment Methods.
  3. Choose Sezzle in the list of Payment Methods, and choose Set Up Account, then choose Connect Existing Account.
  4. Enter your API Keys from the Sezzle Merchant Dashboard, and choose Save. Sezzle will now be available as a payment method at checkout.

Wix Live Checkout

  1. On your store website, add an item to your cart, then proceed to Checkout and select Sezzle as the payment method.
  2. Follow the Wix checkout process to the final step and choose Place Order.
  3. If you are redirected to the Sezzle checkout page, your integration is complete. Congratulations!
    Warning: Don’t complete the payment. Your checkout is now live, so you will be charged if you complete it.

Troubleshooting

For account connection problems, check the following:

If Sezzle does not appear as a payment option during live testing: