Spaces:
Build error
Build error
| --- | |
| title: Cloud API | |
| description: OpenHands Cloud provides a REST API that allows you to programmatically interact with the service. This guide explains how to obtain an API key and use the API to start conversations. | |
| --- | |
| For more detailed information about the API, refer to the [OpenHands API Reference](https://docs.all-hands.dev/swagger-ui/). | |
| ## Obtaining an API Key | |
| To use the OpenHands Cloud API, you'll need to generate an API key: | |
| 1. Log in to your [OpenHands Cloud](https://app.all-hands.dev) account. | |
| 2. Navigate to the [Settings page](https://app.all-hands.dev/settings). | |
| 3. Select the `API Keys` tab. | |
| 4. Click `Create API Key`. | |
| 5. Give your key a descriptive name (Example: "Development" or "Production") and select `Create`. | |
| 6. Copy the generated API key and store it securely. It will only be shown once. | |
|  | |
| ## API Usage | |
| ### Starting a New Conversation | |
| To start a new conversation with OpenHands to perform a task, you'll need to make a POST request to the conversation endpoint. | |
| #### Request Parameters | |
| | Parameter | Type | Required | Description | | |
| |--------------------|----------|----------|------------------------------------------------------------------------------------------------------| | |
| | `initial_user_msg` | string | Yes | The initial message to start the conversation. | | |
| | `repository` | string | No | Git repository name to provide context in the format `owner/repo`. You must have access to the repo. | | |
| #### Examples | |
| <details> | |
| <summary>cURL</summary> | |
| ```bash | |
| curl -X POST "https://app.all-hands.dev/api/conversations" \ | |
| -H "Authorization: Bearer YOUR_API_KEY" \ | |
| -H "Content-Type: application/json" \ | |
| -d '{ | |
| "initial_user_msg": "Check whether there is any incorrect information in the README.md file and send a PR to fix it if so.", | |
| "repository": "yourusername/your-repo" | |
| }' | |
| ``` | |
| </details> | |
| <details> | |
| <summary>Python (with requests)</summary> | |
| ```python | |
| import requests | |
| api_key = "YOUR_API_KEY" | |
| url = "https://app.all-hands.dev/api/conversations" | |
| headers = { | |
| "Authorization": f"Bearer {api_key}", | |
| "Content-Type": "application/json" | |
| } | |
| data = { | |
| "initial_user_msg": "Check whether there is any incorrect information in the README.md file and send a PR to fix it if so.", | |
| "repository": "yourusername/your-repo" | |
| } | |
| response = requests.post(url, headers=headers, json=data) | |
| conversation = response.json() | |
| print(f"Conversation Link: https://app.all-hands.dev/conversations/{conversation['conversation_id']}") | |
| print(f"Status: {conversation['status']}") | |
| ``` | |
| </details> | |
| <details> | |
| <summary>TypeScript/JavaScript (with fetch)</summary> | |
| ```typescript | |
| const apiKey = "YOUR_API_KEY"; | |
| const url = "https://app.all-hands.dev/api/conversations"; | |
| const headers = { | |
| "Authorization": `Bearer ${apiKey}`, | |
| "Content-Type": "application/json" | |
| }; | |
| const data = { | |
| initial_user_msg: "Check whether there is any incorrect information in the README.md file and send a PR to fix it if so.", | |
| repository: "yourusername/your-repo" | |
| }; | |
| async function startConversation() { | |
| try { | |
| const response = await fetch(url, { | |
| method: "POST", | |
| headers: headers, | |
| body: JSON.stringify(data) | |
| }); | |
| const conversation = await response.json(); | |
| console.log(`Conversation Link: https://app.all-hands.dev/conversations/${conversation.id}`); | |
| console.log(`Status: ${conversation.status}`); | |
| return conversation; | |
| } catch (error) { | |
| console.error("Error starting conversation:", error); | |
| } | |
| } | |
| startConversation(); | |
| ``` | |
| </details> | |
| #### Response | |
| The API will return a JSON object with details about the created conversation: | |
| ```json | |
| { | |
| "status": "ok", | |
| "conversation_id": "abc1234", | |
| } | |
| ``` | |
| You may receive an `AuthenticationError` if: | |
| - You provided an invalid API key. | |
| - You provided the wrong repository name. | |
| - You don't have access to the repository. | |
| ### Retrieving Conversation Status | |
| You can check the status of a conversation by making a GET request to the conversation endpoint. | |
| #### Endpoint | |
| ``` | |
| GET https://app.all-hands.dev/api/conversations/{conversation_id} | |
| ``` | |
| #### Example | |
| <details> | |
| <summary>cURL</summary> | |
| ```bash | |
| curl -X GET "https://app.all-hands.dev/api/conversations/{conversation_id}" \ | |
| -H "Authorization: Bearer YOUR_API_KEY" | |
| ``` | |
| </details> | |
| #### Response | |
| The response is formatted as follows: | |
| ```json | |
| { | |
| "conversation_id":"abc1234", | |
| "title":"Update README.md", | |
| "created_at":"2025-04-29T15:13:51.370706Z", | |
| "last_updated_at":"2025-04-29T15:13:57.199210Z", | |
| "status":"RUNNING", | |
| "selected_repository":"yourusername/your-repo", | |
| "trigger":"gui" | |
| } | |
| ``` | |
| ## Rate Limits | |
| If you have too many conversations running at once, older conversations will be paused to limit the number of concurrent conversations. | |
| If you're running into issues and need a higher limit for your use case, please contact us at [contact | |