<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Shieldz</title>
    <description>The latest articles on DEV Community by Shieldz (@shieldz).</description>
    <link>https://dev.to/shieldz</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4009922%2F8bffcbf6-e65c-4de8-8ebd-1b990c8511e2.png</url>
      <title>DEV Community: Shieldz</title>
      <link>https://dev.to/shieldz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shieldz"/>
    <language>en</language>
    <item>
      <title>Best crypto payment gateways in 2026 (non-custodial vs custodial)</title>
      <dc:creator>Shieldz</dc:creator>
      <pubDate>Tue, 30 Jun 2026 22:02:26 +0000</pubDate>
      <link>https://dev.to/shieldz/best-crypto-payment-gateways-in-2026-non-custodial-vs-custodial-2m0h</link>
      <guid>https://dev.to/shieldz/best-crypto-payment-gateways-in-2026-non-custodial-vs-custodial-2m0h</guid>
      <description>&lt;p&gt;If you searched "best crypto payment gateways 2026," you have already seen ten listicles that rank whoever pays them the most. This one ranks on the only axis that actually changes your risk: &lt;strong&gt;who holds your money.&lt;/strong&gt; Everything else, fees, payout delays, account freezes, follows from that single decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  The one question that sorts every gateway
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Custodial&lt;/strong&gt; gateways receive the customer's coins into &lt;em&gt;their&lt;/em&gt; wallet, hold a balance for you, and pay you out on their schedule. Convenient, and the source of every percentage fee, payout delay, and "your account is under review" email.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Non-custodial&lt;/strong&gt; gateways never hold your money. You give a public receiving key, the customer pays an address that belongs to you, and the gateway only watches the chain and tells you it landed. No balance to skim, nothing to freeze.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sort the 2026 field by that first, then look at fees.&lt;/p&gt;

&lt;h2&gt;
  
  
  The comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Gateway&lt;/th&gt;
&lt;th&gt;Custody&lt;/th&gt;
&lt;th&gt;Platform fee&lt;/th&gt;
&lt;th&gt;KYC to start&lt;/th&gt;
&lt;th&gt;Coins&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Shieldz&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Non-custodial&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;$0&lt;/strong&gt; (network gas only)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;No&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;BTC, shielded Zcash, USDC/USDT on 5 chains&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BTCPay Server&lt;/td&gt;
&lt;td&gt;Non-custodial (self-hosted)&lt;/td&gt;
&lt;td&gt;$0 (you host it)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;BTC, Lightning, some altcoins&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Coinbase Commerce&lt;/td&gt;
&lt;td&gt;Custodial flows&lt;/td&gt;
&lt;td&gt;~1%&lt;/td&gt;
&lt;td&gt;Business verification&lt;/td&gt;
&lt;td&gt;Major coins&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BitPay&lt;/td&gt;
&lt;td&gt;Custodial&lt;/td&gt;
&lt;td&gt;~1% + settlement&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Major coins&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NOWPayments&lt;/td&gt;
&lt;td&gt;Processor-custody&lt;/td&gt;
&lt;td&gt;~0.5%+&lt;/td&gt;
&lt;td&gt;Varies&lt;/td&gt;
&lt;td&gt;300+ coins&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CryptAPI&lt;/td&gt;
&lt;td&gt;Non-custodial router&lt;/td&gt;
&lt;td&gt;~1% per tx&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Many&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;(Honest note: BTCPay Server is excellent and genuinely non-custodial, but you run the servers, nodes, and uptime yourself. Shieldz is the hosted, $0-fee, non-custodial option for people who do not want to operate infrastructure.)&lt;/p&gt;

