> For the complete documentation index, see [llms.txt](https://developer.hyper3d.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developer.hyper3d.ai/zh_cn/get-started/readme.md).

# Get started with Rodin

Rodin 的 API 使用 API 密钥来验证请求。要以编程方式访问 Rodin 服务，您需要生成一个 API 密钥。以下是如何安全地进行身份验证和使用 API 密钥的步骤。

#### 生成 API 密钥

1. **导航到 API 密钥管理页面**
   * 登录到您的 Rodin 账户，进入 API 密钥管理部分。
   * 点击“+创建新 API 密钥”按钮以生成新密钥。
2. **安全存储您的 API 密钥**
   * 一旦创建，API 密钥将仅显示一次。确保您复制并安全存储。如果您丢失了密钥，您需要生成一个新密钥。
3. **在必要时撤销密钥**
   * 您可以直接在 API 密钥管理页面管理现有的 API 密钥，并撤销不再需要的密钥。

#### **使用 API 密钥进行身份验证**

对于每个 API 请求，请在 Authorization HTTP 头中包含 API 密钥。以下是如何构建请求的示例：

```http
Authorization: Bearer YOUR_RODIN_API_KEY
```

将 `YOUR_RODIN_API_KEY` 替换为您实际生成的 API 密钥。

### 发起请求

一旦您生成了 API 密钥，就可以使用以下示例代码触发您的第一个请求，以生成高质量的 3D 资产。

{% tabs %}
{% tab title="cURL" %}
`bash export RODIN_API_KEY="your api key" curl https://api.hyper3d.com/api/v2/rodin \ -H "Authorization: Bearer ${RODIN_API_KEY}" \ -F "images=@/path/to/your/image.jpg" unset RODIN_API_KEY`
{% endtab %}

{% tab title="Python 3" %}
{% code fullWidth="false" %}

```
// Create the form data for Rodin API
writer := multipart.NewWriter(&buffer)

// Read the image
image, err := os.ReadFile(filePath)
if err != nil {
	return nil, err
}

// Add the image as a form entry
fieldWriter, err := writer.CreateFormFile("images", filepath.Base(filePath))
if err != nil {
	return nil, err
}

if _, err = fieldWriter.Write(image); err != nil {
	return nil, err
}

err = writer.Close()
if err != nil {
	return nil, err
}

// Create the request
req, err := http.NewRequest("POST", fmt.Sprintf("%s/v2/rodin", BaseURI), &buffer)
if err != nil {
	return nil, err
}

// Set headers
req.Header.Set("Authorization", "Bearer "+token)
req.Header.Set("Content-Type", writer.FormDataContentType())

resp, err := http.DefaultClient.Do(req)
if err != nil {
	return nil, err
}
defer resp.Body.Close()

var responseData RodinAllInOneResponse
err = json.NewDecoder(resp.Body).Decode(&responseData)
if err != nil {
	return nil, err
}

if responseData.Error != nil {
	return nil, fmt.Errorf("%s: %s", *responseData.Error, *responseData.Message)
}

return &responseData, nil
```

{% endcode %}
{% endtab %}
{% endtabs %}
