export const metadata = {
  title: "Tokens - OnlineOrNot API Documentation",
  description:
    "Create, list, verify, and delete API tokens for authentication",
}

## Verify a token   {{ tag: 'GET', label: '/v1/tokens/verify' }}
<Row>
<Col>

### Security: Bearer Auth
Provide your bearer token in the Authorization header when making requests to protected resources.

Example: `Authorization: Bearer 123`

<h3 id="get__v1_tokens_verify-responses">Responses</h3>

|Status|Meaning|Description|
|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|Returns that the given API token is valid|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|Returns an error message if the token is invalid|
|500|[Internal Server Error](https://tools.ietf.org/html/rfc7231#section-6.6.1)|Internal Server Error|

<ResponseSchemas schemas={[{"status":"200","properties":[{"schema":{"type":"object","properties":{"id":{"type":"string","example":"a1b2c3d4","description":"Token ID"},"status":{"type":"string","example":"active","description":"Status"}},"required":["id","status"]},"in":"body","name":"result","depth":1,"type":"object","safeType":"object","required":true,"displayName":"» result"},{"schema":{"type":"string","example":"a1b2c3d4","description":"Token ID"},"in":"body","name":"id","depth":2,"description":"Token ID","type":"string","safeType":"string","required":true,"displayName":"»» id"},{"schema":{"type":"string","example":"active","description":"Status"},"in":"body","name":"status","depth":2,"description":"Status","type":"string","safeType":"string","required":true,"displayName":"»» status"},{"schema":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"in":"body","name":"success","depth":1,"description":"Whether the API call was successful","type":"boolean","safeType":"boolean","required":true,"displayName":"» success"},{"schema":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":"string"}},"required":["code","message"]},"example":[]},"in":"body","name":"errors","depth":1,"type":"array","safeType":"object[]","required":true,"displayName":"» errors"},{"schema":{"type":"number"},"in":"body","name":"code","depth":2,"type":"number","safeType":"number","required":true,"displayName":"»» code"},{"schema":{"type":"string"},"in":"body","name":"message","depth":2,"type":"string","safeType":"string","required":true,"displayName":"»» message"},{"schema":{"type":"string"},"in":"body","name":"type","depth":2,"type":"string","safeType":"string","required":false,"displayName":"»» type"},{"schema":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":"string"}},"required":["code","message"]},"example":[]},"in":"body","name":"messages","depth":1,"type":"array","safeType":"object[]","required":true,"displayName":"» messages"},{"schema":{"type":"number"},"in":"body","name":"code","depth":2,"type":"number","safeType":"number","required":true,"displayName":"»» code"},{"schema":{"type":"string"},"in":"body","name":"message","depth":2,"type":"string","safeType":"string","required":true,"displayName":"»» message"},{"schema":{"type":"string"},"in":"body","name":"type","depth":2,"type":"string","safeType":"string","required":false,"displayName":"»» type"}]},{"status":"401","properties":[{"schema":{"type":"null"},"in":"body","name":"result","depth":1,"type":"null","safeType":"null","required":true,"displayName":"» result"},{"schema":{"type":"boolean","default":false,"example":false,"description":"Whether the API call was successful"},"in":"body","name":"success","depth":1,"description":"Whether the API call was successful","type":"boolean","safeType":"boolean","required":true,"displayName":"» success"},{"schema":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number","example":10001,"description":"Error code"},"message":{"type":"string","example":"This API Token is invalid","description":"A message to describe the error"}},"required":["code","message"]}},"in":"body","name":"errors","depth":1,"type":"array","safeType":"object[]","required":true,"displayName":"» errors"},{"schema":{"type":"number","example":10001,"description":"Error code"},"in":"body","name":"code","depth":2,"description":"Error code","type":"number","safeType":"number","required":true,"displayName":"»» code"},{"schema":{"type":"string","example":"This API Token is invalid","description":"A message to describe the error"},"in":"body","name":"message","depth":2,"description":"A message to describe the error","type":"string","safeType":"string","required":true,"displayName":"»» message"},{"schema":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":"string"}},"required":["code","message"]},"example":[]},"in":"body","name":"messages","depth":1,"type":"array","safeType":"object[]","required":true,"displayName":"» messages"},{"schema":{"type":"number"},"in":"body","name":"code","depth":2,"type":"number","safeType":"number","required":true,"displayName":"»» code"},{"schema":{"type":"string"},"in":"body","name":"message","depth":2,"type":"string","safeType":"string","required":true,"displayName":"»» message"},{"schema":{"type":"string"},"in":"body","name":"type","depth":2,"type":"string","safeType":"string","required":false,"displayName":"»» type"}]}]} />

</Col>

<Col sticky>

<CodeGroup title="Request" tag="GET" label="/v1/tokens/verify">
```bash {{ title: 'cURL' }}
curl --request GET \
  --url https://api.onlineornot.com/v1/tokens/verify \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer {access-token}'
```

```javascript
fetch("https://api.onlineornot.com/v1/tokens/verify", {
  "method": "GET",
  "headers": {
    "Accept": "application/json",
    "Authorization": "Bearer {access-token}"
  }
})
.then(response => {
  console.log(response);
})
.catch(err => {
  console.error(err);
});
```

```java
OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.onlineornot.com/v1/tokens/verify")
  .get()
  .addHeader("Accept", "application/json")
  .addHeader("Authorization", "Bearer {access-token}")
  .build();

Response response = client.newCall(request).execute();
```

```php
<?php

$request = new HttpRequest();
$request->setUrl('https://api.onlineornot.com/v1/tokens/verify');
$request->setMethod(HTTP_METH_GET);

$request->setHeaders([
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
]);

try {
  $response = $request->send();

  echo $response->getBody();
} catch (HttpException $ex) {
  echo $ex;
}
```

