Desk Embedded New · free to mount, on all three models

The visa desk, inside the tool your agents already have.

Your support desk, your agent portal, your CRM. One mount puts the whole flow in the record your agent already has open: travelers, documents, cost, margin, payment. They sign in to your portal, not to ours.

One mount
the whole desk in one div
No second login
identity comes from your directory
40 seconds
from question to filed, on a call
agent/ticket.js
// token minted by your server, never in the page source
const sv = SimpleVisa.desk(token);

sv.mount('#visa', {
  view:    'order',
  display: 'panel',
  brand:   'farebound',
  context: {
    ticket:  '48219',
    booking: 'GGU-88214'
  },
  onOrderPlaced: (order) =>
    crm.logActivity(order.reference, order.total)
});
See it running

Here it is, in a portal like yours.

A Zendesk-style support desk, panel mode, the order view. Everything inside the dashed outline is rendered by us; the chrome around it is a mock of the tool your agents live in. The record prefills the whole party. The agent types nothing twice.

support.farebound.co.uk/agent/tickets/48219
Farebound UK Support desk EMEllie Marsh
Views My tickets Customers Reports Zendesk-style desk
Ticket #48219 · Marie Laurent Phone call · 11 min
BookingGGU-88214 SubjectDo we need visas for Kenya? Reply dueIn 2h 40m
Conversation Booking Travel documents
RouteLHR → NBO via DOH Dates12–19 Sep 2026 Party6 adults Fare£4,180.00
EM Called about the Kenya trip she booked in June. A colleague told her the Doha stop needs its own visa. Six travelers, two on non-EU passports.
#visa rendered by SimpleVisa · Desk Embedded ticket 48219 GGU-88214 6 pax LHR→NBO/DOH
EMEllie Marsh · Support agent · Support · London Hide cost Wallet $1,284.00

Laurent party · 6 travelers

London → Nairobi · Doha stop airside, nothing needed · 12–19 Sep 2026
Prefilled from your record
Traveler
Document
Scan
You pay
✓ Marie LaurentFrance · adult
Kenya eTA3 days
Received
$68.00$39.00 + $29
✓ Yassine BennaniMorocco · adult
Kenya eTA3 days
Received
$68.00$39.00 + $29
✓ Tom GrüberGermany · adult
Kenya eTA3 days
Received
$68.00$39.00 + $29
✓ Claire VasseurFrance · adult
Kenya eTA3 days
Waiting
$68.00$39.00 + $29
✓ Peter LindqvistSweden · adult
Kenya eTA3 days
Received
$68.00$39.00 + $29
✓ Nour HaddadLebanon · adult
Kenya eTA3 days
Waiting
$68.00$39.00 + $29
You pay
$408.00
6 of 6 travelers · fee at cost + $29
Your price each
$89
Margin
$126.00
Customer pays $534.00
How it gets paid
Desk walletCharged now · $1,284 left
Payment linkTraveler pays on her phone
Aldervale GroupBilled to the account on file
Filed the moment you press it. Two travelers still owe us a scan. We do the chasing.
Passport data and card details stay inside this frame. Your portal keeps the reference, the status and the amount. sv_desk_session · expires 24 min
the code for what you are looking at
sv.mount('#visa', {
  view:    'order',
  display: 'panel',
  brand:   'farebound',
  context: { ticket: '48219', booking: 'GGU-88214' },
  token    // role: agent · scopes: desk.read desk.write desk.pay.*
});
Identity

A publishable key cannot open this. Wholesale is on the screen.

Traveler elements mount with a key that is safe in page source, because a traveler only ever sees their own price. The desk shows what you pay us, your margin, your wallet and other people's orders. So it mounts with a session your server asks for, on behalf of an agent it has already authenticated.

01

Your portal authenticates the agent

However you do it today: SSO, LDAP, your own session. We never see a password and never issue one. No agent has a SimpleVisa account to forget.

02

Your server asks us for a session

One call with your secret key, carrying who the agent is, which team, which scopes and what they are allowed to spend. Valid 30 minutes, refreshed silently.

03

The mount inherits all of it

The embed renders exactly what those scopes allow. Every order it files is stamped with that agent, that team and your record reference, in your console and in the audit log.

your server · POST /desk_sessions
const { token } = await simplevisa.deskSessions.create({
  agent:  { id: 'u_8823', name: 'Ellie Marsh',
            email: '[email protected]' },
  team:   'support-london',
  role:   'agent',
  scopes: ['desk.read', 'desk.write', 'desk.pay.wallet'],
  limits: { perOrder: 25000, perDay: 150000 },
  brand:  'farebound',
  ttl:    1800
});
What the session carries
agentWho is filing. Shown in the embed, stamped on the order, used in the commission report.
teamScopes the queue and the wallet. A London agent does not see Manchester's orders.
roleagent · manager · finance. Decides pricing rights, approvals and read-only.
scopesdesk.read, desk.write, desk.pay.wallet, desk.pay.link, desk.pay.account, desk.refund.
limitsPer order and per day, in cents. Above it, the embed asks for approval instead of filing.
brandWhich saved brand the embed and the traveler emails wear.
ttlSeconds. 1800 default, 7200 maximum. Refreshed from your server, never extended in the page.
No script tag? Use the signed URL.

Agent desktops on Citrix, GDS windows and locked-down CRMs often cannot load a library. The same session mints a URL, desk.simplevisa.com/s/<token>, that you open in an iframe, a pop-out or a browser tab. Same embed, same scopes, no JavaScript of ours in your page.

Two embeds, one library

Traveler-facing and agent-facing are not the same product.

See the traveler elements →
 
