Product

Everything between the send and the answer

Fromenance is a communication provenance platform, and this page is the whole of it: you register every outbound message as you send it, and when a customer asks, they get Verified, Not verified, or Known fraud from you in seconds. Every piece below exists to make that answer fast, certain, and something your compliance team is comfortable putting your name on.

  • Verified

    "Verified: this message matches a communication we registered and sent to you on September 24, 2026 at 10:42 AM UTC."

  • Not verified

    "Not verified: no registered communication matches this message. That does not by itself mean it is fraudulent, but treat it with caution."

  • Known fraud

    "Known fraud: this message matches an impersonation attempt our fraud team has confirmed. Do not interact with it."

Registration

Three ways to tell us what you sent

Everything downstream depends on coverage, so we made registration cheap in all three shapes we have seen at institutions: an application that can make a call, an ESP that can fire a webhook, and a vendor system that can only BCC.

ESP adapters in v1
ProviderRendered body availableHow the code gets into the footer
ResendYesCustom header or reserve
SendGridNoReserve, then custom_args and a substitution tag
Amazon SESNoReserve, message tag
PostmarkYesReserve or metadata
MailgunNoReserve, v: variable
Salesforce Marketing CloudNoReserve from SSJS, AMPscript merge field
BrazeNoReserve from connected content, Liquid attribute
Generic webhookNoReserve; post message id, recipient, sent time, from, code

The footer carries the code twice, once in the sentence and once on its own, so at least one copy survives a mail client rewrapping it or a phone camera reading it: "Not sure this email is from JT Merlin Bank? Forward it to verify@jtmerlin.com or enter code KX73-PQ9G at jtmerlin.com/verify. Reference: KX73-PQ9G".

Verification

Two ways for a customer to ask, one trust model

Verdicts

Three answers

Matched by rules you can read, with wording that is locked in the reply template so nobody can soften it or oversell it.

Matching rules
OutcomeWhen
VerifiedThe code leads to a registration whose recipient hash matches the person asking. Or, with no code, the recipient hash matches and the fingerprint is within threshold and the send time is inside the window.
Not verified footer replayedThe code is real but the recipient does not match and the content is far off. The customer sees Not verified; you see a replay flag with high priority in the intelligence queue.
Not verifiedNothing matches on any rule. In Authoritative Mode the reply reads "we did not send this".
Known fraudOne of the extracted indicators is on your fraud list, or the fingerprint matches a submission an analyst already marked as fraud.

Demo

Watch a verdict come back

The same widget your customers would use on yourdomain.com/verify, pointed at the demo tenant on the production API.

Try it on the real API

This is the demo tenant, JT Merlin Bank (demo), on the production API with site keysk_pub_demo_jtmerlin. The latency you see is the latency your customers would see.

The real alert

We registered this fraud alert at send time, addressed tojane.doe@example.com. The footer carries the code twice on purpose: one copy usually survives whatever a mail client does on the way.

JT Merlin Bank

We noticed a card transaction

Hi Jane,

A purchase of $412.90 at ACME ELECTRONICS was made with your JT Merlin Bank Visa ending in 4471 on September 24 at 10:42 AM.

If this was you, no action is needed. If you do not recognize this transaction, review it in the app or call the number on the back of your card.

Review this transaction: https://www.jtmerlin.com/app/alerts/tx/98812?utm=email

Thank you,
JT Merlin Bank Fraud Team

Not sure this email is from JT Merlin Bank? Forward it to verify@jtmerlin.com or enter code KX73-PQ9G at jtmerlin.com/verify. Reference: KX73-PQ9G

JT Merlin Bank, Member FDIC. 1 Merlin Plaza, Wilmington, DE 19801. Privacy: https://www.jtmerlin.com/privacy

Ask the bank

Codes belong to one recipient. Send a code without the address it went to and we treat it as a copied footer, so it comes back Not verified. Change this address and watch the same code fail.

Notice what the reply does not do. It never quotes the suspicious message or repeats its links. It says only what the bank can stand behind: a registered communication matches, or none does.

Analyst tools

Dense, fast, and built for an incident

The admin app is where a fraud analyst lives during a campaign and where an integration engineer spends one afternoon. Tables with column pick, sort, saved filters, and CSV export. The verdict colors appear nowhere else in the app.

Control and privacy

What we did before asking anyone to route mail through us

We are asking institutions to send us customer mail, so the security story was finished before the first pilot, not after. The full account is on the Security page.

Intelligence tier

What comes next, marked as such

The schema, the indicator store, and the intelligence queue ship in v1 so nothing has to be backfilled. The pieces below are the roadmap, and we label them that way everywhere.

Read about the intelligence layer

FAQ

Questions we get on the first call

Does the customer ever see the Fromenance name?
No. Everything the customer touches is on your domain and in your branding: verify@yourdomain.com, yourdomain.com/verify, and the reply from your reply identity. Your staff see our name in the admin app and the docs, and that is it.
What do you actually store about a registered communication?
A verify code, a one way hash of the recipient address keyed with your tenant secret, a SimHash and SHA-256 fingerprint of the text, the message id, the visible From, the sent time, the link domains, and optional template and campaign ids. There is no column for the recipient's address. It does not exist.
What happens to a legitimate message we forgot to register?
It comes back Not verified with the words "no registered communication matches", never "fraudulent". An analyst can mark it legitimate, which registers it retroactively and flags a coverage gap on that source. Authoritative Mode, where the reply says "we did not send this", is only switched on after we have reviewed coverage with you.
Which ESPs do you work with?
Resend, SendGrid, Amazon SES, Postmark, Mailgun, Salesforce Marketing Cloud, Braze, and a generic webhook. Where the ESP cannot give us the rendered body, you reserve a code before send and drop it in with the ESP's merge mechanism; matching then leans on the code plus the recipient.
How fast is a verdict?
Our targets are under 10 seconds at p95 from inbound webhook to reply sent, under 3 seconds for a pasted message on the web page, and under 15 seconds for a screenshot. The demo on this page runs against the production API, so you can see the latency for yourself.
Can a phishing message trick the matcher?
There is no model on the verdict path to trick. A verdict comes from a checksummed verify code resolving to a registration, a hash comparison of the recipient, and a fingerprint within a Hamming threshold. A copied footer comes back Not verified and is flagged as a replay.

Start with one stream and a 60 to 90 day pilot.

Pick your fraud alerts or your transaction alerts, the messages your customers already squint at. At the end you get a written report: how many people asked, what they were told, which campaigns turned up, and what your existing feeds missed.