session.url
or embed it in an iframe — reads its colours, font, and corner radius from
query parameters on the URL. Append them to the session URL (or to
https://pay.hypermid.io/embed?paymentId=…) and the page renders in your theme.
Nothing is built or uploaded; the parameters are read at load.
Parameters
Colours are hex without the
# — accent=00aa88, not accent=%2300aa88.
Three to eight hex digits are accepted; anything else falls back to the preset
value rather than erroring.Colour ramp
bgPage, bgCard, border, and the three text* params are a full surface
ramp — set them together for a coherent custom palette rather than overriding
one in isolation. Any you omit keep the theme preset’s value.
Font
font takes a family name only (font=Inter, font=Roboto). It is not a
web-font loader: Inter ships with the page, and any other name is a
best-effort system font — it renders only if the payer’s device has it,
otherwise the page falls back to Inter. The name is matched against a strict
pattern; punctuation that could carry CSS syntax is rejected.
Radius
radius is a single bounded scale (0–24 px, capped so a card stays a card, not a
pill). You set the card radius; the button radius is computed from it to
preserve the design’s proportions, so an embed cannot drift into an incoherent
mix of shapes.
Worked example
A minty light theme with tighter corners:Security
A merchant cannot inject CSS through these parameters. Every colour is passed through a hex validator (^[0-9a-fA-F]{3,8}$) and font through a strict
name pattern; a value that does not match is discarded and the preset value is
used. There is no raw-style or stylesheet parameter by design — the theming
surface is exactly the table above and nothing more.
The legacy
@hypermid/checkout package is deprecated. New integrations should
create the session with @hypermid/sdk, then use its session.url or
session.embedUrl on pay.hypermid.io and append the validated theme
parameters shown above.