&lt;h2&gt;
  
  
  How to read it
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Custody first.&lt;/strong&gt; If a provider holds a balance, you have inherited their fraud risk, their payout schedule, and their right to freeze you. Prefer non-custodial. With &lt;a href="https://shieldz.cash" rel="noopener noreferrer"&gt;Shieldz&lt;/a&gt; you can &lt;a href="https://shieldz.cash/verify" rel="noopener noreferrer"&gt;verify the non-custodial claim yourself&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real cost, not headline rate.&lt;/strong&gt; "1%" usually hides withdrawal fees and float. A non-custodial model charges $0 and you pay only the blockchain's network gas. See the &lt;a href="https://shieldz.cash/crypto-payment-fees" rel="noopener noreferrer"&gt;full fee breakdown&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;KYC and privacy.&lt;/strong&gt; Decide up front whether you want to route customers through identity checks. Some gateways gate signup behind business documents; Shieldz has &lt;a href="https://shieldz.cash/no-kyc" rel="noopener noreferrer"&gt;no KYC to start&lt;/a&gt; and supports shielded Zcash.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Coins your customers actually pay with.&lt;/strong&gt; You rarely need 300 long-tail coins. You need stablecoins, Bitcoin, and the chains your buyers use, with single-token settlement so you are not left holding volatility.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The honest pick for 2026
&lt;/h2&gt;

&lt;p&gt;If you want zero infrastructure, $0 platform fees, and to never hand custody to anyone: &lt;strong&gt;Shieldz&lt;/strong&gt;. If you are happy running your own server: &lt;strong&gt;BTCPay Server&lt;/strong&gt;. Everything else asks you to trade custody (and a percentage) for convenience.&lt;/p&gt;

&lt;p&gt;Read the practical version: &lt;a href="https://shieldz.cash/blog/how-to-accept-crypto-payments" rel="noopener noreferrer"&gt;how to accept crypto payments&lt;/a&gt;, or &lt;a href="https://merchant.shieldz.cash/signup" rel="noopener noreferrer"&gt;start free&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>crypto</category>
      <category>payments</category>
      <category>webdev</category>
      <category>blockchain</category>
    </item>
    <item>
      <title>Crypto payment API: a 10-minute quickstart</title>
      <dc:creator>Shieldz</dc:creator>
      <pubDate>Tue, 30 Jun 2026 17:01:56 +0000</pubDate>
      <link>https://dev.to/shieldz/crypto-payment-api-a-10-minute-quickstart-dgl</link>
      <guid>https://dev.to/shieldz/crypto-payment-api-a-10-minute-quickstart-dgl</guid>
      <description>&lt;p&gt;If you want to accept crypto from your own backend, you want a &lt;strong&gt;crypto payment API&lt;/strong&gt; that is small, predictable, and does not take custody of your money. This is a 10-minute quickstart for the Shieldz API: create an invoice, send your customer to the hosted checkout, and verify the webhook that tells you it was paid. JSON in, JSON out, &lt;a href="https://dev.to/pricing"&gt;$0 platform fees&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The full reference lives in the &lt;a href="https://dev.to/docs"&gt;docs&lt;/a&gt;; this is the shortest path to a working integration.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Get a key
&lt;/h2&gt;

&lt;p&gt;Create a secret key in your dashboard under Developers. Keys are &lt;code&gt;sk_live_…&lt;/code&gt; (real funds) or &lt;code&gt;sk_test_…&lt;/code&gt; (test mode). The key is shown once, so store it safely.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxx
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. Create an invoice
&lt;/h2&gt;

&lt;p&gt;One required field, &lt;code&gt;amount_usd_cents&lt;/code&gt;. Everything else is optional.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://shieldz.cash/api/v1/invoices &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer sk_live_…"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "amount_usd_cents": 5000,
    "memo": "Order #1234",
    "idempotency_key": "ord_1234",
    "metadata": { "order_id": "1234" }
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The response is an invoice object with a &lt;code&gt;pay_url&lt;/code&gt;. Send your customer there, it is the hosted checkout with a QR code and a pay link. The customer can pay BTC, ETH, USDC, USDT, Zcash and more; you settle to the one token you chose, and the funds go straight to your wallet. Shieldz never holds them.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Verify the webhook
&lt;/h2&gt;

