Guides
Continue editing
To let a user change a video they already made, create a new session with continue_session_id set to an earlier session’s id. Rendley reopens that user’s project with every edit.
curl https://api.rendley.com/v1/connect/sessions \
-H "Authorization: Bearer $RENDLEY_CONNECT_KEY" \
-H "Content-Type: application/json" \
-d '{
"continue_session_id": "98db7a48-b4ec-4219-8f90-b1db4ae60cf5",
"assets": [
{ "url": "https://cdn.acme-realty.example/villa-tour.mp4" }
],
"return_url": "https://acme-realty.example/listings/villa-marina"
}'
You get a new session with its own id and url. Save it and redirect the user as in the quickstart.
Which session to continue
Keep one session id per listing and user to continue from. Set it when you create a session without continue_session_id. Move it to a continue session only when that session comes back on your return page, with either status. A continue session nobody opened has no project yet, so continuing from it gives the user a new, empty project and no error.
How it behaves
| Who can open it | Only the Rendley user who opened the earlier session. |
| Project | That user’s earlier project, with every edit. If they deleted it or lost access, a new empty project. |
assets | Optional. In the earlier project they go to the library, skipping any file sent before from the exact same URL, and are not placed on the timeline. In a new project they are placed on the timeline, like a first session. |
metadata | Not copied. Send it again. |
| Earlier session | Any of yours that a user opened, completed or not. A first session nobody opened returns 400 INVALID_CONTINUE_SESSION. |
| Project count | The project is reused, so a continue session doesn’t use another of a free account’s 10 projects. |
Send the original assets on every continue session. If the earlier project is still there, files from the same URL are skipped. If the user deleted it, the assets rebuild the starting point instead of leaving them in an empty editor. Matching is by exact URL, so a freshly signed URL is added again.
Typical flow
async function startEditing(listing, user) {
const body = {
return_url: "https://acme-realty.example/listings/" + listing.id,
metadata: { listing_id: listing.id },
// Skipped when the project already has it. Placed on the timeline when the project is gone.
assets: [{ url: listing.videoUrl }],
};
let session;
if (listing.rendleySessionId) {
try {
session = await createSession({ ...body, continue_session_id: listing.rendleySessionId });
} catch (err) {
// That session isn't yours or nobody opened it, so start a new one.
if (err.code !== "INVALID_CONTINUE_SESSION") throw err;
}
}
if (!session) {
session = await createSession(body);
// A first session is safe to continue from. The API rejects it until a user opens it.
await db.listings.update({ id: listing.id }, { rendleySessionId: session.id });
}
await db.videoSessions.insert({ id: session.id, userId: user.id, listingId: listing.id, status: "created" });
return session;
}
createSession is the helper from the quickstart. In your return route, move the pointer when a session comes back, for completed and cancelled alike.
await db.listings.update({ id: saved.listingId }, { rendleySessionId: saved.id });
Changes reach your app
The project lives in the user’s Rendley workspace, so they can also open it from Rendley directly. Edits made that way stay in Rendley. Done and Back to appear only when the user arrives through a session link. Give users an Edit video button in your app for every later change, and create a continue session from it.
When to use it
Use a continue session when a link expired, when a sent video needs changes, or when the user deleted nothing and simply wants to edit again. A user who came back with status=cancelled can use the same link without one.
A continue session always goes to the same Rendley user. For a different person, create a new session and send your stored copy of the latest video as an asset.