Workspace owners and admins create keys in Settings → API. Add a label so you can tell keys apart later. The full key is shown once, so copy it into a secrets manager before you close the dialog. Revoke a key from the same page; requests that use it fail with 401 right away.
A key belongs to one workspace and acts as the person who created it, with owner access to that workspace. Anyone holding it can read and change everything in the workspace, so treat it like a password. Keys cannot create or revoke other keys.
curl -X GET "https://api.joinoasis.com/api/v1/organizations/$ORG_ID/agents" \
-H "X-API-Key: $OASIS_API_KEY"
Response 200 · array of object
Name
Type
Description
agent_id
string
kind
string
name
string
agent_role
string
description
string
Short description shown with the teammate.
state
idle | active
picture_url
string
color
array of string
composio_toolkits
array of string
Apps the teammate can use, by toolkit slug (for example `gmail`).
composio_require_approval
boolean
created_by
string
created_at
string
updated_at
string
caller_permission
string
POST/organizations/{org_id}/agentsCreate a teammate
Create a teammate with a name, role and standing instructions.
Parameters
Name
In
Type
Required
Description
org_id
path
string
Yes
Body
Name
Type
Required
Description
connection_grants
array of object
Connected app accounts the teammate can use.
connection_grants[].connection_id
string
Yes
connection_grants[].scope
string
'read' | 'write'
connection_grants[].auto_approve
boolean
name
string
Yes
Display name for the teammate
agent_role
string
description
string
Short description shown with the teammate.
system_prompt
string
response_style
default | warm | direct | professional | super_casual
picture_url
string
color
array of string
composio_toolkits
array of string
Apps the teammate can use, by toolkit slug (for example `gmail`).
composio_require_approval
boolean
If true, draft actions and ask for approval before executing
composio_toolkit_approval_overrides
object
Per-app override of `composio_require_approval`, keyed by toolkit slug.
enable_memory_recall
boolean
Let the teammate use its memory.
Example
bash
curl -X POST "https://api.joinoasis.com/api/v1/organizations/$ORG_ID/agents" \
-H "X-API-Key: $OASIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Scout","agent_role":"Research analyst","system_prompt":"Research what you are asked about and cite sources."}'
Response 201 · object
Name
Type
Description
agent_id
string
user_id
string
org_id
string
name
string
agent_role
string
description
string
Short description shown with the teammate.
state
idle | active
picture_url
string
color
array of string
composio_toolkits
array of string
Apps the teammate can use, by toolkit slug (for example `gmail`).
composio_require_approval
boolean
composio_toolkit_account_source
object
Per-app account choice, keyed by toolkit slug: `shared` uses the accounts granted to the teammate, `self` has each person use their own. Missing keys mean `shared`.
created_at
string
updated_at
string
created_by
string
kind
string
caller_permission
string
budget_amount_usd
number
budget_period
string
GET/agents/{agent_id}Get a teammate
Read a teammate's instructions and settings.
Parameters
Name
In
Type
Required
Description
agent_id
path
string
Yes
Example
bash
curl -X GET "https://api.joinoasis.com/api/v1/agents/$AGENT_ID" \
-H "X-API-Key: $OASIS_API_KEY"
Response 200 · object
Name
Type
Description
agent_id
string
user_id
string
org_id
string
name
string
agent_role
string
description
string
Short description shown with the teammate.
state
idle | active
picture_url
string
color
array of string
composio_toolkits
array of string
Apps the teammate can use, by toolkit slug (for example `gmail`).
composio_require_approval
boolean
composio_toolkit_account_source
object
Per-app account choice, keyed by toolkit slug: `shared` uses the accounts granted to the teammate, `self` has each person use their own. Missing keys mean `shared`.
created_at
string
updated_at
string
created_by
string
kind
string
caller_permission
string
budget_amount_usd
number
budget_period
string
PUT/agents/{agent_id}Update a teammate
Change a teammate. Send only the fields you want to change.
Parameters
Name
In
Type
Required
Description
agent_id
path
string
Yes
Body
Name
Type
Required
Description
name
string
agent_role
string
description
string
Short description shown with the teammate.
system_prompt
string
response_style
default | warm | direct | professional | super_casual
picture_url
string
color
array of string
composio_toolkits
array of string
Apps the teammate can use, by toolkit slug (for example `gmail`).
composio_require_approval
boolean
composio_toolkit_approval_overrides
object
Per-app override of `composio_require_approval`, keyed by toolkit slug.
composio_toolkit_account_source
object
Per-app account choice, keyed by toolkit slug: `shared` uses the accounts granted to the teammate, `self` has each person use their own. Missing keys mean `shared`.
enable_memory_recall
boolean
Let the teammate use its memory.
budget_amount_usd
number
USD cap for the budget period; null = no cap
budget_period
string
'daily' | 'weekly' | 'monthly'; null = no cap
Example
bash
curl -X PUT "https://api.joinoasis.com/api/v1/agents/$AGENT_ID" \
-H "X-API-Key: $OASIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"description":"Researches competitors every week."}'
Response 200 · object
Name
Type
Description
agent_id
string
user_id
string
org_id
string
name
string
agent_role
string
description
string
Short description shown with the teammate.
state
idle | active
picture_url
string
color
array of string
composio_toolkits
array of string
Apps the teammate can use, by toolkit slug (for example `gmail`).
composio_require_approval
boolean
composio_toolkit_account_source
object
Per-app account choice, keyed by toolkit slug: `shared` uses the accounts granted to the teammate, `self` has each person use their own. Missing keys mean `shared`.
List workflows. Set include_disabled to include paused ones.
Parameters
Name
In
Type
Required
Description
org_id
path
string
Yes
include_disabled
query
boolean
Example
bash
curl -X GET "https://api.joinoasis.com/api/v1/organizations/$ORG_ID/schedules" \
-H "X-API-Key: $OASIS_API_KEY"
Response 200 · array of object
Name
Type
Description
id
string
task_id
string
org_id
string
name
string
description
string
kind
string
`time`, `event` or `manual`.
trigger_type
string
`cron`, `composio` (an app event) or `manual`.
composio_trigger_slug
string
App event that starts the workflow, for example `GMAIL_NEW_EMAIL`.
composio_trigger_config
object
Settings for that app event.
composio_connected_account_id
string
Connected account the event watches. Defaults to your account for that app.
cron_expr
string
timezone
string
execute_at
string
enabled
boolean
seed_prompt
string
Instructions for each run.
agent_ids
array of string
Teammates that do the work.
human_participant_ids
array of string
created_by
string
visibility
string
last_run_at
string
last_run_status
string
last_run_error
string
run_count
integer
created_at
string
updated_at
string
condition_rules
array of object
Filters on the event payload. A run starts only when every rule matches.
fire_cap_per_window
integer
fire_cap_window_seconds
integer
paused_reason
string
POST/organizations/{org_id}/schedulesCreate a workflow
Create a workflow with instructions, assigned teammates and when it runs: manual, cron (recurring) or composio (on an app event). Use an IANA timezone with cron_expr. Automatic triggers are active once saved.
Parameters
Name
In
Type
Required
Description
org_id
path
string
Yes
Body
Name
Type
Required
Description
name
string
description
string
kind
string
`time`, `event` or `manual`.
trigger_type
string
`cron`, `composio` (an app event) or `manual`.
composio_trigger_slug
string
App event that starts the workflow, for example `GMAIL_NEW_EMAIL`.
composio_trigger_config
object
Settings for that app event.
composio_connected_account_id
string
Connected account the event watches. Defaults to your account for that app.
cron_expr
string
Standard 5-field cron, e.g. '0 8 * * *'
timezone
string
IANA timezone name, e.g. 'America/New_York'
execute_at
string
ISO 8601 datetime for one-time runs
seed_prompt
string
Instructions for each run.
agent_ids
array of string
Teammates that do the work.
human_participant_ids
array of string
Human participant UUIDs
visibility
string
'private' (creator-only) or 'public' (visible to whole org)
condition_rules
array of object
Filters on the event payload. A run starts only when every rule matches.
condition_rules[].rule_type
string
Always `deterministic`.
condition_rules[].field
string
Yes
Dotted path into the event payload, e.g. 'from' or 'repository.full_name'
condition_rules[].operator
string
Yes
One of: equals, contains, starts_with, ends_with, regex, exists, gt, lt
condition_rules[].value
any
Value to compare against; ignored for 'exists'
fire_cap_per_window
integer
Per-schedule rate limit; null = uncapped
fire_cap_window_seconds
integer
Window for fire_cap_per_window
generate_task_blueprint
boolean
Draft the step plan from `seed_prompt` when the workflow is saved.
Example
bash
curl -X POST "https://api.joinoasis.com/api/v1/organizations/$ORG_ID/schedules" \
-H "X-API-Key: $OASIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Morning digest","trigger_type":"cron","cron_expr":"0 9 * * 1-5","timezone":"America/New_York","seed_prompt":"Post a digest of the previous day.","agent_ids":["AGENT_ID"]}'
Response 201 · object
Name
Type
Description
id
string
task_id
string
org_id
string
name
string
description
string
kind
string
`time`, `event` or `manual`.
trigger_type
string
`cron`, `composio` (an app event) or `manual`.
composio_trigger_slug
string
App event that starts the workflow, for example `GMAIL_NEW_EMAIL`.
composio_trigger_config
object
Settings for that app event.
composio_connected_account_id
string
Connected account the event watches. Defaults to your account for that app.
cron_expr
string
timezone
string
execute_at
string
enabled
boolean
seed_prompt
string
Instructions for each run.
agent_ids
array of string
Teammates that do the work.
human_participant_ids
array of string
created_by
string
visibility
string
last_run_at
string
last_run_status
string
last_run_error
string
run_count
integer
created_at
string
updated_at
string
condition_rules
array of object
Filters on the event payload. A run starts only when every rule matches.
fire_cap_per_window
integer
fire_cap_window_seconds
integer
paused_reason
string
GET/organizations/{org_id}/schedules/{schedule_id}Get a workflow
Read a workflow's instructions, teammates, timing and enabled state.
Parameters
Name
In
Type
Required
Description
org_id
path
string
Yes
schedule_id
path
string
Yes
Example
bash
curl -X GET "https://api.joinoasis.com/api/v1/organizations/$ORG_ID/schedules/$SCHEDULE_ID" \
-H "X-API-Key: $OASIS_API_KEY"
Response 200 · object
Name
Type
Description
id
string
task_id
string
org_id
string
name
string
description
string
kind
string
`time`, `event` or `manual`.
trigger_type
string
`cron`, `composio` (an app event) or `manual`.
composio_trigger_slug
string
App event that starts the workflow, for example `GMAIL_NEW_EMAIL`.
composio_trigger_config
object
Settings for that app event.
composio_connected_account_id
string
Connected account the event watches. Defaults to your account for that app.
cron_expr
string
timezone
string
execute_at
string
enabled
boolean
seed_prompt
string
Instructions for each run.
agent_ids
array of string
Teammates that do the work.
human_participant_ids
array of string
created_by
string
visibility
string
last_run_at
string
last_run_status
string
last_run_error
string
run_count
integer
created_at
string
updated_at
string
condition_rules
array of object
Filters on the event payload. A run starts only when every rule matches.
fire_cap_per_window
integer
fire_cap_window_seconds
integer
paused_reason
string
PATCH/organizations/{org_id}/schedules/{schedule_id}Update a workflow
Change a workflow. Set enabled to false to pause it and true to resume.
Parameters
Name
In
Type
Required
Description
org_id
path
string
Yes
schedule_id
path
string
Yes
Body
Name
Type
Required
Description
name
string
description
string
kind
string
`time`, `event` or `manual`.
trigger_type
string
`cron`, `composio` (an app event) or `manual`.
composio_trigger_slug
string
App event that starts the workflow, for example `GMAIL_NEW_EMAIL`.
composio_trigger_config
object
Settings for that app event.
composio_connected_account_id
string
Connected account the event watches. Defaults to your account for that app.
cron_expr
string
timezone
string
execute_at
string
enabled
boolean
seed_prompt
string
Instructions for each run.
agent_ids
array of string
Teammates that do the work.
human_participant_ids
array of string
visibility
string
condition_rules
array of object
Filters on the event payload. A run starts only when every rule matches.
condition_rules[].rule_type
string
Always `deterministic`.
condition_rules[].field
string
Yes
Dotted path into the event payload, e.g. 'from' or 'repository.full_name'
condition_rules[].operator
string
Yes
One of: equals, contains, starts_with, ends_with, regex, exists, gt, lt
Read a room's messages. Page with limit and before.
Parameters
Name
In
Type
Required
Description
room_id
path
string
Yes
limit
query
integer
before
query
string
Example
bash
curl -X GET "https://api.joinoasis.com/api/v1/rooms/$ROOM_ID/messages" \
-H "X-API-Key: $OASIS_API_KEY"
Response 200 · object
Name
Type
Description
messages
array of object
has_more
boolean
oldest_cursor
string
newest_cursor
string
POST/rooms/{room_id}/messagesSend a message
Post a message as the key's creator. Put a teammate's ID in mentions to wake it. Reuse idempotency_key when retrying so the message is not posted twice.
Parameters
Name
In
Type
Required
Description
room_id
path
string
Yes
Body
Name
Type
Required
Description
content
string
Yes
attachments
array of object
extras
object
mentions
array of uuid
IDs of the teammates or people mentioned. Mentioned teammates in the room start working on the message.
idempotency_key
string
Retrying with the same key returns the original message instead of posting it again.
thread_root_message_id
uuid
Top-level message this reply belongs to.
reply_to_message_id
uuid
Main-timeline message quoted by this inline reply.
also_show_in_main
boolean
Also show this thread reply in the room's main timeline.
Example
bash
curl -X POST "https://api.joinoasis.com/api/v1/rooms/$ROOM_ID/messages" \
-H "X-API-Key: $OASIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"content":"Summarize the signups from yesterday","idempotency_key":"report-2026-10-12"}'
Response 201 · object
Name
Type
Description
id
uuid
room_id
uuid
sender_type
string
content
string
mentions
array of uuid
IDs of the teammates or people mentioned. Mentioned teammates in the room start working on the message.
message_type
string
idempotency_key
string
Retrying with the same key returns the original message instead of posting it again.
attachments
array of object
thread_root_message_id
uuid
reply_to_message_id
uuid
also_show_in_main
boolean
Also show this thread reply in the room's main timeline.