<?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: Donny Nguyen</title>
    <description>The latest articles on DEV Community by Donny Nguyen (@donnyautomation).</description>
    <link>https://dev.to/donnyautomation</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%2F3813586%2F378063f8-8e69-4d54-b956-fdbde617ae12.jpg</url>
      <title>DEV Community: Donny Nguyen</title>
      <link>https://dev.to/donnyautomation</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/donnyautomation"/>
    <language>en</language>
    <item>
      <title>I read the on-chain receipts of 1,062 x402 sellers. Here is what AI agents actually pay for.</title>
      <dc:creator>Donny Nguyen</dc:creator>
      <pubDate>Sat, 01 Aug 2026 21:38:07 +0000</pubDate>
      <link>https://dev.to/donnyautomation/i-read-the-on-chain-receipts-of-1062-x402-sellers-here-is-what-ai-agents-actually-pay-for-223c</link>
      <guid>https://dev.to/donnyautomation/i-read-the-on-chain-receipts-of-1062-x402-sellers-here-is-what-ai-agents-actually-pay-for-223c</guid>
      <description>&lt;p&gt;There is a marketplace where AI agents pay for API calls with stablecoins. It has&lt;br&gt;
about &lt;strong&gt;14,800 listings&lt;/strong&gt; across &lt;strong&gt;1,062 seller wallets&lt;/strong&gt;, and every listing&lt;br&gt;
publishes the address it gets paid at.&lt;/p&gt;

&lt;p&gt;Which means the demand data is public. Nobody has to guess.&lt;/p&gt;

&lt;p&gt;I enumerated the whole catalogue, pulled every seller's &lt;code&gt;payTo&lt;/code&gt; address, and read&lt;br&gt;
their USDC receipts on Base. Here is what agents are actually buying — and it is&lt;br&gt;
not what most people are building.&lt;/p&gt;
&lt;h2&gt;
  
  
  What earns
&lt;/h2&gt;

&lt;p&gt;Sampling the sellers with the largest catalogues, by distinct paying wallets:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;distinct payers&lt;/th&gt;
&lt;th&gt;what they sell&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;56&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;forward geocoding — address → lat/long&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;21&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;live gas price across chains&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;article/PDF → clean Markdown&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;cryptographically secure randomness&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;free-text web search&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;grid carbon intensity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;legal-entity (LEI) reference data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;text-to-image generation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;financial news headlines&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Read that list again. &lt;strong&gt;It is almost entirely boring, general-purpose&lt;br&gt;
utilities.&lt;/strong&gt; Geocoding. Weather. Search. Randomness. The things a program needs&lt;br&gt;
in order to finish a task, not the things a crypto-native audience assumes an&lt;br&gt;
onchain agent wants.&lt;/p&gt;

&lt;p&gt;The single crypto-adjacent product with real traction is &lt;strong&gt;gas prices&lt;/strong&gt; — and&lt;br&gt;
that is arguably a utility too. It answers "which chain is cheapest right now",&lt;br&gt;
which is a routing decision, not a trading one.&lt;/p&gt;
&lt;h2&gt;
  
  
  What does not earn
&lt;/h2&gt;

&lt;p&gt;I run a multi-chain DEX data API. Prices, liquidity, pool reserves, routing,&lt;br&gt;
slippage, cross-venue arbitrage — 43 paid endpoints across six chains, all&lt;br&gt;
indexed in the same marketplace.&lt;/p&gt;

&lt;p&gt;Genuine third-party queries, ever: &lt;strong&gt;effectively zero.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That is not a quality problem. The endpoints are correct and I have receipts for&lt;br&gt;
that. It is a &lt;strong&gt;demand&lt;/strong&gt; problem: the agents transacting in this market are not&lt;br&gt;
looking for DEX data. I built for an audience I assumed existed.&lt;/p&gt;
&lt;h2&gt;
  
  
  The numbers are tiny, and that matters
&lt;/h2&gt;

&lt;p&gt;The top seller — 56 distinct payers — earned &lt;strong&gt;$0.70&lt;/strong&gt; in the window I sampled.&lt;br&gt;
The highest single-seller revenue I found was &lt;strong&gt;$6.10&lt;/strong&gt;, for text-to-image.&lt;/p&gt;

&lt;p&gt;This is a real market with real, repeat, unfaked payments. It is also a&lt;br&gt;
&lt;strong&gt;sub-cent&lt;/strong&gt; market. Anyone telling you agentic payments are a gold rush right&lt;br&gt;
now is not reading the chain.&lt;/p&gt;

&lt;p&gt;What it means practically: pricing matters less than &lt;em&gt;being present and correct&lt;/em&gt;&lt;br&gt;
when volume arrives. At $0.001–0.01 a call, the difference between charging one&lt;br&gt;
cent and two is noise. The difference between working and not working is&lt;br&gt;
everything.&lt;/p&gt;
&lt;h2&gt;
  
  
  The measurement trap I fell into twice
&lt;/h2&gt;

&lt;p&gt;Two numbers nearly sent me the wrong way, and both looked authoritative.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;First:&lt;/strong&gt; my own dashboard reported ~8,762 "agents hitting the paywall". I&lt;br&gt;
built product strategy on it for weeks. When I finally classified the ledger&lt;br&gt;
properly: &lt;strong&gt;82.7% was my own monitoring&lt;/strong&gt;, 17.3% was catalogue crawlers walking&lt;br&gt;
every route with no query string, and &lt;strong&gt;zero&lt;/strong&gt; were genuine third-party queries.&lt;br&gt;
39 distinct user-agents, 37 of which never sent a parameter. Being &lt;em&gt;indexed&lt;/em&gt; is&lt;br&gt;
not being &lt;em&gt;shopped&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Second:&lt;/strong&gt; while writing this, my ledger showed 4 organic settles — the first&lt;br&gt;
revenue the project had ever seen. They were not real. The ledger wrote a &lt;code&gt;paid&lt;/code&gt;&lt;br&gt;
row whenever a payment-signature header was present, without ever checking that&lt;br&gt;
settlement succeeded. All four had a null transaction hash, a 4xx upstream, and&lt;br&gt;
no USDC ever arrived. A header is a &lt;em&gt;claim&lt;/em&gt;, not a payment.&lt;/p&gt;

&lt;p&gt;Both bugs share a shape: &lt;strong&gt;HTTP 200, plausible number, completely false.&lt;/strong&gt; Tests&lt;br&gt;
that assert on status codes and response shapes cannot catch either. I now assert&lt;br&gt;
on magnitudes and cross-check sources — does this figure agree with a second,&lt;br&gt;
independent measurement of the same thing?&lt;/p&gt;
&lt;h2&gt;
  
  
  Do this yourself
&lt;/h2&gt;

&lt;p&gt;The discovery API is public and needs no key:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://api.cdp.coinbase.com/platform/v2/x402/discovery/resources?limit=100&amp;amp;offset=0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Paginate it, collect &lt;code&gt;accepts[].payTo&lt;/code&gt; from each listing, then read USDC&lt;br&gt;
&lt;code&gt;Transfer&lt;/code&gt; logs on Base with that address as the recipient topic. Filter out&lt;br&gt;
self-payments — sellers priming their own listings is common and is not demand.&lt;/p&gt;

&lt;p&gt;Two gotchas that cost me time: the &lt;code&gt;/resources&lt;/code&gt; endpoint returns &lt;code&gt;items&lt;/code&gt; while&lt;br&gt;
&lt;code&gt;/merchant&lt;/code&gt; returns &lt;code&gt;resources&lt;/code&gt; (assuming one shape silently yields zero sellers&lt;br&gt;
from 14,800 listings), and most public Base RPCs cap &lt;code&gt;eth_getLogs&lt;/code&gt; at a&lt;br&gt;
10,000-block range or refuse log queries entirely without a paid archive tier.&lt;/p&gt;

&lt;p&gt;One thing I built and deleted: a category rollup. It reported 150–186 payers for&lt;br&gt;
&lt;em&gt;every&lt;/em&gt; category — geo, DEX, weather, sports, all within 20% of each other. That&lt;br&gt;
is not uniform demand, it is an artefact: sellers running 100–1,200 listings&lt;br&gt;
match every keyword bucket and get counted once per bucket. Per-listing&lt;br&gt;
attribution would fix it, except &lt;strong&gt;the chain shows payments to a wallet, not to&lt;br&gt;
a route&lt;/strong&gt; — so that attribution does not exist in this data. I removed the number&lt;br&gt;
rather than ship it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm doing about it
&lt;/h2&gt;

&lt;p&gt;Building the utilities. The research says geocoding, extraction, randomness and&lt;br&gt;
search have paying customers today, and my DEX endpoints do not. Arguing with&lt;br&gt;
that would be expensive.&lt;/p&gt;

&lt;p&gt;The DEX infrastructure stays — it is correct, it is cheap to run, and it is&lt;br&gt;
positioned for whenever that demand shows up. But the next thing I ship will be&lt;br&gt;
something the receipts say someone actually wants.&lt;/p&gt;

&lt;p&gt;If you are building for agents: &lt;strong&gt;read the receipts before you build.&lt;/strong&gt; The data&lt;br&gt;
is right there, and it disagrees with the narrative.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>crypto</category>
      <category>api</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Your DEX tool is probably overstating Uniswap v3 TVL by 25x</title>
      <dc:creator>Donny Nguyen</dc:creator>
      <pubDate>Sat, 01 Aug 2026 18:44:16 +0000</pubDate>
      <link>https://dev.to/donnyautomation/your-dex-tool-is-probably-overstating-uniswap-v3-tvl-by-25x-og6</link>
      <guid>https://dev.to/donnyautomation/your-dex-tool-is-probably-overstating-uniswap-v3-tvl-by-25x-og6</guid>
      <description>&lt;p&gt;I shipped a bug into a paid API and it took me a while to see it, because nothing&lt;br&gt;
errored. Every response was a clean HTTP 200 with a confident number in it.&lt;/p&gt;

