sirv-api

📁 igorvaryvoda/image-optimization-skill 📅 Jan 24, 2026
8
总安装量
6
周安装量
#33933
全站排名
安装命令
npx skills add https://github.com/igorvaryvoda/image-optimization-skill --skill sirv-api

Agent 安装分布

claude-code 6
opencode 5
antigravity 5
cursor 4
windsurf 3

Skill 文档

Sirv REST API

Base URL: https://api.sirv.com

Authentication

All requests require a Bearer token from /v2/token:

curl -X POST https://api.sirv.com/v2/token \
  -H "Content-Type: application/json" \
  -d '{"clientId": "YOUR_CLIENT_ID", "clientSecret": "YOUR_CLIENT_SECRET"}'

Response:

{"token": "eyJhbG...", "expiresIn": 1200, "scope": ["account:read", ...]}

Use token in subsequent requests:

curl https://api.sirv.com/v2/account \
  -H "Authorization: Bearer eyJhbG..."

Tokens expire in 20 minutes. Request a new one before expiry.

Quick Reference

File Operations

Operation Method Endpoint Key Params
Upload POST /v2/files/upload ?filename=/path/file.jpg + binary body
Download GET /v2/files/download ?filename=/path/file.jpg
Delete POST /v2/files/delete ?filename=/path/file.jpg
Copy POST /v2/files/copy ?from=/a.jpg&to=/b.jpg
Rename/Move POST /v2/files/rename ?from=/a.jpg&to=/b.jpg
Create folder POST /v2/files/mkdir ?dirname=/new-folder
List directory GET /v2/files/readdir ?dirname=/folder

Metadata Operations

Operation Method Endpoint
Get all meta GET /v2/files/meta?filename=/path
Set meta POST /v2/files/meta?filename=/path
Get/Set title GET/POST /v2/files/meta/title?filename=/path
Get/Set description GET/POST /v2/files/meta/description?filename=/path
Get/Add/Delete tags GET/POST/DELETE /v2/files/meta/tags?filename=/path
Get/Set product GET/POST /v2/files/meta/product?filename=/path

Async Jobs (return job ID, poll for progress)

Operation Start Poll
Spin to video POST /v2/files/spin2video Returns filename directly
Video to spin POST /v2/files/video2spin Returns filename directly
Create ZIP POST /v2/files/zip GET /v2/files/zip?id=
Batch delete POST /v2/files/batch/delete GET /v2/files/batch/delete?id=
3D to GLB POST /v2/files/3d/model2GLB GET /v2/files/3d/model2GLB?id=

When to Read Reference Files

  • File operations (upload, download, copy, delete, directory listing): See files.md
  • Metadata & search (meta fields, search query syntax, product data): See metadata.md
  • Async jobs (video conversion, ZIP, batch ops): See jobs.md
  • Account & stats (usage, billing, events, settings): See account.md

Common Patterns

Upload an image

const token = await getToken();
await fetch('https://api.sirv.com/v2/files/upload?filename=/images/photo.jpg', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${token}`,
    'Content-Type': 'image/jpeg'
  },
  body: imageBuffer
});

Search for recent images

await fetch('https://api.sirv.com/v2/files/search', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${token}`,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    query: 'extension:.jpg AND mtime:[now-7d TO now]',
    size: 50
  })
});

Create ZIP archive (async)

// Start job
const { id } = await fetch('https://api.sirv.com/v2/files/zip', {
  method: 'POST',
  headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' },
  body: JSON.stringify({
    filenames: ['/images/photo1.jpg', '/images/photo2.jpg'],
    zipFilename: '/downloads/photos.zip'
  })
}).then(r => r.json());

// Poll until complete
let progress = 0;
while (progress < 100) {
  const status = await fetch(`https://api.sirv.com/v2/files/zip?id=${id}`, {
    headers: { 'Authorization': `Bearer ${token}` }
  }).then(r => r.json());
  progress = status.progress;
  await new Promise(r => setTimeout(r, 1000));
}