```ruby
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://api.onlineornot.com/v1/tokens/verify")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(url)
request["Accept"] = 'application/json'
request["Authorization"] = 'Bearer {access-token}'

response = http.request(request)
puts response.read_body
```

```python
import requests

url = "https://api.onlineornot.com/v1/tokens/verify"

headers = {
    "Accept": "application/json",
    "Authorization": "Bearer {access-token}"
}

response = requests.request("GET", url, headers=headers)

print(response.text)
```

</CodeGroup>

```json {{ title: 'Response' }}
{
  "result": {
    "id": "a1b2c3d4",
    "status": "active"
  },
  "success": true,
  "errors": [],
  "messages": []
}
```

</Col>
</Row>

---

## Retrieve a token's permissions   {{ tag: 'GET', label: '/v1/tokens/permissions' }}
<Row>
<Col>

### Security: Bearer Auth
Provide your bearer token in the Authorization header when making requests to protected resources.

Example: `Authorization: Bearer 123`

<h3 id="get__v1_tokens_permissions-responses">Responses</h3>

|Status|Meaning|Description|
|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|Returns the permissions of a given API token|
|500|[Internal Server Error](https://tools.ietf.org/html/rfc7231#section-6.6.1)|Internal Server Error|

<ResponseSchemas schemas={[{"status":"200","properties":[{"schema":{"type":"object","properties":{"permissions":{"type":"array","items":{"type":"string","example":"uptime_checks (read)","description":"One of the token's permissions"}}},"required":["permissions"]},"in":"body","name":"result","depth":1,"type":"object","safeType":"object","required":true,"displayName":"» result"},{"schema":{"type":"array","items":{"type":"string","example":"uptime_checks (read)","description":"One of the token's permissions"}},"in":"body","name":"permissions","depth":2,"type":"array","safeType":"string[]","required":true,"displayName":"»» permissions"},{"schema":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"in":"body","name":"success","depth":1,"description":"Whether the API call was successful","type":"boolean","safeType":"boolean","required":true,"displayName":"» success"},{"schema":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":"string"}},"required":["code","message"]},"example":[]},"in":"body","name":"errors","depth":1,"type":"array","safeType":"object[]","required":true,"displayName":"» errors"},{"schema":{"type":"number"},"in":"body","name":"code","depth":2,"type":"number","safeType":"number","required":true,"displayName":"»» code"},{"schema":{"type":"string"},"in":"body","name":"message","depth":2,"type":"string","safeType":"string","required":true,"displayName":"»» message"},{"schema":{"type":"string"},"in":"body","name":"type","depth":2,"type":"string","safeType":"string","required":false,"displayName":"»» type"},{"schema":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":"string"}},"required":["code","message"]},"example":[]},"in":"body","name":"messages","depth":1,"type":"array","safeType":"object[]","required":true,"displayName":"» messages"},{"schema":{"type":"number"},"in":"body","name":"code","depth":2,"type":"number","safeType":"number","required":true,"displayName":"»» code"},{"schema":{"type":"string"},"in":"body","name":"message","depth":2,"type":"string","safeType":"string","required":true,"displayName":"»» message"},{"schema":{"type":"string"},"in":"body","name":"type","depth":2,"type":"string","safeType":"string","required":false,"displayName":"»» type"}]}]} />

</Col>

<Col sticky>

<CodeGroup title="Request" tag="GET" label="/v1/tokens/permissions">
```bash {{ title: 'cURL' }}
curl --request GET \
  --url https://api.onlineornot.com/v1/tokens/permissions \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer {access-token}'
```

```javascript
fetch("https://api.onlineornot.com/v1/tokens/permissions", {
  "method": "GET",
  "headers": {
    "Accept": "application/json",
    "Authorization": "Bearer {access-token}"
  }
})
.then(response => {
  console.log(response);
})
.catch(err => {
  console.error(err);
});
```

```java
OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.onlineornot.com/v1/tokens/permissions")
  .get()
  .addHeader("Accept", "application/json")
  .addHeader("Authorization", "Bearer {access-token}")
  .build();

Response response = client.newCall(request).execute();
```

```php
<?php

$request = new HttpRequest();
$request->setUrl('https://api.onlineornot.com/v1/tokens/permissions');
$request->setMethod(HTTP_METH_GET);

$request->setHeaders([
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
]);

try {
  $response = $request->send();

  echo $response->getBody();
} catch (HttpException $ex) {
  echo $ex;
}
```

```ruby
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://api.onlineornot.com/v1/tokens/permissions")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(url)
request["Accept"] = 'application/json'
request["Authorization"] = 'Bearer {access-token}'

response = http.request(request)
puts response.read_body
```

```python
import requests

url = "https://api.onlineornot.com/v1/tokens/permissions"

headers = {
    "Accept": "application/json",
    "Authorization": "Bearer {access-token}"
}

response = requests.request("GET", url, headers=headers)

print(response.text)
```

</CodeGroup>

```json {{ title: 'Response' }}
{
  "result": {
    "permissions": [
      "uptime_checks (read)"
    ]
  },
  "success": true,
  "errors": [],
  "messages": []
}
```

</Col>
</Row>

---

## List all API tokens   {{ tag: 'GET', label: '/v1/tokens' }}
<Row>
<Col>

<a id="opIdlistTokens"></a>

*Retrieve a paginated list of all API tokens for the organization*

### Security: Bearer Auth
Provide your bearer token in the Authorization header when making requests to protected resources.