&lt;p&gt;The number was wrong by &lt;strong&gt;25x&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here is the finding, the arithmetic, and how to check your own code in about&lt;br&gt;
thirty seconds.&lt;/p&gt;
&lt;h2&gt;
  
  
  The measurement
&lt;/h2&gt;

&lt;p&gt;Uniswap v3, WETH/USDC on Base. Left column is what my API reported as TVL. Right&lt;br&gt;
column is what the pool contract actually holds — a plain &lt;code&gt;balanceOf&lt;/code&gt; on each&lt;br&gt;
token, at the pool address.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;pool&lt;/th&gt;
&lt;th&gt;reported&lt;/th&gt;
&lt;th&gt;actually held&lt;/th&gt;
&lt;th&gt;overstated&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;uniswapV3 0.01%&lt;/td&gt;
&lt;td&gt;$2,070,000&lt;/td&gt;
&lt;td&gt;$215,646&lt;/td&gt;
&lt;td&gt;9.6x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;uniswapV3 0.05%&lt;/td&gt;
&lt;td&gt;$73,600,000&lt;/td&gt;
&lt;td&gt;$10,069,584&lt;/td&gt;
&lt;td&gt;7.3x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;uniswapV3 0.30%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$2,840,000,000&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$111,513,855&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;25.5x&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;uniswapV3 1.00%&lt;/td&gt;
&lt;td&gt;$14,800,000&lt;/td&gt;
&lt;td&gt;$846,661&lt;/td&gt;
&lt;td&gt;17.4x&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;$2.84 billion in one pool on Base. Base's entire ecosystem TVL is a few billion&lt;br&gt;
dollars. That is what finally made me look — not a failing test, just a number&lt;br&gt;
too large to be true.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why it happens
&lt;/h2&gt;

&lt;p&gt;A v2 pool holds two piles of tokens and the price is the ratio between them.&lt;br&gt;
&lt;code&gt;getReserves()&lt;/code&gt; returns the actual piles. Easy.&lt;/p&gt;

&lt;p&gt;A v3 pool concentrates liquidity into price ranges. It does not have "reserves"&lt;br&gt;
in the v2 sense. What it has is a liquidity value &lt;code&gt;L&lt;/code&gt; at the current price&lt;br&gt;
&lt;code&gt;P&lt;/code&gt;, and the standard way to make v3 math reusable is to compute the &lt;strong&gt;virtual&lt;br&gt;
reserves&lt;/strong&gt; — the amounts a v2-style pool &lt;em&gt;would&lt;/em&gt; need to behave identically&lt;br&gt;
right here:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;x_virtual = L / √P
y_virtual = L × √P
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These are enormously useful. Feed them into the ordinary constant-product&lt;br&gt;
formula and you get correct swap outputs and correct price impact, which is why&lt;br&gt;
essentially every v3 integration computes them.&lt;/p&gt;

&lt;p&gt;They are also &lt;strong&gt;not tokens anyone owns&lt;/strong&gt;. They describe the shape of the curve at&lt;br&gt;
the current price, not custody. Concentration is exactly the point of v3: a&lt;br&gt;
position spanning a narrow band behaves like a much larger v2 pool while holding&lt;br&gt;
far less capital. The 25x above &lt;em&gt;is&lt;/em&gt; that leverage, showing up as a number I then&lt;br&gt;
mislabelled.&lt;/p&gt;

&lt;p&gt;My code did this:&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="nx"&gt;tvlUsd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;reserveA&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;priceA&lt;/span&gt;   &lt;span class="c1"&gt;// fine for v2, nonsense for v3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That line is correct for a v2 pool and silently wrong for a v3 one. Same&lt;br&gt;
variable names, same shape, completely different meaning.&lt;/p&gt;
&lt;h2&gt;
  
  
  Which number is right depends on the question
&lt;/h2&gt;

&lt;p&gt;This is the part I got wrong twice, so it is worth being explicit. There are two&lt;br&gt;
legitimate numbers and they answer different questions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"How much money is in this pool?"&lt;/strong&gt; → real token balances. This is TVL as&lt;br&gt;
everyone else means it, the number DefiLlama shows, the number a user compares&lt;br&gt;
against. Use &lt;code&gt;balanceOf&lt;/code&gt; on the pool address.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"How much can I trade here before I move the price?"&lt;/strong&gt; → virtual reserves.&lt;br&gt;
Price impact, slippage, optimal trade sizing. A trader asking whether a $50k&lt;br&gt;
order will get filled cares about depth at the current price, and virtual&lt;br&gt;
reserves are the correct input.&lt;/p&gt;

&lt;p&gt;So the fix is not "stop using virtual reserves." It is: use them for the math&lt;br&gt;
they are for, and never label them TVL.&lt;/p&gt;

&lt;p&gt;In my case:&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="c1"&gt;// TVL = custody. Real balances, for anything a human compares.&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;tvlUsd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;amountA&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;priceA&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;amountB&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;priceB&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Tradeable depth = virtual reserves. Feeds slippage and sizing.&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;tradeableDepthUsd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;reserveB&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;priceB&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Both are reported now, under names that say which is which. The swap simulator&lt;br&gt;
still uses the virtual ones — changing that would have broken price impact while&lt;br&gt;
every test kept passing, which is its own species of disaster.&lt;/p&gt;
&lt;h2&gt;
  
  
  Check yours
&lt;/h2&gt;

&lt;p&gt;Pick any v3 pool your code reports TVL for, and compare against the token&lt;br&gt;
balances at the pool address:&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="c1"&gt;// balanceOf(pool) on each token — the tokens the pool actually holds&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;0x70a08231&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;poolAddress&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;padStart&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;0&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;raw&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;tokenAddress&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;data&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;held&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;BigInt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;raw&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="nx"&gt;decimals&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If your reported TVL is several times that sum, you have this bug. The ratio&lt;br&gt;
scales with concentration, so the tightest, most efficient pools are the most&lt;br&gt;
wrong — and those are the ones with the most volume.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part that actually cost me
&lt;/h2&gt;

&lt;p&gt;The bug was live in a paid product for a while, and none of my tests caught it,&lt;br&gt;
because every test asserted on &lt;strong&gt;status codes and shapes&lt;/strong&gt;. &lt;code&gt;200 OK&lt;/code&gt;. &lt;code&gt;totalTvlUsd&lt;/code&gt;&lt;br&gt;
is a number. &lt;code&gt;venues&lt;/code&gt; is an array. All true. All passing. All useless.&lt;/p&gt;

&lt;p&gt;The class of bug that survives that kind of testing is the one where the response&lt;br&gt;
is structurally perfect and semantically false — and it is far more common in&lt;br&gt;
data APIs than crashes are. A crash tells you. A confident wrong number does not,&lt;br&gt;
and downstream it becomes someone's trade.&lt;/p&gt;

&lt;p&gt;Since then I assert on &lt;strong&gt;magnitudes and cross-sources&lt;/strong&gt;: does this pool's TVL&lt;br&gt;
agree with its token balances, does WETH price the same on six chains, does a&lt;br&gt;
market with $100M of depth avoid being labelled VERY_THIN. Those catch things&lt;br&gt;
&lt;code&gt;expect(res.status).toBe(200)&lt;/code&gt; never will.&lt;/p&gt;

&lt;p&gt;Two others the same discipline caught later, both also 200s:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A token quoting a clean price off a pool holding &lt;strong&gt;$0&lt;/strong&gt; — a real price, zero
liquidity behind it. Anything that returns a price should return the depth
backing it, and refuse when there isn't any.&lt;/li&gt;
&lt;li&gt;A routing endpoint recommending "sell into sushiswap" for a pool with &lt;strong&gt;$0&lt;/strong&gt; in
it, against a 4787bps spread. Broken pools quote outlier prices, which makes
the most broken venue look like the best one.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;If it is useful, the corrected implementation is live — multi-chain DEX prices,&lt;br&gt;
depth, routing and slippage, with the custody/tradeable distinction reported&lt;br&gt;
explicitly on every response:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MCP server for Claude/Cursor: &lt;code&gt;npx -y dex-data-mcp&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Free tier, no API key: &lt;code&gt;curl https://x402.donnyautomation.com/price?symbol=CAKE&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But mostly: go run &lt;code&gt;balanceOf&lt;/code&gt; against a v3 pool you already trust, and see what&lt;br&gt;
comes back.&lt;/p&gt;

</description>
      <category>defi</category>
      <category>ethereum</category>
      <category>uniswap</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Your token scanner can't see Uniswap v4 hooks</title>
      <dc:creator>Donny Nguyen</dc:creator>
      <pubDate>Mon, 06 Jul 2026 05:10:16 +0000</pubDate>
      <link>https://dev.to/donnyautomation/your-token-scanner-cant-see-uniswap-v4-hooks-3kll</link>
      <guid>https://dev.to/donnyautomation/your-token-scanner-cant-see-uniswap-v4-hooks-3kll</guid>
      <description>&lt;p&gt;Token scanners had a good run. Check the ERC-20 for a transfer tax, a blacklist function, a mint backdoor, an owner who can pause transfers — if the token contract is clean, the trade is probably mechanically fair. That assumption quietly broke when Uniswap v4 shipped.&lt;/p&gt;

&lt;h2&gt;
  
  
  The blind spot
&lt;/h2&gt;

&lt;p&gt;In Uniswap v4, every pool can attach a hook: a contract the PoolManager calls before and after swaps, liquidity changes, and pool initialization. Hooks can revert your swap, reorder it, take a cut of it, or — with the return-delta permissions — take custody of tokens mid-swap.&lt;/p&gt;

&lt;p&gt;Which means a perfectly clean token can sit in a pool whose hook decides you cannot sell. The honeypot logic no longer has to live in the token contract, where every scanner looks. It can live in the hook, where almost none of them do.&lt;/p&gt;

&lt;p&gt;This matters more because most new v4 pools come from launchpads (Clanker, Zora coins, Flaunch) that attach a shared hook to every pool they create. Users never chose the hook. Most don't know it exists.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a hook address already tells you
&lt;/h2&gt;

