API reference

Every endpoint in /api/v1, generated from the OpenAPI 3.1 document the server validates with. Authenticate with Authorization: Bearer yk_live_…. Lists that grow without bound take limit and cursor and return nextCursor. Any POST accepts an Idempotency-Key header so it is safe to retry (see Errors).

Account

Who the key is and what it may do.

GET /me

The workspace, plan and key behind this request

Transfers

One-off sends with an expiring link.

GET /transfers

List transfers, newest first

Parameters

NameTypeDescription
limit (query)integerPage size, 1–500. Defaults to 100.
cursor (query)stringThe nextCursor from the previous page, unchanged. Opaque: never build one.

POST /transfers

Create a transfer

Always creates a draft: the link is not live and nobody is emailed until you call finalize. Returns a tus endpoint and one upload token per file. An unfinalized draft is swept after 24 hours.

Body (JSON)

NameTypeDescription
filesrequiredobject[]
files[].namerequiredstringFilename as it should appear to the recipient.
files[].sizerequiredintegerExact size in bytes. Must match what you upload.
files[].typestringMIME type. Best effort; never trusted.
files[].pathstringDirectory within an uploaded folder, e.g. "Ceremony/Raw". Omit for a loose file.
titlestringShown in your dashboard; never to recipients.
expiresInDaysintegerDefaults to 7. Clamped to your plan’s maximum (7 free, 365 paid) rather than rejected.

GET /transfers/{id}

Transfer detail, files and recipient status

Parameters

NameTypeDescription
id (path)requiredstringTransfer id. Never the share slug, which is a capability.

PATCH /transfers/{id}

Change expiry or download limit

Parameters

NameTypeDescription
id (path)requiredstringTransfer id. Never the share slug, which is a capability.

Body (JSON)

NameTypeDescription
expiresInDaysintegerClamped to your plan’s maximum rather than rejected.
maxDownloadsinteger | nullnull lifts the limit. Omit to leave unchanged.

DELETE /transfers/{id}

Revoke a transfer

Immediate and irreversible: the per-file encryption keys are destroyed before this returns, so the content is unrecoverable whether or not object storage has caught up.

Parameters

NameTypeDescription
id (path)requiredstringTransfer id. Never the share slug, which is a capability.

POST /transfers/{id}/finalize

Send it

Makes the link live and emails any recipients. Safe to retry — finalizing twice does not re-send. Omit recipients for a link-only transfer you share yourself.

Parameters

NameTypeDescription
id (path)requiredstringTransfer id. Never the share slug, which is a capability.

Body (JSON)

NameTypeDescription
recipientsstring (email)[]Omit to get a link only. Each address here is emailed on your behalf.
messagestring
passwordstringRecipients must enter this to open the transfer.
titlestring

POST /transfers/{id}/files

Add files to an unsent transfer

Parameters

NameTypeDescription
id (path)requiredstringTransfer id. Never the share slug, which is a capability.

Body (JSON)

NameTypeDescription
filesrequiredobject[]
files[].namerequiredstringFilename as it should appear to the recipient.
files[].sizerequiredintegerExact size in bytes. Must match what you upload.
files[].typestringMIME type. Best effort; never trusted.
files[].pathstringDirectory within an uploaded folder, e.g. "Ceremony/Raw". Omit for a loose file.

DELETE /transfers/{id}/files/{fileId}

Remove a file from an unsent transfer

Parameters

NameTypeDescription
id (path)requiredstringTransfer id. Never the share slug, which is a capability.
fileId (path)requiredstringFile id from the create or add response.

GET /transfers/{id}/downloads

Download receipts

One page visit is one download, not one per file — events from the same visit share a sessionId. Most recent 200 events.

Parameters

NameTypeDescription
id (path)requiredstringTransfer id. Never the share slug, which is a capability.

Collections

Durable, folder-structured spaces clients are invited into.

GET /collections

List collections

Never includes your vault, which is not reachable from the API at all.

POST /collections

Create a collection

Body (JSON)

NameTypeDescription
titlerequiredstring
descriptionstring

GET /collections/{id}

Collection detail

Parameters

NameTypeDescription
id (path)requiredstringCollection id. Never a slug — see the Concepts page.

PATCH /collections/{id}

Rename or re-describe

Title and description only. Sharing settings are deliberately not writable here. Renaming never changes the URL — it has already been sent to people.

Parameters

NameTypeDescription
id (path)requiredstringCollection id. Never a slug — see the Concepts page.

Body (JSON)

NameTypeDescription
titlestring
descriptionstring

DELETE /collections/{id}

Delete a collection and its contents

Parameters

NameTypeDescription
id (path)requiredstringCollection id. Never a slug — see the Concepts page.

GET /collections/{id}/files

List files

Parameters

NameTypeDescription
id (path)requiredstringCollection id. Never a slug — see the Concepts page.
folderId (query)stringOmit for every file. Pass root for the top level, or a folder id.
limit (query)integerPage size, 1–1000. Omit it to get every file in one response.
cursor (query)stringThe nextCursor from the previous page, unchanged. Opaque: never build one.

POST /collections/{id}/files

Register files for upload

Reserves quota under a per-workspace lock and creates any folders implied by path. Returns a tus endpoint and one upload token per file.

Parameters

NameTypeDescription
id (path)requiredstringCollection id. Never a slug — see the Concepts page.

Body (JSON)