Example: `Authorization: Bearer 123`

<ParameterTree parameters={[{"schema":{"type":"string","default":"1","example":1,"description":"Page number of paginated results."},"required":false,"description":"Page number of paginated results.","name":"page","in":"query","exampleValues":{"object":1,"json":"'1'"},"originalType":"string","safeType":"string","shortDesc":"Page number of paginated results.","style":"form"},{"schema":{"type":"string","default":"20","example":20,"description":"Number of items per page."},"required":false,"description":"Number of items per page.","name":"per_page","in":"query","exampleValues":{"object":20,"json":"'20'"},"originalType":"string","safeType":"string","shortDesc":"Number of items per page.","style":"form"},{"schema":{"type":"string","example":"example","description":"Search term to filter results."},"required":false,"description":"Search term to filter results.","name":"search","in":"query","exampleValues":{"object":"example","json":"'example'"},"originalType":"string","safeType":"string","shortDesc":"Search term to filter results.","style":"form"}]} title="Query parameters" />

<h3 id="retrieve-a-paginated-list-of-all-api-tokens-for-the-organization-responses">Responses</h3>

|Status|Meaning|Description|
|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|Returns a list of API tokens|
|500|[Internal Server Error](https://tools.ietf.org/html/rfc7231#section-6.6.1)|Internal Server Error|

<ResponseSchemas schemas={[{"status":"200","properties":[{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"a1b2c3d4","description":"Token ID"},"name":{"type":"string","example":"My API Token","description":"Token name"},"expiresAfter":{"type":"string","example":"2025-12-31T23:59:59.000Z","description":"Token expiration date"},"createdAt":{"type":"string","example":"2024-01-15T10:30:00.000Z","description":"Token creation date"},"grants":{"type":"array","items":{"type":"object","properties":{"scope":{"type":"string","enum":["UPTIME_CHECKS","STATUS_PAGES","HEARTBEAT_CHECKS","MAINTENANCE_WINDOWS","PEOPLE","INTEGRATIONS","API_TOKENS","WEBHOOKS"]},"permission":{"type":"string","enum":["READ","EDIT"]}},"required":["scope","permission"]},"description":"List of grants (scope and permission pairs) assigned to this token"}},"required":["id","name","expiresAfter","createdAt","grants"]}},"in":"body","name":"result","depth":1,"type":"array","safeType":"object[]","required":true,"displayName":"» result"},{"schema":{"type":"string","example":"a1b2c3d4","description":"Token ID"},"in":"body","name":"id","depth":2,"description":"Token ID","type":"string","safeType":"string","required":true,"displayName":"»» id"},{"schema":{"type":"string","example":"My API Token","description":"Token name"},"in":"body","name":"name","depth":2,"description":"Token name","type":"string","safeType":"string","required":true,"displayName":"»» name"},{"schema":{"type":"string","example":"2025-12-31T23:59:59.000Z","description":"Token expiration date"},"in":"body","name":"expiresAfter","depth":2,"description":"Token expiration date","type":"string","safeType":"string","required":true,"displayName":"»» expiresAfter"},{"schema":{"type":"string","example":"2024-01-15T10:30:00.000Z","description":"Token creation date"},"in":"body","name":"createdAt","depth":2,"description":"Token creation date","type":"string","safeType":"string","required":true,"displayName":"»» createdAt"},{"schema":{"type":"array","items":{"type":"object","properties":{"scope":{"type":"string","enum":["UPTIME_CHECKS","STATUS_PAGES","HEARTBEAT_CHECKS","MAINTENANCE_WINDOWS","PEOPLE","INTEGRATIONS","API_TOKENS","WEBHOOKS"]},"permission":{"type":"string","enum":["READ","EDIT"]}},"required":["scope","permission"]},"description":"List of grants (scope and permission pairs) assigned to this token"},"in":"body","name":"grants","depth":2,"description":"List of grants (scope and permission pairs) assigned to this token","type":"array","safeType":"object[]","required":true,"displayName":"»» grants"},{"schema":{"type":"string","enum":["UPTIME_CHECKS","STATUS_PAGES","HEARTBEAT_CHECKS","MAINTENANCE_WINDOWS","PEOPLE","INTEGRATIONS","API_TOKENS","WEBHOOKS"]},"in":"body","name":"scope","depth":3,"type":"string","safeType":"string","required":true,"displayName":"»»» scope"},{"schema":{"type":"string","enum":["READ","EDIT"]},"in":"body","name":"permission","depth":3,"type":"string","safeType":"string","required":true,"displayName":"»»» permission"},{"schema":{"type":"object","properties":{"page":{"type":"number","default":1,"example":1,"description":"Page number of paginated results."},"per_page":{"type":"number","default":20,"example":20,"description":"Number of items per page."},"count":{"type":"number","example":1,"description":"Number of items on the current page."},"total_count":{"type":"number","example":1,"description":"Total number of items."}},"required":["count","total_count"]},"in":"body","name":"result_info","depth":1,"type":"object","safeType":"object","required":true,"displayName":"» result_info"},{"schema":{"type":"number","default":1,"example":1,"description":"Page number of paginated results."},"in":"body","name":"page","depth":2,"description":"Page number of paginated results.","type":"number","safeType":"number","required":false,"displayName":"»» page"},{"schema":{"type":"number","default":20,"example":20,"description":"Number of items per page."},"in":"body","name":"per_page","depth":2,"description":"Number of items per page.","type":"number","safeType":"number","required":false,"displayName":"»» per_page"},{"schema":{"type":"number","example":1,"description":"Number of items on the current page."},"in":"body","name":"count","depth":2,"description":"Number of items on the current page.","type":"number","safeType":"number","required":true,"displayName":"»» count"},{"schema":{"type":"number","example":1,"description":"Total number of items."},"in":"body","name":"total_count","depth":2,"description":"Total number of items.","type":"number","safeType":"number","required":true,"displayName":"»» total_count"},{"schema":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"in":"body","name":"success","depth":1,"description":"Whether the API call was successful","type":"boolean","safeType":"boolean","required":true,"displayName":"» success"},{"schema":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":"string"}},"required":["code","message"]},"example":[]},"in":"body","name":"errors","depth":1,"type":"array","safeType":"object[]","required":true,"displayName":"» errors"},{"schema":{"type":"number"},"in":"body","name":"code","depth":2,"type":"number","safeType":"number","required":true,"displayName":"»» code"},{"schema":{"type":"string"},"in":"body","name":"message","depth":2,"type":"string","safeType":"string","required":true,"displayName":"»» message"},{"schema":{"type":"string"},"in":"body","name":"type","depth":2,"type":"string","safeType":"string","required":false,"displayName":"»» type"},{"schema":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":"string"}},"required":["code","message"]},"example":[]},"in":"body","name":"messages","depth":1,"type":"array","safeType":"object[]","required":true,"displayName":"» messages"},{"schema":{"type":"number"},"in":"body","name":"code","depth":2,"type":"number","safeType":"number","required":true,"displayName":"»» code"},{"schema":{"type":"string"},"in":"body","name":"message","depth":2,"type":"string","safeType":"string","required":true,"displayName":"»» message"},{"schema":{"type":"string"},"in":"body","name":"type","depth":2,"type":"string","safeType":"string","required":false,"displayName":"»» type"}]}]} />