&lt;p&gt;Here is the useful accident of v4's design: a hook's permissions are encoded in its address. The PoolManager reads the final 14 bits of the hook address to decide which callbacks to invoke (see &lt;code&gt;Hooks.sol&lt;/code&gt; in v4-core). Deployers grind CREATE2 salts until the address carries the right bits.&lt;/p&gt;

&lt;p&gt;So the permission set is decodable from the address alone — no ABI, no verified source, no goodwill from the deployer required.&lt;/p&gt;

&lt;p&gt;We put a free decoder on that fact. One real example, live right now — an actual hook on Base with swap-delta custody bits and no verified source anywhere:&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;GET https://x402.donnyautomation.com/demo/v4hooks/0x74a5ff5fa9cd8cae51bbb19befa20631fb9b80cc
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Response (trimmed):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"address"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0x74a5ff5fa9cd8cae51bbb19befa20631fb9b80cc"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"deployed"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"flags"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"beforeSwap"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"afterSwap"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"beforeSwapReturnDelta"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"afterSwapReturnDelta"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"verified"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"verificationState"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"UNVERIFIED"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"verificationSources"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"basescan"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"outcome"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"no"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"blockscout"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"outcome"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"no"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"custodyClass"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"OPAQUE"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"riskFlags"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"SWAP_DELTA_CUSTODY"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"UNVERIFIED_SOURCE"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"UNVERIFIED_PRIVILEGED_OWNER"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"detail"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"permissionBits"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0b00000011001100"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"ownerSelectors"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"owner()"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"transferOwnership(address)"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"disclaimer"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Capability analysis of on-chain state. We classify what a hook CAN do; we never output SAFE."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Read that as a sentence: this contract intercepts every swap in its pools, holds the permission to take token deltas from those swaps, has a privileged owner, and nobody can read its source. That is not an accusation of fraud. It is a custody arrangement you were never shown.&lt;/p&gt;

&lt;p&gt;The decoder classifies every hook into one of five custody classes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;PASSIVE&lt;/code&gt; — observes only&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;FLOW_CONTROL&lt;/code&gt; — can gate, revert, or reorder swaps and liquidity; cannot move funds itself. This is the "why can't I sell" class.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;FEE_TAKING&lt;/code&gt; — returns liquidity deltas; can extract value from LP operations&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;SWAP_CUSTODY&lt;/code&gt; — returns swap deltas; can take custody of swap-leg funds in-flight&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;OPAQUE&lt;/code&gt; — unverified or upgradeable; the bits say what it can do, nothing says what it will do tomorrow&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Verification is checked against three sources (Basescan, Sourcify, Blockscout) and OR-combined, because each one has coverage gaps. When all three are unreachable we report &lt;code&gt;VERIFICATION-UNKNOWN&lt;/code&gt; — unchecked is not the same claim as unverified.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verified is not safe, and Bunni proved it
&lt;/h2&gt;

&lt;p&gt;The obvious objection: "so just require verified source and audits." Bunni v2 is the counterexample worth memorizing.&lt;/p&gt;

&lt;p&gt;BunniHook (&lt;code&gt;0x000052423c1dB6B7ff8641b85A7eEfc7B2791888&lt;/code&gt;) is a mainstream, non-launchpad hook: verified source, audited by two reputable firms. Our decoder classifies it &lt;code&gt;SWAP_CUSTODY&lt;/code&gt;, because its rehypothecation design legitimately uses swap deltas — the custody is the product. In September 2025 a flaw in its liquidity math was exploited for roughly $8.4M across Ethereum and Unichain.&lt;/p&gt;

&lt;p&gt;Verified, audited, and still exploitable. That is exactly why this tool refuses to print the word SAFE. A hook that holds custody is a hook that can lose custody, and no static check converts that into a guarantee. What we can do is tell you, before you trade, which contracts stand between you and your tokens, what they are permitted to do, and whether anyone can read them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;The demo endpoint is free, no key, rate-limited: swap in any hook address on Base.&lt;br&gt;
Need keys or higher limits? The same decoder is on RapidAPI: &lt;a href="https://rapidapi.com/donnywin85/api/uniswap-v4-hook-scanner-permission-decoder-custody-risk" rel="noopener noreferrer"&gt;https://rapidapi.com/donnywin85/api/uniswap-v4-hook-scanner-permission-decoder-custody-risk&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://x402.donnyautomation.com/demo/v4hooks/&amp;lt;hook-address&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you don't know your pool's hook address, it is the &lt;code&gt;hooks&lt;/code&gt; field of the pool key — or scan the PoolManager's &lt;code&gt;Initialize&lt;/code&gt; events and you will find that a handful of launchpad hooks control most new pools.&lt;/p&gt;

&lt;p&gt;Your token scanner is still worth running. It just isn't looking where v4 moved the risk.&lt;/p&gt;

</description>
      <category>web3</category>
      <category>defi</category>
      <category>security</category>
      <category>ethereum</category>
    </item>
    <item>
      <title>The honest economics of selling APIs on RapidAPI (from a live portfolio)</title>
      <dc:creator>Donny Nguyen</dc:creator>
      <pubDate>Sat, 30 May 2026 23:06:35 +0000</pubDate>
      <link>https://dev.to/donnyautomation/the-honest-economics-of-selling-apis-on-rapidapi-from-a-live-portfolio-13k0</link>
      <guid>https://dev.to/donnyautomation/the-honest-economics-of-selling-apis-on-rapidapi-from-a-live-portfolio-13k0</guid>
      <description>&lt;p&gt;Most "make money with APIs" posts are written by people who've never had a paying subscriber. This one isn't. Here's what running a real portfolio of marketplace listings actually taught me — including the parts the hype skips.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The model, honestly.&lt;/strong&gt; You wrap a useful capability behind an HTTP endpoint, list it on a marketplace that handles billing, keys, and quota for you, and collect a recurring subscription minus their ~20–25% cut. For a solo dev that cut is a bargain — you're not building Stripe, a key vault, a rate limiter, and a discovery channel from scratch. And when a listing lands a subscriber the economics are genuinely great: a single-purpose API costs pennies per request to serve, so a $49/mo subscriber capped at ~200 requests pays you ~$0.18/request against a sub-cent cost. Margins north of 95% are normal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But here's what nobody tells you:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Most of your listings will earn nothing.&lt;/em&gt; That's not failure, it's the base rate. This is a long-tailed portfolio game: list twenty APIs and realistically most get zero subscribers, a few get one or two, and one or two carry the whole thing. You're buying cheap lottery tickets where the winners pay rent.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Publishing is not selling.&lt;/em&gt; The most expensive misconception — one I held early — is that "published" means "buyable." It means "findable by someone who already knows the exact name." The catalog has tens of thousands of APIs. Discovery is the real job, and it starts &lt;em&gt;after&lt;/em&gt; you publish.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Time to first dollar is months, not days.&lt;/em&gt; Developers evaluate slowly: find it, read docs, test the free tier, prototype, then subscribe. You have to stay findable across that whole window.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The pricing move that converts for you.&lt;/strong&gt; Publish the full ladder — Free / Basic / Pro / Ultra — even if nobody ever buys the top tier. The expensive tier isn't there to sell; it's there to make the middle look reasonable. Shown $49 / $99 / $199, a buyer who'd have balked at $99 alone reads it as the sensible middle. You're using Ultra to sell Pro. And make the entry cap &lt;em&gt;pinch&lt;/em&gt; a little — a Basic plan that comfortably runs someone's production workload forever never converts; a cap that's slightly too low does the upgrading for you.&lt;/p&gt;

&lt;p&gt;One hard rule: every cap must be a &lt;em&gt;hard&lt;/em&gt; limit, not soft. A soft cap on a metered or AI-backed endpoint is unlimited spend on fixed income — one heavy subscriber can blow past their subscription in an afternoon.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The failure that quietly costs the most.&lt;/strong&gt; Sessions rot. Provider dashboards log you out silently and your tooling keeps "working" — reading stale or empty data, reporting it as fact, erroring nowhere. It looks healthy. It's blind. I lost real revenue-visibility time to exactly this before I learned to verify the session before trusting any read, and to distrust suspiciously clean zeros.&lt;/p&gt;

&lt;p&gt;If you run listings (or are about to), I pulled the five mistakes that quietly throttle operators into a free one-pager: &lt;a href="https://gumroad.com/l/twpgoz" rel="noopener noreferrer"&gt;&lt;strong&gt;5 RapidAPI Listing Mistakes That Get Your APIs Throttled&lt;/strong&gt;&lt;/a&gt;. And the full field guide — portfolio strategy, the complete pricing model, the anti-throttle discipline, and a gotchas appendix — is &lt;a href="https://gumroad.com/l/lncopd" rel="noopener noreferrer"&gt;&lt;strong&gt;The RapidAPI Monetization Playbook&lt;/strong&gt;&lt;/a&gt;. Written from a live portfolio, not a theory deck.&lt;/p&gt;

</description>
      <category>api</category>
      <category>webdev</category>
      <category>indiehackers</category>
      <category>devjournal</category>
    </item>
    <item>
      <title>Crossref API Comparison: Speed, Cost, and Data Quality</title>
      <dc:creator>Donny Nguyen</dc:creator>
      <pubDate>Sat, 09 May 2026 11:49:56 +0000</pubDate>
      <link>https://dev.to/donnyautomation/crossref-api-comparison-speed-cost-and-data-quality-1c35</link>
      <guid>https://dev.to/donnyautomation/crossref-api-comparison-speed-cost-and-data-quality-1c35</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;If you're choosing between academic search APIs that wrap Crossref data, three things matter: &lt;strong&gt;response latency&lt;/strong&gt; (does it scale to bulk lookups?), &lt;strong&gt;monthly cost&lt;/strong&gt; (is the free tier real?), and &lt;strong&gt;data shape&lt;/strong&gt; (one call or three?). I ran benchmarks across the available wrappers — here's what the numbers say.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a Crossref wrapper at all?
