# Read what Coritan offers without signing in

> The public endpoints for plans, what you can order now, the figures our terms state and domain prices. They need no token and answer the same for everyone.

Source: https://www.coritan.com/docs/api/public-information/

A script or an agent can ask Coritan what it sells and on what terms before anyone signs in. These endpoints send no account data and need no token, so a shared cache can keep their answers.

| Endpoint | Answers |
| --- | --- |
| [`GET /plans`](/docs/api/reference/client/features/#op-get-api-v1-plans) | The account plans, their prices and limits ([Account plans](/docs/billing/account-plans/#read-the-plans-without-signing-in)). |
| [`GET /availability`](/docs/api/reference/client/features/#op-get-api-v1-availability) | What you can order right now, and where. |
| [`GET /terms-facts`](/docs/api/reference/client/features/#op-get-api-v1-terms-facts) | The figures our terms and pricing pages state. |
| [`GET /domains/prices`](/docs/api/reference/client/domains/#op-get-api-v1-domains-prices) | What a year of each domain extension costs ([How domain registration works](/docs/websites/domains/#read-registrations-with-the-api)). |
| [`GET /features`](/docs/api/reference/client/features/#op-get-api-v1-features) | The dashboard areas that show, and the `gates` below. |

Each answer carries `Cache-Control: public, max-age=60, stale-while-revalidate=300`, except `GET /features`, which reads your session when you send one and is not cached. An organization's own storefront host answers `404` to the first four, because an organization sets its own prices and terms.

## What you can order right now

`GET /availability` answers from the same checks an order makes. Coritan reuses an answer for 30 seconds.

```bash
curl https://api.coritan.com/api/v1/availability
```

This answer is shortened:

```json
{
  "products": {
    "rx-2": {"orderable": true, "reason": null},
    "rx-2-performance": {"orderable": false, "reason": "Sold out for this plan"},
    "deploy-usage": {"orderable": true, "reason": null}
  },
  "locations": [
    {"code": "fra", "name": "Frankfurt", "orderable": true, "tiers": ["budget"]}
  ],
  "storage_regions": [{"code": "fra", "name": "Frankfurt", "approved": true}],
  "mail": {"cluster_active": true, "enabled": true},
  "relay": {"cluster_active": true, "enabled": true},
  "performance": {"stock": false},
  "images": [{"name": "Ubuntu 24.04", "os_family": "ubuntu"}],
  "ips": {"stock": true, "ipv4": true, "ipv6": false}
}
```

`products`
: One entry for each product that `GET /products` lists for a visitor, by its `slug`. `orderable` says whether Coritan would accept an order today and `reason` says why not, in one sentence. A plan product is not orderable until [account plans](/docs/billing/account-plans/#plans-open-in-stages) are open. A server plan needs room in at least one location. `deploy-usage` stands for App Deployment.

`locations`
: Each place Coritan can sell a server. `tiers` lists the hardware tiers with a plan in stock there, such as `budget` or `performance`.

`storage_regions`
: The places with Object Storage. `approved` is `false` while Coritan is still setting a region up, and you cannot order storage in it.

`mail` and `relay`
: `enabled` says whether Coritan sells Mail Hosting or SMTP Relay at all, and `cluster_active` whether its mail platform can set up a new one.

`images`
: The operating systems a Cloud Compute order can start from now, one entry for each image that is ready on a host.

`performance` and `ips`
: Whether any Performance plan, and any floating IP address, is in stock. `ips` also says which family: `ipv4` and `ipv6`.

A check Coritan cannot read answers as closed, so `orderable` is `false` and `reason` says so.

### When an order is refused for stock

An order for Mail Hosting, SMTP Relay, Object Storage or a floating IP that Coritan cannot set up answers `422` before it charges anything. `POST /checkout/quote` refuses the same body with the same words:

```json
{
  "detail": {
    "code": "out_of_stock",
    "message": "Object Storage is not available in that region right now. Choose another region.",
    "errors": ["Object Storage is not available in that region right now. Choose another region."]
  }
}
```

Creating the mail, sending or storage service that [your plan includes](/docs/billing/included-services/) answers the same `422` when nothing can set it up. Read `GET /availability` to choose a region or product that can be ordered.

## The figures our terms state

`GET /terms-facts` reads each value from the setting or record that decides it:

```bash
curl https://api.coritan.com/api/v1/terms-facts
```

```json
{
  "hourly_unlock_deposit": {"amount": "10.00", "currency": "USD"},
  "payment_methods": ["card", "crypto", "paypal"],
  "currencies": ["USD", "EUR"],
  "support": {"first_response_targets": {"free": 2880, "plan-pro": 1440, "plan-business": 60, "plan-enterprise": 30}},
  "tax_statement": "We do not add tax to invoices.",
  "domain_renewal_window_days": 14,
  "retention": {"tracking_events_days": 90, "tracking_sessions_days": 180}
}
```

`hourly_unlock_deposit`
: The one deposit a prepaid account makes before it starts anything billed by the hour or by use ([Hourly billing](/docs/billing/hourly-billing/)).

`payment_methods` and `currencies`
: The kinds of payment Coritan takes now, and the currencies you can pay in ([Payment methods](/docs/billing/payment-methods/), [Currencies and regions](/docs/billing/currencies-and-regions/)).

`support.first_response_targets`
: The time in minutes in which Coritan aims to reply first, for each plan.

`tax_statement`
: One sentence on whether invoices carry tax.

`domain_renewal_window_days`
: How many days before a domain expires that auto-renew renews it ([Renew a domain](/docs/websites/domains/renew-a-domain/)).

`retention`
: How many days Coritan keeps visit records. Coritan leaves it out when it cannot say.

## Gates on `GET /features`

`GET /features` adds `gates`, which say whether what a page may promise is in place right now:

| Gate | `true` when |
| --- | --- |
| `mail_enabled` | Coritan sells Mail Hosting and SMTP Relay. |
| `mail_cluster_active` | The mail platform can set up a new Mail Hosting service. |
| `relay_cluster_active` | The mail platform can set up a new SMTP Relay. |
| `storage_regions` | A list: the codes of the places with Object Storage open. |
| `ips_stock` | A floating IP address is in stock. |
| `referrals` | Accounts get a referral link ([Referrals](/docs/account/referrals/)). |
| `github_app` | App Deployment can connect to GitHub. |
| `snapshots` | Snapshot Storage is switched on. |
| `leads` | Coritan emails each new sales enquiry. |

A gate that Coritan cannot read is `false`.

## API

- `GET /api/v1/plans`: The account plans, their prices and what each allows (https://www.coritan.com/docs/api/reference/client/features/#op-get-api-v1-plans)
- `GET /api/v1/availability`: What can be ordered right now (https://www.coritan.com/docs/api/reference/client/features/#op-get-api-v1-availability)
- `GET /api/v1/terms-facts`: The figures our terms and pricing pages state (https://www.coritan.com/docs/api/reference/client/features/#op-get-api-v1-terms-facts)
- `GET /api/v1/domains/prices`: What a year of each domain extension costs (https://www.coritan.com/docs/api/reference/client/domains/#op-get-api-v1-domains-prices)
- `GET /api/v1/features`: The dashboard areas this storefront shows, and whether account plans apply (https://www.coritan.com/docs/api/reference/client/features/#op-get-api-v1-features)
