Aller au contenu principal

Introduction

version not supported

You are viewing Version 1 of the Sezzle API. Check out the current version!

The Sezzle API v1 is intended for merchants interested in accepting Sezzle as a payment option. The Sezzle Integration Flow illustrates the user payment interaction.

Sezzle supports individually authorized transactions for a single purchase of goods or services.

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.)

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/v1 Sandbox Dashboard https://sandbox.dashboard.sezzle.com/merchant

Test Data

You can use the following test data to test your integration

Bank

Bank Test Bank Username demo Password go

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 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

Download the Sezzle OpenAPI Specification for Sandbox or Production.

Client Generator

The Sezzle OpenAPI Specification can be imported into the Swagger Editor to easily generate a Sezzle client in a variety of programming languages. Generate a Sezzle client for Sandbox or Production.

Integration Flow

Overview of Integration Flow

payment flow

Explanation of payment flow

  1. Merchant calls /v1/checkouts to send cart data to Sezzle.
  2. Sezzle returns URL to redirect consumer to make payment at Sezzle checkout.
  3. Merchant redirects the consumer to Sezzle.
  4. When the consumer completes the Sezzle checkout flow, they are redirected back to merchant's website.
  5. Alternatively, on approval, the consumer is redirected from Sezzle checkout to merchant's website and merchant captures the order by calling /v1/complete.

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/v1/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

Configuration

Setting your configuration

Request Body

{
"webhook_url": "https://yourdomain.com/webhook"
}

There is no response body for this request. If successful, we return an HTTP 200 Status OK.

POST https://gateway.sezzle.com/v1/configuration

At this time, Sezzle only allows configuration of the URL that we send our webhooks to.

ParameterTypeDescription
webhook_url*stringA URL for us to send our webhooks to.

Checkouts

Create a Checkout

Request Body

{
"amount_in_cents": 12999,
"currency_code": "USD",
"order_reference_id": "Ref123456789",
"order_description": "Order #1800",
"checkout_cancel_url": "https://sezzle.com/cart",
"checkout_complete_url": "https://sezzle.com/complete",
"customer_details":
{
"first_name": "John",
"last_name": "Doe",
"email": "john.doe@sezzle.com",
"phone": "5555045294"
},
"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"
},
"requires_shipping_info": false,
"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"
}
}
],
"tax_amount": {
"amount_in_cents": 1000,
"currency": "USD"
},
"shipping_amount": {
"amount_in_cents": 1000,
"currency": "USD"
},
"metadata": {
"location_id": "123",
"store_name": "Downtown Minneapolis",
"store_manager": "Jane Doe"
}
}

Response Body

{
"checkout_url": "https://checkout.sezzle.com/?id=<checkout_id>",
"checkout_uuid": "<checkout_id>"
}

HTTP Request

POST https://gateway.sezzle.com/v1/checkouts

This checkout endpoint creates a checkout in our system, and returns the URL that you should redirect the user to. 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.

Sezzle is able to handle the entire checkout process after a Checkout has been provided. However, if your flow requires that the user confirm their checkout on your site after being approved by Sezzle, you may include the merchant_completes parameter with the checkout request. In this flow, Sezzle will not complete the order unless you make a checkout completion request.

Checkout Object

ParameterTypeDescription
amount_in_cents*intThe amount of the checkout. Must be at least 100 amount in cents $1.00
currency_code*stringThe currency code of the checkout
order_reference_id*stringA reference to this checkout in your systems
order_description*stringA user-facing description for this checkout
checkout_cancel_url*stringThe URL we should redirect the customer to in the case of a cancellation
checkout_complete_url*stringThe URL we should redirect to in the case of a successful checkout
checkout_expirationstringCheckout expiration in ISO 8601 date/time format
customer_detailsobjectThe customer in the checkout
billing_addressobjectThe billing address of the checkout
shipping_addressobjectThe shipping address of the checkout
requires_shipping_infobooleanFlag to indicate if you would like us to collect shipping information for this checkout from the customer. If omitted, will default to false
itemsarrayThe items being purchased
discountsarrayThe discounts applied. Must be included in the total
tax_amountobjectThe taxes applied to this checkout. Must be included in the total
shipping_amountobjectThe shipping fees applied to this checkout. Must be included in the total
merchant_completesbooleanFlag to determine whether this checkout must be completed by the merchant. If omitted, will default to false
metadataobjectObject 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
send_checkout_urlobjectA Notification object for sending checkout URL to the customer
localestringLocalizes the checkout. Accepted values are en-US (English, United States), en-CA (English, Canada), and fr-CA (French, Canada). Defaults to en-US if not provided.

