OpenHands Agentic Access
OpenHands exposes 43 API operations that an AI agent could call, of which 15 are state-changing ‘acting’ operations. This is a recommended x-agentic-access execution contract — the scope, audience, consequence tier, short-lived token constraints, and escalation each action should carry before it is handed to an autonomous agent.
By consequence: 28 read, 13 write, and 2 safety-critical.
2 operations are classed safety-critical and should require human-in-the-loop approval at runtime.
Contracts are classified heuristically from the provider’s OpenAPI and refresh on every APIs.io network build; audience is bound per deployment. The model follows Curity’s Access Intelligence (apidays Munich 2026). Browse every provider’s agent contracts at agentic-access.apis.io.
By consequence
Highest-consequence actions
The physical and safety-critical operations an agent could invoke — the ones that most warrant scoped tokens, tight TTLs, and escalation. Full per-operation contracts are in the source below.
| Method | Path | Consequence | Human-in-loop |
|---|---|---|---|
| POST | /api/conversations/{conversation_id}/stop | safety-critical | required |
| POST | /api/reset-settings | safety-critical | required |
Source
Agentic Access
generated: '2026-07-15'
method: generated
source: openapi/openhands-openapi.json
description: Recommended x-agentic-access execution contracts, classified heuristically from
the OpenAPI. A governance starting point for exposing this API to AI agents — review and bind
audience per deployment. See research/curity/agentic-governance/.
summary:
operations: 43
by_action_class:
connected: 28
acting: 15
by_consequence:
read: 28
write: 13
safety-critical: 2
human_in_the_loop_required: 2
operations:
- path: /api/options/models
method: get
operationId: get_litellm_models_api_options_models_get
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /api/options/agents
method: get
operationId: get_agents_api_options_agents_get
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /api/options/security-analyzers
method: get
operationId: get_security_analyzers_api_options_security_analyzers_get
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /api/options/config
method: get
operationId: get_config_api_options_config_get
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /api/conversations/{conversation_id}/list-files
method: get
operationId: list_files_api_conversations__conversation_id__list_files_get
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /api/conversations/{conversation_id}/select-file
method: get
operationId: select_file_api_conversations__conversation_id__select_file_get
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /api/conversations/{conversation_id}/zip-directory
method: get
operationId: zip_current_workspace_api_conversations__conversation_id__zip_directory_get
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /api/conversations/{conversation_id}/git/changes
method: get
operationId: git_changes_api_conversations__conversation_id__git_changes_get
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /api/conversations/{conversation_id}/git/diff
method: get
operationId: git_diff_api_conversations__conversation_id__git_diff_get
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /api/conversations/{conversation_id}/upload-files
method: post
operationId: upload_files_api_conversations__conversation_id__upload_files_post
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /api/conversations/{conversation_id}/submit-feedback
method: post
operationId: submit_feedback_api_conversations__conversation_id__submit_feedback_post
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /api/conversations/{conversation_id}/config
method: get
operationId: get_remote_runtime_config_api_conversations__conversation_id__config_get
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /api/conversations/{conversation_id}/events
method: get
operationId: search_events_api_conversations__conversation_id__events_get
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /api/conversations/{conversation_id}/events
method: post
operationId: add_event_api_conversations__conversation_id__events_post
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /api/conversations/{conversation_id}/microagents
method: get
operationId: get_microagents_api_conversations__conversation_id__microagents_get
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /api/conversations
method: post
operationId: new_conversation_api_conversations_post
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /api/conversations
method: get
operationId: search_conversations_api_conversations_get
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /api/conversations/{conversation_id}
method: get
operationId: get_conversation_api_conversations__conversation_id__get
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /api/conversations/{conversation_id}
method: delete
operationId: delete_conversation_api_conversations__conversation_id__delete
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /api/conversations/{conversation_id}
method: patch
operationId: update_conversation_api_conversations__conversation_id__patch
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /api/conversations/{conversation_id}/remember-prompt
method: get
operationId: get_prompt_api_conversations__conversation_id__remember_prompt_get
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /api/conversations/{conversation_id}/start
method: post
operationId: start_conversation_api_conversations__conversation_id__start_post
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /api/conversations/{conversation_id}/stop
method: post
operationId: stop_conversation_api_conversations__conversation_id__stop_post
x-agentic-access:
action-class: acting
consequence: safety-critical
subject: required
audience: null
token:
max-ttl: 120
exchange: true
purpose-required: true
proof-of-possession: true
escalation:
human-in-the-loop: required
audit: required
- path: /api/settings
method: get
operationId: load_settings_api_settings_get
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /api/settings
method: post
operationId: store_settings_api_settings_post
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /api/reset-settings
method: post
operationId: reset_settings_api_reset_settings_post
x-agentic-access:
action-class: acting
consequence: safety-critical
subject: required
audience: null
token:
max-ttl: 120
exchange: true
purpose-required: true
proof-of-possession: true
escalation:
human-in-the-loop: required
audit: required
- path: /api/add-git-providers
method: post
operationId: store_provider_tokens_api_add_git_providers_post
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /api/unset-provider-tokens
method: post
operationId: unset_provider_tokens_api_unset_provider_tokens_post
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /api/secrets
method: get
operationId: load_custom_secrets_names_api_secrets_get
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /api/secrets
method: post
operationId: create_custom_secret_api_secrets_post
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /api/secrets/{secret_id}
method: put
operationId: update_custom_secret_api_secrets__secret_id__put
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /api/secrets/{secret_id}
method: delete
operationId: delete_custom_secret_api_secrets__secret_id__delete
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /api/user/installations
method: get
operationId: get_user_installations_api_user_installations_get
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /api/user/repositories
method: get
operationId: get_user_repositories_api_user_repositories_get
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /api/user/info
method: get
operationId: get_user_api_user_info_get
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /api/user/search/repositories
method: get
operationId: search_repositories_api_user_search_repositories_get
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /api/user/suggested-tasks
method: get
operationId: get_suggested_tasks_api_user_suggested_tasks_get
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /api/user/repository/branches
method: get
operationId: get_repository_branches_api_user_repository_branches_get
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /api/user/repository/{repository_name}/microagents
method: get
operationId: get_repository_microagents_api_user_repository__repository_name__microagents_get
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /api/user/repository/{repository_name}/microagents/content
method: get
operationId: get_repository_microagent_content_api_user_repository__repository_name__microagents_content_get
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /api/conversations/{conversation_id}/trajectory
method: get
operationId: get_trajectory_api_conversations__conversation_id__trajectory_get
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /alive
method: get
operationId: alive_alive_get
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /health
method: get
operationId: health_health_get
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none