See the decision. Then call it.

Jev 1.13 Text state 4 of 8 decisions

This result is recorded. Editing the state and running sends a new request to Jev.

The reader's next stepYes / No
Same search queryYes / No
How far off the jobScore
Whether to linkChoice

Recorded Jev result

Whether to link

Do not link · 100%

Do not add the link. The shared event-id sentence is not enough.

Probability breakdown
Merge the pages0%Do not link100%Add the link0%

The reader's next step

No · 95%

A Stripe-vs-Adyen comparison is not the next step of retrying a webhook.

Same search query

No · 94%

The source ranks for webhook retry. The target ranks for Stripe vs Adyen.

How far off the job

2.17 / 3

The reader is trying to stop a second charge. The target is a processor comparison.

Probability breakdown
The target is the next step, on a different query.5%The target helps after the source task is finished.5%The target mentions the topic and then does a different job.58%The pages rank for the same query, or the anchor names a different job.32%
Example notes

Do not add this link

Someone reading how to stop a second Stripe charge does not need a Stripe-vs-Adyen comparison next. One shared mention of event ids is not a reason to link the pages.

  • The source page teaches how to retry a webhook and stop a second charge.
  • The target compares fees, disputes, and payout timing.
  • The pages rank for different queries.

Request

POST /api/v1/call

API Call the same request from your code.

MCP Use the same decision from Cursor, Claude Code, or Codex.

POST /api/v1/call

{
  "model": "typesafe/jev-1.13",
  "state": "Source: /guides/webhook-retries\nTitle: Retry a failed Stripe webhook\nRanks for: stripe webhook retry\n2,400 impressions and 90 clicks in the last 28 days. Last edited 12 March 2026.\nThe page says: store the provider event id and return 200 when the same event is delivered again. It does not compare payment processors.\n\nTarget: /compare/stripe-vs-adyen\nTitle: Stripe vs Adyen for SaaS billing\nRanks for: stripe vs adyen\n6,100 impressions and 240 clicks in the last 28 days.\nThe page compares fees, disputes, and payout timing. One paragraph says a duplicate webhook should store the event id.\n\nProposed link: from the retry guide, anchor text \"Stripe vs Adyen\", pointing at the comparison.\nThe reader on the source page is trying to stop a second charge.",
  "questions": {
    "next": {
      "type": "noul",
      "instructions": "Is the target the next step of the job the source page is teaching?",
      "criteria": {
        "true": "The target is the procedure the source tells the reader to do next, and it is not a second page on the same query.",
        "false": "The target is a different job, or it repeats the source for the same query."
      }
    },
    "same": {
      "type": "noul",
      "instructions": "Do both pages name the same query as the query they rank for?",
      "criteria": {
        "true": "Both pages name the same ranking query.",
        "false": "The pages name different ranking queries."
      }
    },
    "fit": {
      "type": "score",
      "instructions": "How far is this link from the job the source reader is in the middle of?",
      "criteria": [
        "The target is the next step, on a different query.",
        "The target helps after the source task is finished.",
        "The target mentions the topic and then does a different job.",
        "The pages rank for the same query, or the anchor names a different job."
      ]
    },
    "action": {
      "type": "choice",
      "instructions": "What should the site do with this proposed internal link?",
      "criteria": {
        "add": "The target is the next step of the source job, and the two pages rank for different queries.",
        "skip": "The target is a different job, and the two pages rank for different queries. Do not add the link.",
        "merge": "Both pages rank for the same query. Consolidate them instead of linking."
      }
    }
  }
}