curl --request POST \
--url https://api.monid.ai/v1/api-keys \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"label": "ci-runner",
"scopes": [
"runs:*",
"resources:*",
"wallet:read",
"topups:*",
"controls:read",
"api_keys:*"
],
"expiresAt": "2027-01-01T00:00:00Z"
}
'import requests
url = "https://api.monid.ai/v1/api-keys"
payload = {
"label": "ci-runner",
"scopes": ["runs:*", "resources:*", "wallet:read", "topups:*", "controls:read", "api_keys:*"],
"expiresAt": "2027-01-01T00:00:00Z"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
label: 'ci-runner',
scopes: [
'runs:*',
'resources:*',
'wallet:read',
'topups:*',
'controls:read',
'api_keys:*'
],
expiresAt: '2027-01-01T00:00:00Z'
})
};
fetch('https://api.monid.ai/v1/api-keys', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.monid.ai/v1/api-keys",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'label' => 'ci-runner',
'scopes' => [
'runs:*',
'resources:*',
'wallet:read',
'topups:*',
'controls:read',
'api_keys:*'
],
'expiresAt' => '2027-01-01T00:00:00Z'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.monid.ai/v1/api-keys"
payload := strings.NewReader("{\n \"label\": \"ci-runner\",\n \"scopes\": [\n \"runs:*\",\n \"resources:*\",\n \"wallet:read\",\n \"topups:*\",\n \"controls:read\",\n \"api_keys:*\"\n ],\n \"expiresAt\": \"2027-01-01T00:00:00Z\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.monid.ai/v1/api-keys")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"label\": \"ci-runner\",\n \"scopes\": [\n \"runs:*\",\n \"resources:*\",\n \"wallet:read\",\n \"topups:*\",\n \"controls:read\",\n \"api_keys:*\"\n ],\n \"expiresAt\": \"2027-01-01T00:00:00Z\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.monid.ai/v1/api-keys")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"label\": \"ci-runner\",\n \"scopes\": [\n \"runs:*\",\n \"resources:*\",\n \"wallet:read\",\n \"topups:*\",\n \"controls:read\",\n \"api_keys:*\"\n ],\n \"expiresAt\": \"2027-01-01T00:00:00Z\"\n}"
response = http.request(request)
puts response.read_body{
"apiKey": "monid_live_a1b2c3d4e5f6g7h8i9j0k1l2",
"label": "ci-runner",
"keyPrefix": "monid_live_",
"workspaceId": "<string>",
"owner": "<string>",
"createdBy": "USER#user_2abc",
"scopes": [
"runs:*",
"resources:*",
"wallet:read",
"topups:*",
"controls:read",
"api_keys:*"
],
"status": "ACTIVE",
"origin": "DASHBOARD",
"createdAt": "2023-11-07T05:31:56Z",
"expiresAt": "2023-11-07T05:31:56Z"
}{
"code": 400,
"message": "Bad Request",
"hints": {},
"errorCode": "RATE_LIMITED"
}{
"code": 400,
"message": "Bad Request",
"hints": {},
"errorCode": "RATE_LIMITED"
}{
"code": 400,
"message": "Bad Request",
"hints": {},
"errorCode": "RATE_LIMITED"
}{
"code": 400,
"message": "Bad Request",
"hints": {},
"errorCode": "RATE_LIMITED"
}{
"code": 400,
"message": "Bad Request",
"hints": {},
"errorCode": "RATE_LIMITED"
}Create an API key
Creates an API key for the workspace and returns the full key. This is the only time the key is shown, so store it right away. Send a unique label, and optionally scopes and expiresAt. Without scopes the new key gets the same scopes as the key that created it. The new key can never have more scopes or a later expiry than your own key.
curl --request POST \
--url https://api.monid.ai/v1/api-keys \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"label": "ci-runner",
"scopes": [
"runs:*",
"resources:*",
"wallet:read",
"topups:*",
"controls:read",
"api_keys:*"
],
"expiresAt": "2027-01-01T00:00:00Z"
}
'import requests
url = "https://api.monid.ai/v1/api-keys"
payload = {
"label": "ci-runner",
"scopes": ["runs:*", "resources:*", "wallet:read", "topups:*", "controls:read", "api_keys:*"],
"expiresAt": "2027-01-01T00:00:00Z"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
label: 'ci-runner',
scopes: [
'runs:*',
'resources:*',
'wallet:read',
'topups:*',
'controls:read',
'api_keys:*'
],
expiresAt: '2027-01-01T00:00:00Z'
})
};
fetch('https://api.monid.ai/v1/api-keys', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.monid.ai/v1/api-keys",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'label' => 'ci-runner',
'scopes' => [
'runs:*',
'resources:*',
'wallet:read',
'topups:*',
'controls:read',
'api_keys:*'
],
'expiresAt' => '2027-01-01T00:00:00Z'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.monid.ai/v1/api-keys"
payload := strings.NewReader("{\n \"label\": \"ci-runner\",\n \"scopes\": [\n \"runs:*\",\n \"resources:*\",\n \"wallet:read\",\n \"topups:*\",\n \"controls:read\",\n \"api_keys:*\"\n ],\n \"expiresAt\": \"2027-01-01T00:00:00Z\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.monid.ai/v1/api-keys")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"label\": \"ci-runner\",\n \"scopes\": [\n \"runs:*\",\n \"resources:*\",\n \"wallet:read\",\n \"topups:*\",\n \"controls:read\",\n \"api_keys:*\"\n ],\n \"expiresAt\": \"2027-01-01T00:00:00Z\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.monid.ai/v1/api-keys")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"label\": \"ci-runner\",\n \"scopes\": [\n \"runs:*\",\n \"resources:*\",\n \"wallet:read\",\n \"topups:*\",\n \"controls:read\",\n \"api_keys:*\"\n ],\n \"expiresAt\": \"2027-01-01T00:00:00Z\"\n}"
response = http.request(request)
puts response.read_body{
"apiKey": "monid_live_a1b2c3d4e5f6g7h8i9j0k1l2",
"label": "ci-runner",
"keyPrefix": "monid_live_",
"workspaceId": "<string>",
"owner": "<string>",
"createdBy": "USER#user_2abc",
"scopes": [
"runs:*",
"resources:*",
"wallet:read",
"topups:*",
"controls:read",
"api_keys:*"
],
"status": "ACTIVE",
"origin": "DASHBOARD",
"createdAt": "2023-11-07T05:31:56Z",
"expiresAt": "2023-11-07T05:31:56Z"
}{
"code": 400,
"message": "Bad Request",
"hints": {},
"errorCode": "RATE_LIMITED"
}{
"code": 400,
"message": "Bad Request",
"hints": {},
"errorCode": "RATE_LIMITED"
}{
"code": 400,
"message": "Bad Request",
"hints": {},
"errorCode": "RATE_LIMITED"
}{
"code": 400,
"message": "Bad Request",
"hints": {},
"errorCode": "RATE_LIMITED"
}{
"code": 400,
"message": "Bad Request",
"hints": {},
"errorCode": "RATE_LIMITED"
}Authorizations
Monid API key
Body
Human-readable label for the key. Unique among non-revoked keys in the workspace.
1"ci-runner"
Scopes for the new key. They must be a subset of your own key's scopes. Omit to copy your key's scopes.
1*, runs:*, resources:*, wallet:*, topups:*, controls:*, api_keys:*, runs:create, runs:get, runs:list, runs:update, resources:read, resources:create, resources:update, resources:delete, wallet:read, wallet:update, topups:create, controls:read, controls:create, controls:update, controls:delete, api_keys:read, api_keys:create, api_keys:update, api_keys:revoke [
"runs:*",
"resources:*",
"wallet:read",
"topups:*",
"controls:read",
"api_keys:*"
]
When the key stops working, in ISO 8601. It cannot be later than your own key's expiry. Omit to use your key's expiry, or no expiry if your key has none. It cannot be changed later.
"2027-01-01T00:00:00Z"
Response
API key created. The full key is in this response only.
The full API key. It is shown only once, so store it now. It cannot be retrieved again.
"monid_live_a1b2c3d4e5f6g7h8i9j0k1l2"
"ci-runner"
The start of the key, monid_live_ in production. The full key is in apiKey.
"monid_live_"
The workspace the key belongs to.
The user the key belongs to.
Who created the key.
"USER#user_2abc"
The scopes the key holds, fixed at creation. See GET /v1/api-keys/scopes for every scope.
1*, runs:*, resources:*, wallet:*, topups:*, controls:*, api_keys:*, runs:create, runs:get, runs:list, runs:update, resources:read, resources:create, resources:update, resources:delete, wallet:read, wallet:update, topups:create, controls:read, controls:create, controls:update, controls:delete, api_keys:read, api_keys:create, api_keys:update, api_keys:revoke [
"runs:*",
"resources:*",
"wallet:read",
"topups:*",
"controls:read",
"api_keys:*"
]
ACTIVE, EXPIRED or REVOKED. Only active keys work.
ACTIVE, EXPIRED, REVOKED How the key was created, such as DASHBOARD or API.
DASHBOARD, API, AEP, SYSTEM Creation time (ISO 8601).
When the key stops working, in ISO 8601. Absent when the key never expires.