The AddPipe Platform is now SOC 2 Type I attested. Read the announcement

Home/Integrations/Other/Custom integration

Three interfaces, and AddPipe fits anything.

There is no integration AddPipe cannot be part of, because the surface is small: a recorder in the browser, webhooks when something happens, and a REST API for the rest. Everything on this site is built from those three.

The browser part is the hard part

Device permissions, mobile Safari, codec differences, dropped connections mid-upload. The recording client has absorbed fifteen years of those, and it is the piece you would least want to write.

Your identifiers, not ours

Attach custom data to a recorder and it comes back on every webhook, so recordings arrive already linked to your records rather than needing to be matched later.

You can own the files

Push every recording to your own bucket and turn on Do not store. AddPipe becomes the capture and processing layer, and your storage is the system of record.

The shape of an integration.

Four decisions cover almost every case.

1

In the browser

Place the recorder and attach your id

Embed the client where recording belongs and set custom data to whatever identifies the context: a user, an order, a case, a question.

2

In the browser

Know when the upload is done

onSaveOk gives you the recording name and means the upload finished. Use it to unblock a submit button, not to assume the mp4 exists.

3

On your server

Handle the webhook

video_converted is when the mp4 is playable. video_copied_s3 is when it is in your bucket. Verify the signature, then act.

4

On your server

Decide where the file lives

If the recording is a record you must keep, push it to your own storage and treat that as canonical. If it is transient, AddPipe's storage is enough.

// 1. browser: attach your own identifier
PipeSDK.onRecordersInserted = function () {
  var rec = PipeSDK.getRecorderById('pipe-1');

  // 2. upload finished, name is real
  rec.onSaveOk = function (recorderId, streamName) {
    document.getElementById('send').disabled = false;
  };
};

// 3. server: the mp4 now exists
app.post('/pipe-webhook', (req, res) => {
  if (!verifySignature(req)) return res.sendStatus(401);

  const { event, data } = req.body;
  if (event === 'video_converted') {
    // data carries your custom data back
    attachToRecord(data.customData, data.videoName);
  }
  res.sendStatus(200);
});

Field names differ slightly by event, so check the webhook reference and the JavaScript API reference as you build.

Where to read next.

JavaScript API

Every recorder event and control method, including onSaveOk, getStreamName() and the recording controls. Read it.

Webhooks

Every event, its payload, and how to verify the signature on an incoming request. Read it.

REST API

List, fetch and delete recordings from your own backend. Read it.

Working examples: the custom form integration, the React demo and the npm package.

Details.

What are the three interfaces?

The recording client, which puts a recorder on your page and reports events in the browser. Webhooks, which tell your server when a recording has been uploaded, transcoded or pushed to storage. And the REST API, for listing, fetching and deleting recordings.

How do I link a recording to my own records?

Attach custom data to the recorder. Whatever you attach comes back on every webhook for that recording, so it arrives already linked to your user, order or case.

Which event means the video is ready to play?

video_converted. The earlier onSaveOk event in the browser means the upload finished, not that the mp4 exists. Waiting for the wrong one is the most common integration bug.

Should I store the file myself?

If the recording is a record you need to keep, yes. Push to your own S3-compatible bucket and treat that as the system of record, with AddPipe as the capture and processing layer.

Do I have to verify webhooks?

Yes. Webhooks can be signed, and your endpoint should verify the signature before acting. It is a public URL, so anything less means anyone can post to it.

What if we need help building it?

Get in touch. For larger pieces of work there is a custom development route, and a trusted development partner for projects that go beyond the recording layer.

Build it your way.

Every recorder, webhook and API endpoint is open during the 14-day trial. No card required.