---
title: "Get public server configuration"
method: GET
path: "/api/config"
tags: ["config", "internal"]
---

# Get public server configuration

`GET /api/config`

Returns public configuration settings like OIDC providers, billing status, etc.

## Response `200`

Public server configuration

- ApiResponsePublicConfigResponse
  - `data` object
    - `billing_enabled` boolean, required
    - `deployment_type` 'cloud' | 'commercial' | 'community', required
    - `disable_password_login` boolean, required
    - `disable_registration` boolean, required
    - `discount_save_offer_available` boolean, required — `STRIPE_SAVE_OFFER_COUPON_ID` env var is set. When false, the cancel modal hides the discount save-offer panel so the user doesn't see an option the deployment can't fulfil.
    - `has_email_opt_in` boolean, required
    - `has_email_service` boolean, required
    - `has_integrated_daemon` boolean, required
    - `license_expiry` string, nullable — Hard expiry — the drop-dead date after which the server rejects the key. Referenced by the grace-period banner.
    - `license_in_grace_period` boolean, required — True when the license is past `intended_exp` but not yet past the hard `exp` — the silent grace window.
    - `license_intended_expiry` string, nullable — User-visible expiry — the date displayed to end users under normal operation. 7 days earlier than `license_expiry` for keys issued after grace-period support landed.
    - `license_status` string, nullable
    - `needs_cookie_consent` boolean, required
    - `oidc_providers` OidcProviderMetadata[], required
      - `logo` string, nullable
      - `name` string, required
      - `slug` string, required
    - `posthog_key` string, nullable
    - `public_url` string, required
    - `server_port` integer, required
    - `snapshot_retention_days_override` integer, nullable — `SCANOPY_SNAPSHOT_RETENTION_DAYS_OVERRIDE` if set on this instance. Frontend uses it inside the plan-comparison view to display the effective retention for this deployment rather than the per-plan fixture default.
  - `error` string, nullable
  - `meta` ApiMeta, required — API metadata included in all responses
    - `api_version` integer, required — API version (integer, increments on breaking changes)
    - `server_version` string, required — Server version (semver)
  - `success` boolean, required

## Changes

- **2026-06-15** `94e5ff6f8627` — 1 info
  - added the required property `data/discount_save_offer_available` to the response with the `200` status
- **2026-06-11** `3152cf58226a` — 1 info
  - added the optional property `data/snapshot_retention_days_override` to the response with the `200` status
- **2026-06-11** `5f1208d6d875` — 1 warning
  - removed the optional property `data/snapshot_retention_days_override` from the response with the `200` status
- **2026-06-10** `0cfafb919a99` — 1 info
  - added the optional property `data/snapshot_retention_days_override` to the response with the `200` status
- **2026-04-22** `a03d2148ba62` — 2 info
  - added the optional property `data/license_intended_expiry` to the response with the `200` status
  - added the required property `data/license_in_grace_period` to the response with the `200` status

[Full history](https://skmtc.dev/scanopy/apis/scanopy-api/changes/api/config/get.md)

---

[API](https://skmtc.dev/scanopy/apis/scanopy-api.md) · [All operations](https://skmtc.dev/scanopy/apis/scanopy-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/scanopy/scanopy-api/revisions/87fbc9fdb32c/schema)
