POST
/
checkout
/
cart
/
{cart_id}
/
submit
{
  "id": 10000,
  "token": "fz8x7gksdjsy2p9fdlonw7k9svwjso4b",
  "user_id": 10000,
  "app_id": 10000,
  "developer_id": 10000,
  "customer": {
    "user_id": 10000,
    "first_name": "Super",
    "last_name": "Mario",
    "email": "super@mar.io",
    "name": "Super Mario"
  },
  "bags": [
    {
      "id": 11111,
      "order_id": 10000,
      "merchant_id": 10000,
      "app_id": 10000,
      "status": "ACCEPTED",
      "fulfillment_status": "PROCESSING",
      "financial_status": "PAID",
      "skus": [
        {
          "id": 10000,
          "merchant_id": 10000,
          "app_id": 10000,
          "sku_id": 99999,
          "external_id": "1234567890",
          "name": "Nintendo Entertainment System",
          "brand": "Nintendo",
          "thumbnail": "https://res.cloudinary.com/violet/image/upload/c_thumb,w_200,g_face/v1729220594/product_media/2taesr1g7sciu8agrrtgaafi2dnzzmsv.jpg",
          "quantity": 2,
          "price": 9999,
          "weight": 1,
          "available": true,
          "status": "PROCESSING",
          "product_type": "PHYSICAL",
          "custom": false,
          "line_price": 19998
        }
      ],
      "shipping_method": {
        "carrier": "USPS",
        "shipping_method_id": "07d19139fc0f4558687c1900c696f071",
        "bag_id": 11111,
        "merchant_id": 10000,
        "label": "Priority Mail",
        "price": 644,
        "custom": false
      },
      "taxes": [
        {
          "order_id": 127021,
          "merchant_id": 10009,
          "state": "WA",
          "rate": 6.5,
          "amount": 1300,
          "description": "Washington State Tax"
        },
        {
          "order_id": 127021,
          "merchant_id": 10009,
          "state": "WA",
          "rate": 0,
          "amount": 0,
          "description": "King County Tax"
        },
        {
          "order_id": 127021,
          "merchant_id": 10009,
          "state": "WA",
          "rate": 3.85,
          "amount": 770,
          "description": "Seattle City Tax"
        }
      ],
      "sub_total": 19998,
      "shipping_total": 644,
      "tax_total": 2070,
      "discount_total": 0,
      "total": 22712,
      "taxes_included": false,
      "external_checkout": true,
      "commission_rate": 10,
      "date_created": "2017-06-15T01:01:01+0000",
      "date_last_modified": "2017-06-15T01:01:01+0000",
      "remorse_period_ends": "2017-06-15T01:01:01+0000",
      "currency": "USD",
      "external_currency": "USD",
      "channel": "APP",
      "platform": "SHOPIFY",
      "fulfillments": [],
      "discounts": [],
      "wallet_based_checkout": false,
      "bag_id": 22222,
      "bag_status": "IN_PROGRESS",
      "merchant_name": "Legacy Games"
    }
  ],
  "shipping_address": {
    "name": "Super Mario",
    "city": "Seattle",
    "state": "WA",
    "country": "US",
    "postal_code": "98121",
    "phone": "1234567890",
    "type": "SHIPPING",
    "address_1": "2815 Elliott Ave, Unit 100",
    "first_name": "Super",
    "last_name": "Mario"
  },
  "billing_address": {
    "name": "Super Mario",
    "city": "Seattle",
    "state": "WA",
    "country": "US",
    "postal_code": "98121",
    "phone": "1234567890",
    "type": "BILLING",
    "address_1": "2815 Elliott Ave, Unit 100",
    "first_name": "Super",
    "last_name": "Mario"
  },
  "payment_method": {
    "brand": "visa",
    "last_four": "4242",
    "exp_month": 12,
    "exp_year": 2025,
    "payment_method_id": 35236
  },
  "sub_total": 19998,
  "shipping_total": 644,
  "tax_total": 2070,
  "discount_total": 0,
  "total": 22712,
  "app_order_id": "00100100",
  "status": "COMPLETED",
  "is_guest": true,
  "date_created": "2017-06-15T01:01:01+0000",
  "date_last_modified": "2017-06-15T01:01:01+0000",
  "priced": true,
  "wallet_based_checkout": false,
  "currency": "USD",
  "channel": "APP",
  "currency_symbol": "$",
  "stripe_key": "pk_test_UHg8oLvg4rrDCbvtqfwTE8qd",
  "payment_intent_client_secret": "pi_vw8krrsvposl347c5l7x1nt5_secret_vbcw5t2bze37iptq430tmx7s",
  "payment_transactions": [
    {
      "id": 99999,
      "order_id": 10000,
      "payment_provider": "STRIPE",
      "payment_provider_transaction_id": "pi_vw8krrsvposl347c5l7x1nt5",
      "payment_method_id": 77777,
      "payment_provider_payment_method_id": "pm_1PtHCnK29KDiBVldrynYIy0k",
      "payment_intent_client_secret": "pi_vw8krrsvposl347c5l7x1nt5_secret_vbcw5t2bze37iptq430tmx7s",
      "amount": 22712,
      "metadata": {
        "payment_intent_client_secret": "pi_vw8krrsvposl347c5l7x1nt5_secret_vbcw5t2bze37iptq430tmx7s",
        "payment_intent_id": "pi_vw8krrsvposl347c5l7x1nt5"
      },
      "related_bags": [
        "11111"
      ],
      "currency": "USD",
      "capture_status": "CAPTURED",
      "errors": [],
      "date_created": "2024-08-29T22:52:42+0000",
      "date_last_modified": "2024-08-29T22:52:52+0000",
      "status": "CAPTURED"
    }
  ],
  "intent_based_checkout": true,
  "guest": true,
  "order_id": 10000
}

