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

# Credit Limit Increase

> Initiate a credit limit increase on an existing card engagement and follow it through to a decision via webhooks

The partner initiates a credit limit increase on an existing card engagement with a single request. As the application moves through document collection, review, signing and the final decision, Nordiska emits webhook events that mirror those state changes. The partner collects supporting documents from the customer and uploads them via the API. Signing is hosted by Nordiska; the partner only needs to forward the customer to the `signingUrl` that arrives on the webhook.

<Note>
  **Recommended reapplication cooldown: 90 days.** Nordiska does not enforce this in code, but we recommend the partner prevents a customer from submitting a new credit limit increase application within 90 days of a previous decision, regardless of whether the previous application was approved or rejected.
</Note>

## Initiate Credit Limit Increase

```http theme={null}
POST /api/engagements/card/{engagement-id}/credit-limit-increase
```

### Request body

```json theme={null}
{
  "appliedAmount": {
    "amount": 1500000,
    "currency": "EUR",
    "unit": "MINOR"
  },
  "reason": {
    "reasonType": "CONSOLIDATE_SPENDING_ON_THIS_CARD"
  },
  "monthlyIncome": {
    "amount": 450000,
    "currency": "EUR",
    "unit": "MINOR"
  },
  "employmentType": "PERMANENT",
  "redirectUrls": {
    "successUrl": "https://partner.example.com/credit-limit-increase/success",
    "failUrl": "https://partner.example.com/credit-limit-increase/fail"
  }
}
```

