API

The console, lc, Terraform and this site all call the API at https://api.logi-ciel.co/v1. A script that holds a token can do everything they do.

Base URL

Every request goes to https://api.logi-ciel.co/v1, and requests and responses are JSON in UTF-8. Times are in UTC, in RFC 3339 format.

The version is part of the path, as v1 in every URL. A change that would break a client goes into a further version, and v1 keeps its shape.

Authentication

Each request carries a token in the Authorization header. A token belongs to one project and acts on that project alone.

  1. Open the project in the console and choose API tokens.
  2. Choose Create token, give it a name, and pick read-only or read and write.
  3. Copy the token straight away, because the console shows it only once.

Send the token as a bearer token in each request:

$ export LC_TOKEN="lcp_9f2c...e71a"
$ curl -s https://api.logi-ciel.co/v1/servers \
    -H "Authorization: Bearer $LC_TOKEN"

A request without a valid token gets 401 Unauthorized. A read-only token that tries to change something gets 403 Forbidden.

Keep tokens out of code and out of version control. Delete a token in the console, and every request that uses it fails from then on.

Endpoints

Resources

Each resource has a path of its own, such as /servers. GET lists or reads, POST creates, PATCH changes and DELETE removes.

PathWhat it holds
/serversServers, with their plans, regions, addresses and labels
/volumesVolumes and the servers they are attached to
/networksPrivate networks and their address ranges
/firewallsFirewalls, their rules and where they apply
/ssh-keysThe project’s SSH keys
/actions/{id}The state of a request that takes time, read with GET

Published figures

These paths answer only GET requests and hold the figures this site prints. Its price tables, region pages, status page and changelog all read them.

PathWhat it returns
/pricesEvery plan and item, with its hourly rate and its monthly price, before VAT
/regionsEach region’s code, city and country, with its round trips to the others
/usage?month=2026-10The project’s hours and costs for a month, resource by resource
/status/incidentsThe incidents on the status page, with region, service and duration
/changelogThe entries of the changelog, latest first, each with its date

/prices, /regions, /status/incidents and /changelog return the same data to every project, and a read-only token reads them. /usage returns the hours and costs of the token’s own project, as billing shows.

Read the round trips

GET /v1/regions lists every region with its round trips to the others. Each round trip is the median over the private network in the last seven days, in milliseconds:

$ curl -s https://api.logi-ciel.co/v1/regions \
    -H "Authorization: Bearer $LC_TOKEN"

The response, cut to its first region, with that region’s round trips nearest first:

{
  "regions": [
    {
      "code": "ee1",
      "city": "Tallinn",
      "country": "Estonia",
      "round_trips_ms": {"lv1": 5, "dk1": 15, "at1": 27, "it1": 33, "pt1": 58}
    }
  ]
}

Create a server

POST /v1/servers takes the same fields as lc server create on the command line:

curl -s -X POST https://api.logi-ciel.co/v1/servers \
  -H "Authorization: Bearer $LC_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "web-1",
    "plan": "s-2",
    "region": "ee1",
    "image": "debian-13",
    "ssh_keys": ["me"],
    "labels": {"role": "web"}
  }'

The API answers 201 Created with the server and the action that builds it:

{
  "server": {
    "id": "srv_7Hq2kd",
    "name": "web-1",
    "plan": "s-2",
    "region": "ee1",
    "status": "starting",
    "ipv4": "203.0.113.24",
    "ipv6": "2001:db8:4c1::/64",
    "labels": {"role": "web"}
  },
  "action": {"id": "act_K29xmP", "status": "running"}
}

The addresses are fixed from the start, so you can add DNS records before the server is up.

Actions

A request that takes time, such as a create or a resize, returns an action. Read the action until its status is success or error:

$ curl -s https://api.logi-ciel.co/v1/actions/act_K29xmP \
    -H "Authorization: Bearer $LC_TOKEN"
{"id": "act_K29xmP", "status": "success", "resource": "srv_7Hq2kd"}

To wait without polling, add a webhook under API tokens in the console. It receives each action when the action finishes.

Errors and limits

An error has an HTTP status and a JSON body, with a code for programs and a message for people:

{"error": {"code": "plan_not_in_region", "message": "g-h100 runs in it1 and lv1 only."}}

Lists come in pages: pass page and per_page in the query, and follow meta.next until it is empty.

Too many requests in a short time get 429 Too Many Requests with a Retry-After header. lc and the Terraform provider wait and retry on their own, and your scripts should do the same.

logi-ciel is a design concept

This site is a portfolio piece by Soheyb. The brand, the pages and the price list are real design work; the cloud behind them is not. There’s no console to sign in to, and no server to rent.

Back to the site