Submit a Cart given its cart_id. This submits carts to any relevant E-Commerce platforms.

Handling Cart Submission Errors

While we strive to ensure that cart submission succeeds, there may occassionally be scenarios where cart submission fails in a way where it cannot be automatically reconciled. The following examples show what to expect when submission failure occurs for single-bag and multi-bag carts.

Single Bag Cart Submission Errors

When the submission of a Violet cart containing a single bag results in a failed sumission, the error will be surfaced as an API Exception in the response body. This error will typically be surface with a 400 or 422 HTTP status.

Example: Response when single-bag cart submission fails due to a Sku being out of stock in the external commerce platform.
{
  "message": "Could not complete external cart: One or more items in the cart are no longer available for purchase.",
  "error": "external_cart_completion_error",
  "code": 2503,
  "data": {
    "skus": [
      {
        "message": "This item is no longer available for purchase.",
        "name": "Sample Product",
        "sku_id": 99999,
        "order_sku_id": 88888,
        "bag_id": 77777
      }
    ]
  }
}

Multi-Bag Cart Submission Errors

When the submission of a Violet cart containing multible bags results in one or more failed sumissions, any error(s) will be nested in the "errors": [] array on the Order object.

Example: Response when mult-bag cart submission fails due to a Sku being out of stock in the external commerce platform. When the entity_type is SKU, the entity_id property will map to the sku_id property on a Sku in the Cart.
{
  ...
  "errors": [{
    "id": 55555,
    "order_id": 66666,
    "bag_id": 77777,
    "entity_id": "99999",
    "entity_type": "SKU",
    "type": "EXTERNAL_SUBMIT_CART",
    "message": "This item is no longer available for purchase.",
    "date_created": "2023-11-07T05:31:56Z",
    "platform": "SHOPIFY"
  }]
  ...
}

Headers

X-Violet-Token
string
X-Violet-App-Secret
string
X-Violet-App-Id
integer

Path Parameters