</Col>

<Col sticky>

<CodeGroup title="Request" tag="GET" label="/v1/tokens">
```bash {{ title: 'cURL' }}
curl --request GET \
  --url https://api.onlineornot.com/v1/tokens \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer {access-token}'
```

```javascript
fetch("https://api.onlineornot.com/v1/tokens", {
  "method": "GET",
  "headers": {
    "Accept": "application/json",
    "Authorization": "Bearer {access-token}"
  }
})
.then(response => {
  console.log(response);
})
.catch(err => {
  console.error(err);
});
```

```java
OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.onlineornot.com/v1/tokens")
  .get()
  .addHeader("Accept", "application/json")
  .addHeader("Authorization", "Bearer {access-token}")
  .build();

Response response = client.newCall(request).execute();
```

```php
<?php

$request = new HttpRequest();
$request->setUrl('https://api.onlineornot.com/v1/tokens');
$request->setMethod(HTTP_METH_GET);

$request->setHeaders([
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
]);

try {
  $response = $request->send();

  echo $response->getBody();
} catch (HttpException $ex) {
  echo $ex;
}
```

```ruby
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://api.onlineornot.com/v1/tokens")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(url)
request["Accept"] = 'application/json'
request["Authorization"] = 'Bearer {access-token}'

response = http.request(request)
puts response.read_body
```

```python
import requests

url = "https://api.onlineornot.com/v1/tokens"

headers = {
    "Accept": "application/json",
    "Authorization": "Bearer {access-token}"
}

response = requests.request("GET", url, headers=headers)

print(response.text)
```

</CodeGroup>

```json {{ title: 'Response' }}
{
  "result": [
    {
      "id": "a1b2c3d4",
      "name": "My API Token",
      "expiresAfter": "2025-12-31T23:59:59.000Z",
      "createdAt": "2024-01-15T10:30:00.000Z",
      "grants": [
        {
          "scope": "UPTIME_CHECKS",
          "permission": "READ"
        }
      ]
    }
  ],
  "result_info": {
    "page": 1,
    "per_page": 20,
    "count": 1,
    "total_count": 1
  },
  "success": true,
  "errors": [],
  "messages": []
}
```

</Col>
</Row>

---

## Create an API token   {{ tag: 'POST', label: '/v1/tokens' }}
<Row>
<Col>

<a id="opIdcreateToken"></a>

*Create a new API token for the organization*

### Security: Bearer Auth
Provide your bearer token in the Authorization header when making requests to protected resources.

Example: `Authorization: Bearer 123`

