Developers · 8 min read · in development

Clipping API

A clipping API, in development. Clipping cannot be a blocking call, so the interesting part of any integration is everything after the request. Here is the job lifecycle, the three integration shapes and how each fails, what actually governs cost – and what we are building.

By the Clippingnet teamUpdated 1,934 words

A CLIP IS NOT A FUNCTION CALL WHAT PEOPLE WRITE FIRST POST wait for the clips the request died first WHAT IT HAS TO BE POST a job id, instantly minutes to hours later webhook or poll clips the API returns a receipt · the clips arrive afterwards

When an API is the right answer

In development

There is no Clippingnet API yet and nothing on this page is callable. What follows is what a clipping API has to look like and what we are building towards – not a specification.

An API earns its place when clipping stops being something a person does and becomes something that happens. Three situations qualify: a show that publishes on a schedule and wants clips without anybody remembering to make them; a product whose own users need clips from their own video; and a backlog large enough that working through it by hand is not a plan.

It does not earn its place for a single clip, or for a handful a week. Integration is a fixed cost paid up front and maintained afterwards, and a trimmer finishes a one-off before an upload would have. The question to ask is not whether an API would be convenient but whether the volume is high enough that a person in the loop is the bottleneck.

Why it cannot be a function call

The first version anybody writes is a single blocking request: send a video, wait, get clips. It cannot work, and the reason is arithmetic rather than design preference.

Clipping a long recording takes minutes to hours. An HTTP request gives up in seconds. A ninety-minute source has to be fetched, decoded, transcribed and scanned before a single cut is made, and no amount of patience on the client side survives the gateways and proxies in between. The diagram at the top of this page is the whole of it: the request dies long before the work finishes.

So every clipping API is submit then collect. You post a source, you get an identifier back immediately, and the clips reach you later – pushed to a webhook, or pulled when you ask. That is not a quirk of one provider, it is what the workload forces, and an integration designed around it will survive changing providers.

The practical consequence is that the interesting part of the integration is not the request, it is everything after it: where you keep the job id, what you do while you wait, how you react when half the clips arrive. That is the next section.

Try it: the states of a job

Any asynchronous clipping job moves through the same handful of states. Most integration bugs live in two of them, and one is the state people forget exists.

The states an asynchronous clipping job moves through. Step through them.

What it means—

How long—

What your code does—

What breaks—

1 of 6

These are the states any asynchronous job has, described in general terms. They are not a specification of an interface, because there is not one to describe yet.

The one worth dwelling on is partial. A job that produced six clips out of ten is not a success and not a failure, and a system with no branch for it will treat it as one or the other – silently losing four clips, or throwing away six good ones. It is the single most common way a clipping integration corrupts its own data, and it costs about ten lines to handle properly.

After that, the expensive mistakes are a client timeout shorter than the job, and one retry path for every kind of failure so that permanent errors cycle forever. Both are easy to avoid when you are thinking in job states and nearly invisible when you are thinking in requests.

Three ways people integrate it

Which shape you are building decides what your error handling is actually for, and the three shapes fail in genuinely different ways.

THREE SHAPES, THREE FAILURE MODES BACK OFFICETRIGGERED BYan episode publishingTHE USER SEESnothing at allHOW IT FAILSsilently, for weeksIN YOUR PRODUCTTRIGGERED BYsomeone clicking clipTHE USER SEESa progress stateHOW IT FAILSin front of themSCHEDULED SWEEPTRIGGERED BYa nightly jobTHE USER SEESa morning inboxHOW IT FAILSas a pile-up the middle one is the only place a person is waiting · the other two need alerting instead
Which shape you are building decides what your error handling is for. A person watching a spinner needs a message; an unattended job needs somebody to be told it stopped working, because nothing else will notice.

The one with a person waiting is the easiest to get right, because failure is immediately visible and somebody complains. The unattended shapes are where integrations quietly rot – a back-office job that stops working produces no clips and no signal, and the first anybody knows is when someone asks why there have been no clips this month.

So for anything unattended, the rule is: alert on absence, not just on error. A job that failed loudly is fine. A job that stopped being submitted at all is the one that goes unnoticed, and it needs something checking that the expected number of clips arrived.

What actually meters

Whatever the pricing eventually looks like, the thing that scales is worth understanding now, because it changes how you design the integration rather than just what you pay.

