curl --request GET \
--url https://api.indm.social/v1/workspace \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.indm.social/v1/workspace', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.indm.social/v1/workspace"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"id": "2c5e8a1b-7f3d-4c9e-b0a2-5d6e7f8a9b0c",
"name": "Maya's Studio",
"plan": "growth",
"key": {
"id": "5e7d9c1b-3a2f-4e6d-8b0c-9a1f2e3d4c5b",
"name": "Content calendar sync",
"scope": "full",
"prefix": "indm_7Kq",
"expires_at": "2027-02-03T09:14:00Z"
}
}{
"error": {
"type": "authentication_error",
"code": "api_key_expired",
"message": "This API key expired on 3 Feb 2027. Create a new one under Settings → API keys.",
"doc_url": "https://docs.indm.social/errors#api_key_expired"
}
}{
"error": {
"type": "rate_limited",
"code": "rate_limited",
"message": "That's more than 120 requests a minute on one key. Wait 18s and try again.",
"doc_url": "https://docs.indm.social/errors#rate_limited"
}
}{
"error": {
"type": "api_error",
"code": "internal_error",
"message": "Something went wrong on our end. Try again; if it keeps happening, quote request req_8Qm2ZcY4vN7tLp1K to support@indm.social.",
"doc_url": "https://docs.indm.social/errors#internal_error"
}
}Get the workspace
Returns the workspace this key belongs to, its plan, and the key’s own scope and expiry. A good first call: if it answers, your key works.
Needs a read or full key.
curl --request GET \
--url https://api.indm.social/v1/workspace \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.indm.social/v1/workspace', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.indm.social/v1/workspace"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"id": "2c5e8a1b-7f3d-4c9e-b0a2-5d6e7f8a9b0c",
"name": "Maya's Studio",
"plan": "growth",
"key": {
"id": "5e7d9c1b-3a2f-4e6d-8b0c-9a1f2e3d4c5b",
"name": "Content calendar sync",
"scope": "full",
"prefix": "indm_7Kq",
"expires_at": "2027-02-03T09:14:00Z"
}
}{
"error": {
"type": "authentication_error",
"code": "api_key_expired",
"message": "This API key expired on 3 Feb 2027. Create a new one under Settings → API keys.",
"doc_url": "https://docs.indm.social/errors#api_key_expired"
}
}{
"error": {
"type": "rate_limited",
"code": "rate_limited",
"message": "That's more than 120 requests a minute on one key. Wait 18s and try again.",
"doc_url": "https://docs.indm.social/errors#rate_limited"
}
}{
"error": {
"type": "api_error",
"code": "internal_error",
"message": "Something went wrong on our end. Try again; if it keeps happening, quote request req_8Qm2ZcY4vN7tLp1K to support@indm.social.",
"doc_url": "https://docs.indm.social/errors#internal_error"
}
}Authorizations
An API key from Settings → API keys in the inDM app, sent as
Authorization: Bearer indm_.... Keys belong to one workspace and carry a scope:
read for GET routes and the validate dry run, full for everything. Keep keys on
your server; never ship one to a browser or a mobile app.
Response
The workspace behind this key.
The workspace id.
"2c5e8a1b-7f3d-4c9e-b0a2-5d6e7f8a9b0c"
The workspace's name in inDM.
"Maya's Studio"
The workspace's plan as the API reads it: growth for any paid plan, free
otherwise. The API works on every plan.
free, growth "growth"
The key that made this request. The secret itself is never returned.
Show child attributes
Show child attributes