<ParameterTree parameters={[{"in":"body","schema":{"type":"object","properties":{"name":{"type":"string","example":"My API Token","description":"Token name"},"grants":{"type":"array","items":{"type":"object","properties":{"scope":{"type":"string","enum":["UPTIME_CHECKS","STATUS_PAGES","HEARTBEAT_CHECKS","MAINTENANCE_WINDOWS","PEOPLE","INTEGRATIONS","API_TOKENS","WEBHOOKS"]},"permission":{"type":"string","enum":["READ","EDIT"]}},"required":["scope","permission"]},"example":[{"scope":"UPTIME_CHECKS","permission":"READ"}],"description":"List of grants (scope and permission pairs) for the token"},"expiresAt":{"type":["string","null"],"format":"date-time","example":"2025-12-31T23:59:59.000Z","description":"Custom expiration date for the token. If not provided, defaults to 365 days from now. Set to null for no expiration."}},"required":["name","grants"]},"name":"body","required":true,"exampleValues":{"object":{"name":"My API Token","grants":[{"scope":"UPTIME_CHECKS","permission":"READ"}],"expiresAt":"2025-12-31T23:59:59.000Z"},"json":"{\n  \"name\": \"My API Token\",\n  \"grants\": [\n    {\n      \"scope\": \"UPTIME_CHECKS\",\n      \"permission\": \"READ\"\n    }\n  ],\n  \"expiresAt\": \"2025-12-31T23:59:59.000Z\"\n}"},"originalType":"object","safeType":"object"},{"in":"body","schema":{"type":"string","example":"My API Token","description":"Token name"},"name":"» name","required":true,"description":"Token name","safeType":"string","depth":1,"exampleValues":{"object":"My API Token","json":"'My API Token'"},"shortDesc":"Token name"},{"in":"body","schema":{"type":"array","items":{"type":"object","properties":{"scope":{"type":"string","enum":["UPTIME_CHECKS","STATUS_PAGES","HEARTBEAT_CHECKS","MAINTENANCE_WINDOWS","PEOPLE","INTEGRATIONS","API_TOKENS","WEBHOOKS"]},"permission":{"type":"string","enum":["READ","EDIT"]}},"required":["scope","permission"]},"example":[{"scope":"UPTIME_CHECKS","permission":"READ"}],"description":"List of grants (scope and permission pairs) for the token"},"name":"» grants","required":true,"description":"List of grants (scope and permission pairs) for the token","safeType":"object[]","depth":1,"exampleValues":{"object":[{"scope":"UPTIME_CHECKS","permission":"READ"}],"json":"[\n  {\n    \"scope\": \"UPTIME_CHECKS\",\n    \"permission\": \"READ\"\n  }\n]"},"shortDesc":"List of grants (scope and permission pairs) for the token"},{"in":"body","schema":{"type":"string","enum":["UPTIME_CHECKS","STATUS_PAGES","HEARTBEAT_CHECKS","MAINTENANCE_WINDOWS","PEOPLE","INTEGRATIONS","API_TOKENS","WEBHOOKS"]},"name":"»» scope","required":true,"safeType":"string","depth":2,"exampleValues":{"object":"UPTIME_CHECKS","json":"'UPTIME_CHECKS'"}},{"in":"body","schema":{"type":"string","enum":["READ","EDIT"]},"name":"»» permission","required":true,"safeType":"string","depth":2,"exampleValues":{"object":"READ","json":"'READ'"}},{"in":"body","schema":{"type":["string","null"],"format":"date-time","example":"2025-12-31T23:59:59.000Z","description":"Custom expiration date for the token. If not provided, defaults to 365 days from now. Set to null for no expiration."},"name":"» expiresAt","required":false,"description":"Custom expiration date for the token. If not provided, defaults to 365 days from now. Set to null for no expiration.","safeType":"string,null(date-time)","depth":1,"exampleValues":{"object":"2025-12-31T23:59:59.000Z","json":"'2025-12-31T23:59:59.000Z'"},"shortDesc":"Custom expiration date for the token. If not provided, defaults to 365 days from now. Set to null for no expiration."}]} title="Body parameters" />

<h3 id="create-a-new-api-token-for-the-organization-responses">Responses</h3>

|Status|Meaning|Description|
|---|---|---|
|201|[Created](https://tools.ietf.org/html/rfc7231#section-6.3.2)|Create a new API token|
|500|[Internal Server Error](https://tools.ietf.org/html/rfc7231#section-6.6.1)|Internal Server Error|

<ResponseSchemas schemas={[{"status":"201","properties":[{"schema":{"type":"object","properties":{"id":{"type":"string","example":"a1b2c3d4","description":"Token ID"},"name":{"type":"string","example":"My API Token","description":"Token name"},"expiresAfter":{"type":"string","example":"2025-12-31T23:59:59.000Z","description":"Token expiration date"},"createdAt":{"type":"string","example":"2024-01-15T10:30:00.000Z","description":"Token creation date"},"token":{"type":"string","example":"abc123def456ghi789jkl012mno345pqrs678tuv","description":"The actual token string (only shown once on creation)"}},"required":["id","name","expiresAfter","createdAt","token"]},"in":"body","name":"result","depth":1,"type":"object","safeType":"object","required":true,"displayName":"» result"},{"schema":{"type":"string","example":"a1b2c3d4","description":"Token ID"},"in":"body","name":"id","depth":2,"description":"Token ID","type":"string","safeType":"string","required":true,"displayName":"»» id"},{"schema":{"type":"string","example":"My API Token","description":"Token name"},"in":"body","name":"name","depth":2,"description":"Token name","type":"string","safeType":"string","required":true,"displayName":"»» name"},{"schema":{"type":"string","example":"2025-12-31T23:59:59.000Z","description":"Token expiration date"},"in":"body","name":"expiresAfter","depth":2,"description":"Token expiration date","type":"string","safeType":"string","required":true,"displayName":"»» expiresAfter"},{"schema":{"type":"string","example":"2024-01-15T10:30:00.000Z","description":"Token creation date"},"in":"body","name":"createdAt","depth":2,"description":"Token creation date","type":"string","safeType":"string","required":true,"displayName":"»» createdAt"},{"schema":{"type":"string","example":"abc123def456ghi789jkl012mno345pqrs678tuv","description":"The actual token string (only shown once on creation)"},"in":"body","name":"token","depth":2,"description":"The actual token string (only shown once on creation)","type":"string","safeType":"string","required":true,"displayName":"»» token"},{"schema":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"in":"body","name":"success","depth":1,"description":"Whether the API call was successful","type":"boolean","safeType":"boolean","required":true,"displayName":"» success"},{"schema":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":"string"}},"required":["code","message"]},"example":[]},"in":"body","name":"errors","depth":1,"type":"array","safeType":"object[]","required":true,"displayName":"» errors"},{"schema":{"type":"number"},"in":"body","name":"code","depth":2,"type":"number","safeType":"number","required":true,"displayName":"»» code"},{"schema":{"type":"string"},"in":"body","name":"message","depth":2,"type":"string","safeType":"string","required":true,"displayName":"»» message"},{"schema":{"type":"string"},"in":"body","name":"type","depth":2,"type":"string","safeType":"string","required":false,"displayName":"»» type"},{"schema":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":"string"}},"required":["code","message"]},"example":[]},"in":"body","name":"messages","depth":1,"type":"array","safeType":"object[]","required":true,"displayName":"» messages"},{"schema":{"type":"number"},"in":"body","name":"code","depth":2,"type":"number","safeType":"number","required":true,"displayName":"»» code"},{"schema":{"type":"string"},"in":"body","name":"message","depth":2,"type":"string","safeType":"string","required":true,"displayName":"»» message"},{"schema":{"type":"string"},"in":"body","name":"type","depth":2,"type":"string","safeType":"string","required":false,"displayName":"»» type"}]}]} />