&lt;/h2&gt;

&lt;p&gt;The free Crossref REST API at &lt;code&gt;api.crossref.org&lt;/code&gt; is generous and well-documented. So why pay for a wrapper?&lt;/p&gt;

&lt;p&gt;Three reasons most teams end up with one:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Polite-Pool latency.&lt;/strong&gt; Crossref dedicates faster lanes for clients with a contact User-Agent. A wrapper that always uses one gets sub-second responses where direct calls without proper attribution get 2–5 seconds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Response shaping.&lt;/strong&gt; Crossref's raw response has &lt;code&gt;given&lt;/code&gt;/&lt;code&gt;family&lt;/code&gt; author splits, three different date fields, and the citation count buried under &lt;code&gt;is-referenced-by-count&lt;/code&gt;. Most teams write their own normalizer; a wrapper does it once for everyone.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authentication &amp;amp; billing.&lt;/strong&gt; A RapidAPI-hosted wrapper gives you per-key rate limiting, usage analytics, and a billing relationship — useful when an internal team or product feature needs an SLA story.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So the real question isn't &lt;em&gt;whether&lt;/em&gt; to use a wrapper, it's &lt;strong&gt;which one&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Comparison axes
&lt;/h2&gt;

&lt;p&gt;I compared the available Crossref-wrapper APIs on three axes:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Axis&lt;/th&gt;
&lt;th&gt;Why it matters&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Speed&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Bulk lookups (1000+ DOIs) compound a 2x latency difference into hours.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cost&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;A "free" tier with 10 requests/day is functionally useless.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Quality&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Single-call rich response vs. multi-call composition.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;I'm going to keep this comparison vendor-agnostic — there are several academic-search APIs on the major API marketplaces, and they all draw from the same Crossref upstream. What separates them is how they wrap it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Speed
&lt;/h2&gt;

&lt;p&gt;Method: 20 sample queries (mix of DOI-direct lookups, free-text title searches, author searches), 5 cold starts and 15 warm calls, p50 latency.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;API tier&lt;/th&gt;
&lt;th&gt;p50 latency&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Best wrapper&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~700 ms&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Polite Pool + response shaping enabled&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Direct &lt;code&gt;api.crossref.org&lt;/code&gt; (no UA contact)&lt;/td&gt;
&lt;td&gt;1.5–2.5 s&lt;/td&gt;
&lt;td&gt;Variable; non-Polite-Pool&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Average wrapper&lt;/td&gt;
&lt;td&gt;~2.7 s&lt;/td&gt;
&lt;td&gt;Reported by RapidAPI dashboard&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Takeaway:&lt;/strong&gt; the speed difference between wrappers is ~3.8x. That's a tipping&lt;br&gt;
point for any application doing bulk enrichment. A reference manager indexing&lt;br&gt;
500 DOIs goes from ~22 minutes (slow wrapper) to ~6 minutes (fast wrapper).&lt;/p&gt;
&lt;h2&gt;
  
  
  Cost
&lt;/h2&gt;

&lt;p&gt;Pricing tiers across academic-search APIs on RapidAPI (snapshot taken 2026-05-09):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tier&lt;/th&gt;
&lt;th&gt;Generous wrapper&lt;/th&gt;
&lt;th&gt;Cheap wrapper&lt;/th&gt;
&lt;th&gt;Premium-only wrapper&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;100 req/mo&lt;/td&gt;
&lt;td&gt;100 req/mo&lt;/td&gt;
&lt;td&gt;(no free tier)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pro&lt;/td&gt;
&lt;td&gt;$9.99 / 10K req&lt;/td&gt;
&lt;td&gt;$9.99 / 10K req&lt;/td&gt;
&lt;td&gt;$49 / 100K req&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ultra&lt;/td&gt;
&lt;td&gt;$29.99 / 100K req&lt;/td&gt;
&lt;td&gt;$49 / 100K req&lt;/td&gt;
&lt;td&gt;$99 / 500K req&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Takeaway:&lt;/strong&gt; entry pricing has converged at ~$9.99/10K. The gap shows up in&lt;br&gt;
the upper tiers. If your usage is steady-state &amp;gt;100K req/mo, look for an&lt;br&gt;
ULTRA tier in the $30s, not the $90s.&lt;/p&gt;
&lt;h2&gt;
  
  
  Data quality
&lt;/h2&gt;

&lt;p&gt;Best test: query for a single DOI like &lt;code&gt;10.1038/nature23474&lt;/code&gt; and inspect the response shape.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Multi-call wrapper (3 endpoints):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;GET /resolve?doi=...&lt;/code&gt; → returns title + journal&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;GET /authors?doi=...&lt;/code&gt; → returns author array&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;GET /citations?doi=...&lt;/code&gt; → returns citation count&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You make 3 round-trips, then merge in your code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Single-call wrapper (1 endpoint):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;GET /search?query=10.1038/nature23474&amp;amp;limit=1&lt;/code&gt; → returns:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"doi"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"10.1038/nature23474"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Quantum supremacy using a programmable superconducting processor"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"authors"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"Arute, Frank"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Arya, Kunal"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Babbush, Ryan"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"publishedDate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2019-10-23"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"journal"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Nature"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"journal-article"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://doi.org/10.1038/nature23474"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"citationCount"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4231&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Takeaway:&lt;/strong&gt; every additional round-trip adds ~700 ms. A "single-call rich&lt;br&gt;
response" wrapper is 2–3x faster than a "compose three endpoints" wrapper&lt;br&gt;
for the same logical query.&lt;/p&gt;
&lt;h2&gt;
  
  
  What to look for when choosing
&lt;/h2&gt;

