> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ozura.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Quickstart

> Accept your first payment in 5 minutes

## Before You Begin

You need **3 things** from your Ozura Dashboard:

| What                 | Where to Find          | Example Format     |
| :------------------- | :--------------------- | :----------------- |
| **Vault API Key**    | Developers → Vault Key | (your unique key)  |
| **Merchant API Key** | Developers → API Keys  | (your unique key)  |
| **Merchant ID**      | Developers → Identity  | (your merchant ID) |

### Embedding on Your Site (Iframe or Popup)

If you plan to embed the checkout on your website, no registration or approval is needed. Simply pass `parentOrigin` in your session create request and Ozura automatically configures the Content Security Policy so the browser only allows the checkout to be framed on your domain.

```json theme={null}
{
  "embedMode": "iframe",
  "parentOrigin": "https://yoursite.com"
}
```

That's it — there is no separate domain registration step. See [Integration Modes](/guides/payments/checkout/integration-modes) for the full embed implementation.

<Note>
  **Don't have your Vault API Key?** Find it under Developers → Vault Key.

  **Environment Variables 101:** Never hardcode API keys in your code. Instead:

  * Create a `.env` file: `VAULT_API_KEY=your_actual_key`
  * Access it: `process.env.VAULT_API_KEY` (Node.js) or `os.environ['VAULT_API_KEY']` (Python)
  * Never commit `.env` to git! Add it to `.gitignore`
</Note>

## Step 1: Create a Checkout Session

From **your server** (not browser), make this API call:

<Note>
  **What's "your server"?** This is backend code — a Node.js app, PHP script, Python app, etc. If you only have static HTML, you cannot call this API directly (API keys would be exposed). Consider using [Payment Links](/guides/payments/checkout/payment-links) instead.
</Note>

```bash theme={null}
curl -X POST https://checkout.ozura.com/api/sessions/create \
  -H "Content-Type: application/json" \
  -H "X-API-KEY: YOUR_VAULT_API_KEY" \
  -H "X-OZURA-API-KEY: YOUR_MERCHANT_API_KEY" \
  -d '{
    "merchantId": "YOUR_MERCHANT_ID",
    "merchantName": "My Store",
    "amount": "25.00",
    "currency": "USD",
    "successUrl": "https://yoursite.com/thank-you",
    "cancelUrl": "https://yoursite.com/cart",
    "errorUrl": "https://yoursite.com/payment-failed"
  }'
```

**Replace:**

* `YOUR_VAULT_API_KEY` → Your Vault API Key (Developers → Vault Key)
* `YOUR_MERCHANT_API_KEY` → Your Merchant API Key (Developers → API Keys)
* `YOUR_MERCHANT_ID` → Your Merchant ID (Developers → Identity)
* URLs → Your actual website URLs

**You'll get back:**

```json theme={null}
{
  "success": true,
  "data": {
    "sessionId": "session_xxxxxxxxxxxxxx",
    "checkoutUrl": "https://checkout.ozura.com/checkout/session_xxxxxxxxxxxxxx"
  }
}
```

## Step 2: Redirect Your Customer

Send the customer's browser to the `checkoutUrl`:

```javascript theme={null}
// === BROWSER CODE (your checkout button click handler) ===
// This runs in the customer's browser, NOT on your server
window.location.href = "https://checkout.ozura.com/checkout/session_xxxxxxxxxxxxxx";
```

The customer will see a secure payment form with your store name and the amount.

<Tip>
  **For local development**, your URLs can use `http://localhost`. In production, always use HTTPS.
</Tip>

## Step 3: Customer Pays

The customer:

1. Enters their card details
2. Clicks "Pay Now"
3. Gets redirected back to your site

## Step 4: Handle the Result

After payment, the customer lands on one of your URLs:

| Outcome                | Where They Go     | What to Do (Your Responsibility)                       |
| :--------------------- | :---------------- | :----------------------------------------------------- |
| **Payment succeeded**  | Your `successUrl` | Show confirmation, fulfill order (your business logic) |
| **Payment failed**     | Your `errorUrl`   | Show error, offer retry                                |
| **Customer cancelled** | Your `cancelUrl`  | Return to cart                                         |

**Success URL includes payment details:**

```
https://yoursite.com/thank-you?success=true&sessionId=session_xxx&transactionId=2603130000113B86C&amount=25.00&currency=USD&cardLastFour=4242&cardBrand=VISA
```

<Note>
  **Important:** Ozura automatically marks the session as "completed" before redirecting. However, **you should still verify the session server-side** (call `GET /api/sessions/{sessionId}`) before fulfilling orders to prevent URL spoofing. See [Security](/guides/payments/checkout/security) for details.
</Note>

## That's It!

You're now accepting payments.

**What's next?**

| I want to...                             | Read this                                                                                                |
| :--------------------------------------- | :------------------------------------------------------------------------------------------------------- |
| Add product images and discounts to cart | [Create Session → Cart Items](/guides/payments/checkout/create-session#cart-items-alternative-to-amount) |
| Keep customer on my site (popup/iframe)  | [Integration Modes](/guides/payments/checkout/integration-modes)                                         |
| Match checkout to my brand colors        | [Customize Appearance](/guides/payments/checkout/appearance)                                             |
| Test without real charges                | [Testing Guide](/guides/payments/checkout/testing-guide)                                                 |
| See all API options                      | [API Reference](/guides/payments/checkout/api-reference)                                                 |
| Fix an error                             | [Troubleshooting](/guides/payments/checkout/troubleshooting)                                             |