</Col>

<Col sticky>

<CodeGroup title="Request" tag="POST" label="/v1/tokens">
```bash {{ title: 'cURL' }}
curl --request POST \
  --url https://api.onlineornot.com/v1/tokens \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer {access-token}' \
  --header 'Content-Type: application/json' \
  --data '{"name":"My API Token","permissions":[{"permission":"UPTIME_CHECKS","permissionLevel":"READ"}]}'
```

```javascript
fetch("https://api.onlineornot.com/v1/tokens", {
  "method": "POST",
  "headers": {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {access-token}"
  },
  "body": "{\"name\":\"My API Token\",\"permissions\":[{\"permission\":\"UPTIME_CHECKS\",\"permissionLevel\":\"READ\"}]}"
})
.then(response => {
  console.log(response);
})
.catch(err => {
  console.error(err);
});
```

```java
OkHttpClient client = new OkHttpClient();

MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"name\":\"My API Token\",\"permissions\":[{\"permission\":\"UPTIME_CHECKS\",\"permissionLevel\":\"READ\"}]}");
Request request = new Request.Builder()
  .url("https://api.onlineornot.com/v1/tokens")
  .post(body)
  .addHeader("Content-Type", "application/json")
  .addHeader("Accept", "application/json")
  .addHeader("Authorization", "Bearer {access-token}")
  .build();

Response response = client.newCall(request).execute();
```

```php
<?php

$request = new HttpRequest();
$request->setUrl('https://api.onlineornot.com/v1/tokens');
$request->setMethod(HTTP_METH_POST);

$request->setHeaders([
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
]);

$request->setBody('{"name":"My API Token","permissions":[{"permission":"UPTIME_CHECKS","permissionLevel":"READ"}]}');

try {
  $response = $request->send();

  echo $response->getBody();
} catch (HttpException $ex) {
  echo $ex;
}
```

```ruby
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://api.onlineornot.com/v1/tokens")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request["Accept"] = 'application/json'
request["Authorization"] = 'Bearer {access-token}'
request.body = "{\"name\":\"My API Token\",\"permissions\":[{\"permission\":\"UPTIME_CHECKS\",\"permissionLevel\":\"READ\"}]}"

response = http.request(request)
puts response.read_body
```

```python
import requests

url = "https://api.onlineornot.com/v1/tokens"

payload = {
    "name": "My API Token",
    "permissions": [
        {
            "permission": "UPTIME_CHECKS",
            "permissionLevel": "READ"
        }
    ]
}
headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {access-token}"
}

response = requests.request("POST", url, json=payload, headers=headers)

print(response.text)
```

</CodeGroup>

```json {{ title: 'Response' }}
{
  "result": {
    "id": "a1b2c3d4",
    "name": "My API Token",
    "expiresAfter": "2025-12-31T23:59:59.000Z",
    "createdAt": "2024-01-15T10:30:00.000Z",
    "token": "abc123def456ghi789jkl012mno345pqrs678tuv"
  },
  "success": true,
  "errors": [],
  "messages": []
}
```

</Col>
</Row>

---

## Retrieve an API token   {{ tag: 'GET', label: '/v1/tokens/{token_id}' }}
<Row>
<Col>

<a id="opIdgetToken"></a>

*Look up detailed information about a specific API token*

### Security: Bearer Auth
Provide your bearer token in the Authorization header when making requests to protected resources.

Example: `Authorization: Bearer 123`

<ParameterTree parameters={[{"schema":{"type":"string","example":"a1b2c3d4","description":"The token ID"},"required":true,"description":"The token ID","name":"token_id","in":"path","exampleValues":{"object":"a1b2c3d4","json":"'a1b2c3d4'"},"originalType":"string","safeType":"string","shortDesc":"The token ID","style":"simple"}]} title="Path parameters" />

<h3 id="look-up-detailed-information-about-a-specific-api-token-responses">Responses</h3>

