<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel>
<title>SkillHammer posts</title>
<link>https://skillhammer.com/posts/</link>
<description>Short, practical posts from SkillHammer.</description>
<language>en-gb</language>
<lastBuildDate>Wed, 28 Oct 2026 00:00:00 +0000</lastBuildDate>
<item><title>Stop duplicate QuickBooks invoices with requestid</title><link>https://skillhammer.com/posts/quickbooks-requestid-duplicate-invoices/</link><guid isPermaLink="true">https://skillhammer.com/posts/quickbooks-requestid-duplicate-invoices/</guid><pubDate>Wed, 28 Oct 2026 00:00:00 +0000</pubDate><description>A timed-out create can still succeed in QuickBooks Online. Send a stable requestid on every write so a retry returns the original instead of a second invoice.</description></item>
<item><title>Only send a Stripe final notice when no retry is left</title><link>https://skillhammer.com/posts/stripe-final-notice-next-payment-attempt/</link><guid isPermaLink="true">https://skillhammer.com/posts/stripe-final-notice-next-payment-attempt/</guid><pubDate>Tue, 27 Oct 2026 00:00:00 +0000</pubDate><description>Don&#x27;t decide a failed payment is the last one by counting attempts. Check the invoice&#x27;s next_payment_attempt instead.</description></item>
<item><title>Stop link previews approving your n8n drafts</title><link>https://skillhammer.com/posts/n8n-approval-links-get-safe/</link><guid isPermaLink="true">https://skillhammer.com/posts/n8n-approval-links-get-safe/</guid><pubDate>Mon, 26 Oct 2026 00:00:00 +0000</pubDate><description>Email scanners and chat link previews open links on their own. If an n8n approval link acts on GET, approval can fire before anyone reads it.</description></item>
<item><title>Stop old Stripe events overwriting subscription access</title><link>https://skillhammer.com/posts/stripe-out-of-order-subscription-events/</link><guid isPermaLink="true">https://skillhammer.com/posts/stripe-out-of-order-subscription-events/</guid><pubDate>Sun, 25 Oct 2026 00:00:00 +0000</pubDate><description>Stripe doesn&#x27;t promise to deliver webhook events in order, so an older customer.subscription.updated can undo a newer one. Here&#x27;s a simple guard.</description></item>
<item><title>Stop QuickBooks invalid_grant after a token refresh</title><link>https://skillhammer.com/posts/quickbooks-invalid-grant-refresh-token/</link><guid isPermaLink="true">https://skillhammer.com/posts/quickbooks-invalid-grant-refresh-token/</guid><pubDate>Sat, 24 Oct 2026 00:00:00 +0000</pubDate><description>QuickBooks Online refresh tokens can rotate when you refresh. Save the new one every time, and refresh once per company, or you&#x27;ll get invalid_grant.</description></item>
<item><title>Fix Stripe webhook signature errors in Express</title><link>https://skillhammer.com/posts/stripe-webhook-signature-errors-express/</link><guid isPermaLink="true">https://skillhammer.com/posts/stripe-webhook-signature-errors-express/</guid><pubDate>Fri, 23 Oct 2026 00:00:00 +0000</pubDate><description>Two common causes of Stripe&#x27;s &quot;No signatures found matching the expected signature&quot; error in Express, and how to fix each.</description></item>
</channel></rss>