Elements
Desk Embedded
Who is looking
The traveler
Your agent, on your payroll
Mounts with
A publishable key, safe in page source
A session your server mints, 30 minutes, scoped
Prices shown
Retail only: what the traveler pays
Wholesale, your price and the margin between them
Pays how
Card in our iframe
Wallet, corporate account, or a link to the traveler
Sees whose orders
Their own
The team's queue, as the scopes allow
Where it lives
Your booking flow and your account area
Your support desk, agent portal, CRM or back office
Pricing

The embed is free. The control room is the add-on.

We make money when your agents file. So mounting the desk costs nothing and your wholesale rate is unchanged. What is chargeable is the layer a large operation needs around it: directory identity, spend limits, approvals and an exportable audit trail.

See Desk rates on the pricing page
Included on all three models
Free
Desk Embedded · unlimited mounts
Unlimited mounts, portals and agents All four views: order, queue, handover, document Panel, drawer and full-tab display modes The signed-URL route for desktops that cannot load a script Any saved brand, on the embed and on traveler emails Wholesale unchanged; the embed changes nothing commercially
Add-on sits next to the other console add-ons
$500 per month
Desk controls · per account, all portals
SAML or OIDC identity bridge, so sessions mint from your directory rather than a shared secret in your app Per-agent and per-day spend limits, with approval routing above the threshold Audit log: 24 months, exportable, or streamed to your SIEM Team and branch scoping: who sees which queue, which wallet, which brand Sub-agency distribution: each agency its own markup, wallet and statement under your contract Named technical contact and a shared channel for the integration
Waived above 500 desk applications a month. If the embed is working, you stop paying for it.

What we deliberately did not charge for

No per-seat fee: agent turnover is high and a seat count makes portals ration access to the tool that earns you money. No mount fee, no volume tier on the embed, and no premium for the signed-URL route. The margin stays in the application fee.

Wholesale
unchanged by the embed
Your price
set per order, per agency
Nothing
per seat, per mount, per portal
Reality check

Ten things a desk embed has to survive.

A traveler embed only has to be pretty and fast. An agent embed sits in the middle of a phone call, a shared screen, a payroll and an audit. This is the list we design against.

01

The agent is on a call

The whole flow is keyboard-reachable and the common path is under 40 seconds: the record prefills the trip, tab moves through documents, Enter files. Nothing waits on a page load the caller can hear.

02

The screen is being shared

Cost and margin are on screen by default because the agent needs them. One keystroke, or a screen-share flag from your portal, replaces every figure with dots until they press it again.

03

The session expires mid-call

Tokens live 30 minutes and refresh silently from your server. A draft survives the refresh, the tab crash and the transfer to a colleague. An agent never meets a login wall with a customer on the line.

04

The desktop cannot take a script tag

Citrix, GDS windows, locked-down CRMs: the same session mints a signed URL you open in an iframe or a pop-out. No library, no npm, no change-control ticket.

05

Security owns the frame

You allowlist us in your CSP, we allowlist your origins in the console. Both directions are a settings field. The embed asks for no cookies and no storage in your origin.

06

Agents leave on a Friday

Access follows your directory. Disable the account and the next session mint fails. There is no SimpleVisa password to go and revoke, and no shared login being passed around a team.

07

Someone has to answer for the money

Every order carries the agent, the team and your record reference. Per-agent and per-day spend limits, approvals above a threshold, and an audit log you can export or stream: who priced what, when, from which portal.

08

The traveler should sometimes pay

Payment link handover keeps your price and your margin but moves the card away from the agent. Nothing sensitive is read out, nothing lands in the call recording, and the order is only filed once the money is in.

09

Things get cancelled

An agent can cancel and refund inside the embed until the application reaches the government; after that it becomes a support case with a clear reason on screen. Refunds return to the original method, wallet included.

10

Passport data must not land in your CRM

Scans, passport numbers and cards are entered in our frame and posted to us. Your portal receives the reference, the status, the amount and the documents it is allowed to show. Your DPA gets shorter.

Reference

Mount options

vieworder · queue · handover · document. Which surface the mount renders.
displaypanel (default), drawer or tab.
contextYour record: ticket, booking, pnr, trip, sailing, customer. Prefills the order and travels back on every event.
travellersOne entry per passport if your record has them. Prefilled rows render as confirmations for the agent to check.
routeOrigin, destination and every stop with duration and airside flag. Transit rules are answered explicitly.
brandA brand key from the console. Overrides the brand in the token for this mount.
redact'cost' hides wholesale and margin behind a keystroke; set it from your screen-share or QA-recording flag.
locale22 languages. Defaults to the agent's portal locale.
density'comfortable' or 'compact'. Compact fits the embed in a 470px drawer without scrolling.
returnUrlWhere the signed-URL route sends the agent back to when they close the embed.
onEventOne handler for everything, or the named callbacks below.
 

Events and webhooks

onOrderPlacedFiled. Carries reference, wholesale, retail, agent, team and your context. Log it on the record.
onPaymentLinkSentHandover started. Carries the link, the channel and the expiry so your portal can show it too.
onApprovalRequestedAn agent hit their limit. Fires for your own approval inbox as well as ours.
onStatusChangeAn application moved. Also a webhook, with channel: "desk_embed" and the host portal named.
onWalletLowWallet fell under the top-up threshold. Warn finance before an agent meets a hard stop.
onSessionExpiringFires 60 seconds out so your portal can mint a fresh token without the agent noticing.
Where it shows up in the console

Desk orders filed from an embed land in the same Desk screen as the ones your agents file in our console: same list, same wallet, same commission report, with the host portal and record reference on each row. Mounts and their scopes are managed under Desk · agents and settings.

See the partner console →

Mint a test session today.

Mint a test session, mount it in a staging portal, file against test data. Switch the key when your security review is done.