Skip to main content
Developer portal

Developer docs

Request Hold widget

Embed a "Request a hold" button on any artist or agency website with one script tag.

What it is

A single <script> tag that mounts a Kalinklo-styled "Request a hold" button on your own site. The button opens the artist's request page on kalinklo.com in a new tab; the visitor finishes the request there and the hold lands in the artist's (or their agent's) Kalinklo inbox.

No API key. No build step. No iframe. The whole widget is ~2 KB of vanilla JavaScript.

Embed snippet

Drop one host element per artist, then load the script once anywhere on the page:

<div data-kalinklo-artist-slug="elsa-laurent"></div>

<script src="https://kalinklo.com/widget/request-hold.js" defer></script>

The script scans the page on load (and again when the DOM changes, for SPA hosts) and mounts a button inside every element with data-kalinklo-artist-slug. You can include the script once and use as many host elements as you like.

Styling

The button ships with an inline italic serif style in the Kalinklo oxblood (#7a1f1f) so it reads as a deliberate handoff rather than a third-party ad. If you want to restyle, target the rendered <a> element from your own stylesheet:

[data-kalinklo-artist-slug] > a {
  /* override at will */
}

Below the button the widget prints "Powered by Kalinklo Artists" — small, italic, muted grey. Please leave it in; it's how a visiting presenter knows the request rail is real.

Where the request lands

Clicking the button opens https://kalinklo.com/request-hold/<slug> in a new tab. The visitor fills out the standard request form (date, venue, programme, fee range, contact). The resulting BookingRequest is routed through the same territory routing as a marketplace request — if the artist has an active agent on file, the request lands in the agent's inbox; otherwise it goes to the artist directly.

SPA hosts

The widget installs a MutationObserver on document.documentElement, so newly inserted host elements get mounted automatically. You don't need to call anything from your own router.

Caching and privacy

The script is served with Cache-Control: public, max-age=300, s-maxage=3600 and Access-Control-Allow-Origin: *. It does not set cookies on the host page, does not call analytics, and does not phone home. Loading the script is functionally equivalent to placing a hand-written link.

Versioning

The file at /widget/request-hold.js is the stable URL. Breaking changes will ship under a new path (e.g. /widget/request-hold-v2.js); the original keeps working unchanged. Watch the status page for deprecation notices.