cart_id
integer
required

Body

application/json

Properties for cart submission.

referral_id
string | null

Associate the order with a user or affiliate in your system

app_order_id
string | null

Map the order in Violet to an order record within your system.

app_transaction_id
string | null

Transaction ID representing a transaction in the channels system.. This property only applies to channels approved for external payment processing.

app_transaction_gateway
string | null

Gateway used to submit the order. This property only applies to channels approved for external payment processing.

order_customer
object | null

Details of the customer placing the order.

Response

200 - application/json

Violet Order Entity

id
integer

ID of the Violet cart or order.

token
string
deprecated

An alternative UUID that can be used as an ID to reference the cart or order.

errors
array | null

Errors on the Order. During checkout, if there was an error or issue on one of the order's bags, there will be an error added to this list describing the issue. The checkout API will return 200 with the order object in the response even if there was an issue with a bag so you must always check the response for errors in this list to know if there was an issue on the order.

user_id
integer
deprecated

ID of the User placing the order

app_id
integer

ID of the App responsible for the creation and submission of this Order.

developer_id
integer

ID of the Developer responsible for the creation and submission of this Order.

customer
object | null

Details of the customer placing the order.

bags
object[]

One or more Bags that make up the Order. Each Bag will contain the Sku's, shipping methods, and totals unique to a merchant. Each merchant in an Order will have their own Bag.

shipping_address
object | null

The shipping or billing address of a user placing an order

billing_address
object | null

The shipping or billing address of a user placing an order

payment_method
object | null

Payment Method belonging to an Order

sub_total
integer
default: 0

The price of the Order in the base currency before discounts, shipping, duties, taxes, and tips. In Cents.

shipping_total
integer
default: 0

The sum of all shipping methods applied to the Order in the base currency. In Cents.

tax_total
integer
default: 0

The sum of all the taxes applied to the Order in the base currency. In Cents.

discount_total
integer
default: 0

The total discounts applied to the price of the Order in the base currency. In Cents.

total
integer
default: 0

The sum of all item prices, discounts, shipping, and taxes applied to the Order in the base currency. In Cents.

app_customer_id
string | null

App Customer ID. This should be used to map the order to the ID of the customer in your application.

app_order_id
string | null

App Order ID. This should be set to a unique identifier in your system. While not enforced unique in Violet's system, it is strongly recommended that unique values are used for each cart to help correlate identifiers between Violet's system and yours.

status
enum<string>

Status of the Order

Available options:
IN_PROGRESS,
PROCESSING,
COMPLETED,
CANCELED,
PARTIALLY_REFUNDED,
REFUNDED,
REQUIRES_ACTION
is_guest
boolean
default: true

Order is Guest

date_created
string

Date of order creation

date_last_modified
string

Date of last order update

priced
boolean
default: false

Is the cart priced

wallet_based_checkout
boolean
default: false

Is this cart going to be placed through wallet-based checkout

currency
string
default: USD

Base currency of cart

referral_id
string | null

Optional value used to represent an identifier in your system. This value is not required to represent a referral. It can represent the ID of anything in your system and can be used to filter order lookup results. Max length of 128 characters.

currency_symbol
string

Symbol representing the currency the Order operates in.

app_name
string

Name of app that originated the order. Use the "extended" query param when looking up orders to include this value.

stripe_key
string

Stripe publishable key. Use for tokenizing payment methods.

payment_intent_client_secret
string

Payment intent client secret. Use for payment intent based payment capture and external captures

payment_transactions
object[]

Payment Transactions associated to the bags on this Cart

order_id
integer
guest
boolean
order_status
enum<string>
Available options:
IN_PROGRESS,
PROCESSING,
COMPLETED,
CANCELED,
PARTIALLY_REFUNDED,
REFUNDED,
REQUIRES_ACTION
intent_based_checkout
boolean

Boolean indicating if the cart/order will be payed using a payment intent.