NameTypeDescription
filesrequiredobject[]
files[].namerequiredstringFilename as it should appear to the recipient.
files[].sizerequiredintegerExact size in bytes. Must match what you upload.
files[].typestringMIME type. Best effort; never trusted.
files[].pathstringDirectory within an uploaded folder, e.g. "Ceremony/Raw". Omit for a loose file.
folderIdstring | nullTarget folder. Omit or null for the collection root.

DELETE /collections/{id}/files

Delete files

Parameters

NameTypeDescription
id (path)requiredstringCollection id. Never a slug — see the Concepts page.

Body (JSON)

NameTypeDescription
fileIdsrequiredstring[]

GET /collections/{id}/folders

List folders

Ordered by depth then path, which is not a pre-order traversal — build a tree from parentId rather than trusting the order.

Parameters

NameTypeDescription
id (path)requiredstringCollection id. Never a slug — see the Concepts page.

POST /collections/{id}/folders

Create a folder

Parameters

NameTypeDescription
id (path)requiredstringCollection id. Never a slug — see the Concepts page.

Body (JSON)

NameTypeDescription
namerequiredstring
parentIdstring | nullOmit or null for the collection root.

GET /collections/{id}/guests

List guests

Parameters

NameTypeDescription
id (path)requiredstringCollection id. Never a slug — see the Concepts page.

POST /collections/{id}/guests

Invite guests by email

Guests may view and download this one collection. They are free on every plan and are not workspace members.

Parameters

NameTypeDescription
id (path)requiredstringCollection id. Never a slug — see the Concepts page.

Body (JSON)

NameTypeDescription
emailsrequiredstring (email)[]Each address is emailed an invite. Capped at 25 per call.

DELETE /collections/{id}/guests/{guestId}

Remove a guest

Parameters

NameTypeDescription
id (path)requiredstringCollection id. Never a slug — see the Concepts page.
guestId (path)requiredstringGuest id from the list endpoint.

Contacts

The workspace address book.

GET /contacts

List contacts

POST /contacts

Create a contact

Body (JSON)

NameTypeDescription
firstNamestring | null
lastNamestring | null
companystring | null
emailrequiredstringThe only required field. Case-insensitive and unique per workspace.
phonestring | null
typestring | nullclient | colleague | partner | friend | family | other. Unknown values become "other".

GET /contacts/{id}

Get a contact

Parameters

NameTypeDescription
id (path)requiredstringContact id.

PATCH /contacts/{id}

Replace a contact

A full replacement, not a merge: any field you omit is cleared. Send the whole contact back.

Parameters

NameTypeDescription
id (path)requiredstringContact id.

Body (JSON)

NameTypeDescription
firstNamestring | null
lastNamestring | null
companystring | null
emailrequiredstringThe only required field. Case-insensitive and unique per workspace.
phonestring | null
typestring | nullclient | colleague | partner | friend | family | other. Unknown values become "other".

DELETE /contacts/{id}

Delete a contact

Revokes nothing — if they were invited to a collection, they keep access.

Parameters

NameTypeDescription
id (path)requiredstringContact id.

Webhooks

Events pushed to your URL, signed with Yungle-Signature, or kept for you to pull. See the Webhooks guide.

GET /webhooks

List webhook endpoints

POST /webhooks

Create an endpoint

The response carries the signing secret, once. Free: one endpoint, transfer events.

Body (JSON)

NameTypeDescription
urlrequiredstring | nullhttps URL to POST events to. null makes a pull endpoint: read its events from GET /webhooks/{id}/events.
eventsrequired"transfer.ready" | "transfer.downloaded" | "transfer.expiring" | "transfer.expired" | "collection.file_uploaded"[]Event types to receive. Collection events need a paid plan.
descriptionstringA note for yourself.

GET /webhooks/{id}

Get an endpoint

Parameters

NameTypeDescription
id (path)requiredstringWebhook endpoint id.

PATCH /webhooks/{id}

Change, pause or resume an endpoint

Parameters

NameTypeDescription
id (path)requiredstringWebhook endpoint id.

Body (JSON)

NameTypeDescription
urlstring | null
events"transfer.ready" | "transfer.downloaded" | "transfer.expiring" | "transfer.expired" | "collection.file_uploaded"[]Event types to receive. Collection events need a paid plan.
descriptionstring | null
enabledbooleanfalse pauses deliveries; true resumes and resets the failure count.

DELETE /webhooks/{id}

Delete an endpoint

Parameters

NameTypeDescription
id (path)requiredstringWebhook endpoint id.

POST /webhooks/{id}/rotate-secret

Replace the signing secret

Parameters

NameTypeDescription
id (path)requiredstringWebhook endpoint id.

POST /webhooks/{id}/test

Send a webhook.test event

Parameters

NameTypeDescription
id (path)requiredstringWebhook endpoint id.

GET /webhooks/{id}/deliveries

Recent delivery attempts

Parameters

NameTypeDescription
id (path)requiredstringWebhook endpoint id.

POST /webhooks/{id}/deliveries/{deliveryId}/retry

Redeliver an event

Parameters

NameTypeDescription
id (path)requiredstringWebhook endpoint id.
deliveryId (path)requiredstringDelivery id.

GET /webhooks/{id}/events

Read events (pull)

Oldest first, after cursor. nextCursor is returned even on the last page, so a poller resumes from it. Kept 30 days.

Parameters

NameTypeDescription
id (path)requiredstringWebhook endpoint id.
limit (query)integerPage size, 1–500. Defaults to 100.
cursor (query)stringThe nextCursor from the previous page, unchanged. Opaque: never build one.