# Create Session For Subscription Payment

Use this API endpoint to create a new subscription using the checkout modality. Upon a successful request, you'll receive a `paymentUrl` that your application must redirect the customer to in order to complete the subscription setup.

### Endpoint

* **URL:** `https://demo-api.frontpayment.no/api/v1/connect/subscription/create` ([docs.frontpayment.no][2])
* **Method:** `POST`

### Authentication

Requires **Bearer Token** authentication. Include the token in the `Authorization` header:

```
Authorization: Bearer YOUR_ACCESS_TOKEN
```

If the token is missing or invalid, the API returns a `401 Unauthorized` response. ([docs.frontpayment.no][1])

### Request Payload

The body must be JSON and include fields such as products, billing schedule, customer details, callback URLs, etc. Here's a condensed example:

```json
{
  "products": {
    "0": {
      "name": "product 3",
      "productId": null,
      "quantity": "1",
      "rate": "2000",
      "discount": 0,
      "tax": "0",
      "amount": 2000
    }
  },
  "orderSummary": {
    "subTotal": "2000.00",
    "totalTax": "0.00",
    "totalDiscount": "0.00",
    "grandTotal": "2000.00",
    "payablePerCycle": "2000.00"
  },
  "billingFrequency": "month",
  "numberOfRepeats": 12,
  "subscriptionStartDate": "21 Feb, 2023",
  "subscriptionEndsDate": "21 Feb, 2024",
  "dueDateForPaymentLink": "1677047770.652",
  "customerDetails": {
    "customerUuid": "CSRT3798554634",
    "type": "private",
    "countryCode": "+47",
    "msisdn": "46567468",
    "email": "[email protected]",
    "name": "Kari Nordmann",
    "personalNumber": null,
    "organizationId": "925710482",
    "preferredLanguage": "no",
    "address": {
      "street": "Luramyrveien 65",
      "zip": "4313",
      "city": "Sandnes",
      "country": "Norway"
    }
  },
  "customerNotes": "test",
  "termsAndConditions": "terms and conditions",
  "submitPayment": {
    "via": "visa",
    "currency": "NOK"
  },
  "callback": {
    "success": "https://demo.frontpayment.no/?order_identifier=...&order_status=success",
    "failure": "https://demo.frontpayment.no/?order_identifier=...&order_status=failed"
  }
}
```

([docs.frontpayment.no][1])

### Validation Rules

Below are the validation constraints for each field:

<table>
  <thead>
    <tr>
      <th>Field</th>
      <th>Type</th>
      <th>Description</th>
    </tr>
  </thead>
  <tbody>
    <tr><td><code>products.*.name</code></td><td><code>string</code></td><td><strong>Required</strong></td></tr>
    <tr><td><code>products.*.productId</code></td><td><code>string</code></td><td><strong>Optional</strong>, max length 25</td></tr>
    <tr><td><code>products.*.quantity</code></td><td><code>numeric</code></td><td><strong>Required</strong></td></tr>
    <tr><td><code>products.*.rate</code></td><td><code>numeric</code></td><td><strong>Required</strong></td></tr>
    <tr><td><code>products.*.discount</code></td><td><code>numeric</code></td><td><strong>Optional</strong></td></tr>
    <tr><td><code>products.*.tax</code></td><td><code>numeric</code></td><td><strong>Required</strong></td></tr>
    <tr><td><code>products.*.amount</code></td><td><code>numeric</code></td><td><strong>Required</strong></td></tr>
    <tr><td><code>billingFrequency</code></td><td><code>string</code></td><td><strong>Required</strong> (e.g., monthly, weekly, daily)</td></tr>
    <tr><td><code>numberOfRepeats</code></td><td><code>numeric</code></td><td><strong>Required</strong></td></tr>
    <tr><td><code>orderSummary.subTotal</code></td><td><code>numeric</code></td><td><strong>Required</strong></td></tr>
    <tr><td><code>orderSummary.totalTax</code></td><td><code>numeric</code></td><td><strong>Required</strong></td></tr>
    <tr><td><code>orderSummary.totalDiscount</code></td><td><code>numeric</code></td><td><strong>Required</strong></td></tr>
    <tr><td><code>orderSummary.grandTotal</code></td><td><code>numeric</code></td><td><strong>Required</strong></td></tr>
    <tr><td><code>orderSummary.payablePerCycle</code></td><td><code>numeric</code></td><td><strong>Required</strong></td></tr>
    <tr><td><code>subscriptionStartDate</code></td><td><code>string</code></td><td><strong>Required</strong></td></tr>
    <tr><td><code>subscriptionEndsDate</code></td><td><code>string</code></td><td><strong>Required</strong></td></tr>
    <tr><td><code>dueDateForPaymentLink</code></td><td><code>string</code></td><td><strong>Required</strong></td></tr>
    <tr><td><code>customerDetails.type</code></td><td><code>string</code></td><td><strong>Required</strong> (nullable)</td></tr>
    <tr><td><code>customerDetails.countryCode</code></td><td><code>string</code></td><td><strong>Required</strong> (nullable)</td></tr>
    <tr><td><code>customerDetails.msisdn</code></td><td><code>string</code></td><td><strong>Required</strong> (nullable)</td></tr>
    <tr><td><code>customerDetails.email</code></td><td><code>email</code></td><td><strong>Required</strong> (nullable)</td></tr>
    <tr><td><code>customerDetails.name</code></td><td><code>string</code></td><td><strong>Required</strong></td></tr>
    <tr><td><code>customerDetails.personalNumber</code></td><td><code>string</code></td><td><strong>Optional</strong>, Customer's personal identification number, must be 11 characters.</td></tr>
    <tr><td><code>customerDetails.organizationId</code></td><td><code>string</code></td><td><strong>Required</strong> if type=corporate, <strong>Optional</strong>, regex /^[a-zA-Z0-9]+$/</td></tr>
    <tr><td><code>customerDetails.preferredLanguage</code></td><td><code>string</code></td><td><strong>Required</strong></td></tr>
    <tr><td><code>customerDetails.address</code></td><td><code>array</code></td><td><strong>Required</strong></td></tr>
    <tr><td><code>customerDetails.address.street</code></td><td><code>string</code></td><td><strong>Required</strong></td></tr>
    <tr><td><code>customerDetails.address.zip</code></td><td><code>string</code></td><td><strong>Required</strong></td></tr>
    <tr><td><code>customerDetails.address.city</code></td><td><code>string</code></td><td><strong>Required</strong></td></tr>
    <tr><td><code>customerDetails.address.country</code></td><td><code>string</code></td><td><strong>Required</strong>, ISO Alpha-2 country code</td></tr>
    <tr><td><code>customerNotes</code></td><td><code>string</code></td><td><strong>Optional</strong></td></tr>
    <tr><td><code>termsAndConditions</code></td><td><code>string</code></td><td><strong>Optional</strong></td></tr>
    <tr><td><code>submitPayment.currency</code></td><td><code>string</code></td><td><strong>Required</strong></td></tr>
    <tr><td><code>submitPayment.via</code></td><td><code>string</code></td><td><strong>Optional</strong></td></tr>
    <tr><td><code>settings</code></td><td><code>array</code></td><td><strong>Optional</strong></td></tr>
    <tr><td><code>settings.secureDetails</code></td><td><code>boolean</code></td><td><strong>Optional</strong></td></tr>
    <tr><td><code>callback.success</code></td><td><code>url</code></td><td><strong>Required</strong></td></tr>
    <tr><td><code>callback.failure</code></td><td><code>url</code></td><td><strong>Required</strong></td></tr>
  </tbody>
</table>  
:contentReference[oaicite:4]{index=4}

### Response

#### Success

Returns HTTP status `201` with a payload like:

```json
{
  "status_code": 201,
  "status_message": "OK",
  "message": "subscriptionRequestSuccessfullyHandled",
  "is_data": true,
  "data": {
    "subscriptionUuid": "SUB1812030514",
    "orderUuid": "ODR3798113293",
    "customerUuid": "CSRT3820359602",
    "paymentUrl": "https://..."
  }
}
```

([docs.frontpayment.no][1])

#### Error Responses

* **510 Execution Exception** – Internal processing error:

  ```json
  {
    "status_code": 510,
    "status_message": "Execution Exception Occurred",
    "message": "Internal Error Occurred Please Try Again Later",
    "is_error": true,
    "errors": [...]
  }
  ```
* **500 Internal Dependency Error** – Critical failure in dependency:

  ```json
  {
    "status_code": 500,
    "status_message": "Internal Dependency Error",
    "message": "Internal Error Occurred Please Try Again Later",
    "is_error": true,
    "errors": [
      {
        "happenedAt": "String",
        "internalErrorDetails": "String"
      }
    ]
  }
  ```