Get startedRegions and base URLs
Regions and base URLs
Every Coevera space lives in one of four regions. Its base URLs name the region and the space, and the discovery endpoint finds them from the space ID alone.
Answer
Every space lives in one of four regions: us-east, eu-central, ca-central or ap-southeast. Call https://{region}.api.coevera.com/api/v100/rest/spaces/{space_id}, with the host from Show Access › Service URL or from GET /api/discovery/spaces/{space_id}, which needs no credentials. A call to another region's host still works: it is forwarded, only slower.
A space's data stays in the region the customer chose, and its API answers there. Your base URL names that region and the space.
Regions
| Region | Name | Data centre | REST base URL |
|---|---|---|---|
us-east |
US East | Virginia, USA | https:/ |
eu-central |
EU Central | Frankfurt, Germany | https:/ |
ca-central |
CA Central | Toronto, Canada | https:/ |
ap-southeast |
AP Southeast | Sydney, Australia | https:/ |
The data centres are the ones the Coevera security page lists, which also says that customer data is not moved between regions.
Take the host from Service URL in Show Access, or from the discovery endpoint below. Do
not build it by hand from the space ID. Each region's host has the form
{region}.api.coevera.com, the form the discovery endpoint returns.
Base URLs
| What | URL |
|---|---|
| REST | https:/ |
| GraphQL | https:/, POST only: a GET answers 405 |
| OpenAPI for your space | …/. It needs your credentials and is built for your space, with its custom fields and custom entities. |
| Public GraphQL schema | …/, the introspection result as JSON. It needs no credentials. |
| Version | v100, the only API version; see Versioning and deprecation. |
The published contract, without your space's custom fields, is in the REST and GraphQL reference and its downloads.
Find a space's region
The discovery endpoint answers GET /api/discovery/spaces/{space_id}. It needs no credentials,
and each of the four regional hosts answers it for every space, so the request works whichever
region the context bar shows. It returns the space's region and its REST and GraphQL URLs:
DISCOVERY_URL="https://{region}.api.coevera.com/api/discovery/spaces/{space_id}"
# Public: no credentials. Prints the region's host and the space's REST base URL.
curl -sS --fail-with-body "$DISCOVERY_URL" | jq -r '.region_url, .rest.space.endpoint'import process from "node:process";
const discoveryUrl = `https://{region}.api.coevera.com/api/discovery/spaces/{space_id}`;
// Public: no credentials.
const res = await fetch(discoveryUrl);
const space = await res.json();
if (!res.ok) {
console.error(`HTTP ${res.status} ${space.name}: ${space.message}`);
process.exit(1);
}
console.log(space.region_url);
console.log(space.rest.space.endpoint);import os
import sys
import requests
DISCOVERY_URL = "https://{region}.api.coevera.com/api/discovery/spaces/{space_id}"
# Public: no credentials.
response = requests.get(DISCOVERY_URL, timeout=30)
space = response.json()
if not response.ok:
sys.exit(f"HTTP {response.status_code} {space.get('name')}: {space.get('message')}")
print(space["region_url"])
print(space["rest"]["space"]["endpoint"])DISCOVERY_URL="https://{region}.api.coevera.com/api/discovery/spaces/{space_id}"
# Public: no credentials. Prints the region's host and the space's GraphQL endpoint.
curl -sS --fail-with-body "$DISCOVERY_URL" | jq -r '.region_url, .graphql.space.endpoint'import process from "node:process";
const discoveryUrl = `https://{region}.api.coevera.com/api/discovery/spaces/{space_id}`;
// Public: no credentials.
const res = await fetch(discoveryUrl);
const space = await res.json();
if (!res.ok) {
console.error(`HTTP ${res.status} ${space.name}: ${space.message}`);
process.exit(1);
}
console.log(space.region_url);
console.log(space.graphql.space.endpoint);import os
import sys
import requests
DISCOVERY_URL = "https://{region}.api.coevera.com/api/discovery/spaces/{space_id}"
# Public: no credentials.
response = requests.get(DISCOVERY_URL, timeout=30)
space = response.json()
if not response.ok:
sys.exit(f"HTTP {response.status_code} {space.get('name')}: {space.get('message')}")
print(space["region_url"])
print(space["graphql"]["space"]["endpoint"])This is the response for a space in eu-central:
{
"space_id": "nv2_northwind_docs",
"region_url": "https://eu-central.api.coevera.com",
"space_version": 100,
"server_time": "2026-10-15T09:00:00",
"graphql": {
"space": {
"endpoint": "https://eu-central.api.coevera.com/api/v100/app/space/nv2_northwind_docs/graphql/public",
"schema": "https://eu-central.api.coevera.com/api/v100/app/space/nv2_northwind_docs/graphql/public/schema.json"
}
},
"rest": {
"space": {
"endpoint": "https://eu-central.api.coevera.com/api/v100/rest/spaces/nv2_northwind_docs",
"schema": "https://eu-central.api.coevera.com/api/v100/rest/spaces/nv2_northwind_docs/openapi.json"
}
}
}{
"space_id": "nv2_northwind_docs",
"region_url": "https://eu-central.api.coevera.com",
"space_version": 100,
"server_time": "2026-10-15T09:00:00",
"graphql": {
"space": {
"endpoint": "https://eu-central.api.coevera.com/api/v100/app/space/nv2_northwind_docs/graphql/public",
"schema": "https://eu-central.api.coevera.com/api/v100/app/space/nv2_northwind_docs/graphql/public/schema.json"
}
},
"rest": {
"space": {
"endpoint": "https://eu-central.api.coevera.com/api/v100/rest/spaces/nv2_northwind_docs",
"schema": "https://eu-central.api.coevera.com/api/v100/rest/spaces/nv2_northwind_docs/openapi.json"
}
}
}| Field | What it holds |
|---|---|
region_ |
The host of the space's region |
space_ |
100, the platform version of every current space |
server_ |
The server's clock, in UTC |
rest., rest. |
The REST base URL and the space's OpenAPI document |
graphql., graphql. |
The GraphQL endpoint and the public schema |
An unknown space answers 404 with ERROR_NO_ENTITY (code 143). A space that is not on the
current platform answers 400 with ERROR_UNKNOWN_VERSION (code 7).
Ask a coevera.com host: the URLs in the answer use the domain of the host you ask. The
migration page covers the former domain.
Calling the wrong region
It still works, just more slowly
REST and GraphQL calls sent to another region's host are forwarded to the region that holds the
space. The forwarded call answers 200 with the normal body; there is no redirect, and the same
credentials work. Every call takes an extra hop. Set the right region in the context bar and in
your configuration.
How much slower depends on where you call from. From Central Europe, a call to a space in eu-central takes about 0.2 s through its own host, about 1 s through the us-east host and 2.5 to 3.6 s through the ap-southeast host. Use the region the discovery endpoint returns.
Limits
- A space lives in exactly one region, and every URL carries its space ID. There is no API across spaces: a credential works in one space only.
- Read the host from the discovery endpoint or from Show Access; do not hard-code a region per customer.
- The MCP server for AI assistants runs in the United States for every space; see Hosting and your data.