Customer Details Object

ParameterTypeDescription
first_namestringThe user's first name
last_namestringThe user's last name
emailstringThe user's email address
phonestringThe user's phone number

Address Object

This is used for both billing and shipping

ParameterTypeDescription
namestringThe name on the address
streetstringThe street and number of the address
street2stringThe apt or unit
citystringThe city
statestringThe 2 character state code
postal_codestringThe postal delivery code
country_codestringThe 2 character country code
phone_numberstringThe phone number at the delivery location

Item Object

ParameterTypeDescription
namestringThe name of the item
skustringThe sku identifier
quantityintThe quantity purchased
priceobjectThe price object

Tax Amount Object

ParameterTypeDescription
tax_amountobjectA price object

Shipping Amount Object

ParameterTypeDescription
shipping_amountobjectA price object

Discount Object

ParameterTypeDescription
namestringThe description of the discount
amountobjectA price object

Price Object

ParameterTypeDescription
amount_in_centsintThe amount of the item in pennies
currencystringThe 3 character currency code as defined by ISO 4217

Metadata Object

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

ParameterTypeDescription
some_field_namestringCustom metadata field
some_other_field_namestringCustom metadata field

Notification Object

A valid notification object contains at a minimum a phone or an email.

ParameterTypeDescription
to_sms_phonestringThe SMS phone number of the notification
to_emailstringThe email address of the notification
languagestringThe 2-character ISO 639 langauge code of the notification. Acceptable values are "en" and "fr". Will default to English if not provided

Complete a Checkout (optional)

Success response

Echoes the given Checkout.

Rejection response

{
"status": 409,
"id": "checkout_expired",
"message": "checkout not completed within time limit"
}

POST https://gateway.sezzle.com/v1/checkouts/{order_reference_id}/complete

If you pass true to merchant_completes in our Create Checkout flow, then you must call our Complete Checkout endpoint.

For some checkouts, a merchant may need to have the user return to their site for additional steps before completing the purchase. If this is the case, the order completion endpoint is used to complete the Checkout with Sezzle. From the time the user is redirected back to the Merchant's site, you must make the request to complete the checkout within 30 minutes, or the checkout will be canceled by Sezzle. If the checkout has expired, we will return the rejection response on the right, with a Status 409. The default expiration period for new orders may be extended up to 7 days in your merchant dashboard.

There are two non-error responses expected. Either an HTTP 200, which echoes all accepted fields given at Checkout creation, or a rejection message.

Orders

Order Details

Order Details Response Body

{
"created_at": "2018-11-02T20:09:59Z",
"captured_at": "2018-11-02T20:18:50Z",
"capture_expiration": "2018-11-02T20:48:45Z",
"description": "Description of order",
"amount_in_cents": 20000,
"usd_amount_in_cents": 20000,
"customer_amount_in_cents": 20000,
"currency_code": "USD",
"customer_currency_code": "USD",
"reference_id": "Ref123456789",
"customer": {
"first_name": "John",
"last_name": "Doe",
"email": "john.doe@sezzle.com",
"phone": "5555045294"
},
"shipping_address": {
"name": "John Doe",
"phone_number": "5555045294",
"street": "123 W Lake St",
"street2": "Unit 104",
"city": "Minneapolis",
"state": "MN",
"postal_code": "55408",
"country_code": "US"
},
"billing_address": {
"name": "John Doe",
"phone_number": "5555045294",
"street": "123 W Lake St",
"street2": "Unit 104",
"city": "Minneapolis",
"state": "MN",
"postal_code": "55408",
"country_code": "US"
},
"refunds": [
{
"amount": {
"amount_in_cents": 10000,
"currency": "USD"
},
"created_at": "2018-11-02T20:09:59Z",
"is_full_refund": false,
"order_reference_id": "Ref123456789",
"refund_id": "52b2O9Lv-8",
"refund_reason": "broken"
}
],
"metadata": {
"location_id": "123",
"store_name": "Downtown Minneapolis",
"store_manager": "Jane Doe"
},
"items": [
{
"name": "widget",
"sku": "sku123456",
"quantity": 1,
"price": {
"amount_in_cents": 1000,
"currency": "USD"
}
}
]
}

