{
  "id": 2069308,
  "title": "A 200 from a Stripe payment link does not mean the link exists",
  "url": "https://urgent.news/2026/08/20/a-200-from-a-stripe-payment-link-does-not-mean-the-link-exists",
  "topic": "tech",
  "section": "Tech",
  "published": "2026-08-20T04:07:28.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/toolkitlabs/a-200-from-a-stripe-payment-link-does-not-mean-the-link-exists-mi1"
  },
  "original_language": "en",
  "account": "A Stripe payment link's 200 status code does not confirm its existence. During CI checks, a curl command asserts a 200 status on the payment link URL in the README, but this cannot fail. Our release verifier extracts payment URLs from published packages and follows them. On 2026-08-20T03:45:55Z, it followed six real links and one 23-digit zero slug, which was found to be non-existent. The hosted payment page is a JavaScript shell, and the slug is resolved after document load, making a GET request yield the same HTML regardless of the link's state. The Stripe API's response only indicates the host's availability, not the link's validity. Two key takeaways: the slug in the URL isn't the object ID, and there's no lookup-by-slug endpoint. To resolve links, use the API, not HTTP fetches. A test-mode link in a production README returns a 200 status, indicating no difference from a live link. Compare the amount from the shipped artefact to the extracted amount_total to catch any discrepancies. Additionally, client_reference_id survives redirects, which can help identify the surface on which a link was published. Lastly, Stripe's robots.txt disallows automated fetching of their site.",
  "summary": "it followed six real links, and then one slug made of twenty-three zeros: URL followed status body bytes body…",
  "key_points": [
    "Stripe payment link's 200 status code doesn't confirm its existence.",
    "Release verifier found a non-existent 23-digit zero slug.",
    "Use Stripe API to resolve links, not HTTP fetches."
  ],
  "editors_take": null,
  "illustration": null,
  "coverage": {
    "outlets": 1,
    "also_reported_by": []
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}