> ## Documentation Index
> Fetch the complete documentation index at: https://docs.memorylake.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Create Skill

> Create a skill from an uploaded package

```
POST /openapi/memorylake/api/v3/skills
```

Creates a skill from a package you have already uploaded with [Request Package Upload](/features/memorylake/api-reference/skills/create-package-upload). The skill is created with its first version, and the security review starts in the background.

The response comes back immediately with `latest_security_status` set to `pending`. An agent cannot reference the skill until the review passes, so poll [Get Skill](/features/memorylake/api-reference/skills/get-skill) before attaching it.

<Note>
  **Permission required:** `skill:create`
</Note>

### Request Body

<ParamField body="name" type="string" required>
  Name of the skill, up to 255 characters. Must be unique within your tenant, and cannot be changed later.
</ParamField>

<ParamField body="display_title" type="string" required>
  Title shown in the console, up to 500 characters.
</ParamField>

<ParamField body="description" type="string">
  What the skill does.
</ParamField>

<ParamField body="package_ref" type="object" required>
  The uploaded package.

  <Expandable title="Package reference">
    <ParamField body="package_ref.s3_uri" type="string" required>
      The `s3_uri` returned by [Request Package Upload](/features/memorylake/api-reference/skills/create-package-upload), unchanged. Upload the archive to its `upload_url` first.
    </ParamField>
  </Expandable>
</ParamField>

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST 'https://app.memorylake.ai/openapi/memorylake/api/v3/skills' \
    -H 'Authorization: Bearer sk_xxxxxx' \
    -H 'Content-Type: application/json' \
    -d '{
      "name": "equity-research",
      "display_title": "Equity Research",
      "description": "Pulls filings and price history and drafts an equity research note",
      "package_ref": {
        "s3_uri": "s3://example-bucket/skill-packages/3f2a1c8e9b7d4f5a8c6b2d1e0f9a8b7c.zip"
      }
    }'
  ```
</RequestExample>

### Response

<ResponseField name="data" type="object">
  <Expandable title="Skill">
    <ResponseField name="id" type="string">Skill ID. Use it to refer to the skill everywhere else.</ResponseField>
    <ResponseField name="name" type="string">Skill name</ResponseField>
    <ResponseField name="display_title" type="string">Title shown in the console</ResponseField>
    <ResponseField name="description" type="string">What the skill does</ResponseField>
    <ResponseField name="latest_version" type="integer">Latest published version number</ResponseField>
    <ResponseField name="latest_security_status" type="string">Security review state of the latest version. `pending` right after creation.</ResponseField>
    <ResponseField name="created_at" type="string">Creation timestamp</ResponseField>
    <ResponseField name="updated_at" type="string">Last update timestamp</ResponseField>
  </Expandable>
</ResponseField>

### Errors

| Status | Error code | When |
| - | - | - |
| `400` | `INVALID_ARGUMENT` | `package_ref.s3_uri` was not issued by Request Package Upload, nothing was uploaded to it, or the package is empty or larger than 10 MiB |
| `409` | `SKILL_NAME_CONFLICT` | A skill with this `name` already exists in your tenant |

<ResponseExample>
  ```json Success (200) theme={null}
  {
    "success": true,
    "data": {
      "id": "skill-2b0f5f9f4ea54767822f51f4940c8f24",
      "name": "equity-research",
      "display_title": "Equity Research",
      "description": "Pulls filings and price history and drafts an equity research note",
      "latest_version": 1,
      "latest_security_status": "pending",
      "created_at": "2026-08-21T09:12:44Z",
      "updated_at": "2026-08-21T09:12:44Z"
    }
  }
  ```

  ```json Name taken (409) theme={null}
  {
    "success": false,
    "message": "A skill named 'equity-research' already exists.",
    "error_code": "SKILL_NAME_CONFLICT"
  }
  ```
</ResponseExample>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.