|Status|Meaning|Description|
|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|Retrieve the specified API token|
|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|Token not found|
|500|[Internal Server Error](https://tools.ietf.org/html/rfc7231#section-6.6.1)|Internal Server Error|

<ResponseSchemas schemas={[{"status":"200","properties":[{"schema":{"type":"object","properties":{"id":{"type":"string","example":"a1b2c3d4","description":"Token ID"},"name":{"type":"string","example":"My API Token","description":"Token name"},"expiresAfter":{"type":"string","example":"2025-12-31T23:59:59.000Z","description":"Token expiration date"},"createdAt":{"type":"string","example":"2024-01-15T10:30:00.000Z","description":"Token creation date"},"grants":{"type":"array","items":{"type":"object","properties":{"scope":{"type":"string","enum":["UPTIME_CHECKS","STATUS_PAGES","HEARTBEAT_CHECKS","MAINTENANCE_WINDOWS","PEOPLE","INTEGRATIONS","API_TOKENS","WEBHOOKS"]},"permission":{"type":"string","enum":["READ","EDIT"]}},"required":["scope","permission"]},"description":"List of grants (scope and permission pairs) assigned to this token"}},"required":["id","name","expiresAfter","createdAt","grants"]},"in":"body","name":"result","depth":1,"type":"object","safeType":"object","required":true,"displayName":"» result"},{"schema":{"type":"string","example":"a1b2c3d4","description":"Token ID"},"in":"body","name":"id","depth":2,"description":"Token ID","type":"string","safeType":"string","required":true,"displayName":"»» id"},{"schema":{"type":"string","example":"My API Token","description":"Token name"},"in":"body","name":"name","depth":2,"description":"Token name","type":"string","safeType":"string","required":true,"displayName":"»» name"},{"schema":{"type":"string","example":"2025-12-31T23:59:59.000Z","description":"Token expiration date"},"in":"body","name":"expiresAfter","depth":2,"description":"Token expiration date","type":"string","safeType":"string","required":true,"displayName":"»» expiresAfter"},{"schema":{"type":"string","example":"2024-01-15T10:30:00.000Z","description":"Token creation date"},"in":"body","name":"createdAt","depth":2,"description":"Token creation date","type":"string","safeType":"string","required":true,"displayName":"»» createdAt"},{"schema":{"type":"array","items":{"type":"object","properties":{"scope":{"type":"string","enum":["UPTIME_CHECKS","STATUS_PAGES","HEARTBEAT_CHECKS","MAINTENANCE_WINDOWS","PEOPLE","INTEGRATIONS","API_TOKENS","WEBHOOKS"]},"permission":{"type":"string","enum":["READ","EDIT"]}},"required":["scope","permission"]},"description":"List of grants (scope and permission pairs) assigned to this token"},"in":"body","name":"grants","depth":2,"description":"List of grants (scope and permission pairs) assigned to this token","type":"array","safeType":"object[]","required":true,"displayName":"»» grants"},{"schema":{"type":"string","enum":["UPTIME_CHECKS","STATUS_PAGES","HEARTBEAT_CHECKS","MAINTENANCE_WINDOWS","PEOPLE","INTEGRATIONS","API_TOKENS","WEBHOOKS"]},"in":"body","name":"scope","depth":3,"type":"string","safeType":"string","required":true,"displayName":"»»» scope"},{"schema":{"type":"string","enum":["READ","EDIT"]},"in":"body","name":"permission","depth":3,"type":"string","safeType":"string","required":true,"displayName":"»»» permission"},{"schema":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"in":"body","name":"success","depth":1,"description":"Whether the API call was successful","type":"boolean","safeType":"boolean","required":true,"displayName":"» success"},{"schema":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":"string"}},"required":["code","message"]},"example":[]},"in":"body","name":"errors","depth":1,"type":"array","safeType":"object[]","required":true,"displayName":"» errors"},{"schema":{"type":"number"},"in":"body","name":"code","depth":2,"type":"number","safeType":"number","required":true,"displayName":"»» code"},{"schema":{"type":"string"},"in":"body","name":"message","depth":2,"type":"string","safeType":"string","required":true,"displayName":"»» message"},{"schema":{"type":"string"},"in":"body","name":"type","depth":2,"type":"string","safeType":"string","required":false,"displayName":"»» type"},{"schema":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":"string"}},"required":["code","message"]},"example":[]},"in":"body","name":"messages","depth":1,"type":"array","safeType":"object[]","required":true,"displayName":"» messages"},{"schema":{"type":"number"},"in":"body","name":"code","depth":2,"type":"number","safeType":"number","required":true,"displayName":"»» code"},{"schema":{"type":"string"},"in":"body","name":"message","depth":2,"type":"string","safeType":"string","required":true,"displayName":"»» message"},{"schema":{"type":"string"},"in":"body","name":"type","depth":2,"type":"string","safeType":"string","required":false,"displayName":"»» type"}]}]} />

</Col>

<Col sticky>

<CodeGroup title="Request" tag="GET" label="/v1/tokens/{token_id}">
```bash {{ title: 'cURL' }}
curl --request GET \
  --url https://api.onlineornot.com/v1/tokens/a1b2c3d4 \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer {access-token}'
```

```javascript
fetch("https://api.onlineornot.com/v1/tokens/a1b2c3d4", {
  "method": "GET",
  "headers": {
    "Accept": "application/json",
    "Authorization": "Bearer {access-token}"
  }
})
.then(response => {
  console.log(response);
})
.catch(err => {
  console.error(err);
});
```

```java
OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.onlineornot.com/v1/tokens/a1b2c3d4")
  .get()
  .addHeader("Accept", "application/json")
  .addHeader("Authorization", "Bearer {access-token}")
  .build();

Response response = client.newCall(request).execute();
```

```php
<?php

$request = new HttpRequest();
$request->setUrl('https://api.onlineornot.com/v1/tokens/a1b2c3d4');
$request->setMethod(HTTP_METH_GET);

$request->setHeaders([
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
]);

try {
  $response = $request->send();

  echo $response->getBody();
} catch (HttpException $ex) {
  echo $ex;
}
```

```ruby
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://api.onlineornot.com/v1/tokens/a1b2c3d4")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(url)
request["Accept"] = 'application/json'
request["Authorization"] = 'Bearer {access-token}'

response = http.request(request)
puts response.read_body
```

```python
import requests

url = "https://api.onlineornot.com/v1/tokens/a1b2c3d4"

headers = {
    "Accept": "application/json",
    "Authorization": "Bearer {access-token}"
}

response = requests.request("GET", url, headers=headers)

print(response.text)
```