The work is in the source, not in the request. Producing a clip scales with the number of clips; finding one scales with the length of the recording, because the whole thing has to be processed before anything can be selected. Ten clips from a four-hour stream is a far larger job than ten clips from a half-hour episode, and any sensible metering reflects that.

Two design consequences follow. Do not send more source than you need: if you already know the interesting half hour is in the middle of a three-hour stream, submitting that section is cheaper and faster than submitting the lot. And do not re-submit a source you have already processed just to ask for different clip lengths – cache what came back, because the expensive part has already been paid for.

Packaging clipping work runs the same arithmetic from the human side, and reaches the same conclusion: price and plan around the recording, not around the clips.

What not to send

Four things worth deciding before the integration exists rather than after, because all four are much harder to change once something is running.

  • Footage you are not free to sendAn API call ships the material to somebody else’s machines. Customer recordings, unreleased work and anything under an agreement need that decision made deliberately, not by whoever wired up the integration.
  • Your key, in anything a browser can readA key in front-end code is a public key, whatever it is called. Calls belong on your server, with the browser talking to your server instead.
  • A webhook endpoint that trusts its callerIf you take results by webhook, that URL is reachable by anyone who finds it. Verify that a delivery really came from where it claims, and treat the body as input rather than instruction.
  • More than you need to keepClips, transcripts and source URLs accumulate quietly. Decide what you retain and for how long at the point you build it, because retrofitting deletion to a system that assumed permanence is unpleasant work.

The first is the one that catches organisations rather than individuals. An API call moves footage to somebody else’s infrastructure, and that is a decision about rights and confidentiality as much as about architecture – the sort of thing that ought to be made by someone who knows what the agreements say, not by whoever was assigned the ticket.

What we are building

Not available yet

Everything below is what we are working towards. None of it is callable, none of it is final, and there is no release date on this page on purpose – a date here would be a promise made by the page rather than by the work.

  • Submit a source and get a job backA long video in, a job identifier out, immediately. No blocking calls.
  • Results by webhook, with polling as the fallbackBecause a webhook that is never delivered has to be recoverable, and polling is what recovers it.
  • Clip specs rather than clip commandsLength range, aspect ratios, caption handling – described once per request rather than as a sequence of imperative steps.
  • Honest partial resultsA job that produced six of ten clips should say so, rather than reporting success or failure and making you guess.

Two things we are deliberately not claiming. We are not promising that it will find better moments than you would – choosing the best moments is judgement, and an API does not transfer it. And we are not promising that automatic output will be publishable without checking: captions will still need a correction pass, because the words a machine gets wrong are the names and numbers that matter most.

If you are planning something that would use this, the useful thing you can do now is tell us what shape it is – which of the three integrations above, how long your sources run, what you need back. That is more likely to affect what gets built than anything else.

Register interest

Tell us what you would build – no date promised

FAQ

Is the API available now?

No. It is in development and there is nothing to call. This page exists because the architecture of a clipping API is worth understanding before you plan an integration around one, and because we would rather describe what we are building than publish a specification that does not exist yet.

When will it be available?

No date, deliberately. A date on a page like this is a promise made by whoever wrote the page rather than by whoever has to build the thing. Register interest and you will hear when there is something real to try.

Why can it not just return the clips?

Because clipping a long recording takes minutes to hours and an HTTP request gives up in seconds. Every clipping API in existence is submit-then-collect for that reason, which is why the shape of the integration matters more than the shape of the endpoint.

What will it cost to run?

Whatever the pricing turns out to be, the thing that will scale is the length of the source rather than the number of calls, because that is where the work is. A four-hour recording is a much larger job than a thirty-minute one even if you ask for the same number of clips. The services page works through the same arithmetic from the other side.

Can I clip without an API in the meantime?

Yes, and for most jobs it is the faster answer. A single clip is quicker to cut by hand than to integrate for – the general route covers it – and several clips from one source handles batches without any code at all.

Will it handle private or sensitive footage?

That is a decision to make deliberately rather than a feature to assume. Any cloud API means the material leaves your systems, which rules the whole category out for some content regardless of what the provider promises. Clipping footage that stays private covers the alternatives.

What should I build against in the meantime?

Nothing specific to us, which is the honest answer. If you are designing an integration now, design it around the job lifecycle above – submit, receive an id, take a webhook, handle partial results – because that shape is common to every provider in this category and will not be wasted whichever one you end up using.

Related: several clips from one source, the clipping route and private clipping.

Mark the in. Mark the out. Done