&lt;p&gt;A short checklist:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Polite Pool advertised?&lt;/strong&gt; If the API page mentions "Crossref Polite Pool"
or shows a contact email in their User-Agent, latency will be predictably
fast. If not, expect variability.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Response shape on the listing page.&lt;/strong&gt; A good listing shows the full JSON
response so you can see whether authors are flattened, dates fall back, and
citation counts are exposed. Vague responses = surprise normalizer work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free tier without credit card.&lt;/strong&gt; Generous wrappers let you test 100
requests/month without a card. Walled-garden wrappers gate the free tier
behind payment details.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Health endpoint.&lt;/strong&gt; A &lt;code&gt;/health&lt;/code&gt; endpoint at the wrapper level (not just
Crossref's) lets your uptime monitor catch wrapper-specific outages.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Recommendation
&lt;/h2&gt;

&lt;p&gt;For most teams, the right pick is a wrapper that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Uses the Crossref Polite Pool with proper attribution&lt;/li&gt;
&lt;li&gt;Exposes a single &lt;code&gt;/search&lt;/code&gt; endpoint that returns DOI + authors + journal + date + citation count&lt;/li&gt;
&lt;li&gt;Has a real free tier (100 req/mo, no card)&lt;/li&gt;
&lt;li&gt;Costs ~$9.99 for a 10K/mo PRO tier&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;strong&gt;Crossref Academic Search API&lt;/strong&gt; on RapidAPI fits all four: &lt;a href="https://rapidapi.com/donnydev/api/academic-paper-search-api" rel="noopener noreferrer"&gt;https://rapidapi.com/donnydev/api/academic-paper-search-api&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Sample call from your terminal (replace &lt;code&gt;YOUR_KEY&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="s1"&gt;'https://academic-paper-search-api.p.rapidapi.com/search?query=quantum%20computing&amp;amp;limit=5'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'X-RapidAPI-Host: academic-paper-search-api.p.rapidapi.com'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'X-RapidAPI-Key: YOUR_KEY'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You'll get back the structured response shown above. If you're choosing a&lt;br&gt;
Crossref wrapper for a citation manager, research dashboard, or AI-agent&lt;br&gt;
search tool, this is the one I'd start with.&lt;/p&gt;

&lt;p&gt;— &lt;em&gt;Donny Automation&lt;/em&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>productivity</category>
      <category>tutorial</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How to Search 130M+ Academic Papers via DOI in Under 1 Second</title>
      <dc:creator>Donny Nguyen</dc:creator>
      <pubDate>Sat, 09 May 2026 11:45:10 +0000</pubDate>
      <link>https://dev.to/donnyautomation/how-to-search-130m-academic-papers-via-doi-in-under-1-second-4p29</link>
      <guid>https://dev.to/donnyautomation/how-to-search-130m-academic-papers-via-doi-in-under-1-second-4p29</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Search 130M+ scholarly articles via a single API endpoint, with median latency under 1 second.&lt;/li&gt;
&lt;li&gt;The Crossref Academic Search API returns DOI, title, authors, journal, publication date, and citation count in one call.&lt;/li&gt;
&lt;li&gt;Free tier (100 requests/month) — instant signup on RapidAPI, no credit card.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you've ever tried to programmatically resolve a DOI or scrape together citation metadata, you know it's slower than it should be: separate endpoints, slow responses, inconsistent author parsing. The Crossref Academic Search API solves that in a single call powered by Crossref's official DOI registration database.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why citation discovery is harder than it looks
&lt;/h2&gt;

&lt;p&gt;The naive approach to academic paper search is to call the Crossref REST API directly. That works, but you'll spend half your weekend handling the edge cases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Author arrays mix &lt;code&gt;given&lt;/code&gt;/&lt;code&gt;family&lt;/code&gt;/&lt;code&gt;name&lt;/code&gt;/&lt;code&gt;suffix&lt;/code&gt; fields. Some authors have only one of those.&lt;/li&gt;
&lt;li&gt;Publication dates live across &lt;code&gt;published-print&lt;/code&gt;, &lt;code&gt;published-online&lt;/code&gt;, &lt;code&gt;created&lt;/code&gt; and other fields — preprints often only have &lt;code&gt;created&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Citation counts are buried in the &lt;code&gt;is-referenced-by-count&lt;/code&gt; field, which isn't documented prominently.&lt;/li&gt;
&lt;li&gt;Crossref enforces a "Polite Pool" — you need a User-Agent with contact info to get reliable response times.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;strong&gt;Crossref Academic Search API&lt;/strong&gt; wraps all of that and gives you a clean response. It uses the Polite Pool, flattens authors to &lt;code&gt;Family, Given&lt;/code&gt; strings, walks the date fallback chain, and extracts &lt;code&gt;citationCount&lt;/code&gt; for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Use the Crossref Academic Search API
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Subscribe (free)
&lt;/h3&gt;

&lt;p&gt;Subscribe on RapidAPI: &lt;a href="https://rapidapi.com/donnydev/api/academic-paper-search-api" rel="noopener noreferrer"&gt;https://rapidapi.com/donnydev/api/academic-paper-search-api&lt;/a&gt;. The Free plan gives you 100 requests/month, which is plenty for development. Copy your &lt;code&gt;X-RapidAPI-Key&lt;/code&gt; from the dashboard.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Make your first request (cURL)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;--request&lt;/span&gt; GET &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--url&lt;/span&gt; &lt;span class="s1"&gt;'https://academic-paper-search-api.p.rapidapi.com/search?query=quantum%20computing&amp;amp;limit=5'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--header&lt;/span&gt; &lt;span class="s1"&gt;'X-RapidAPI-Host: academic-paper-search-api.p.rapidapi.com'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--header&lt;/span&gt; &lt;span class="s1"&gt;'X-RapidAPI-Key: YOUR_KEY'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Response (truncated):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"success"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"data"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"doi"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"10.1038/nature23474"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Quantum supremacy using a programmable superconducting processor"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"authors"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"Arute, Frank"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Arya, Kunal"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Babbush, Ryan"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"publishedDate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2019-10-23"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"journal"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Nature"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"journal-article"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://doi.org/10.1038/nature23474"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"citationCount"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4231&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"count"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"totalResults"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8421&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"api.crossref.org"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"query"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"quantum computing"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Use it from your code
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;JavaScript / Node.js (fetch):&lt;/strong&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="s2"&gt;`https://academic-paper-search-api.p.rapidapi.com/search?query=&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nf"&gt;encodeURIComponent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;graph neural networks&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;&amp;amp;limit=10`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&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-RapidAPI-Host&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;academic-paper-search-api.p.rapidapi.com&lt;/span&gt;&lt;span class="dl"&gt;"&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-RapidAPI-Key&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;RAPIDAPI_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&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="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&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;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&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="nx"&gt;publishedDate&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="nx"&gt;title&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="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;citationCount&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;citations&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Python (requests):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://academic-paper-search-api.p.rapidapi.com/search&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;X-RapidAPI-Host&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;academic-paper-search-api.p.rapidapi.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;X-RapidAPI-Key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;RAPIDAPI_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;query&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;diffusion models&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;limit&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;paper&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;data&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;paper&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;publishedDate&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;paper&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;title&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;-&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;paper&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;citationCount&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;PHP (curl):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;curl_init&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nb"&gt;curl_setopt_array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="no"&gt;CURLOPT_URL&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"https://academic-paper-search-api.p.rapidapi.com/search?query=protein+folding&amp;amp;limit=10"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="no"&gt;CURLOPT_RETURNTRANSFER&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="no"&gt;CURLOPT_HTTPHEADER&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="s2"&gt;"X-RapidAPI-Host: academic-paper-search-api.p.rapidapi.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;"X-RapidAPI-Key: "&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="nb"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"RAPIDAPI_KEY"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="nv"&gt;$data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;json_decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;curl_exec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Go (net/http):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NewRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"GET"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"https://academic-paper-search-api.p.rapidapi.com/search?query=transformers&amp;amp;limit=10"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Header&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"X-RapidAPI-Host"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"academic-paper-search-api.p.rapidapi.com"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Header&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"X-RapidAPI-Key"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"RAPIDAPI_KEY"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DefaultClient&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Do&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;defer&lt;/span&gt; &lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Body&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 4: DOI-direct lookup
&lt;/h3&gt;

&lt;p&gt;Pass a full DOI as the &lt;code&gt;query&lt;/code&gt; for citation-manager-style lookups:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="s1"&gt;'https://academic-paper-search-api.p.rapidapi.com/search?query=10.1038/nature23474&amp;amp;limit=1'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'X-RapidAPI-Host: academic-paper-search-api.p.rapidapi.com'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'X-RapidAPI-Key: YOUR_KEY'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You'll get the same shaped response with the DOI's record as the first &lt;code&gt;data&lt;/code&gt; entry.&lt;/p&gt;

&lt;h2&gt;
  
  
  Performance: why under 1 second matters
&lt;/h2&gt;

&lt;p&gt;In head-to-head benchmark tests against alternative academic search APIs, the Crossref Academic Search API responded in a median 700 ms (range 575–1123 ms across 20 sample queries). Reference alternatives reported 2.7 s in similar conditions — a ~3.8x improvement.&lt;/p&gt;

&lt;p&gt;That difference compounds: a literature-review tool making 20 enrichment calls per second goes from 54 seconds wall-clock to 14 seconds. A reference manager indexing a user's DOI list of 500 entries goes from 22 minutes to 6 minutes.&lt;/p&gt;

&lt;p&gt;The latency comes from three things this API does that a thin proxy doesn't:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Crossref Polite Pool with proper attribution&lt;/strong&gt; — Crossref dedicates faster lanes for clients with a contact User-Agent, and this API uses one (&lt;code&gt;CrossrefDOISearchAPI/1.0 (mailto:contact@donnyautomation.com)&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Single-call response shaping&lt;/strong&gt; — author flattening, date fallback, and citation extraction happen on the server, so the client makes one request instead of three.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;15-second timeout with row caps&lt;/strong&gt; — protects against pathological queries that would block your event loop.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Use cases
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Reference managers&lt;/strong&gt; (Zotero, Mendeley, EndNote): paste a DOI, get title/authors/journal in one call.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Research dashboards&lt;/strong&gt;: enrich an author's recent papers with citation counts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI agent tools&lt;/strong&gt;: give Claude or GPT an "academic search" tool with structured responses.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Literature-review pipelines&lt;/strong&gt;: page through Crossref by topic, store DOIs, and look them up later.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bibliography generators&lt;/strong&gt;: parse a list of DOIs into formatted citations.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q: Where does the data come from?&lt;/strong&gt;&lt;br&gt;
A: The official Crossref REST API (api.crossref.org). All 130M+ DOIs that publishers have registered with Crossref are searchable. No scraping, no third-party caches.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: How does the free tier work?&lt;/strong&gt;&lt;br&gt;
A: BASIC plan on RapidAPI gives you 100 requests/month at $0. Sign up with a GitHub or Google account — no credit card required. PRO is $9.99/mo for 10,000 requests if you need more.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Can I look up a DOI directly?&lt;/strong&gt;&lt;br&gt;
A: Yes. Pass the DOI as the &lt;code&gt;query&lt;/code&gt; parameter and set &lt;code&gt;limit=1&lt;/code&gt;. The first &lt;code&gt;data&lt;/code&gt; entry will be the matching record.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: What about authors with only one name?&lt;/strong&gt;&lt;br&gt;
A: The API handles &lt;code&gt;given&lt;/code&gt;/&lt;code&gt;family&lt;/code&gt; mismatches and &lt;code&gt;name&lt;/code&gt; (single-string) fields. You always get a clean &lt;code&gt;authors&lt;/code&gt; array of strings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Does it support non-Latin scripts?&lt;/strong&gt;&lt;br&gt;
A: Yes — Crossref stores Unicode titles and authors. Just URL-encode your query.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Subscribe on RapidAPI and you'll have a working API key in 30 seconds: &lt;a href="https://rapidapi.com/donnydev/api/academic-paper-search-api" rel="noopener noreferrer"&gt;https://rapidapi.com/donnydev/api/academic-paper-search-api&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you're integrating it into a citation manager, research dashboard, or AI agent, drop a comment below — happy to help you wire it up.&lt;/p&gt;

&lt;p&gt;— &lt;em&gt;Donny Automation&lt;/em&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How Do You Compare Live Ticket Prices Across StubHub, SeatGeek, Vivid Seats, and Ticketmaster in One API Call?</title>
      <dc:creator>Donny Nguyen</dc:creator>
      <pubDate>Wed, 01 Apr 2026 03:46:16 +0000</pubDate>
      <link>https://dev.to/donnyautomation/how-do-you-compare-live-ticket-prices-across-stubhub-seatgeek-vivid-seats-and-ticketmaster-in-726</link>
      <guid>https://dev.to/donnyautomation/how-do-you-compare-live-ticket-prices-across-stubhub-seatgeek-vivid-seats-and-ticketmaster-in-726</guid>
      <description>&lt;p&gt;The Ticketing Intelligence Platform API lets you search across StubHub, SeatGeek, Vivid Seats, and Ticketmaster simultaneously, returning normalized ticket listings with price history and resale analytics in a single response. Instead of scraping four different sites or juggling multiple vendor SDKs, the Ticketing Intelligence Platform API gives you one unified endpoint for event ticketing data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Developers Need Aggregated Ticket Data
&lt;/h2&gt;

&lt;p&gt;Building a ticket comparison app, price alert bot, or event analytics dashboard means pulling data from multiple resale marketplaces. Each platform has its own data format, rate limits, and authentication quirks. The Ticketing Intelligence Platform API by Donny Automation on RapidAPI eliminates that complexity by normalizing listings from all four major platforms into a consistent schema.&lt;/p&gt;

&lt;p&gt;Common use cases for the Ticketing Intelligence Platform API include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Price comparison tools&lt;/strong&gt; that show fans the cheapest seats across all marketplaces&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resale analytics dashboards&lt;/strong&gt; that track price trends over time for specific events&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Alert systems&lt;/strong&gt; that notify users when ticket prices drop below a threshold&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Market research&lt;/strong&gt; for event promoters analyzing secondary market demand&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to Use Ticketing Intelligence Platform API
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Sign up&lt;/strong&gt; on &lt;a href="https://rapidapi.com/donnydev/api/ticketing-intelligence-platform" rel="noopener noreferrer"&gt;RapidAPI&lt;/a&gt; and subscribe to the Ticketing Intelligence Platform API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Grab your API key&lt;/strong&gt; from the RapidAPI dashboard.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Call the search endpoint&lt;/strong&gt; with your event query.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Parse the response&lt;/strong&gt; to extract normalized ticket listings with pricing from each marketplace.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here is a working &lt;code&gt;fetch()&lt;/code&gt; example:&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://ticketing-intelligence-platform.p.rapidapi.com/api/search?query=Taylor+Swift+concert&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="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;GET&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;x-rapidapi-key&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;YOUR_RAPIDAPI_KEY&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;x-rapidapi-host&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ticketing-intelligence-platform.p.rapidapi.com&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="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Each result includes listings from StubHub, SeatGeek, Vivid Seats, and Ticketmaster&lt;/span&gt;
&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&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;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&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;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;venue&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;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`  Lowest price: $&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;lowestPrice&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;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`  Sources: &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;sources&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;, &lt;/span&gt;&lt;span class="dl"&gt;'&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Ticketing Intelligence Platform API returns structured JSON with event metadata, per-platform pricing, seat locations, and historical price data points.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real-World Example: Building a Price Drop Alert
&lt;/h2&gt;

&lt;p&gt;You can combine the Ticketing Intelligence Platform API with a simple cron job to monitor prices:&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="c1"&gt;// Check every hour, alert when price drops below target&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;TARGET_PRICE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;150&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;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://ticketing-intelligence-platform.p.rapidapi.com/api/search?query=NBA+Finals+2026&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="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;x-rapidapi-key&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;RAPIDAPI_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;x-rapidapi-host&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ticketing-intelligence-platform.p.rapidapi.com&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="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&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;deals&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lowestPrice&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="nx"&gt;TARGET_PRICE&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;deals&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Send notification via your preferred channel&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Found &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;deals&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; events under $&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;TARGET_PRICE&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q: What ticket marketplaces does the Ticketing Intelligence Platform API aggregate?&lt;/strong&gt;&lt;br&gt;
A: The Ticketing Intelligence Platform API aggregates listings from StubHub, SeatGeek, Vivid Seats, and Ticketmaster, returning normalized pricing and availability data from all four platforms in a single response.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Does the Ticketing Intelligence Platform API provide historical price data?&lt;/strong&gt;&lt;br&gt;
A: Yes, the Ticketing Intelligence Platform API includes price history and resale analytics, allowing you to track how ticket prices for specific events change over time across all supported marketplaces.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: What event types are supported by the Ticketing Intelligence Platform API?&lt;/strong&gt;&lt;br&gt;
A: The Ticketing Intelligence Platform API covers concerts, sports events, and theater performances. Any event listed on the supported marketplaces can be searched and compared through the Ticketing Intelligence Platform API.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Ticketing Intelligence Platform API&lt;/strong&gt; aggregates live ticket prices from StubHub, SeatGeek, Vivid Seats, and Ticketmaster into one unified search endpoint.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One API call&lt;/strong&gt; returns normalized listings with pricing, seat data, and historical price trends across all four marketplaces.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Get started&lt;/strong&gt; at &lt;a href="https://rapidapi.com/donnydev/api/ticketing-intelligence-platform" rel="noopener noreferrer"&gt;the RapidAPI listing&lt;/a&gt; — subscribe, grab your key, and call the search endpoint.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>api</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How Do You Compare Ticket Prices Across StubHub, SeatGeek, Vivid Seats, and Ticketmaster in One API Call?</title>
      <dc:creator>Donny Nguyen</dc:creator>
      <pubDate>Wed, 01 Apr 2026 03:16:09 +0000</pubDate>
      <link>https://dev.to/donnyautomation/how-do-you-compare-ticket-prices-across-stubhub-seatgeek-vivid-seats-and-ticketmaster-in-one-api-1b90</link>
      <guid>https://dev.to/donnyautomation/how-do-you-compare-ticket-prices-across-stubhub-seatgeek-vivid-seats-and-ticketmaster-in-one-api-1b90</guid>
      <description>&lt;p&gt;The Ticketing Intelligence Platform API lets you search concerts, sports games, and theater events across StubHub, SeatGeek, Vivid Seats, and Ticketmaster in a single request — returning unified pricing data, price history, and resale analytics so you can build smarter ticketing tools without scraping four different sites.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Ticket Price Aggregation Matters for Developers
&lt;/h2&gt;

&lt;p&gt;Building anything in the live events space means dealing with fragmented data. Each ticket marketplace has its own pricing structure, inventory format, and availability windows. If you're building a price comparison tool, an alert bot, or an analytics dashboard, you'd normally need to integrate with four separate APIs (or resort to brittle web scraping).&lt;/p&gt;

&lt;p&gt;The Ticketing Intelligence Platform API by Donny Automation on RapidAPI solves this by aggregating ticket listings from all major resale platforms into a single, normalized response. You get consistent data structures regardless of the source marketplace, plus historical pricing data for trend analysis.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Use Ticketing Intelligence Platform API
&lt;/h2&gt;

&lt;p&gt;Getting started with the Ticketing Intelligence Platform API takes just a few steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Sign up on RapidAPI&lt;/strong&gt; — Visit &lt;a href="https://rapidapi.com/donnydev/api/ticketing-intelligence-platform" rel="noopener noreferrer"&gt;the Ticketing Intelligence Platform API listing&lt;/a&gt; and subscribe to a plan.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Grab your API key&lt;/strong&gt; — Copy your &lt;code&gt;X-RapidAPI-Key&lt;/code&gt; from the RapidAPI dashboard.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Make your first search request&lt;/strong&gt; — Use the events search endpoint with a query parameter.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here's a working &lt;code&gt;fetch()&lt;/code&gt; example:&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://ticketing-intelligence-platform.p.rapidapi.com/api/ticketing-intelligence-platform/events/search?query=Taylor%20Swift&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="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;GET&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;X-RapidAPI-Key&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;YOUR_RAPIDAPI_KEY&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;X-RapidAPI-Host&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ticketing-intelligence-platform.p.rapidapi.com&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="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Each result includes prices from multiple platforms&lt;/span&gt;
&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;events&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&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;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&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;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;date&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;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`  Lowest price: $&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;lowestPrice&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;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`  Platforms: &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;sources&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;, &lt;/span&gt;&lt;span class="dl"&gt;'&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Real-World Use Cases
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Price alert bots&lt;/strong&gt;: Poll the Ticketing Intelligence Platform API on a schedule and notify users when ticket prices for a specific event drop below their target. Since the response includes data from all four major platforms, you catch deals regardless of which marketplace drops first.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resale analytics dashboards&lt;/strong&gt;: Use the price history data from the Ticketing Intelligence Platform API to chart how ticket prices move over time. This is valuable for resellers optimizing buy/sell timing, or for fans deciding when to pull the trigger.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Event discovery apps&lt;/strong&gt;: Feed search queries into the Ticketing Intelligence Platform API and present users with a unified view of what's available in their area, sorted by best price across all platforms.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q: Which ticket marketplaces does the Ticketing Intelligence Platform API aggregate data from?&lt;/strong&gt;&lt;br&gt;
A: The Ticketing Intelligence Platform API pulls listings from StubHub, SeatGeek, Vivid Seats, and Ticketmaster, returning normalized pricing and availability data from all four platforms in a single response.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Does the Ticketing Intelligence Platform API include historical price data?&lt;/strong&gt;&lt;br&gt;
A: Yes. The Ticketing Intelligence Platform API provides price history and resale analytics, allowing you to track how ticket prices for specific events have changed over time across all supported marketplaces.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Can I search for specific event types like concerts or sports games?&lt;/strong&gt;&lt;br&gt;
A: Absolutely. The Ticketing Intelligence Platform API supports searching by event name, artist name, or team name through the &lt;code&gt;query&lt;/code&gt; parameter. Results span concerts, sports, and theater events.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The Ticketing Intelligence Platform API aggregates ticket prices from StubHub, SeatGeek, Vivid Seats, and Ticketmaster into one unified endpoint.&lt;/li&gt;
&lt;li&gt;Search by artist, team, or event name and get normalized pricing data with historical trends and resale analytics.&lt;/li&gt;
&lt;li&gt;One API call replaces four integrations — ideal for building price comparison tools, alert bots, and event discovery apps.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>api</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How Do You Use Supply Chain Intelligence Pro API to Access Global Shipping and Freight Data?</title>
      <dc:creator>Donny Nguyen</dc:creator>
      <pubDate>Wed, 01 Apr 2026 02:46:05 +0000</pubDate>
      <link>https://dev.to/donnyautomation/how-do-you-use-supply-chain-intelligence-pro-api-to-access-global-shipping-and-freight-data-1ld0</link>
      <guid>https://dev.to/donnyautomation/how-do-you-use-supply-chain-intelligence-pro-api-to-access-global-shipping-and-freight-data-1ld0</guid>
      <description>&lt;h1&gt;
  
  
  How Do You Use Supply Chain Intelligence Pro API to Access Global Shipping and Freight Data?
&lt;/h1&gt;

&lt;p&gt;You can use Supply Chain Intelligence Pro API to retrieve enterprise-grade supply chain data — including global shipping rates, container tracking, port congestion metrics, freight forwarder comparisons, and customs clearance analytics — by making a single GET request to the search endpoint. Supply Chain Intelligence Pro API, by Donny Automation on RapidAPI, gives developers instant programmatic access to logistics intelligence that typically requires expensive enterprise contracts.&lt;/p&gt;

&lt;p&gt;Whether you're building a freight comparison platform, optimizing warehouse operations, or adding real-time shipping visibility to an e-commerce dashboard, Supply Chain Intelligence Pro API provides the data backbone you need.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Supply Chain Data Matters for Developers
&lt;/h2&gt;

&lt;p&gt;Global supply chains generate massive volumes of data across carriers, ports, and customs agencies. Aggregating this data manually is slow and error-prone. Supply Chain Intelligence Pro API solves this by consolidating multiple logistics data sources behind a single, developer-friendly REST endpoint.&lt;/p&gt;

&lt;p&gt;Common use cases for Supply Chain Intelligence Pro API include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Freight rate comparison tools&lt;/strong&gt; — Pull real-time shipping rates across carriers to help shippers find the best deals.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Port congestion dashboards&lt;/strong&gt; — Monitor congestion metrics at major ports to anticipate delays.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Container tracking integrations&lt;/strong&gt; — Add shipment visibility directly into ERP or WMS systems.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Customs clearance analytics&lt;/strong&gt; — Surface clearance timelines and bottlenecks for compliance teams.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to Use Supply Chain Intelligence Pro API
&lt;/h2&gt;

&lt;p&gt;Follow these steps to start querying Supply Chain Intelligence Pro API:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Sign up on RapidAPI&lt;/strong&gt; — Visit the &lt;a href="https://rapidapi.com/donnydev/api/supply-chain-intelligence-pro" rel="noopener noreferrer"&gt;Supply Chain Intelligence Pro API listing&lt;/a&gt; and subscribe to a plan.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Get your API key&lt;/strong&gt; — Copy your &lt;code&gt;X-RapidAPI-Key&lt;/code&gt; from the RapidAPI dashboard.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Make a request&lt;/strong&gt; — Call the search endpoint with your query parameters.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here is a working &lt;code&gt;fetch()&lt;/code&gt; example to query Supply Chain Intelligence Pro API:&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://supply-chain-intelligence-pro.p.rapidapi.com/api/search&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="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;GET&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;X-RapidAPI-Key&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;YOUR_RAPIDAPI_KEY&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;X-RapidAPI-Host&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;supply-chain-intelligence-pro.p.rapidapi.com&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="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Supply Chain Intelligence Pro API returns structured JSON with the logistics data matching your search criteria, ready to parse and display in your application.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real-World Integration Example
&lt;/h2&gt;

&lt;p&gt;Imagine you're building a dashboard for a 3PL (third-party logistics) company. You could call Supply Chain Intelligence Pro API on a scheduled interval to pull the latest port congestion metrics, then render them in a chart alongside freight rate trends. This gives operations teams a single pane of glass for decision-making — powered by Supply Chain Intelligence Pro API data behind the scenes.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q: What data does Supply Chain Intelligence Pro API return?&lt;/strong&gt;&lt;br&gt;
A: Supply Chain Intelligence Pro API returns global shipping rates, container tracking updates, port congestion metrics, freight forwarder comparisons, and customs clearance analytics in structured JSON format.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Do I need a paid plan to use Supply Chain Intelligence Pro API?&lt;/strong&gt;&lt;br&gt;
A: Supply Chain Intelligence Pro API offers tiered plans on RapidAPI, including a free tier for testing. Visit the RapidAPI listing to see current plan options and rate limits.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Can Supply Chain Intelligence Pro API be used in production applications?&lt;/strong&gt;&lt;br&gt;
A: Yes. Supply Chain Intelligence Pro API is designed for production use. The API delivers low-latency responses suitable for real-time dashboards, automated workflows, and customer-facing logistics tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Supply Chain Intelligence Pro API&lt;/strong&gt; provides global shipping rates, container tracking, port congestion, freight comparison, and customs analytics through a single REST endpoint.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integration is straightforward&lt;/strong&gt; — subscribe on RapidAPI, grab your key, and make a GET request to the search endpoint using &lt;code&gt;fetch()&lt;/code&gt; or any HTTP client.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built for production&lt;/strong&gt; — Supply Chain Intelligence Pro API serves structured JSON ideal for dashboards, automation pipelines, and logistics platforms at scale.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>api</category>
      <category>supplychain</category>
      <category>logistics</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How Do You Use the Supply Chain Intelligence Hub API to Get Real-Time Freight Rates and Port Data?</title>
      <dc:creator>Donny Nguyen</dc:creator>
      <pubDate>Wed, 01 Apr 2026 02:16:03 +0000</pubDate>
      <link>https://dev.to/donnyautomation/how-do-you-use-the-supply-chain-intelligence-hub-api-to-get-real-time-freight-rates-and-port-data-2f5f</link>
      <guid>https://dev.to/donnyautomation/how-do-you-use-the-supply-chain-intelligence-hub-api-to-get-real-time-freight-rates-and-port-data-2f5f</guid>
      <description>&lt;h1&gt;
  
  
  How Do You Use the Supply Chain Intelligence Hub API to Get Real-Time Freight Rates and Port Data?
&lt;/h1&gt;

&lt;p&gt;You can use the Supply Chain Intelligence Hub API to retrieve live freight rates between any two ports with a single GET request, giving your application unified visibility across port data, shipping container tracking, and customs records. The Supply Chain Intelligence Hub API by Donny Automation on RapidAPI consolidates what normally requires querying multiple fragmented data sources into one clean REST endpoint.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Supply Chain Visibility Matters for Developers
&lt;/h2&gt;

&lt;p&gt;Logistics technology is growing fast, but most supply chain data is locked behind enterprise platforms, proprietary EDI formats, or manual spreadsheets. If you're building a freight comparison tool, a procurement dashboard, or an e-commerce platform that needs shipping cost estimates, the Supply Chain Intelligence Hub API eliminates the need to negotiate contracts with individual data providers.&lt;/p&gt;

&lt;p&gt;The Supply Chain Intelligence Hub API covers four key data domains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Freight rates&lt;/strong&gt; — current container shipping rates between origin and destination ports&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Port data&lt;/strong&gt; — port congestion, vessel schedules, and terminal information&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Container tracking&lt;/strong&gt; — real-time status updates on shipping containers in transit&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Customs records&lt;/strong&gt; — import/export declaration data for trade compliance&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to Use Supply Chain Intelligence Hub API
&lt;/h2&gt;

&lt;p&gt;Follow these steps to start querying freight rates in your JavaScript application:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Subscribe&lt;/strong&gt; to the Supply Chain Intelligence Hub API on &lt;a href="https://rapidapi.com/donnydev/api/supply-chain-intelligence-hub" rel="noopener noreferrer"&gt;RapidAPI&lt;/a&gt; and grab your API key.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set up your request&lt;/strong&gt; with origin and destination port parameters.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Parse the response&lt;/strong&gt; to extract rate data, carrier details, and transit times.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here's a working &lt;code&gt;fetch()&lt;/code&gt; example:&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://supply-chain-intelligence-hub.p.rapidapi.com/api/supply-chain-intelligence-hub/freight-rates?origin=CNSHA&amp;amp;destination=USLAX&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;options&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;GET&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;x-rapidapi-key&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;YOUR_RAPIDAPI_KEY&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;x-rapidapi-host&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;supply-chain-intelligence-hub.p.rapidapi.com&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="k"&gt;try&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;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;options&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;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Route: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;origin&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;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;destination&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;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Rate: $&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rate&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; per &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;containerType&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;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Transit time: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;transitDays&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; days`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Carrier: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;carrier&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="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Error fetching freight rates:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&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;The Supply Chain Intelligence Hub API returns structured JSON with rate breakdowns, so you can immediately render pricing tables or feed data into cost optimization algorithms.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real-World Use Cases
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Freight brokerages&lt;/strong&gt; can auto-populate rate quotes instead of manual lookups&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;E-commerce platforms&lt;/strong&gt; can estimate landed costs at checkout by combining freight rates with customs data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Supply chain dashboards&lt;/strong&gt; can display live port congestion alongside container tracking statuses&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trade compliance tools&lt;/strong&gt; can cross-reference customs records to flag regulatory issues&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q: What port code format does the Supply Chain Intelligence Hub API use?&lt;/strong&gt;&lt;br&gt;
A: The Supply Chain Intelligence Hub API accepts UN/LOCODE port codes (e.g., CNSHA for Shanghai, USLAX for Los Angeles). These are the standard five-character codes used across the shipping industry.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Does the Supply Chain Intelligence Hub API support tracking individual containers?&lt;/strong&gt;&lt;br&gt;
A: Yes. The Supply Chain Intelligence Hub API provides container tracking endpoints where you can pass a container number and receive real-time location, vessel name, and estimated arrival updates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: What rate limits apply to the Supply Chain Intelligence Hub API?&lt;/strong&gt;&lt;br&gt;
A: Rate limits depend on your RapidAPI subscription tier. The free tier allows enough requests for testing and prototyping, while paid plans support production workloads with higher throughput.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The Supply Chain Intelligence Hub API unifies freight rates, port data, container tracking, and customs records into a single REST API&lt;/li&gt;
&lt;li&gt;Query live shipping rates between any two ports with a simple GET request using origin and destination parameters&lt;/li&gt;
&lt;li&gt;Subscribe on RapidAPI to get your API key and start integrating supply chain data into your applications in minutes&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>api</category>
      <category>supplychain</category>
      <category>logistics</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How Can You Use Supply Chain Intelligence Pro API to Access Global Shipping Rates and Logistics Data?</title>
      <dc:creator>Donny Nguyen</dc:creator>
      <pubDate>Wed, 01 Apr 2026 01:46:13 +0000</pubDate>
      <link>https://dev.to/donnyautomation/how-can-you-use-supply-chain-intelligence-pro-api-to-access-global-shipping-rates-and-logistics-llh</link>
      <guid>https://dev.to/donnyautomation/how-can-you-use-supply-chain-intelligence-pro-api-to-access-global-shipping-rates-and-logistics-llh</guid>
      <description>&lt;h1&gt;
  
  
  How Can You Use Supply Chain Intelligence Pro API to Access Global Shipping Rates and Logistics Data?
&lt;/h1&gt;

&lt;p&gt;You can use the Supply Chain Intelligence Pro API to retrieve real-time global shipping rates, track containers, monitor port congestion, compare freight forwarders, and pull customs clearance analytics — all through a single REST endpoint. Supply Chain Intelligence Pro API by Donny Automation on RapidAPI gives developers programmatic access to enterprise-grade supply chain data without building proprietary data pipelines.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Supply Chain Intelligence Pro API Matters for Developers
&lt;/h2&gt;

&lt;p&gt;Building logistics software typically means stitching together data from dozens of carriers, port authorities, and customs databases. Supply Chain Intelligence Pro API consolidates this into clean, queryable endpoints. Whether you're building a freight comparison tool, a procurement dashboard, or an e-commerce shipping calculator, Supply Chain Intelligence Pro API eliminates weeks of integration work.&lt;/p&gt;

&lt;p&gt;Key capabilities include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Global shipping rate lookups&lt;/strong&gt; across container types (20ft, 40ft, 40HC, reefer)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Container tracking&lt;/strong&gt; with real-time status updates&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Port congestion metrics&lt;/strong&gt; to predict delays and reroute shipments&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Freight forwarder comparison&lt;/strong&gt; for cost optimization&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Customs clearance analytics&lt;/strong&gt; to estimate processing times&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to Use Supply Chain Intelligence Pro API
&lt;/h2&gt;

&lt;p&gt;Getting started with Supply Chain Intelligence Pro API takes just a few steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Subscribe&lt;/strong&gt; to &lt;a href="https://rapidapi.com/donnydev/api/supply-chain-intelligence-pro" rel="noopener noreferrer"&gt;Supply Chain Intelligence Pro API on RapidAPI&lt;/a&gt; and grab your API key.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Choose your endpoint.&lt;/strong&gt; The primary endpoint for shipping rates is &lt;code&gt;/api/supply-chain-intelligence-pro/shipping/rates&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set your parameters.&lt;/strong&gt; Pass &lt;code&gt;origin&lt;/code&gt; and &lt;code&gt;destination&lt;/code&gt; as required fields. Optionally specify &lt;code&gt;containerType&lt;/code&gt; (20ft, 40ft, 40hc, reefer) and &lt;code&gt;incoterm&lt;/code&gt; (FOB, CIF, EXW, DDP).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Make the request&lt;/strong&gt; and parse the JSON response.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here's a working &lt;code&gt;fetch()&lt;/code&gt; example:&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://supply-chain-intelligence-pro.p.rapidapi.com/api/supply-chain-intelligence-pro/shipping/rates?&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
  &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;URLSearchParams&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;origin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;CNSHA&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;        &lt;span class="c1"&gt;// Shanghai&lt;/span&gt;
    &lt;span class="na"&gt;destination&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;USLAX&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="c1"&gt;// Los Angeles&lt;/span&gt;
    &lt;span class="na"&gt;containerType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;40ft&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;incoterm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;FOB&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="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;GET&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;x-rapidapi-key&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;YOUR_RAPIDAPI_KEY&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;x-rapidapi-host&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;supply-chain-intelligence-pro.p.rapidapi.com&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="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: carrier rates, transit times, surcharges, and route details&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Real-World Use Cases
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Freight rate dashboards:&lt;/strong&gt; Pull live rates for multiple trade lanes and display cost trends over time. Supply Chain Intelligence Pro API returns structured rate data that's ready for charting libraries like Chart.js or D3.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Procurement automation:&lt;/strong&gt; Automatically compare shipping costs across container types and incoterms before generating purchase orders. Supply Chain Intelligence Pro API supports FOB, CIF, EXW, and DDP pricing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Port delay alerts:&lt;/strong&gt; Query port congestion metrics to flag routes with high dwell times, then trigger Slack or email notifications to your ops team.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q: What port codes does Supply Chain Intelligence Pro API accept for origin and destination?&lt;/strong&gt;&lt;br&gt;
A: Supply Chain Intelligence Pro API accepts standard UN/LOCODE port codes (e.g., CNSHA for Shanghai, USLAX for Los Angeles) as well as city names for convenience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Can Supply Chain Intelligence Pro API compare rates across different container types in a single request?&lt;/strong&gt;&lt;br&gt;
A: You can query Supply Chain Intelligence Pro API separately for each container type (20ft, 40ft, 40hc, reefer) and compare the returned rates programmatically. Each request returns detailed cost breakdowns.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: What incoterms does Supply Chain Intelligence Pro API support?&lt;/strong&gt;&lt;br&gt;
A: Supply Chain Intelligence Pro API supports FOB, CIF, EXW, and DDP incoterms. Specifying an incoterm adjusts the rate calculation to include or exclude insurance, freight, duties, and delivery costs accordingly.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Supply Chain Intelligence Pro API&lt;/strong&gt; provides real-time shipping rates, container tracking, port congestion data, and customs analytics through a single REST interface.&lt;/li&gt;
&lt;li&gt;Query the &lt;code&gt;/shipping/rates&lt;/code&gt; endpoint with origin, destination, container type, and incoterm to get structured rate data ready for your application.&lt;/li&gt;
&lt;li&gt;Subscribe on &lt;a href="https://rapidapi.com/donnydev/api/supply-chain-intelligence-pro" rel="noopener noreferrer"&gt;RapidAPI&lt;/a&gt; to start making requests in minutes — no carrier integrations or data pipelines required.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>api</category>
      <category>supplychain</category>
      <category>logistics</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How to Use Supply Chain Intelligence Hub API for Unified Supply Chain Visibility?</title>
      <dc:creator>Donny Nguyen</dc:creator>
      <pubDate>Wed, 01 Apr 2026 01:15:57 +0000</pubDate>
      <link>https://dev.to/donnyautomation/how-to-use-supply-chain-intelligence-hub-api-for-unified-supply-chain-visibility-il3</link>
      <guid>https://dev.to/donnyautomation/how-to-use-supply-chain-intelligence-hub-api-for-unified-supply-chain-visibility-il3</guid>
      <description>&lt;h1&gt;
  
  
  How to Use Supply Chain Intelligence Hub API for Unified Supply Chain Visibility?
&lt;/h1&gt;

&lt;p&gt;Supply Chain Intelligence Hub API provides developers with a single endpoint to access freight rates, port congestion data, shipping container tracking, and customs records — eliminating the need to integrate multiple logistics data sources. By calling the Supply Chain Intelligence Hub API, logistics teams and procurement analysts can build real-time dashboards and automated alerts across their entire supply chain.&lt;/p&gt;

&lt;p&gt;Modern supply chains span dozens of carriers, ports, and customs jurisdictions. Stitching together data from separate freight rate providers, port authorities, and container tracking services creates fragile integrations that break whenever a vendor changes their format. Supply Chain Intelligence Hub API, built by Donny Automation on RapidAPI, solves this by normalizing all that data behind a clean REST interface.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Use Supply Chain Intelligence Hub API
&lt;/h2&gt;

&lt;p&gt;Getting started with Supply Chain Intelligence Hub API takes just a few steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Subscribe on RapidAPI&lt;/strong&gt; — Visit &lt;a href="https://rapidapi.com/donnydev/api/supply-chain-intelligence-hub" rel="noopener noreferrer"&gt;Supply Chain Intelligence Hub API on RapidAPI&lt;/a&gt; and subscribe to a plan to get your API key.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Set your headers&lt;/strong&gt; — Every request to Supply Chain Intelligence Hub API requires your RapidAPI key in the &lt;code&gt;X-RapidAPI-Key&lt;/code&gt; header.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Query the freight rates endpoint&lt;/strong&gt; — The primary endpoint returns current freight rate intelligence:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://supply-chain-intelligence-hub.p.rapidapi.com/api/freight-rates&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="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;GET&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;X-RapidAPI-Key&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;YOUR_RAPIDAPI_KEY&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;X-RapidAPI-Host&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;supply-chain-intelligence-hub.p.rapidapi.com&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="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Parse the response&lt;/strong&gt; — Supply Chain Intelligence Hub API returns structured JSON with rate data, origin/destination ports, carrier information, and timestamps. Use this data to populate dashboards, trigger procurement alerts, or feed predictive models.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Explore additional endpoints&lt;/strong&gt; — Beyond freight rates, Supply Chain Intelligence Hub API exposes container tracking, port congestion metrics, and customs record lookups through the same consistent interface.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Real-World Use Cases
&lt;/h2&gt;

&lt;p&gt;Supply Chain Intelligence Hub API fits naturally into several workflows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Procurement automation&lt;/strong&gt;: Pull live freight rates into your RFQ system so buyers always negotiate with current market data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Risk monitoring&lt;/strong&gt;: Track container positions and port congestion to flag delays before they cascade through your production schedule.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compliance reporting&lt;/strong&gt;: Access customs records programmatically to generate audit-ready documentation without manual data entry.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q: What data does Supply Chain Intelligence Hub API return from the freight-rates endpoint?&lt;/strong&gt;&lt;br&gt;
A: Supply Chain Intelligence Hub API returns structured JSON containing current freight rates across major shipping lanes, including carrier names, origin and destination ports, container types, and rate timestamps for spot and contract pricing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Can Supply Chain Intelligence Hub API track individual shipping containers?&lt;/strong&gt;&lt;br&gt;
A: Yes. Supply Chain Intelligence Hub API includes container tracking capabilities that return position updates, estimated arrival times, and port call history for individual container IDs across major global carriers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: How frequently is Supply Chain Intelligence Hub API data updated?&lt;/strong&gt;&lt;br&gt;
A: Supply Chain Intelligence Hub API aggregates data from multiple logistics sources with regular refresh cycles, ensuring that freight rates and port congestion metrics reflect near-real-time market conditions.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Supply Chain Intelligence Hub API&lt;/strong&gt; unifies freight rates, container tracking, port data, and customs records into a single REST API for logistics developers.&lt;/li&gt;
&lt;li&gt;Query the &lt;code&gt;/api/freight-rates&lt;/code&gt; endpoint with a simple &lt;code&gt;fetch()&lt;/code&gt; call to get structured rate intelligence across global shipping lanes.&lt;/li&gt;
&lt;li&gt;Subscribe on RapidAPI to get your API key and start building supply chain visibility into your applications in minutes.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>api</category>
      <category>supplychain</category>
      <category>logistics</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