</CodeGroup>

```json {{ title: 'Response' }}
{
  "result": {
    "id": "a1b2c3d4",
    "name": "My API Token",
    "expiresAfter": "2025-12-31T23:59:59.000Z",
    "createdAt": "2024-01-15T10:30:00.000Z",
    "grants": [
      {
        "scope": "UPTIME_CHECKS",
        "permission": "READ"
      }
    ]
  },
  "success": true,
  "errors": [],
  "messages": []
}
```

</Col>
</Row>

---

## Delete an API token   {{ tag: 'DELETE', label: '/v1/tokens/{token_id}' }}
<Row>
<Col>

<a id="opIddeleteToken"></a>

*Permanently delete an API token*

### Security: Bearer Auth
Provide your bearer token in the Authorization header when making requests to protected resources.

Example: `Authorization: Bearer 123`

<ParameterTree parameters={[{"schema":{"type":"string","example":"a1b2c3d4","description":"The token ID"},"required":true,"description":"The token ID","name":"token_id","in":"path","exampleValues":{"object":"a1b2c3d4","json":"'a1b2c3d4'"},"originalType":"string","safeType":"string","shortDesc":"The token ID","style":"simple"}]} title="Path parameters" />

<h3 id="permanently-delete-an-api-token-responses">Responses</h3>

|Status|Meaning|Description|
|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|Delete the specified API token|
|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|Token not found|
|500|[Internal Server Error](https://tools.ietf.org/html/rfc7231#section-6.6.1)|Internal Server Error|

<ResponseSchemas schemas={[{"status":"200","properties":[{"schema":{"type":"object","properties":{"deleted":{"type":"boolean"}},"required":["deleted"]},"in":"body","name":"result","depth":1,"type":"object","safeType":"object","required":true,"displayName":"» result"},{"schema":{"type":"boolean"},"in":"body","name":"deleted","depth":2,"type":"boolean","safeType":"boolean","required":true,"displayName":"»» deleted"},{"schema":{"type":"boolean","default":true,"example":true,"description":"Whether the API call was successful"},"in":"body","name":"success","depth":1,"description":"Whether the API call was successful","type":"boolean","safeType":"boolean","required":true,"displayName":"» success"},{"schema":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":"string"}},"required":["code","message"]},"example":[]},"in":"body","name":"errors","depth":1,"type":"array","safeType":"object[]","required":true,"displayName":"» errors"},{"schema":{"type":"number"},"in":"body","name":"code","depth":2,"type":"number","safeType":"number","required":true,"displayName":"»» code"},{"schema":{"type":"string"},"in":"body","name":"message","depth":2,"type":"string","safeType":"string","required":true,"displayName":"»» message"},{"schema":{"type":"string"},"in":"body","name":"type","depth":2,"type":"string","safeType":"string","required":false,"displayName":"»» type"},{"schema":{"type":"array","items":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"type":{"type":"string"}},"required":["code","message"]},"example":[]},"in":"body","name":"messages","depth":1,"type":"array","safeType":"object[]","required":true,"displayName":"» messages"},{"schema":{"type":"number"},"in":"body","name":"code","depth":2,"type":"number","safeType":"number","required":true,"displayName":"»» code"},{"schema":{"type":"string"},"in":"body","name":"message","depth":2,"type":"string","safeType":"string","required":true,"displayName":"»» message"},{"schema":{"type":"string"},"in":"body","name":"type","depth":2,"type":"string","safeType":"string","required":false,"displayName":"»» type"}]}]} />

</Col>

<Col sticky>

<CodeGroup title="Request" tag="DELETE" label="/v1/tokens/{token_id}">
```bash {{ title: 'cURL' }}
curl --request DELETE \
  --url https://api.onlineornot.com/v1/tokens/a1b2c3d4 \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer {access-token}'
```

```javascript
fetch("https://api.onlineornot.com/v1/tokens/a1b2c3d4", {
  "method": "DELETE",
  "headers": {
    "Accept": "application/json",
    "Authorization": "Bearer {access-token}"
  }
})
.then(response => {
  console.log(response);
})
.catch(err => {
  console.error(err);
});
```

```java
OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.onlineornot.com/v1/tokens/a1b2c3d4")
  .delete(null)
  .addHeader("Accept", "application/json")
  .addHeader("Authorization", "Bearer {access-token}")
  .build();

Response response = client.newCall(request).execute();
```

```php
<?php

$request = new HttpRequest();
$request->setUrl('https://api.onlineornot.com/v1/tokens/a1b2c3d4');
$request->setMethod(HTTP_METH_DELETE);

$request->setHeaders([
  'Accept' => 'application/json',
  'Authorization' => 'Bearer {access-token}'
]);

try {
  $response = $request->send();

  echo $response->getBody();
} catch (HttpException $ex) {
  echo $ex;
}
```

```ruby
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://api.onlineornot.com/v1/tokens/a1b2c3d4")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Delete.new(url)
request["Accept"] = 'application/json'
request["Authorization"] = 'Bearer {access-token}'

response = http.request(request)
puts response.read_body
```

```python
import requests

url = "https://api.onlineornot.com/v1/tokens/a1b2c3d4"

headers = {
    "Accept": "application/json",
    "Authorization": "Bearer {access-token}"
}

response = requests.request("DELETE", url, headers=headers)

print(response.text)
```

</CodeGroup>

```json {{ title: 'Response' }}
{
  "result": {
    "deleted": true
  },
  "success": true,
  "errors": [],
  "messages": []
}
```

</Col>
</Row>

---