&lt;p&gt;When the payment confirms on-chain, Shieldz sends a signed &lt;code&gt;invoice.paid&lt;/code&gt; webhook. &lt;strong&gt;Always verify the signature&lt;/strong&gt; before you act on it. The header is &lt;code&gt;X-Shieldz-Signature: t=&amp;lt;unix&amp;gt;,v1=&amp;lt;hex&amp;gt;&lt;/code&gt;, where the hex is &lt;code&gt;HMAC_SHA256(secret, "&amp;lt;t&amp;gt;.&amp;lt;rawBody&amp;gt;")&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;crypto&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;node:crypto&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;verify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;rawBody&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;header&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;secret&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;parts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fromEntries&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;header&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)));&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;expected&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;crypto&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createHmac&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;sha256&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;secret&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;update&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;parts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;rawBody&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;digest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hex&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;crypto&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;timingSafeEqual&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;expected&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nx"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;parts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Express handler (use the RAW body, not the parsed one)&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/webhooks/shieldz&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;raw&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;*/*&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ok&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;verify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;x-shieldz-signature&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;SHIELDZ_WEBHOOK_SECRET&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sendStatus&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;401&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;invoice.paid&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// fulfil the order — webhooks are idempotent and delivered at least once&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sendStatus&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is the whole integration: create, redirect, verify. Test the entire flow with a &lt;code&gt;sk_test_&lt;/code&gt; key and the dashboard's simulate-payment tool before you touch real funds.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a non-custodial API matters for developers
&lt;/h2&gt;

&lt;p&gt;A custodial API quietly makes you responsible for someone else holding your customers' money. A non-custodial one does not: you only ever pass a public receiving key, payments land in your wallet, and there is no balance for anyone to freeze. If you are weighing the two paths, the &lt;a href="https://dev.to/blog/pay-any-coin-trust-tradeoff"&gt;pay-any-coin trust tradeoff&lt;/a&gt; post covers exactly what happens to custody when a buyer pays a different coin than you settle in.&lt;/p&gt;

&lt;h2&gt;
  
  
  SDKs
&lt;/h2&gt;

&lt;p&gt;If you would rather not hand-roll HTTP, there are official SDKs for &lt;a href="https://dev.to/sdks"&gt;Node, Python, Rust and PHP&lt;/a&gt;, plus an &lt;a href="https://dev.to/agents"&gt;MCP server&lt;/a&gt; so AI agents can create payment links with no API key at all.&lt;/p&gt;

&lt;p&gt;Ready? &lt;a href="https://dev.to/docs"&gt;Read the full API reference&lt;/a&gt; or &lt;a href="https://merchant.shieldz.cash/signup" rel="noopener noreferrer"&gt;start free&lt;/a&gt;. For the non-technical version, see &lt;a href="https://dev.to/blog/how-to-accept-crypto-payments"&gt;how to accept crypto payments&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>api</category>
      <category>crypto</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>What is a crypto payment gateway, and how to choose one</title>
      <dc:creator>Shieldz</dc:creator>
      <pubDate>Tue, 30 Jun 2026 16:54:43 +0000</pubDate>
      <link>https://dev.to/shieldz/what-is-a-crypto-payment-gateway-and-how-to-choose-one-2a5i</link>
      <guid>https://dev.to/shieldz/what-is-a-crypto-payment-gateway-and-how-to-choose-one-2a5i</guid>
      <description>&lt;p&gt;A &lt;strong&gt;crypto payment gateway&lt;/strong&gt; is the piece of infrastructure that lets a business accept cryptocurrency and turn it into a clean, confirmed payment: a checkout for the customer, address handling and conversion under the hood, and a notification to your app when the money arrives. Think of it as the crypto equivalent of a card payment gateway, minus the card networks taking a cut.&lt;/p&gt;

&lt;p&gt;That is the simple definition. The part that actually matters is &lt;em&gt;who holds the money&lt;/em&gt;, because every other difference between providers follows from it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Custodial vs non-custodial crypto payment processing
&lt;/h2&gt;

