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

# Authorize Klarna Checkout

> Confirms the Klarna authorization token after customer approval in the Klarna widget

## Overview

After the customer authorizes payment in the Klarna widget (client-side), this endpoint confirms the authorization with Firmly. It stores the `authorization_token` in the session and returns the cart with the confirmed Klarna payment method.

## Authentication

<ParamField header="x-firmly-authorization" type="string" required>
  Device authentication token from Browser Session
</ParamField>

## Path Parameters

<ParamField path="domain" type="string" required>
  The merchant domain (e.g., "merchant.example.com")
</ParamField>

## Request Body

<ParamField body="attributes" type="object" required>
  Klarna authorization details

  <Expandable title="Attributes">
    <ParamField body="authorization_token" type="string" required>
      The authorization token received from the Klarna Payments SDK after the customer approves payment. Obtained from the `Klarna.Payments.authorize()` callback.
    </ParamField>
  </Expandable>
</ParamField>

## Response

Returns the cart with the confirmed Klarna payment method.

<ResponseField name="cart_id" type="string">
  Unique identifier for the cart
</ResponseField>

<ResponseField name="line_items" type="array">
  Array of items in the cart
</ResponseField>

<ResponseField name="payment_method" type="object">
  Confirmed Klarna payment method

  <Expandable title="Payment Method">
    <ResponseField name="payment_type" type="string">
      Always `"Klarna"` for this gateway
    </ResponseField>

    <ResponseField name="attributes" type="object">
      Klarna authorization details

      <Expandable title="Attributes">
        <ResponseField name="session_id" type="string">
          Klarna payment session identifier (from start checkout)
        </ResponseField>

        <ResponseField name="authorization_token" type="string">
          The confirmed authorization token
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="shipping_info" type="object">
  Delivery address details
</ResponseField>

<ResponseField name="total" type="object">
  Grand total including all costs
</ResponseField>

<ResponseField name="sub_total" type="object">
  Subtotal before shipping and tax
</ResponseField>

<ResponseField name="tax" type="object">
  Tax amount
</ResponseField>

## Code Example

<CodeGroup>
  ```javascript JavaScript theme={null}
  // After Klarna.Payments.authorize() callback returns authorization_token
  const response = await fetch(
    'https://cc.firmly.work/api/v1/domains/merchant.example.com/express/klarna/authorize',
    {
      method: 'POST',
      headers: {
        'x-firmly-authorization': authToken,
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        attributes: {
          authorization_token: 'klarna_auth_token_from_widget'
        }
      })
    }
  );

  const cart = await response.json();
  // Payment is now authorized, proceed to complete order
  ```

  ```python Python theme={null}
  import requests

  response = requests.post(
      'https://cc.firmly.work/api/v1/domains/merchant.example.com/express/klarna/authorize',
      headers={
          'x-firmly-authorization': auth_token,
          'Content-Type': 'application/json'
      },
      json={
          'attributes': {
              'authorization_token': 'klarna_auth_token_from_widget'
          }
      }
  )

  cart = response.json()
  ```

  ```bash cURL theme={null}
  curl -X POST https://cc.firmly.work/api/v1/domains/merchant.example.com/express/klarna/authorize \
    -H "x-firmly-authorization: YOUR_AUTH_TOKEN" \
    -H "Content-Type: application/json" \
    -d '{"attributes": {"authorization_token": "klarna_auth_token_from_widget"}}'
  ```
</CodeGroup>

## Response Example

```json theme={null}
{
  "cart_id": "9cf76530-1344-420f-9ca6-c7a96fb6db45",
  "line_items": [
    {
      "line_item_id": "3e66bef5-43f5-4a80-8957-91c5c8233163",
      "sku": "MT12",
      "quantity": 1,
      "description": "Cassius Sparring Tank",
      "price": {
        "currency": "USD",
        "value": 18,
        "number": 1800,
        "symbol": "$"
      },
      "line_price": {
        "currency": "USD",
        "value": 18,
        "number": 1800,
        "symbol": "$"
      }
    }
  ],
  "payment_method": {
    "payment_type": "Klarna",
    "attributes": {
      "session_id": "kp_abc123def456",
      "authorization_token": "klarna_auth_token_from_widget"
    }
  },
  "shipping_info": {
    "first_name": "John",
    "last_name": "Smith",
    "email": "john@example.com",
    "phone": "2065551212",
    "address1": "123 Main St",
    "city": "Seattle",
    "state_or_province": "WA",
    "country": "US",
    "postal_code": "98101"
  },
  "total": {
    "currency": "USD",
    "value": 30,
    "number": 3000,
    "symbol": "$"
  },
  "sub_total": {
    "currency": "USD",
    "value": 18,
    "number": 1800,
    "symbol": "$"
  },
  "tax": {
    "currency": "USD",
    "value": 2,
    "number": 200,
    "symbol": "$"
  }
}
```

## Error Responses

| Code                         | Description                                    |
| ---------------------------- | ---------------------------------------------- |
| `ErrorCartNotFound`          | No active cart for this domain                 |
| `ErrorBadRequest`            | Missing `authorization_token` in request body  |
| `ErrorGatewayNotFound`       | Klarna is not enabled for this merchant        |
| `ErrorPrecondition`          | Precondition failed (e.g., cart state invalid) |
| `ErrorSubmitExpressCheckout` | Authorization failed at the merchant           |

## Related Endpoints

* [Start Klarna Checkout](/api-reference/payment/express-checkout/start-klarna) - Create Klarna session first
* [Complete Klarna Order](/api-reference/payment/express-checkout/complete-order-klarna) - Finalize the order
