API Ingest

Push assets and metadata with one API call.

Content-addressed. Idempotent. Deduplicated by SHA-256. Safe to retry. Your ingest pipeline should be boring — this one is.

Under the hood

Why content-addressed storage?

Every file you send Clipsilo is identified by its SHA-256 hash — a cryptographic fingerprint that's unique to the exact bytes of that file. That tiny design decision unlocks a lot of nice properties:

  • Automatic deduplication. Upload the same 400 MB hero video from two different campaigns? Clipsilo stores it once. The second upload is a no-op — no double billing, no duplicate rows.
  • Idempotent uploads. Your CI pipeline crashed halfway through a batch? Just retry. The same SHA returns the same presigned URL and the same asset ID. No cleanup scripts, no half-ingested batches.
  • Stable references forever. Agents, webhooks, and downstream pipelines reference assets by a fingerprint that can never change. No rotating S3 URLs, no broken links when a file is moved.
  • Integrity verification. If a byte flips in transit, the SHA mismatch surfaces it immediately. You never distribute silently-corrupted content.

Built for production pipelines

Every feature exists because someone lost a weekend to the alternative.

Deduplication

Same file uploaded twice? Stored once. SHA-256 identity means storage scales with unique content, not attempts.

Batch processing

Submit hundreds of assets in one manifest. Atomic group semantics: ingest, review, and distribute as a unit.

Metadata at ingest

Attach tags, categories, captions, hooks, and usage rights on upload — not as an afterthought. Agents see context from day one.

Idempotent uploads

Retries are free and safe. Network flake? Lambda timeout? Re-run the whole batch. Same SHAs, same result.

Example: ingest an asset

Three requests. Totally idempotent. Works from any language, any CI system, any shell.

Step 1 — Get a presigned upload URL

POST /api/v1/blobs/upload_urls
{
  "blobs": [
    {
      "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
      "content_type": "video/mp4",
      "size_bytes": 52428800
    }
  ]
}

Step 2 — Upload directly to S3

PUT {upload_url from step 1}
curl -X PUT "{upload_url}" \
  -H "Content-Type: video/mp4" \
  --data-binary @hero-q3.mp4

Step 3 — Submit the batch manifest

POST /api/v1/batches
{
  "manifest": {
    "batch_ref": "campaign-q3-hero-001",
    "items": [
      {
        "item_ref": "hero-video-16x9",
        "category": "brand",
        "platform_assets": [
          {
            "platform": "youtube",
            "video_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
            "caption": "Q3 Brand Campaign — Summer 2025",
            "hook": "The creative workspace built for AI-era teams."
          }
        ]
      }
    ]
  }
}

Returns a batch ID immediately. Assets enter the approval queue and become agent-accessible via MCP the moment they're approved.

File support

Supported formats

If S3 can store it, Clipsilo can index it. These are the formats we validate and preview out of the box.

Video

MP4

S3 limits apply

MOV

S3 limits apply

WebM

S3 limits apply

AVI

S3 limits apply

Audio

MP3

S3 limits apply

WAV

S3 limits apply

AAC

S3 limits apply

FLAC

S3 limits apply

OGG

S3 limits apply

M4A

S3 limits apply

Image

JPG

S3 limits apply

PNG

S3 limits apply

WebP

S3 limits apply

SVG

S3 limits apply

GIF

S3 limits apply

AVIF

S3 limits apply

Ready to organize your content pipeline?

Start your 7-day free trial. No credit card required. Cancel anytime.

7-day free trial · No credit card · Cancel anytime