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

# Crear sesión de pago

> Este extremo crea una sesión de pago en Stripe para adquirir créditos.

## POST /credits/checkout

Este extremo crea una sesión de pago en Stripe para que el usuario adquiera un paquete de créditos. Requiere autenticación por sesión (token de acceso JWT tras el inicio de sesión).

<Note>
  **Para integraciones de terceros:** use `POST /credits/checkout/api` con autenticación por clave API.
</Note>

### Cuerpo de la solicitud

<ParamField body="packageId" type="string" required>
  Identificador del paquete de créditos a adquirir. Los paquetes disponibles están en `/credits/packages`.
</ParamField>

<ParamField body="successUrl" type="string">
  URL de redirección tras una compra correcta. Por defecto, el panel con indicador de éxito.
</ParamField>

<ParamField body="cancelUrl" type="string">
  URL de redirección si se cancela la compra. Por defecto, el panel con indicador de cancelación.
</ParamField>

### Respuesta

<ResponseField name="sessionId" type="string">
  Identificador de la sesión de pago en Stripe.
</ResponseField>

<ResponseField name="url" type="string">
  URL de la página de pago de Stripe. Redirija al usuario aquí para completar la compra.
</ResponseField>

<ResponseField name="package" type="object">
  Detalles del paquete seleccionado.

  <Expandable title="Propiedades del paquete">
    <ResponseField name="id" type="string">
      Identificador del paquete.
    </ResponseField>

    <ResponseField name="name" type="string">
      Nombre del paquete.
    </ResponseField>

    <ResponseField name="credits" type="number">
      Número de créditos del paquete.
    </ResponseField>

    <ResponseField name="priceCents" type="number">
      Precio en céntimos.
    </ResponseField>
  </Expandable>
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST https://api.llmgenerator.com/api/v1/credits/checkout \
    -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
    -H "Content-Type: application/json" \
    -d '{
          "packageId": "pkg_pro",
          "successUrl": "https://example.com/success?session_id={CHECKOUT_SESSION_ID}",
          "cancelUrl": "https://example.com/cancel"
        }'
  ```

  ```javascript Node.js theme={null}
  const response = await fetch('https://api.llmgenerator.com/api/v1/credits/checkout', {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      packageId: 'pkg_pro'
    })
  });

  const data = await response.json();
  // Redirect user to data.url
  window.location.href = data.url;
  ```
</RequestExample>

<ResponseExample>
  ```json Success (200) theme={null}
  {
    "sessionId": "cs_test_a1b2c3d4e5f6g7h8i9j0",
    "url": "https://checkout.stripe.com/c/pay/cs_test_a1b2c3d4e5f6g7h8i9j0",
    "package": {
      "id": "pkg_pro",
      "name": "Pro Pack",
      "credits": 500,
      "priceCents": 1999
    }
  }
  ```

  ```json Package Not Found (404) theme={null}
  {
    "message": "Credit package not found"
  }
  ```
</ResponseExample>

***

## POST /credits/checkout/api

Este extremo crea una sesión de pago en Stripe mediante autenticación por clave API. Adecuado para integraciones de terceros y aplicaciones externas.

### Autenticación

Requiere autenticación por clave API. Incluya su clave en el encabezado `Authorization`:

```
Authorization: Bearer llmgen_your_api_key_here
```

### Cuerpo de la solicitud

Igual que `/credits/checkout` arriba.

### Respuesta

Igual que `/credits/checkout` arriba.

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST https://api.llmgenerator.com/api/v1/credits/checkout/api \
    -H "Authorization: Bearer llmgen_your_api_key_here" \
    -H "Content-Type: application/json" \
    -d '{
          "packageId": "pkg_pro",
          "successUrl": "https://yourapp.com/success?session_id={CHECKOUT_SESSION_ID}",
          "cancelUrl": "https://yourapp.com/cancel"
        }'
  ```

  ```javascript Node.js theme={null}
  const response = await fetch('https://api.llmgenerator.com/api/v1/credits/checkout/api', {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer llmgen_your_api_key_here',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      packageId: 'pkg_pro',
      successUrl: 'https://yourapp.com/success?session_id={CHECKOUT_SESSION_ID}',
      cancelUrl: 'https://yourapp.com/cancel'
    })
  });

  const data = await response.json();
  // Redirect user to data.url in your app
  ```

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

  response = requests.post(
      'https://api.llmgenerator.com/api/v1/credits/checkout/api',
      headers={
          'Authorization': 'Bearer llmgen_your_api_key_here',
          'Content-Type': 'application/json'
      },
      json={
          'packageId': 'pkg_pro',
          'successUrl': 'https://yourapp.com/success',
          'cancelUrl': 'https://yourapp.com/cancel'
      }
  )

  data = response.json()
  ```
</RequestExample>