GET https://gateway.sezzle.com/v1/orders/{order_reference_id}

Once an order is created, you can retrieve the details of the order using this endpoint.

Optional Query Parameter(s)

ParameterTypeValuesDescription
include-shipping-infostringtrue or falseIf your checkout post data required us to collect shipping information from the customer, then you can request that information alongside the order details.

Order Refunds

Refund Request Body

{
"refund_id": "41a2O9Lv-7",
"amount": {
"amount_in_cents": 500,
"currency": "USD"
},
"refund_reason": "Item returned by user"
}

POST https://gateway.sezzle.com/v1/orders/{order_reference_id}/refund

Sezzle allows refunds for orders either through our Merchant Dashboard or through the API. If the refund is processed through the dashboard, a webhook will be sent to your system. In either case, Sezzle allows for either partial or complete refunds. Refund amounts are relative to the order total, not the amount that has been paid by the shopper.

Refund Request

ParameterTypeDescription
amount*objectA price object that defines the amount to be refunded. Amount may not be 0, negative, or exceed the total order amount. Currency must either be the order's currency or the customer's paying currency. This field is optional if the is_full_refund parameter is true.
refund_idstringUUID for the Refund. Must be unique to a Merchant.
refund_reasonstringA reason for the refund.
is_full_refundbooleanOverrides amount. If true, the order will be fully refunded. If omitted, will default to false

Reporting

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/v1/settlements/summaries

Query ParameterDescription
start-date*The UTC start date for the report. Must be in yyyy-mm-dd format.
end-dateThe UTC end date for the report. Must be in yyyy-mm-dd format. If omitted, will default to the current date.
offsetThe offset for the report. Limit is 20.
currency-codeThe ISO-4217 currency code selected by users at checkout. 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/v1/settlements/details/{payout_uuid}

Query ParameterDescription
metadataAn 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 HeaderDescription
Total order amountThe sum of all orders on this payout.
Total refund amountThe sum of all refunds on this payout.
Total fee amountThe sum of all fees on this payout.
Total returned fee amountThe sum of all returned fees on this payout.
Total chargeback amountThe sum of all chargebacks on this payout.
Total chargeback reversal amountThe sum of all chargeback reversals on this payout.
Total interest transfer amountThe sum of all interest transfers on this payout. If you are not participating in the interest program, this field will be omitted.
Total correction amountThe sum of all corrections on this payout.
Total referral revenue transfer amountThe sum of all referral revenue transfers on this payout.
Total bank account withdrawal amountThe sum of all bank account withdrawals.
Total bank account withdrawal reversal amountThe sum of all bank account withdrawal reversals, which reflect a bank account withdrawal that has failed.
Forex feesThe cost of foreign exchange fees associated with this payout.
Net settlement amountNet amount of settlement.
Payment uuidThe UUID for this payout.
Settlement currencyThe currency in which this payout was sent.
Payout dateThe date this payout was sent.
Payout statusThe current status of this payout.

Line item column definitions:

Column HeaderDescription
TypeDescribes the type of event (Order, Fee, Refund, etc.).
Order capture dateThe date at which the order was captured. This field is empty if the order has not yet been captured.
Order created atThe date at which the order was created.
Event dateThe date at which the event took place.
Order uuidThe uuid associated with the order.
Customer order idThe customer's order number.
External reference idThe external reference ID submitted with the order.
AmountThe amount of the event.
Posting currencyThe customer's currency code.
Type codeA numeric code that corresponds with the Type field.
Chargeback codeA numeric code that corresponds with the type of chargeback submitted.
Sezzle order IDThe internal ID Sezzle has assigned to this order.

