## GET /api/v2/account/invoice-lead

**Get invoice timing**

How many days before the due date the account's renewal invoices are created and sent. The value applies to every service and domain renewal on the account and takes effect from the next renewal; the due date itself does not change. Standard (null) means each product's own lead: 30 days for web hosting and domains, 14 for VPS. Monthly-only hosting customers without domains get 14 days by default; a customer's own choice is never changed by that default. Read actions.canChange before offering a change. Changing it requires account-owner access or an explicitly scoped API key. After a 503, reload before retrying.

### Related Endpoints

- `PATCH /api/v2/account/invoice-lead`: Update invoice timing
- `GET /api/v2/account/service-consolidation`: Get monthly service invoice preferences
- `PATCH /api/v2/account/service-consolidation`: Update monthly service invoice preferences

### Headers

- `Accept`: application/json
- `Authorization`: Bearer YOUR_API_KEY
- Required API scope: `read:billing`

### Request Example

```bash
curl -X GET "https://cloud.hostup.se/api/v2/account/invoice-lead" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: application/json"
```

### Response Schema

- `days` (integer, required, nullable): Days before the due date renewal invoices are created, or null when each product's own lead applies (30 for web hosting and domains, 14 for VPS).
  Allowed values: 7, 14, 30
- `source` (string, required, nullable): Who set the current value.
  Allowed values: default, customer, staff
- `available` (boolean, required)
- `actions` (object, required)
- `actions.canChange` (object, required)
- `actions.canChange.allowed` (boolean, required)
- `actions.canChange.reason` (string, required, nullable): Nullable (may be null when not applicable).

### Responses

#### 200 - Current invoice timing.
```json
{
  "days": 30,
  "source": "customer",
  "available": true,
  "actions": {
    "canChange": {
      "allowed": true,
      "reason": null
    }
  }
}
```

#### 400 - Invalid request. The response body is an RFC 7807 Problem Details document.
```json
{
  "type": "https://developer.hostup.se/errors/invalid_request",
  "title": "Invalid request",
  "status": 400,
  "detail": "The request body failed validation.",
  "code": "invalid_request",
  "instance": "/api/v2/resource",
  "requestId": "req_01hxa3b4c5d6e7f8g9h0j1k2m3",
  "timestamp": "2026-04-27T12:34:56.000Z",
  "errors": [
    {
      "pointer": "/items/0/domainName",
      "detail": "`domainName` is required.",
      "code": "invalid_request"
    }
  ]
}
```

#### 401 - Unauthorized. Authentication is required.
```json
{
  "type": "https://developer.hostup.se/errors/unauthorized",
  "title": "Unauthorized",
  "status": 401,
  "detail": "Authentication is required.",
  "code": "unauthorized",
  "instance": "/api/v2/resource",
  "requestId": "req_01hxa3b4c5d6e7f8g9h0j1k2m3",
  "timestamp": "2026-04-27T12:34:56.000Z"
}
```

#### 403 - No customer account selected, or not the account owner.

#### 404 - Not found. The resource does not exist or is not owned by the caller.
```json
{
  "type": "https://developer.hostup.se/errors/not_found",
  "title": "Not found",
  "status": 404,
  "detail": "The requested resource could not be found.",
  "code": "not_found",
  "instance": "/api/v2/resource",
  "requestId": "req_01hxa3b4c5d6e7f8g9h0j1k2m3",
  "timestamp": "2026-04-27T12:34:56.000Z"
}
```

#### 429 - Rate limited. Retry after the limit resets. 429 responses include `Retry-After` seconds plus `X-RateLimit-*` headers.
```json
{
  "type": "https://developer.hostup.se/errors/rate_limit_exceeded",
  "title": "Too many requests",
  "status": 429,
  "detail": "Too many requests. Retry after the limit resets.",
  "code": "rate_limit_exceeded",
  "instance": "/api/v2/resource",
  "requestId": "req_01hxa3b4c5d6e7f8g9h0j1k2m3",
  "timestamp": "2026-04-27T12:34:56.000Z"
}
```

#### 500 - Internal error. Retry later or contact support if the issue persists.
```json
{
  "type": "https://developer.hostup.se/errors/internal_error",
  "title": "Internal server error",
  "status": 500,
  "detail": "An unexpected error occurred. Retry later or contact support if the issue persists.",
  "code": "internal_error",
  "instance": "/api/v2/resource",
  "requestId": "req_01hxa3b4c5d6e7f8g9h0j1k2m3",
  "timestamp": "2026-04-27T12:34:56.000Z"
}
```

#### 503 - Invoice timing could not be read or confirmed; reload before retrying.
