> For the complete documentation index, see [llms.txt](https://docs.violet.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.violet.io/ecom-platforms/3dcart.md).

# 3dcart / Shift4Shop

3dcart, now rebranded as Shift4Shop, is a hosted ecommerce platform. Violet integrates using OAuth 2.0 — merchants authorize access via a standard redirect flow using your app's registered client credentials.

> **Taxes and shipping**: 3dcart does not support dynamic tax calculation or real-time shipping rate retrieval. Channels are responsible for calculating and displaying taxes independently. Shipping rates must be configured statically — either by the merchant or by the channel — within Violet before checkout can complete.

## Connection

3dcart uses an OAuth redirect flow. Your Violet application must have a 3dcart client ID and client secret registered with Violet. When a merchant connects, Violet redirects them to:

```
https://apirest.3dcart.com/oauth/authorize
  ?client_id={clientId}
  &redirect_uri={callbackUrl}
  &response_type=code
  &store_url={merchantStoreUrl}
```

After the merchant approves, the authorization code is exchanged for an access token and stored as the merchant's credential.

> **App credentials required**: Your Violet application must have 3dcart OAuth credentials (client ID and client secret) registered before merchants can connect. Contact Violet support to configure these.

## Webhooks

Violet registers webhooks automatically after a merchant connects. The following events are subscribed:

| Event                   | Trigger                            |
| ----------------------- | ---------------------------------- |
| `Order Status Change`   | Order status updated               |
| `Product New`           | Product created                    |
| `Product Changed`       | Product details updated            |
| `Product Stock Changed` | Product inventory quantity changed |
| `Product Deleted`       | Product removed                    |

## Order Submission

Orders are submitted directly to the 3dcart store. The flow is:

1. Look up or create the customer by email
2. Compose and submit the order via the 3dcart Orders API
3. Set the order to `New` status at creation
4. Update to `Processing` status after payment is confirmed

## Products

3dcart uses a product + options model. SKU IDs in Violet are compound identifiers that encode the product catalog ID and any selected option values using `::` and `:` separators. Violet parses these internally when composing line items.

## Notable Behavior

* **No dynamic taxes**: 3dcart does not return tax estimates at cart or checkout time. Channels must calculate and display taxes independently.
* **No dynamic shipping rates**: 3dcart does not expose a live shipping rate endpoint. Shipping rates must be configured statically within Violet by the merchant or the channel.
* **No order polling**: Fetching individual orders or paginating order history is not implemented for this platform. Order state is driven entirely by inbound webhooks.
* **App credentials required**: Unlike some platforms where merchants supply their own API keys, 3dcart requires your Violet app to have registered OAuth credentials with 3dcart before any merchant can connect.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.violet.io/ecom-platforms/3dcart.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