Line item event type definitions:

TypeDescriptionType Code
ORDERA completed order with Sezzle.001
REFUNDAn order that has been refunded.002
FEEThe fee assessed by Sezzle for a given order.003
RETURNED_FEEA fee refunded by Sezzle.004
CHARGEBACKA chargeback resulting from a disputed order.005
CHARGEBACK_REVERSALA reversal of a chargeback resulting from a disputed order.006
CORRECTIONA manual correction to a payout.007
INTEREST_TRANSFERA transfer from the Sezzle interest account.008
REFERRAL_REVENUE_TRANSFERA payment earned from Sezzle's merchant referral program.009
BANK_ACCOUNT_WITHDRAWALA withdrawal of funds from your bank to cover a negative balance with Sezzle.010
BANK_ACCOUNT_WITHDRAWAL_REVERSALA failed BANK_ACCOUNT_WITHDRAWAL.011

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/v1/interest/balance

Query ParameterDescription
currency-codeThe 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/v1/interest/activity

Query ParameterDescription
start-date*The start date for the report. Must be in yyyy-mm-dd format.
end-dateThe end date for the report. Must be in yyyy-mm-dd format. If omitted, will default to the current date.
offsetThe offset for the report.
currency-codeThe ISO-4217 currency code of the interest account. If omitted, will default to USD.

Webhooks

Order Webhooks

Webhook

{
"time": "2017-10-19T00:33:10.548372055Z",
"uuid": "02c5a2a0-8394-4b45-80b3-52d40c494322",
"type": "order_update",
"event": "order_complete",
"object_uuid": "Ref123456789",
"refund_id": "szl-a0293Pn-3948-80b3-ao34JAia39zQ",
"refund_amount": {
"amount_in_cents": 500,
"currency": "USD"
}
}

Because the majority of a consumer's checkout process happens on Sezzle's pages, our API uses webhooks to communicate information about checkout updates, completions, or refunds to your system.

We expect any response in the 200 range on submitting webhooks.

Order Webhook Object

ParameterTypeDescription
timestringThe time (UTC) at which the Webhook was generated.
uuidstringA unique identifier for the webhook.
typestringThe high-level category. For example, order_update
eventstringThe specific action. For example, order_complete
object_uuidstringThe ID for the Checkout/Order.
refund_idstring optionalUnique ID for a refund. Included if the webhook event is order_refund.
refund_amountobject optionalPrice object. Included if the webhook event is order_refund.

Order Update Events/Types

TypeEventDescription
order_updateorder_completeThe checkout was completed successfully
order_updateorder_refundThe order was refunded from the Sezzle Merchant Dashboard

Errors

Error Details

Response Error Body

{
"status": 400,
"id": "error_id",
"message": "Descriptive message"
}

Unless otherwise specified in our documentation, Sezzle returns a standard API error object.

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

Error Object

ParameterTypeDescription
StatusintMatches the HTTP Status code of the response
IDstringA programmatic identifier for the error. These rarely (if at all) change.
MessagestringA human-friendly string. These may change, and are intended to assist in debugging rather than program logic.

Javascript SDK

The Javascript SDK is documented in the latest API v2 documentation. It is supported for users of the v1 API using the same loadable page script.

info

When using the Javascript SDK with v1, use apiVersion: "v1" in the Checkout constructor.

Create a Checkout

checkout.startCheckout({
checkout_payload: {
"amount_in_cents": 12999,
"currency_code": "USD",
"order_reference_id": "Ref123456789",
"order_description": "Order #1800",
}
});

When using the Javascript SDK with v1, a checkout is created using the Checkout Object. The checkout is completed using the Complete a Checkout endpoint. This endpoint differs from the v2 endpoint in that it captures the total order amount and does not require a request body. Because of this, do not use the payload object shown in the example capture.

Complete a Checkout

checkout.capturePayment("Ref123456789");

Widget SDK

Purpose

The Widget SDK 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.

View our latest documentation for configuring widgets.