LinkJolt
io.linkjolt/linkjoltlinkjolt.iostreamable-httpv1.0.0Scanned
For businesses that pay affiliates: set up and run your affiliate program from your AI assistant.
27 tools: 4 can delete or cancel things, 2 do something that can't be undone, 6 change things and 15 only read.
- Reads private data · 1
- Reads text others write · 11
- Can send data out · 3
- 2 findings
Anlyon alternative
12 of these tools change something. Run those as governed actions.
Declare what an action changes, and Anlyon puts it under a shared limit, binds every approval to the exact request, and grades the outcome. It works on any HTTPS API you can describe as an action.
Anlyon does not run, proxy or govern this MCP server. A tool your own code calls directly is not routed through Anlyon and is not governed by it.
Import an OpenAPI spec →Tools
Grouped by what each tool does, most consequential first. Open one for its reasons and full description; descriptions are the publisher's own words.
27 tools
Deletes or cancels 4Claude Code: deny
update_affiliate_statusApprove or reject an affiliate who applied to a campaign and is waiting for review (list_affiliates with status pending shows who is waiting, with each campaign they applied to).Reads text others writeNo findings
Why it is in this group
- The name "update_affiliate_status" says "update": a word for a change.
- The server marks it destructive (destructiveHint: true).
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Approve or reject an affiliate who applied to a campaign and is waiting for review (list_affiliates with status pending shows who is waiting, with each campaign they applied to). Approving lets them promote the campaign at once: they get their link by email, and a coupon code too when the campaign makes them. Rejecting is final from here: they cannot apply again, and only the dashboard can let them back in. Confirm each decision with the user before calling. This never approves sales or commissions. Requires Pro plan or higher.
Annotations the server declares
- title: Approve or reject affiliate
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: true
update_businessSet the business name and website for this LinkJolt account (the brand the connection belongs to).Reads text others writeNo findings
Why it is in this group
- The name "update_business" says "update": a word for a change.
- The server marks it destructive (destructiveHint: true).
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Set the business name and website for this LinkJolt account (the brand the connection belongs to). Affiliates see the name on the join page and in emails. Send either or both. Requires Pro plan or higher, or a new account that has not picked a plan yet; live keys only.
Annotations the server declares
- title: Update business details
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: true
update_campaignChange an existing campaign: its name, description, where links send people, status (active, or inactive to pause it), the commission, whether it is listed in the Discovery marketp…Reads text others writeNo findings
Why it is in this group
- The name "update_campaign" says "update": a word for a change.
- The server marks it destructive (destructiveHint: true).
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Change an existing campaign: its name, description, where links send people, status (active, or inactive to pause it), the commission, whether it is listed in the Discovery marketplace, whether new affiliates are approved automatically, or the recurring commission terms. Send only what changes; everything else stays as it is. Confirm the exact change with the user before calling, because affiliates see the new terms at once. Commission tiers, coupon codes, files and prices are changed on the dashboard. Returns the campaign and `changed`, the fields that actually changed. Requires Pro plan or higher; live keys only.
Annotations the server declares
- title: Change campaign
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: true
update_conversionApprove or reject a pending conversion.Reads text others writeNo findings
Why it is in this group
- The name "update_conversion" says "update": a word for a change.
- The server marks it destructive (destructiveHint: true).
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Approve or reject a pending conversion. Requires an Ultimate or Scale plan key with write access. Refunded conversions are terminal and cannot be changed. Approving a conversion whose commission is more than 5 times its sale (or any commission on a zero sale) is refused with commission_above_sale and changes nothing; show the user the returned sentence and set confirmAboveSale to true only after they confirm. If automatic payouts are switched on for the brand, approving a conversion queues its commission for the next automatic payout run (at least a day later, Stripe payouts only; affiliates paid by PayPal or Wise are paid by hand), and rejecting an approved one takes it back out of that queue. This tool never sends money itself.
Annotations the server declares
- title: Approve or reject conversion
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: true
Can't be undone 2Claude Code: ask
create_conversionManually record a conversion (a sale to credit to an affiliate).Reads text others writeNo findings
Why it is in this group
- The name "create_conversion" says "create": a word for a change.
- The input carries an amount (input.amount) and a currency, so it moves money.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Manually record a conversion (a sale to credit to an affiliate). Like any tracked sale, a live one notifies the merchant's team and emails the affiliate it credits. Requires an Ultimate or Scale plan key with write access. Test keys record test data and email nobody.
Annotations the server declares
- title: Record conversion
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
invite_affiliateEmail one person an invitation to join a campaign as an affiliate.Reads text others writeCan send data outNo findings
Why it is in this group
- The name "invite_affiliate" says "invite": a word for sending, and what is sent cannot be taken back.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
- outboundThe name "invite_affiliate" says "invite": it sends or publishes something to other people.
Description, as the server wrote it Email one person an invitation to join a campaign as an affiliate. This sends a real email in the business's name, so confirm the address and campaign with the user first. Refused when the person is already on the campaign or already has a waiting invitation. At most 10 a minute. Requires Pro plan or higher.
Annotations the server declares
- title: Invite affiliate
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
Changes things 6Claude Code: ask
check_trackingCheck that affiliate tracking works, after the tracking script has been added: fetches a page of the site (the business website unless url is given) and looks for this account's ta…Reads text others writeCan send data outNo findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
- outboundThe input takes a URL (input.url): a request to a URL can carry data to whoever runs it.
Description, as the server wrote it Check that affiliate tracking works, after the tracking script has been added: fetches a page of the site (the business website unless url is given) and looks for this account's tag, then says whether a browser has run the script, whether a payment platform is connected, and whether a test-mode purchase has reached LinkJolt (the one tool that shows test sales). Each check comes with a sentence and next names the first thing left to do. Run it after the script is deployed, and again after the person buys once in their payment platform's test mode through an affiliate link. Requires Pro plan or higher, or a new account that has not picked a plan yet.
Annotations the server declares
- title: Check tracking works
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
create_campaignCreate an affiliate campaign: what affiliates earn per sale and where their links send people.Reads text others writeCan send data outNo findings
Why it is in this group
- The name "create_campaign" says "create": a word for a change.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
- outboundThe input takes a URL (input.targetUrl): a request to a URL can carry data to whoever runs it.
Description, as the server wrote it Create an affiliate campaign: what affiliates earn per sale and where their links send people. Returns the campaign and its joinUrl, the link to share with affiliates so they can sign up. Confirm the commission with the user before calling. A new campaign is active at once and, unless isPublic is false, listed in LinkJolt's Discovery marketplace where affiliates browse programs. Recurring commissions pay on renewals too. The plan's campaign limit applies. Requires Pro plan or higher; live keys only.
Annotations the server declares
- title: Create campaign
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
create_couponGive an affiliate a discount code so sales using it are credited to them.Reads text others writeNo findings
Why it is in this group
- The name "create_coupon" says "create": a word for a change.
- The input takes a statement or command to run (input.code), which can change anything it can reach.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Give an affiliate a discount code so sales using it are credited to them. With createInProvider true, LinkJolt creates the code in the brand's connected Stripe, Polar or Creem (the one it creates codes in unless provider is given), as the dashboard's Add coupon does: set percentOff, or amountOff with currency, and duration (once, forever, or repeating with durationInMonths). Without it, the code must already exist in the payment platform and this registers it (for a Stripe code customers type, pass its promo_ id). Confirm the code, the discount and the affiliate with the person first. If no platform that creates codes is connected, the answer gives the link to connect Stripe. Requires an Ultimate or Scale plan key with write access; a test key only registers.
Annotations the server declares
- title: Create or register coupon code
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
get_linkjolt_plansLinkJolt's plans and prices, each plan's monthly tracked-sales limit, what this connector can do on each plan, and how the free trial works.1 finding
Why it is in this group
- The name "get_linkjolt_plans" says "get": a word for reading.
- The description's first verb is "link": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "get_linkjolt_plans" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "get_linkjolt_plans" says "get": a word for reading.
Description, as the server wrote it LinkJolt's plans and prices, each plan's monthly tracked-sales limit, what this connector can do on each plan, and how the free trial works. Needs no LinkJolt account. Use it when someone asks what LinkJolt costs or which plan they need.
Annotations the server declares
- title: Get LinkJolt plans
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
list_couponsList registered affiliate coupon codes.1 finding
Why it is in this group
- The name "list_coupons" says "list": a word for reading.
- The input takes a statement or command to run (input.code), which can change anything it can reach.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "list_coupons" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "list_coupons" says "list": a word for reading.
Description, as the server wrote it List registered affiliate coupon codes. Requires Pro plan or higher.
Annotations the server declares
- title: List coupons
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
plan_affiliate_programPlan an affiliate program for a product before launching it: a commission rate, whether to pay on renewals, and how to approve affiliates, from LinkJolt's published benchmarks of r…No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Plan an affiliate program for a product before launching it: a commission rate, whether to pay on renewals, and how to approve affiliates, from LinkJolt's published benchmarks of real SaaS programs, plus what an affiliate would earn per sale at typical rates. Needs no LinkJolt account. Use it when someone asks what commission to offer or how to structure a program.
Annotations the server declares
- title: Plan an affiliate program
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
Only reads 15Show 15 read-only tools
fetchUse this to fetch the full record behind a search result id (campaign:<id>, affiliate:<id>, coupon:<id>, or conversion:<id>).No findings
Why it is in this group
- The name "fetch" says "fetch": a word for reading.
Description, as the server wrote it Use this to fetch the full record behind a search result id (campaign:<id>, affiliate:<id>, coupon:<id>, or conversion:<id>). Requires Pro plan or higher.
Annotations the server declares
- title: Fetch a record
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
get_campaignGet one campaign with full detail, including affiliate count.No findings
Why it is in this group
- The name "get_campaign" says "get": a word for reading.
Description, as the server wrote it Get one campaign with full detail, including affiliate count. Requires Pro plan or higher.
Annotations the server declares
- title: Get campaign
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
get_program_overviewThis month's program snapshot in one call: revenue, conversions, commissions, top affiliates by commission, and the most recent conversions.No findings
Why it is in this group
- The name "get_program_overview" says "get": a word for reading.
Description, as the server wrote it This month's program snapshot in one call: revenue, conversions, commissions, top affiliates by commission, and the most recent conversions. In clients that show MCP Apps cards (Claude, ChatGPT) this renders as an interactive card; other clients get the same data as JSON. Requires Pro plan or higher.
Annotations the server declares
- title: Program overview
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
get_setup_statusWhere this LinkJolt account is in setting up its affiliate program: the business name and website, the launch steps (business details, campaign, payment connection, first affiliate…Reads text others writeNo findings
Why it is in this group
- The name "get_setup_status" says "get": a word for reading.
What it can reach
- untrusted-inputThe description's first sentence says "website": it reads web pages, which anyone can write.
Description, as the server wrote it Where this LinkJolt account is in setting up its affiliate program: the business name and website, the launch steps (business details, campaign, payment connection, first affiliate, first sale) with the next one to do, the tracking script tag for the site and whether it has been seen, and each campaign's join link. Call it first when helping someone set up or launch. When business.needsDetails is true the name is a placeholder LinkJolt made at sign-up (from the email domain, or the person's first name): ask for the real one. Connecting Stripe or another payment platform can only be done by the person in the browser; connectLinks gives Stripe's one-click link for this account and the page for the others. Requires Pro plan or higher, or a new account that has not picked a plan yet.
Annotations the server declares
- title: Get setup status
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
get_statsGet aggregate stats for the brand: revenue, commissions, conversions, clicks (optionally within a date range), with money also listed per currency in byCurrency.No findings
Why it is in this group
- The name "get_stats" says "get": a word for reading.
Description, as the server wrote it Get aggregate stats for the brand: revenue, commissions, conversions, clicks (optionally within a date range), with money also listed per currency in byCurrency. Requires Pro plan or higher.
Annotations the server declares
- title: Get account stats
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
get_teamGet one Affiliate Team with members, campaigns and goals.No findings
Why it is in this group
- The name "get_team" says "get": a word for reading.
Description, as the server wrote it Get one Affiliate Team with members, campaigns and goals. Requires the Scale plan.
Annotations the server declares
- title: Get team
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
get_tracking_instructionsThe steps to track affiliate sales on one payment platform, filled in with this account's own tracking script and webhook address: the same text the Integrations page gives to AI a…No findings
Why it is in this group
- The name "get_tracking_instructions" says "get": a word for reading.
Description, as the server wrote it The steps to track affiliate sales on one payment platform, filled in with this account's own tracking script and webhook address: the same text the Integrations page gives to AI assistants. Use it to help add the tracking script to the site and pass the referral to checkout, then check_tracking to confirm it works. Connecting the platform itself happens in the browser (connectLinks: Stripe in one click, the others on the Integrations page), and for Stripe, Paddle, Polar and Creem connecting there sets up the webhook, so a manual webhook step is only needed without that connection. Requires Pro plan or higher, or a new account that has not picked a plan yet.
Annotations the server declares
- title: Get tracking instructions
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
list_affiliatesList affiliates across your campaigns, with earnings and click counts.No findings
Why it is in this group
- The name "list_affiliates" says "list": a word for reading.
Description, as the server wrote it List affiliates across your campaigns, with earnings and click counts. Requires Pro plan or higher.
Annotations the server declares
- title: List affiliates
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
list_awardsList team bonus awards across all teams, for reconciliation.No findings
Why it is in this group
- The name "list_awards" says "list": a word for reading.
Description, as the server wrote it List team bonus awards across all teams, for reconciliation. Read-only: approving awards is deliberately not available to assistants. Requires the Scale plan.
Annotations the server declares
- title: List bonus awards
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
list_campaignsList the affiliate campaigns on this LinkJolt account (the brand the API key belongs to), with stats.No findings
Why it is in this group
- The name "list_campaigns" says "list": a word for reading.
Description, as the server wrote it List the affiliate campaigns on this LinkJolt account (the brand the API key belongs to), with stats. Requires Pro plan or higher.
Annotations the server declares
- title: List campaigns
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
list_conversionsList conversions (tracked sales) with filters for status, campaign, affiliate and date range.No findings
Why it is in this group
- The name "list_conversions" says "list": a word for reading.
Description, as the server wrote it List conversions (tracked sales) with filters for status, campaign, affiliate and date range. Requires Pro plan or higher.
Annotations the server declares
- title: List conversions
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
list_payoutsList the affiliate payout queue for reconciliation.No findings
Why it is in this group
- The name "list_payouts" says "list": a word for reading.
Description, as the server wrote it List the affiliate payout queue for reconciliation. Requires Pro plan or higher.
Annotations the server declares
- title: List payouts
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
list_team_goalsList a team's targets and current-period progress.No findings
Why it is in this group
- The name "list_team_goals" says "list": a word for reading.
Description, as the server wrote it List a team's targets and current-period progress. Requires the Scale plan.
Annotations the server declares
- title: List team targets
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
list_teamsList Affiliate Teams with rosters, targets and pending awards.No findings
Why it is in this group
- The name "list_teams" says "list": a word for reading.
Description, as the server wrote it List Affiliate Teams with rosters, targets and pending awards. Requires the Scale plan.
Annotations the server declares
- title: List teams
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
searchUse this to find records in the caller's own LinkJolt affiliate program by free text: campaign names, affiliate names or emails, coupon codes, and conversion order ids or customer …Reads private dataReads text others writeNo findings
Why it is in this group
- The name "search" says "search": a word for reading.
What it can reach
- private-dataThe description's first sentence says "find" and "email": it reads mail.
- untrusted-inputThe description's first sentence says "find" and "email": it reads inbound email, which other people can write.
Description, as the server wrote it Use this to find records in the caller's own LinkJolt affiliate program by free text: campaign names, affiliate names or emails, coupon codes, and conversion order ids or customer names. Returns result ids that the fetch tool resolves to full records. Requires Pro plan or higher.
Annotations the server declares
- title: Search your program
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Exfil surface
Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.
33 paths in this server alone from private data, through text someone else wrote, to a way out. Denying 1 private-data tool breaks every one.
- Reads private data1
- Reads files, mail, messages, databases, secrets, calendars or repositories.
- Reads text others write11
- Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
- Can send data out3
- Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.
{
"permissions": {
"deny": [
"mcp__linkjolt__search"
]
}
}Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.
Findings
Matches of fixed checks, with the text they matched.
The server marks "get_linkjolt_plans" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "get_linkjolt_plans" says "get": a word for reading.
- Warnlist_coupons
The server marks "list_coupons" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "list_coupons" says "list": a word for reading.
History
Changes to its tool definitions and to its remote endpoint, newest first.
No change seen yet. Its tools are rescanned every day, and a remote endpoint is looked at once a week.
Install
Pinned to version 1.0.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http linkjolt https://www.linkjolt.io/api/mcpclaude mcp add --transport http linkjolt https://www.linkjolt.io/api/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__linkjolt__get_setup_status",
"mcp__linkjolt__get_tracking_instructions",
"mcp__linkjolt__list_campaigns",
"mcp__linkjolt__get_campaign",
"mcp__linkjolt__list_affiliates",
"mcp__linkjolt__list_conversions",
"mcp__linkjolt__get_stats",
"mcp__linkjolt__list_teams",
"mcp__linkjolt__get_team",
"mcp__linkjolt__list_team_goals",
"mcp__linkjolt__list_awards",
"mcp__linkjolt__list_payouts",
"mcp__linkjolt__search",
"mcp__linkjolt__get_program_overview",
"mcp__linkjolt__fetch"
],
"ask": [
"mcp__linkjolt__plan_affiliate_program",
"mcp__linkjolt__get_linkjolt_plans",
"mcp__linkjolt__create_campaign",
"mcp__linkjolt__invite_affiliate",
"mcp__linkjolt__check_tracking",
"mcp__linkjolt__create_conversion",
"mcp__linkjolt__list_coupons",
"mcp__linkjolt__create_coupon"
],
"deny": [
"mcp__linkjolt__update_business",
"mcp__linkjolt__update_campaign",
"mcp__linkjolt__update_affiliate_status",
"mcp__linkjolt__update_conversion"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as linkjolt. Review it before you use it.
Capability tags behind 11 rules
- mcp__linkjolt__get_setup_status untrusted-input
- mcp__linkjolt__update_business untrusted-input
- mcp__linkjolt__create_campaign untrusted-input, outbound
- mcp__linkjolt__update_campaign untrusted-input
- mcp__linkjolt__invite_affiliate untrusted-input, outbound
- mcp__linkjolt__update_affiliate_status untrusted-input
- mcp__linkjolt__check_tracking untrusted-input, outbound
- mcp__linkjolt__create_conversion untrusted-input
- mcp__linkjolt__update_conversion untrusted-input
- mcp__linkjolt__create_coupon untrusted-input
- mcp__linkjolt__search private-data, untrusted-input
Pin
Keep the decision: fail CI when the tools change, follow every change, or show a badge.
Pin in CI
Fail a build when the tools you reviewed are not the tools the server serves today.
curl -s "https://anlyon.dev/api/v1/servers/io.linkjolt/linkjolt/verify?hash=8980cd7307bb743504bfc9f2a3a6cfe71101785b450c2a31171ac7464edd4aaf" | jq -e '.changed == false'Pinned hash 8980cd7307bb, from Nov 2, 2026, 22:18 UTC.
Watch
Get told when its tools change: a new tool, a new description, a new class.
https://anlyon.dev/servers/io.linkjolt/linkjolt/changes.xmlAn Atom feed. Works in any feed reader or Slack's RSS app.
Badge
[](https://anlyon.dev/servers/io.linkjolt/linkjolt)Source: MCP Registry. Synced Nov 2, 2026, 22:18 UTC.