Skills
Update
Upload a new version of an existing skill.
Upload a new version of an existing skill.
PUT /api/public/v1/artifacts/skills/{skill_id}Example
curl -X PUT https://api.nairi.ai/api/public/v1/artifacts/skills/SKILL_ID \
-H "Authorization: Bearer $NAIRI_API_KEY" \
-F "file=@my-skill-v2.zip"import { readFile } from "node:fs/promises";
const buffer = await readFile("my-skill-v2.zip");
const form = new FormData();
form.append("file", new Blob([buffer]), "my-skill-v2.zip");
const res = await fetch(
`https://api.nairi.ai/api/public/v1/artifacts/skills/${skillId}`,
{
method: "PUT",
headers: {
Authorization: `Bearer ${process.env.NAIRI_API_KEY}`,
},
body: form,
},
);
const data = await res.json();require "net/http"
require "json"
require "uri"
require "securerandom"
uri = URI("https://api.nairi.ai/api/public/v1/artifacts/skills/#{skill_id}")
boundary = "----RubyMultipart#{SecureRandom.hex(8)}"
file_path = "my-skill-v2.zip"
file_body = File.binread(file_path)
body = String.new
body << "--#{boundary}\r\n"
body << %(Content-Disposition: form-data; name="file"; filename="#{File.basename(file_path)}"\r\n)
body << "Content-Type: application/zip\r\n\r\n"
body << file_body
body << "\r\n--#{boundary}--\r\n"
req = Net::HTTP::Put.new(uri)
req["Authorization"] = "Bearer #{ENV['NAIRI_API_KEY']}"
req["Content-Type"] = "multipart/form-data; boundary=#{boundary}"
req.body = body
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |h| h.request(req) }
data = JSON.parse(res.body)import os
import requests
with open("my-skill-v2.zip", "rb") as f:
res = requests.put(
f"https://api.nairi.ai/api/public/v1/artifacts/skills/{skill_id}",
headers={"Authorization": f"Bearer {os.environ['NAIRI_API_KEY']}"},
files={"file": ("my-skill-v2.zip", f, "application/zip")},
)
data = res.json()package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"mime/multipart"
"net/http"
"os"
)
func main() {
skillID := os.Getenv("SKILL_ID")
file, _ := os.Open("my-skill-v2.zip")
defer file.Close()
var body bytes.Buffer
writer := multipart.NewWriter(&body)
part, _ := writer.CreateFormFile("file", "my-skill-v2.zip")
io.Copy(part, file)
writer.Close()
req, _ := http.NewRequest("PUT", "https://api.nairi.ai/api/public/v1/artifacts/skills/"+skillID, &body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("NAIRI_API_KEY"))
req.Header.Set("Content-Type", writer.FormDataContentType())
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
raw, _ := io.ReadAll(res.Body)
var data map[string]any
json.Unmarshal(raw, &data)
fmt.Println(data)
}Response
{
"id": "ask_01KQ9T51QVMZPQKBZ4G56735V9",
"name": "code-reviewer",
"description": "Reviews code for best practices",
"warnings": [],
"created_at": "2026-04-28T10:28:57.000Z",
"updated_at": "2026-04-12T18:50:00.000Z"
}