&lt;p&gt;There are two models, and they are not close.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Custodial.&lt;/strong&gt; The gateway receives the customer's coins into its own wallet, holds a balance for you, and pays you out on its schedule. This is how most "crypto payment platforms" work. It is convenient, and it is exactly where the problems come from: a percentage fee on every payment, payout delays "for security," and the standing ability to freeze or offboard your account. You did the work; they decide when you get paid.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Non-custodial.&lt;/strong&gt; The gateway never holds your money. You give it a public receiving key, the customer pays an address that belongs to you, and the gateway only watches the blockchain and tells you it landed. There is no balance to skim, no payout to delay, no account to freeze, because the funds were never in the middle. This is the model &lt;a href="https://dev.to/"&gt;Shieldz&lt;/a&gt; is built on, with &lt;a href="https://dev.to/pricing"&gt;$0 platform fees&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you only remember one thing about choosing a crypto payment gateway: &lt;strong&gt;non-custodial removes the entire risk category&lt;/strong&gt;, not just the fee. You can &lt;a href="https://dev.to/verify"&gt;verify the non-custodial claim yourself&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a good gateway does for you
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Hosted checkout.&lt;/strong&gt; A drop-in payment page so you do not build crypto UI yourself.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-coin acceptance with single-token settlement.&lt;/strong&gt; Customers pay BTC, ETH, USDC, USDT, Zcash and more; you receive the one token you chose. Volatile coins get routed through a swap so you are not left holding price risk.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Signed webhooks.&lt;/strong&gt; A verifiable, idempotent notification the instant a payment confirms on-chain, so fulfilment is automatic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;An API and SDKs.&lt;/strong&gt; So the gateway fits your stack instead of the other way around. See the &lt;a href="https://dev.to/blog/crypto-payment-api"&gt;crypto payment API quickstart&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  How to choose one: a short checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Custody:&lt;/strong&gt; non-custodial, or are they holding your balance? (This is the whole game.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real cost:&lt;/strong&gt; is it $0 + network gas, or a percentage plus withdrawal fees plus float? Here is the &lt;a href="https://dev.to/crypto-payment-fees"&gt;fee comparison&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;KYC:&lt;/strong&gt; can you start without uploading business documents? Shieldz has &lt;a href="https://dev.to/no-kyc"&gt;no KYC to start&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Coins and chains:&lt;/strong&gt; does it cover what your customers actually pay with, across the chains you care about? See &lt;a href="https://dev.to/supported-coins"&gt;supported coins&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Developer experience:&lt;/strong&gt; real &lt;a href="https://dev.to/docs"&gt;docs&lt;/a&gt;, signed webhooks, and SDKs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chargebacks:&lt;/strong&gt; on crypto they do not exist; a confirmed payment is final.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is also worth comparing specific providers directly, for example &lt;a href="https://dev.to/vs-coinbase-commerce"&gt;Shieldz vs Coinbase Commerce&lt;/a&gt;, &lt;a href="https://dev.to/vs-bitpay"&gt;vs BitPay&lt;/a&gt; and &lt;a href="https://dev.to/vs-btcpay"&gt;vs BTCPay Server&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The bottom line
&lt;/h2&gt;

&lt;p&gt;A crypto payment gateway should make accepting crypto boring in the best way: customers pay, the right token lands in &lt;em&gt;your&lt;/em&gt; wallet, your app gets told, and nobody in the middle takes a cut or holds the money. If a provider cannot say "non-custodial" plainly, that is your answer.&lt;/p&gt;

&lt;p&gt;Want the practical version? Read &lt;a href="https://dev.to/blog/how-to-accept-crypto-payments"&gt;how to accept crypto payments&lt;/a&gt;, or &lt;a href="https://merchant.shieldz.cash/signup" rel="noopener noreferrer"&gt;start free&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>crypto</category>
      <category>payments</category>
      <category>webdev</category>
      <category>blockchain</category>
    </item>
    <item>
      <title>How to accept crypto payments (a practical 2026 guide)</title>
      <dc:creator>Shieldz</dc:creator>
      <pubDate>Tue, 30 Jun 2026 16:54:42 +0000</pubDate>
      <link>https://dev.to/shieldz/how-to-accept-crypto-payments-a-practical-2026-guide-3nd6</link>
      <guid>https://dev.to/shieldz/how-to-accept-crypto-payments-a-practical-2026-guide-3nd6</guid>
      <description>&lt;p&gt;If you sell anything online, "how do I accept crypto payments?" has a longer answer than it should. Most guides quietly assume you will hand your money to a company that holds it, takes a cut, and decides when you can withdraw. You do not have to. This is the short, honest version of how to accept crypto payments in 2026, and how to do it without giving up custody of a single cent.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "accept crypto payments" actually means
&lt;/h2&gt;

&lt;p&gt;There are three separate things people lump together:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Receiving&lt;/strong&gt; the coins a customer sends.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Settling&lt;/strong&gt; into the asset you actually want (say, a stablecoin instead of a volatile coin).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Knowing&lt;/strong&gt; a payment happened so your app can ship the order.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A good setup does all three without ever taking custody of your funds. A custodial processor does all three by holding your money in the middle, which is where the fees, the payout delays, and the account freezes come from.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your options, briefly and honestly
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A custodial gateway&lt;/strong&gt; (the BitPay / Coinbase Commerce model). Easy to start, but they hold a balance, charge a percentage, and can freeze or offboard you. See the &lt;a href="https://dev.to/crypto-payment-fees"&gt;fee comparison&lt;/a&gt; and &lt;a href="https://dev.to/trust"&gt;why custody is the real cost&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run your own node&lt;/strong&gt; (BTCPay Server and friends). Fully self-hosted and non-custodial, but you maintain servers, nodes, and uptime yourself.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A non-custodial gateway&lt;/strong&gt; (what Shieldz is). You give a public receiving key, customers pay that address directly, and the service only watches the chain and notifies you. No balance to hold, nothing to freeze, &lt;a href="https://dev.to/pricing"&gt;$0 platform fees&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you want the definition and the trade-offs in one place, the &lt;a href="https://dev.to/blog/what-is-a-crypto-payment-gateway"&gt;crypto payment gateway explainer&lt;/a&gt; goes deeper.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to accept crypto payments with Shieldz, in five minutes
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Sign in&lt;/strong&gt; with a wallet, Google, or Telegram. No business documents, &lt;a href="https://dev.to/no-kyc"&gt;no KYC to start&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add a receiving address&lt;/strong&gt; (or an extended public key / Zcash viewing key). Shieldz derives a fresh address per invoice from it; it never sees a spending key.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Create an invoice&lt;/strong&gt; from the dashboard or the &lt;a href="https://dev.to/blog/crypto-payment-api"&gt;API&lt;/a&gt;. You get a hosted checkout link and a QR code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Send the customer&lt;/strong&gt; to that link. They pay BTC, ETH, USDC, USDT, Zcash or others from any wallet; you settle to the one token you chose.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Get a signed webhook&lt;/strong&gt; the moment it confirms on-chain, so your app can fulfil the order automatically.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That is the whole loop. The money goes from the buyer's wallet to yours. We never touch it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which coins should you accept?
&lt;/h2&gt;

&lt;p&gt;Start with what people actually pay in: &lt;strong&gt;USDC and USDT&lt;/strong&gt; (stable, no volatility risk), &lt;strong&gt;Bitcoin&lt;/strong&gt;, and &lt;strong&gt;shielded Zcash&lt;/strong&gt; for privacy. You can read the per-coin guides for &lt;a href="https://dev.to/accept-bitcoin"&gt;Bitcoin&lt;/a&gt;, &lt;a href="https://dev.to/accept-usdc"&gt;USDC&lt;/a&gt;, &lt;a href="https://dev.to/accept-usdt"&gt;USDT&lt;/a&gt; and &lt;a href="https://dev.to/accept-zcash"&gt;Zcash&lt;/a&gt;. If a customer pays in a coin you do not settle in, an independent swap routes it and you still receive your chosen token.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to watch for
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Custody.&lt;/strong&gt; If a provider holds a balance for you, every other risk follows from that. Prefer non-custodial. &lt;a href="https://dev.to/verify"&gt;Verify it yourself.&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real cost.&lt;/strong&gt; "Low fee" often hides a percentage plus a withdrawal fee plus float. With a non-custodial model you pay only network gas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chargebacks.&lt;/strong&gt; They do not exist on crypto. A confirmed payment is final, which removes a whole category of fraud for digital goods.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Privacy and KYC.&lt;/strong&gt; Decide up front whether you want to route customers through identity checks. Shieldz does not gate signup behind paperwork.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The one-line summary
&lt;/h2&gt;

&lt;p&gt;To accept crypto payments well: take the coins &lt;strong&gt;directly to your own wallet&lt;/strong&gt;, settle to a stablecoin if you want predictability, and use signed webhooks to automate fulfilment. That is exactly what Shieldz is built to do, for $0. &lt;a href="https://merchant.shieldz.cash/signup" rel="noopener noreferrer"&gt;Start free&lt;/a&gt; or &lt;a href="https://dev.to/docs"&gt;read the API docs&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>crypto</category>
      <category>payments</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