| Field            | Required | Description                                                                             |
| ---------------- | -------- | --------------------------------------------------------------------------------------- |
| `appliedAmount`  | Yes      | The new requested credit limit.                                                         |
| `reason`         | Yes      | Customer-selected reason for requesting the increase. See [Reason](#reason).            |
| `monthlyIncome`  | Yes      | The customer's claimed net monthly income.                                              |
| `employmentType` | Yes      | Customer's current employment situation. See [EmploymentType](#employmenttype).         |
| `redirectUrls`   | Yes      | URLs the customer is sent back to after the hosted signing flow finishes or is aborted. |

#### Reason

`reason` is a tagged object discriminated by `reasonType`. Exactly one value must be provided.

| `reasonType`                                           | Extra fields           | Meaning                                                               |
| ------------------------------------------------------ | ---------------------- | --------------------------------------------------------------------- |
| `CURRENT_LIMIT_DOES_NOT_COVER_RECURRING_EXPENSES`      | —                      | Existing limit is insufficient for the customer's recurring expenses. |
| `CONSOLIDATE_SPENDING_ON_THIS_CARD`                    | —                      | Customer wants to consolidate spending onto this card.                |
| `INCOME_HAS_INCREASED`                                 | —                      | The customer's net income has increased.                              |
| `INCREASED_NEED_FOR_FINANCIAL_FLEXIBILITY`             | —                      | Customer wants more general headroom.                                 |
| `LIMIT_NOT_SUFFICIENT_FOR_TEMPORARILY_HIGHER_EXPENSES` | —                      | Current limit does not cover a period of temporarily higher expenses. |
| `OTHER`                                                | `description` (string) | Free-text reason supplied by the customer.                            |

Example with `OTHER`:

```json theme={null}
{
  "reason": {
    "reasonType": "OTHER",
    "description": "Moving abroad and need higher monthly headroom"
  }
}
```

#### EmploymentType

| Value             | Meaning                        |
| ----------------- | ------------------------------ |
| `PERMANENT`       | Permanent employment.          |
| `SOLE_PROPRIETOR` | Self-employed sole proprietor. |
| `RETIRED`         | Retired.                       |
| `STUDENT`         | Student.                       |
| `HOMEMAKER`       | Homemaker.                     |
| `OTHER`           | Anything that does not fit.    |

### Response `200 OK`

```json theme={null}
{
  "id": "f4b5d83f-2eaa-4db3-9a1d-0a9f8a55cd11",
  "status": "PROCESSING",
  "createdAt": "2026-05-12T08:13:21.482Z"
}
```

The application always starts in `PROCESSING`. Subsequent status changes are pushed via [webhooks](#webhook-events).

## Upload Supporting Documents

When the `CREDIT_LIMIT_INCREASE_DOCUMENTS_REQUIRED` webhook fires, the customer must supply supporting documents (e.g. payslips or bank statements). The partner uploads them as `multipart/form-data`. Up to 5 files can be sent in a single request, and the endpoint can be called multiple times until all required documents have been provided.

```http theme={null}
POST /api/engagements/card/credit-limit-increase/{credit-limit-increase-id}/documents
Content-Type: multipart/form-data
```

| Part        | Required | Description                                                                                                                                                 |
| ----------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `documents` | Yes      | One or more files (repeat the part per file). Up to 5 files per request, each ≤10 MB, ≤50 MB combined. Content type must be `application/pdf` or `image/*`. |

Returns `200 OK` on success.

## Get Credit Limit Increase

Fetch the current state of a credit limit increase application.

```http theme={null}
GET /api/engagements/card/credit-limit-increase/{credit-limit-increase-id}
```

### Response `200 OK`

```json theme={null}
{
  "id": "f4b5d83f-2eaa-4db3-9a1d-0a9f8a55cd11",
  "engagementId": "8e3a2c1d-7b9f-4a52-9c01-2e8f6a91bd33",
  "appliedAmount": {
    "amount": 1500000,
    "currency": "EUR",
    "unit": "MINOR"
  },
  "status": "AWAITING_SIGNING",
  "additionalInformation": {
    "signingUrl": "https://sign.nordiska.com/?sessionId=1fa6ef79-16e7-4665-ae78-c885e65e372b"
  },
  "createdAt": "2026-05-12T08:13:21.482Z",
  "updatedAt": "2026-05-12T09:02:55.117Z"
}
```

`additionalInformation` is present whenever the status carries extra data. For most statuses it's the same payload as the corresponding webhook; `COMPLETED` is the exception — `approvedLimit` is only available here, not on the webhook itself:

| Status             | `additionalInformation` shape                                              |
| ------------------ | -------------------------------------------------------------------------- |
| `AWAITING_SIGNING` | `{ "signingUrl": "..." }`                                                  |
| `COMPLETED`        | `{ "approvedLimit": { "amount": ..., "currency": ..., "unit": "MINOR" } }` |
| `REJECTED`         | `{ "rejectReason": "..." }`                                                |
| `FAILED`           | `{ "failureCode": "..." }`                                                 |
| *other*            | omitted                                                                    |

`approvedLimit` has the same shape as `appliedAmount` and reflects the limit Nordiska approved, which may differ from what was applied for:

```json theme={null}
{
  "status": "COMPLETED",
  "additionalInformation": {
    "approvedLimit": {
      "amount": 1200000,
      "currency": "EUR",
      "unit": "MINOR"
    }
  }
}
```

## Credit Limit Increase Status

The application moves through the following statuses:

| Status                     | Final | Description                                                                                           |
| -------------------------- | :---: | ----------------------------------------------------------------------------------------------------- |
| `PROCESSING`               |       | Application created and submitted for evaluation. Initial state of every application.                 |
| `AWAITING_DOCUMENTS`       |       | Supporting documents are required from the customer (e.g. payslips or bank statements).               |
| `AWAITING_DOCUMENT_REVIEW` |       | Documents have been received and are being reviewed manually by Nordiska.                             |
| `AWAITING_SIGNING`         |       | A new credit agreement has been generated and the customer needs to sign it via a hosted URL.         |
| `FINALIZING`               |       | The customer has signed and Nordiska is activating the new credit limit.                              |
| `COMPLETED`                |   ✓   | The new credit limit has been activated. `additionalInformation.approvedLimit` carries the new limit. |
| `REJECTED`                 |   ✓   | The application was rejected.                                                                         |
| `FAILED`                   |   ✓   | The application could not be processed due to an error. See `failureCode`.                            |

### State diagram

```mermaid theme={null}
stateDiagram-v2
    [*] --> PROCESSING: initiate limit increase

    PROCESSING --> AWAITING_DOCUMENTS: CREDIT_LIMIT_INCREASE_DOCUMENTS_REQUIRED
    AWAITING_DOCUMENTS --> AWAITING_DOCUMENT_REVIEW: CREDIT_LIMIT_INCREASE_DOCUMENT_REVIEW_STARTED
    AWAITING_DOCUMENT_REVIEW --> AWAITING_SIGNING: CREDIT_LIMIT_INCREASE_SIGNING_SESSION_CREATED
    AWAITING_SIGNING --> FINALIZING: CREDIT_LIMIT_INCREASE_FINALIZING
    FINALIZING --> COMPLETED: CREDIT_LIMIT_INCREASE_COMPLETED

    PROCESSING --> REJECTED: CREDIT_LIMIT_INCREASE_REJECTED
    AWAITING_DOCUMENT_REVIEW --> REJECTED: CREDIT_LIMIT_INCREASE_REJECTED

    PROCESSING --> FAILED: CREDIT_LIMIT_INCREASE_FAILED
    AWAITING_SIGNING --> FAILED: CREDIT_LIMIT_INCREASE_FAILED

    COMPLETED --> [*]
    REJECTED --> [*]
    FAILED --> [*]
```

Each transition is labelled with the webhook emitted when the application enters the target status. The initial `PROCESSING` status emits no webhook — observe it via [Get Credit Limit Increase](#get-credit-limit-increase).

## Webhook Events

One webhook is emitted per status change, except for the initial `PROCESSING` status, which emits none. Every payload carries `creditLimitIncreaseId`.

### `CREDIT_LIMIT_INCREASE_DOCUMENTS_REQUIRED`

The customer needs to upload supporting documents (payslips for employed customers, bank statements supporting the claimed income).

```json theme={null}
{
  "eventType": "CREDIT_LIMIT_INCREASE_DOCUMENTS_REQUIRED",
  "creditLimitIncreaseId": "f4b5d83f-2eaa-4db3-9a1d-0a9f8a55cd11"
}
```

### `CREDIT_LIMIT_INCREASE_DOCUMENT_REVIEW_STARTED`

Documents have been received and are under review. No customer action required.

```json theme={null}
{
  "eventType": "CREDIT_LIMIT_INCREASE_DOCUMENT_REVIEW_STARTED",
  "creditLimitIncreaseId": "f4b5d83f-2eaa-4db3-9a1d-0a9f8a55cd11"
}
```

### `CREDIT_LIMIT_INCREASE_SIGNING_SESSION_CREATED`

The customer must be redirected to `signingUrl` to sign the new credit agreement.

```json theme={null}
{
  "eventType": "CREDIT_LIMIT_INCREASE_SIGNING_SESSION_CREATED",
  "creditLimitIncreaseId": "f4b5d83f-2eaa-4db3-9a1d-0a9f8a55cd11",
  "signingUrl": "https://sign.nordiska.com/?sessionId=1fa6ef79-16e7-4665-ae78-c885e65e372b"
}
```

### `CREDIT_LIMIT_INCREASE_FINALIZING`

The customer has signed and Nordiska is activating the new credit limit. No customer action required.

```json theme={null}
{
  "eventType": "CREDIT_LIMIT_INCREASE_FINALIZING",
  "creditLimitIncreaseId": "f4b5d83f-2eaa-4db3-9a1d-0a9f8a55cd11"
}
```

### `CREDIT_LIMIT_INCREASE_COMPLETED`

The new credit limit is active on the engagement. Fetch [Get Credit Limit Increase](#get-credit-limit-increase) for the `approvedLimit`.

```json theme={null}
{
  "eventType": "CREDIT_LIMIT_INCREASE_COMPLETED",
  "creditLimitIncreaseId": "f4b5d83f-2eaa-4db3-9a1d-0a9f8a55cd11"
}
```

### `CREDIT_LIMIT_INCREASE_REJECTED`

The application was rejected.

```json theme={null}
{
  "eventType": "CREDIT_LIMIT_INCREASE_REJECTED",
  "creditLimitIncreaseId": "f4b5d83f-2eaa-4db3-9a1d-0a9f8a55cd11",
  "rejectReason": "CREDIT_LIMIT_INCREASE_REJECTED"
}
```

`rejectReason` is always `CREDIT_LIMIT_INCREASE_REJECTED`. The field is kept as an enum for forward compatibility.

### `CREDIT_LIMIT_INCREASE_FAILED`

The application could not be processed due to an error rather than a credit decision.

```json theme={null}
{
  "eventType": "CREDIT_LIMIT_INCREASE_FAILED",
  "creditLimitIncreaseId": "f4b5d83f-2eaa-4db3-9a1d-0a9f8a55cd11",
  "failureCode": "INTERNAL_ERROR"
}
```

`failureCode` is one of:

| Value            | Meaning                                                                  |
| ---------------- | ------------------------------------------------------------------------ |
| `INTERNAL_ERROR` | An unexpected internal error occurred.                                   |
| `TIMEOUT`        | The customer did not complete a required step within the allowed window. |

## End-to-end sequence

```mermaid theme={null}
sequenceDiagram
    participant Customer
    participant Partner
    participant CardService as Nordiska Card Service
    participant Nordiska as Nordiska back office

    Customer->>Partner: Requests credit limit increase
    Partner->>CardService: POST /credit-limit-increase
    CardService-->>Partner: 200 { id, status: PROCESSING, createdAt }

    CardService-->>Partner: webhook CREDIT_LIMIT_INCREASE_DOCUMENTS_REQUIRED
    Partner->>Customer: Prompt to provide payslips / bank statements
    Customer->>Partner: Supplies documents
    Partner->>CardService: POST /credit-limit-increase/{id}/documents (up to 5 files per request)

    CardService-->>Partner: webhook CREDIT_LIMIT_INCREASE_DOCUMENT_REVIEW_STARTED
    Nordiska->>Nordiska: Manual review + credit assessment

    alt Approved
        CardService-->>Partner: webhook CREDIT_LIMIT_INCREASE_SIGNING_SESSION_CREATED { signingUrl }
        Partner->>Customer: Redirect to signingUrl
        Customer->>Nordiska: Signs new agreement
        CardService-->>Partner: webhook CREDIT_LIMIT_INCREASE_FINALIZING
        CardService-->>Partner: webhook CREDIT_LIMIT_INCREASE_COMPLETED
    else Rejected
        CardService-->>Partner: webhook CREDIT_LIMIT_INCREASE_REJECTED { rejectReason }
    else Failed
        CardService-->>Partner: webhook CREDIT_LIMIT_INCREASE_FAILED { failureCode }
    end
```
